diff options
| -rw-r--r-- | MAINTAINERS | 7 | ||||
| -rw-r--r-- | drivers/Makefile | 1 | ||||
| -rw-r--r-- | drivers/dibs/Kconfig | 12 | ||||
| -rw-r--r-- | drivers/dibs/Makefile | 7 | ||||
| -rw-r--r-- | drivers/dibs/dibs_main.c | 37 | ||||
| -rw-r--r-- | include/linux/dibs.h | 42 | ||||
| -rw-r--r-- | net/Kconfig | 1 | 
7 files changed, 107 insertions, 0 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index a8a770714101..ecc55fae5f9d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7132,6 +7132,13 @@ L:	linux-gpio@vger.kernel.org  S:	Maintained  F:	drivers/gpio/gpio-gpio-mm.c +DIBS (DIRECT INTERNAL BUFFER SHARING) +M:	Alexandra Winter <wintera@linux.ibm.com> +L:	netdev@vger.kernel.org +S:	Supported +F:	drivers/dibs/ +F:	include/linux/dibs.h +  DIGITEQ AUTOMOTIVE MGB4 V4L2 DRIVER  M:	Martin Tuma <martin.tuma@digiteqautomotive.com>  L:	linux-media@vger.kernel.org diff --git a/drivers/Makefile b/drivers/Makefile index b5749cf67044..a104163b1353 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -195,4 +195,5 @@ obj-$(CONFIG_DRM_ACCEL)		+= accel/  obj-$(CONFIG_CDX_BUS)		+= cdx/  obj-$(CONFIG_DPLL)		+= dpll/ +obj-$(CONFIG_DIBS)		+= dibs/  obj-$(CONFIG_S390)		+= s390/ diff --git a/drivers/dibs/Kconfig b/drivers/dibs/Kconfig new file mode 100644 index 000000000000..09c12f6838ad --- /dev/null +++ b/drivers/dibs/Kconfig @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: GPL-2.0 +config DIBS +	tristate "DIBS support" +	default n +	help +	  Direct Internal Buffer Sharing (DIBS) +	  A communication method that uses common physical (internal) memory +	  for synchronous direct access into a remote buffer. + +	  Select this option to provide the abstraction layer between +	  dibs devices and dibs clients like the SMC protocol. +	  The module name is dibs. diff --git a/drivers/dibs/Makefile b/drivers/dibs/Makefile new file mode 100644 index 000000000000..825dec431bfc --- /dev/null +++ b/drivers/dibs/Makefile @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# DIBS class module +# + +dibs-y += dibs_main.o +obj-$(CONFIG_DIBS) += dibs.o diff --git a/drivers/dibs/dibs_main.c b/drivers/dibs/dibs_main.c new file mode 100644 index 000000000000..68e189932fcf --- /dev/null +++ b/drivers/dibs/dibs_main.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + *  DIBS - Direct Internal Buffer Sharing + * + *  Implementation of the DIBS class module + * + *  Copyright IBM Corp. 2025 + */ +#define KMSG_COMPONENT "dibs" +#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt + +#include <linux/module.h> +#include <linux/types.h> +#include <linux/err.h> +#include <linux/dibs.h> + +MODULE_DESCRIPTION("Direct Internal Buffer Sharing class"); +MODULE_LICENSE("GPL"); + +/* use an array rather a list for fast mapping: */ +static struct dibs_client *clients[MAX_DIBS_CLIENTS]; +static u8 max_client; + +static int __init dibs_init(void) +{ +	memset(clients, 0, sizeof(clients)); +	max_client = 0; + +	return 0; +} + +static void __exit dibs_exit(void) +{ +} + +module_init(dibs_init); +module_exit(dibs_exit); diff --git a/include/linux/dibs.h b/include/linux/dibs.h new file mode 100644 index 000000000000..3f4175aaa732 --- /dev/null +++ b/include/linux/dibs.h @@ -0,0 +1,42 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + *  Direct Internal Buffer Sharing + * + *  Definitions for the DIBS module + * + *  Copyright IBM Corp. 2025 + */ +#ifndef _DIBS_H +#define _DIBS_H + +/* DIBS - Direct Internal Buffer Sharing - concept + * ----------------------------------------------- + * In the case of multiple system sharing the same hardware, dibs fabrics can + * provide dibs devices to these systems. The systems use dibs devices of the + * same fabric to communicate via dmbs (Direct Memory Buffers). Each dmb has + * exactly one owning local dibs device and one remote using dibs device, that + * is authorized to write into this dmb. This access control is provided by the + * dibs fabric. + * + * Because the access to the dmb is based on access to physical memory, it is + * lossless and synchronous. The remote devices can directly access any offset + * of the dmb. + * + * Dibs fabrics, dibs devices and dmbs are identified by tokens and ids. + * Dibs fabric id is unique within the same hardware (with the exception of the + * dibs loopback fabric), dmb token is unique within the same fabric, dibs + * device gids are guaranteed to be unique within the same fabric and + * statistically likely to be globally unique. The exchange of these tokens and + * ids between the systems is not part of the dibs concept. + * + * The dibs layer provides an abstraction between dibs device drivers and dibs + * clients. + */ + +#define MAX_DIBS_CLIENTS	8 + +struct dibs_client { +	const char *name; +}; + +#endif	/* _DIBS_H */ diff --git a/net/Kconfig b/net/Kconfig index 4b563aea4c23..1d3f757d4b07 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -88,6 +88,7 @@ source "net/tls/Kconfig"  source "net/xfrm/Kconfig"  source "net/iucv/Kconfig"  source "net/smc/Kconfig" +source "drivers/dibs/Kconfig"  source "net/xdp/Kconfig"  config NET_HANDSHAKE | 
