Add build options and doc for mucse.
Initialize pci device access for MUCSE devices.
Signed-off-by: Dong Yibo <dong100@mucse.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
---
.../device_drivers/ethernet/index.rst | 1 +
.../device_drivers/ethernet/mucse/rnpgbe.rst | 21 +++
MAINTAINERS | 8 ++
drivers/net/ethernet/Kconfig | 1 +
drivers/net/ethernet/Makefile | 1 +
drivers/net/ethernet/mucse/Kconfig | 34 +++++
drivers/net/ethernet/mucse/Makefile | 7 +
drivers/net/ethernet/mucse/rnpgbe/Makefile | 8 ++
drivers/net/ethernet/mucse/rnpgbe/rnpgbe.h | 18 +++
.../net/ethernet/mucse/rnpgbe/rnpgbe_main.c | 124 ++++++++++++++++++
10 files changed, 223 insertions(+)
create mode 100644 Documentation/networking/device_drivers/ethernet/mucse/rnpgbe.rst
create mode 100644 drivers/net/ethernet/mucse/Kconfig
create mode 100644 drivers/net/ethernet/mucse/Makefile
create mode 100644 drivers/net/ethernet/mucse/rnpgbe/Makefile
create mode 100644 drivers/net/ethernet/mucse/rnpgbe/rnpgbe.h
create mode 100644 drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c
diff --git a/Documentation/networking/device_drivers/ethernet/index.rst b/Documentation/networking/device_drivers/ethernet/index.rst
index 0b0a3eef6aae..41ff2152b7aa 100644
--- a/Documentation/networking/device_drivers/ethernet/index.rst
+++ b/Documentation/networking/device_drivers/ethernet/index.rst
@@ -47,6 +47,7 @@ Contents:
mellanox/mlx5/index
meta/fbnic
microsoft/netvsc
+ mucse/rnpgbe
neterion/s2io
netronome/nfp
pensando/ionic
diff --git a/Documentation/networking/device_drivers/ethernet/mucse/rnpgbe.rst b/Documentation/networking/device_drivers/ethernet/mucse/rnpgbe.rst
new file mode 100644
index 000000000000..7562fb6b8f61
--- /dev/null
+++ b/Documentation/networking/device_drivers/ethernet/mucse/rnpgbe.rst
@@ -0,0 +1,21 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===========================================================
+Linux Base Driver for MUCSE(R) Gigabit PCI Express Adapters
+===========================================================
+
+MUCSE Gigabit Linux driver.
+Copyright (c) 2020 - 2025 MUCSE Co.,Ltd.
+
+Identifying Your Adapter
+========================
+The driver is compatible with devices based on the following:
+
+ * MUCSE(R) Ethernet Controller N500 series
+ * MUCSE(R) Ethernet Controller N210 series
+
+Support
+=======
+ If you have problems with the software or hardware, please contact our
+ customer support team via email at techsupport@mucse.com or check our
+ website at https://www.mucse.com/en/
diff --git a/MAINTAINERS b/MAINTAINERS
index 47bc35743f22..6c1ed4d493eb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -17304,6 +17304,14 @@ T: git git://linuxtv.org/media.git
F: Documentation/devicetree/bindings/media/i2c/aptina,mt9v111.yaml
F: drivers/media/i2c/mt9v111.c
+MUCSE ETHERNET DRIVER
+M: Yibo Dong <dong100@mucse.com>
+L: netdev@vger.kernel.org
+S: Maintained
+W: https://www.mucse.com/en/
+F: Documentation/networking/device_drivers/ethernet/mucse/
+F: drivers/net/ethernet/mucse/
+
MULTIFUNCTION DEVICES (MFD)
M: Lee Jones <lee@kernel.org>
S: Maintained
diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig
index f86d4557d8d7..167388f9c744 100644
--- a/drivers/net/ethernet/Kconfig
+++ b/drivers/net/ethernet/Kconfig
@@ -129,6 +129,7 @@ source "drivers/net/ethernet/microchip/Kconfig"
source "drivers/net/ethernet/mscc/Kconfig"
source "drivers/net/ethernet/microsoft/Kconfig"
source "drivers/net/ethernet/moxa/Kconfig"
+source "drivers/net/ethernet/mucse/Kconfig"
source "drivers/net/ethernet/myricom/Kconfig"
config FEALNX
diff --git a/drivers/net/ethernet/Makefile b/drivers/net/ethernet/Makefile
index 67182339469a..1b8c4df3f594 100644
--- a/drivers/net/ethernet/Makefile
+++ b/drivers/net/ethernet/Makefile
@@ -65,6 +65,7 @@ obj-$(CONFIG_NET_VENDOR_MICREL) += micrel/
obj-$(CONFIG_NET_VENDOR_MICROCHIP) += microchip/
obj-$(CONFIG_NET_VENDOR_MICROSEMI) += mscc/
obj-$(CONFIG_NET_VENDOR_MOXART) += moxa/
+obj-$(CONFIG_NET_VENDOR_MUCSE) += mucse/
obj-$(CONFIG_NET_VENDOR_MYRI) += myricom/
obj-$(CONFIG_FEALNX) += fealnx.o
obj-$(CONFIG_NET_VENDOR_NATSEMI) += natsemi/
diff --git a/drivers/net/ethernet/mucse/Kconfig b/drivers/net/ethernet/mucse/Kconfig
new file mode 100644
index 000000000000..be0fdf268484
--- /dev/null
+++ b/drivers/net/ethernet/mucse/Kconfig
@@ -0,0 +1,34 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Mucse network device configuration
+#
+
+config NET_VENDOR_MUCSE
+ bool "Mucse devices"
+ default y
+ help
+ If you have a network (Ethernet) card from Mucse(R), say Y.
+
+ Note that the answer to this question doesn't directly affect the
+ kernel: saying N will just cause the configurator to skip all
+ the questions about Mucse(R) cards. If you say Y, you will
+ be asked for your specific card in the following questions.
+
+if NET_VENDOR_MUCSE
+
+config MGBE
+ tristate "Mucse(R) 1GbE PCI Express adapters support"
+ depends on PCI
+ select PAGE_POOL
+ help
+ This driver supports Mucse(R) 1GbE PCI Express family of
+ adapters.
+
+ More specific information on configuring the driver is in
+ <file:Documentation/networking/device_drivers/ethernet/mucse/rnpgbe.rst>.
+
+ To compile this driver as a module, choose M here. The module
+ will be called rnpgbe.
+
+endif # NET_VENDOR_MUCSE
+
diff --git a/drivers/net/ethernet/mucse/Makefile b/drivers/net/ethernet/mucse/Makefile
new file mode 100644
index 000000000000..675173fa05f7
--- /dev/null
+++ b/drivers/net/ethernet/mucse/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright(c) 2020 - 2025 MUCSE Corporation.
+#
+# Makefile for the MUCSE(R) network device drivers
+#
+
+obj-$(CONFIG_MGBE) += rnpgbe/
diff --git a/drivers/net/ethernet/mucse/rnpgbe/Makefile b/drivers/net/ethernet/mucse/rnpgbe/Makefile
new file mode 100644
index 000000000000..9df536f0d04c
--- /dev/null
+++ b/drivers/net/ethernet/mucse/rnpgbe/Makefile
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright(c) 2020 - 2025 MUCSE Corporation.
+#
+# Makefile for the MUCSE(R) 1GbE PCI Express ethernet driver
+#
+
+obj-$(CONFIG_MGBE) += rnpgbe.o
+rnpgbe-objs := rnpgbe_main.o
diff --git a/drivers/net/ethernet/mucse/rnpgbe/rnpgbe.h b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe.h
new file mode 100644
index 000000000000..3c37fe2534a8
--- /dev/null
+++ b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2020 - 2025 Mucse Corporation. */
+
+#ifndef _RNPGBE_H
+#define _RNPGBE_H
+
+enum rnpgbe_boards {
+ board_n500,
+ board_n210
+};
+
+/* Device IDs */
+#define PCI_VENDOR_ID_MUCSE 0x8848
+#define PCI_DEVICE_ID_N500_QUAD_PORT 0x8308
+#define PCI_DEVICE_ID_N500_DUAL_PORT 0x8318
+#define PCI_DEVICE_ID_N210 0x8208
+#define PCI_DEVICE_ID_N210L 0x820a
+#endif /* _RNPGBE_H */
diff --git a/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c
new file mode 100644
index 000000000000..60bbc806f17b
--- /dev/null
+++ b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2020 - 2025 Mucse Corporation. */
+
+#include <linux/pci.h>
+
+#include "rnpgbe.h"
+
+static const char rnpgbe_driver_name[] = "rnpgbe";
+
+/* rnpgbe_pci_tbl - PCI Device ID Table
+ *
+ * { PCI_DEVICE(Vendor ID, Device ID),
+ * driver_data (used for different hw chip) }
+ */
+static struct pci_device_id rnpgbe_pci_tbl[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N500_QUAD_PORT),
+ .driver_data = board_n500},
+ { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N500_DUAL_PORT),
+ .driver_data = board_n500},
+ { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N210),
+ .driver_data = board_n210},
+ { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N210L),
+ .driver_data = board_n210},
+ /* required last entry */
+ {0, },
+};
+
+/**
+ * rnpgbe_probe - Device initialization routine
+ * @pdev: PCI device information struct
+ * @id: entry in rnpgbe_pci_tbl
+ *
+ * rnpgbe_probe initializes a PF adapter identified by a pci_dev
+ * structure.
+ *
+ * Return: 0 on success, negative errno on failure
+ **/
+static int rnpgbe_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+{
+ int err;
+
+ err = pci_enable_device_mem(pdev);
+ if (err)
+ return err;
+
+ err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(56));
+ if (err) {
+ dev_err(&pdev->dev,
+ "No usable DMA configuration, aborting %d\n", err);
+ goto err_disable_dev;
+ }
+
+ err = pci_request_mem_regions(pdev, rnpgbe_driver_name);
+ if (err) {
+ dev_err(&pdev->dev,
+ "pci_request_selected_regions failed %d\n", err);
+ goto err_disable_dev;
+ }
+
+ pci_set_master(pdev);
+ err = pci_save_state(pdev);
+ if (err) {
+ dev_err(&pdev->dev, "pci_save_state failed %d\n", err);
+ goto err_free_regions;
+ }
+
+ return 0;
+err_free_regions:
+ pci_release_mem_regions(pdev);
+err_disable_dev:
+ pci_disable_device(pdev);
+ return err;
+}
+
+/**
+ * rnpgbe_remove - Device removal routine
+ * @pdev: PCI device information struct
+ *
+ * rnpgbe_remove is called by the PCI subsystem to alert the driver
+ * that it should release a PCI device. This could be caused by a
+ * Hot-Plug event, or because the driver is going to be removed from
+ * memory.
+ **/
+static void rnpgbe_remove(struct pci_dev *pdev)
+{
+ pci_release_mem_regions(pdev);
+ pci_disable_device(pdev);
+}
+
+/**
+ * rnpgbe_dev_shutdown - Device shutdown routine
+ * @pdev: PCI device information struct
+ **/
+static void rnpgbe_dev_shutdown(struct pci_dev *pdev)
+{
+ pci_disable_device(pdev);
+}
+
+/**
+ * rnpgbe_shutdown - Device shutdown routine
+ * @pdev: PCI device information struct
+ *
+ * rnpgbe_shutdown is called by the PCI subsystem to alert the driver
+ * that os shutdown. Device should setup wakeup state here.
+ **/
+static void rnpgbe_shutdown(struct pci_dev *pdev)
+{
+ rnpgbe_dev_shutdown(pdev);
+}
+
+static struct pci_driver rnpgbe_driver = {
+ .name = rnpgbe_driver_name,
+ .id_table = rnpgbe_pci_tbl,
+ .probe = rnpgbe_probe,
+ .remove = rnpgbe_remove,
+ .shutdown = rnpgbe_shutdown,
+};
+
+module_pci_driver(rnpgbe_driver);
+
+MODULE_DEVICE_TABLE(pci, rnpgbe_pci_tbl);
+MODULE_AUTHOR("Mucse Corporation, <techsupport@mucse.com>");
+MODULE_DESCRIPTION("Mucse(R) 1 Gigabit PCI Express Network Driver");
+MODULE_LICENSE("GPL");
--
2.25.1
On 16/09/25 4:59 pm, Dong Yibo wrote: > Add build options and doc for mucse. > Initialize pci device access for MUCSE devices. > > Signed-off-by: Dong Yibo <dong100@mucse.com> > Reviewed-by: Andrew Lunn <andrew@lunn.ch> > Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev> Reviewed-by: MD Danish Anwar <danishanwar@ti.com> -- Thanks and Regards, Danish
Dong Yibo schrieb am Di 16. Sep, 19:29 (+0800): > diff --git a/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c > new file mode 100644 > index 000000000000..60bbc806f17b > --- /dev/null > +++ b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c > @@ -0,0 +1,124 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* Copyright(c) 2020 - 2025 Mucse Corporation. */ > + > +#include <linux/pci.h> > + > +#include "rnpgbe.h" > + > +static const char rnpgbe_driver_name[] = "rnpgbe"; > + > +/* rnpgbe_pci_tbl - PCI Device ID Table > + * > + * { PCI_DEVICE(Vendor ID, Device ID), > + * driver_data (used for different hw chip) } > + */ > +static struct pci_device_id rnpgbe_pci_tbl[] = { > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N500_QUAD_PORT), > + .driver_data = board_n500}, > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N500_DUAL_PORT), > + .driver_data = board_n500}, > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N210), > + .driver_data = board_n210}, > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N210L), > + .driver_data = board_n210}, Should there be a space before }? > + /* required last entry */ > + {0, }, > +}; > + > +/** > + * rnpgbe_probe - Device initialization routine > + * @pdev: PCI device information struct > + * @id: entry in rnpgbe_pci_tbl > + * > + * rnpgbe_probe initializes a PF adapter identified by a pci_dev > + * structure. > + * > + * Return: 0 on success, negative errno on failure > + **/ > +static int rnpgbe_probe(struct pci_dev *pdev, const struct pci_device_id *id) > +{ > + int err; In rnpgbe_mbx.c you use `int ret` for this pattern. I think you should unify this. But I'm more in favour of `err` than `ret`. > + > + err = pci_enable_device_mem(pdev); > + if (err) > + return err; > + > + err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(56)); > + if (err) { > + dev_err(&pdev->dev, > + "No usable DMA configuration, aborting %d\n", err); > + goto err_disable_dev; > + } > + > + err = pci_request_mem_regions(pdev, rnpgbe_driver_name); > + if (err) { > + dev_err(&pdev->dev, > + "pci_request_selected_regions failed %d\n", err); > + goto err_disable_dev; > + } > + > + pci_set_master(pdev); > + err = pci_save_state(pdev); > + if (err) { > + dev_err(&pdev->dev, "pci_save_state failed %d\n", err); > + goto err_free_regions; > + } > + > + return 0; > +err_free_regions: > + pci_release_mem_regions(pdev); > +err_disable_dev: > + pci_disable_device(pdev); > + return err; > +} > + > +/** > + * rnpgbe_remove - Device removal routine > + * @pdev: PCI device information struct > + * > + * rnpgbe_remove is called by the PCI subsystem to alert the driver > + * that it should release a PCI device. This could be caused by a > + * Hot-Plug event, or because the driver is going to be removed from > + * memory. > + **/ > +static void rnpgbe_remove(struct pci_dev *pdev) > +{ > + pci_release_mem_regions(pdev); > + pci_disable_device(pdev); > +} > + > +/** > + * rnpgbe_dev_shutdown - Device shutdown routine > + * @pdev: PCI device information struct > + **/ > +static void rnpgbe_dev_shutdown(struct pci_dev *pdev) > +{ > + pci_disable_device(pdev); > +} > + > +/** > + * rnpgbe_shutdown - Device shutdown routine > + * @pdev: PCI device information struct > + * > + * rnpgbe_shutdown is called by the PCI subsystem to alert the driver > + * that os shutdown. Device should setup wakeup state here. > + **/ > +static void rnpgbe_shutdown(struct pci_dev *pdev) > +{ > + rnpgbe_dev_shutdown(pdev); Is this the only user of rnpgbe_dev_shutdown? > +} > + > +static struct pci_driver rnpgbe_driver = { > + .name = rnpgbe_driver_name, > + .id_table = rnpgbe_pci_tbl, > + .probe = rnpgbe_probe, > + .remove = rnpgbe_remove, > + .shutdown = rnpgbe_shutdown, > +}; > + > +module_pci_driver(rnpgbe_driver); > + > +MODULE_DEVICE_TABLE(pci, rnpgbe_pci_tbl); > +MODULE_AUTHOR("Mucse Corporation, <techsupport@mucse.com>"); > +MODULE_DESCRIPTION("Mucse(R) 1 Gigabit PCI Express Network Driver"); > +MODULE_LICENSE("GPL"); > -- > 2.25.1 > > -- Als deutscher Tourist im Ausland steht man vor der Frage, ob man sich anständig benehmen muss oder ob schon deutsche Touristen dagewesen sind. (Kurt Tucholsky)
On Tue, Sep 16, 2025 at 09:00:23PM +0200, Jörg Sommer wrote: > Dong Yibo schrieb am Di 16. Sep, 19:29 (+0800): > > diff --git a/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c > > new file mode 100644 > > index 000000000000..60bbc806f17b > > --- /dev/null > > +++ b/drivers/net/ethernet/mucse/rnpgbe/rnpgbe_main.c > > @@ -0,0 +1,124 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > +/* Copyright(c) 2020 - 2025 Mucse Corporation. */ > > + > > +#include <linux/pci.h> > > + > > +#include "rnpgbe.h" > > + > > +static const char rnpgbe_driver_name[] = "rnpgbe"; > > + > > +/* rnpgbe_pci_tbl - PCI Device ID Table > > + * > > + * { PCI_DEVICE(Vendor ID, Device ID), > > + * driver_data (used for different hw chip) } > > + */ > > +static struct pci_device_id rnpgbe_pci_tbl[] = { > > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N500_QUAD_PORT), > > + .driver_data = board_n500}, > > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N500_DUAL_PORT), > > + .driver_data = board_n500}, > > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N210), > > + .driver_data = board_n210}, > > + { PCI_DEVICE(PCI_VENDOR_ID_MUCSE, PCI_DEVICE_ID_N210L), > > + .driver_data = board_n210}, > > Should there be a space before }? > ixgbe_main.c has sapce before }, but no sapce after {. ngbe_mainc. no sapce before }, but space after {. mlx5/core/main.c has space both. It seems not the same.... I will add sapce before }. > > + /* required last entry */ > > + {0, }, > > +}; > > + > > +/** > > + * rnpgbe_probe - Device initialization routine > > + * @pdev: PCI device information struct > > + * @id: entry in rnpgbe_pci_tbl > > + * > > + * rnpgbe_probe initializes a PF adapter identified by a pci_dev > > + * structure. > > + * > > + * Return: 0 on success, negative errno on failure > > + **/ > > +static int rnpgbe_probe(struct pci_dev *pdev, const struct pci_device_id *id) > > +{ > > + int err; > > In rnpgbe_mbx.c you use `int ret` for this pattern. I think you should unify > this. But I'm more in favour of `err` than `ret`. > I see, I will use err in rnpgbe_mbx.c > > + > > + err = pci_enable_device_mem(pdev); > > + if (err) > > + return err; > > + > > + err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(56)); > > + if (err) { > > + dev_err(&pdev->dev, > > + "No usable DMA configuration, aborting %d\n", err); > > + goto err_disable_dev; > > + } > > + > > + err = pci_request_mem_regions(pdev, rnpgbe_driver_name); > > + if (err) { > > + dev_err(&pdev->dev, > > + "pci_request_selected_regions failed %d\n", err); > > + goto err_disable_dev; > > + } > > + > > + pci_set_master(pdev); > > + err = pci_save_state(pdev); > > + if (err) { > > + dev_err(&pdev->dev, "pci_save_state failed %d\n", err); > > + goto err_free_regions; > > + } > > + > > + return 0; > > +err_free_regions: > > + pci_release_mem_regions(pdev); > > +err_disable_dev: > > + pci_disable_device(pdev); > > + return err; > > +} > > + > > +/** > > + * rnpgbe_remove - Device removal routine > > + * @pdev: PCI device information struct > > + * > > + * rnpgbe_remove is called by the PCI subsystem to alert the driver > > + * that it should release a PCI device. This could be caused by a > > + * Hot-Plug event, or because the driver is going to be removed from > > + * memory. > > + **/ > > +static void rnpgbe_remove(struct pci_dev *pdev) > > +{ > > + pci_release_mem_regions(pdev); > > + pci_disable_device(pdev); > > +} > > + > > +/** > > + * rnpgbe_dev_shutdown - Device shutdown routine > > + * @pdev: PCI device information struct > > + **/ > > +static void rnpgbe_dev_shutdown(struct pci_dev *pdev) > > +{ > > + pci_disable_device(pdev); > > +} > > + > > +/** > > + * rnpgbe_shutdown - Device shutdown routine > > + * @pdev: PCI device information struct > > + * > > + * rnpgbe_shutdown is called by the PCI subsystem to alert the driver > > + * that os shutdown. Device should setup wakeup state here. > > + **/ > > +static void rnpgbe_shutdown(struct pci_dev *pdev) > > +{ > > + rnpgbe_dev_shutdown(pdev); > > Is this the only user of rnpgbe_dev_shutdown? > No, it maybe called by suspend callback in the future. Device relative code will be added in rnpgbe_dev_shutdown, and power state code in rnpgbe_shutdown. This is the same like other driver did (ixgbe_main.c) > > +} > > + > > +static struct pci_driver rnpgbe_driver = { > > + .name = rnpgbe_driver_name, > > + .id_table = rnpgbe_pci_tbl, > > + .probe = rnpgbe_probe, > > + .remove = rnpgbe_remove, > > + .shutdown = rnpgbe_shutdown, > > +}; > > + > > +module_pci_driver(rnpgbe_driver); > > + > > +MODULE_DEVICE_TABLE(pci, rnpgbe_pci_tbl); > > +MODULE_AUTHOR("Mucse Corporation, <techsupport@mucse.com>"); > > +MODULE_DESCRIPTION("Mucse(R) 1 Gigabit PCI Express Network Driver"); > > +MODULE_LICENSE("GPL"); > > -- > > 2.25.1 > > > > > > -- > Als deutscher Tourist im Ausland steht man vor der Frage, ob man sich > anständig benehmen muss oder ob schon deutsche Touristen dagewesen sind. > (Kurt Tucholsky) Thanks for your feedback.
© 2016 - 2025 Red Hat, Inc.