From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1C24645CA6; Fri, 8 Nov 2024 13:11:37 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0C1F343336; Fri, 8 Nov 2024 13:11:37 +0100 (CET) Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by mails.dpdk.org (Postfix) with ESMTP id 93DC54025E for ; Fri, 8 Nov 2024 13:11:35 +0100 (CET) X-SpamFilter-By: ArmorX SpamTrap 5.78 with qID 4A8CBXjG41901394, This message is accepted by code: ctloc85258 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=realsil.com.cn; s=dkim; t=1731067893; bh=1Py4xWk2ziUn6Q8AI/fsGWz6sjnEj3a5ZzJAxsZ/wtY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Transfer-Encoding:Content-Type; b=DCUc1U9acbb3I/xyKrKs5+OV4CCDM0yfopnbYn2+aibjcJ28ON8MFcZCOuH5oNbBV QCcATaHwbxY/j9zmp6LzTKDyedWoa2u+5BnOEeWI8CMaUhkAwzoCl2Q30Nk9VWYBj3 nIAG7rqvCm8Zt2ugRKuKzPwgesEEU7coBSFdhbcmDIVGDsoNlUvxCVQUZJKVNQw/RR k/2mb0Vq+w9FqfJa1+226Qv1biy+RwcIpibMTxE61R+jW9MEk0XaDtYML0fTWbLBSs dAzTDjGBEcSN/uSybxsV26kMJ21NmcN5gSagd9ORKqHVfQwX8gTyhh+XCINNSyK3ff ylghS6vOSX37A== Received: from RSEXMBS03.realsil.com.cn ([172.29.17.197]) by rtits2.realtek.com.tw (8.15.2/3.06/5.92) with ESMTPS id 4A8CBXjG41901394 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 8 Nov 2024 20:11:33 +0800 Received: from RSEXDAG02.realsil.com.cn (172.29.17.196) by RSEXMBS03.realsil.com.cn (172.29.17.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 8 Nov 2024 20:11:33 +0800 Received: from RSEXH36502.realsil.com.cn (172.29.17.3) by RSEXDAG02.realsil.com.cn (172.29.17.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 8 Nov 2024 20:11:33 +0800 Received: from 172.29.32.27 (172.29.32.27) by RSEXH36502.realsil.com.cn (172.29.17.3) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Fri, 8 Nov 2024 20:11:33 +0800 From: Howard Wang To: CC: , Howard Wang Subject: [PATCH v6 01/17] net/r8169: add PMD driver skeleton Date: Fri, 8 Nov 2024 20:11:07 +0800 Message-ID: <20241108121123.248797-2-howard_wang@realsil.com.cn> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241108121123.248797-1-howard_wang@realsil.com.cn> References: <20241108121123.248797-1-howard_wang@realsil.com.cn> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Meson build infrastructure, r8169_ethdev minimal skeleton, header with Realtek NIC device and vendor IDs. Signed-off-by: Howard Wang --- MAINTAINERS | 8 ++ doc/guides/nics/features/r8169.ini | 9 ++ doc/guides/nics/index.rst | 1 + doc/guides/nics/r8169.rst | 19 ++++ doc/guides/rel_notes/release_24_11.rst | 5 + drivers/net/meson.build | 1 + drivers/net/r8169/meson.build | 6 + drivers/net/r8169/r8169_compat.h | 17 +++ drivers/net/r8169/r8169_ethdev.c | 147 +++++++++++++++++++++++++ drivers/net/r8169/r8169_ethdev.h | 31 ++++++ 10 files changed, 244 insertions(+) create mode 100644 doc/guides/nics/features/r8169.ini create mode 100644 doc/guides/nics/r8169.rst create mode 100644 drivers/net/r8169/meson.build create mode 100644 drivers/net/r8169/r8169_compat.h create mode 100644 drivers/net/r8169/r8169_ethdev.c create mode 100644 drivers/net/r8169/r8169_ethdev.h diff --git a/MAINTAINERS b/MAINTAINERS index 9a812b3632..f68cf48a9d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -995,6 +995,14 @@ F: drivers/net/qede/ F: doc/guides/nics/qede.rst F: doc/guides/nics/features/qede*.ini +Realtek r8169 +M: Howard Wang +M: ChunHao Lin +M: Xing Wang +F: drivers/net/r8169 +F: doc/guides/nics/r8169.rst +F: doc/guides/nics/features/r8169.ini + Solarflare sfc_efx M: Andrew Rybchenko F: drivers/common/sfc_efx/ diff --git a/doc/guides/nics/features/r8169.ini b/doc/guides/nics/features/r8169.ini new file mode 100644 index 0000000000..dd1ce4db5c --- /dev/null +++ b/doc/guides/nics/features/r8169.ini @@ -0,0 +1,9 @@ +; +; Supported features of the 'r8169' network poll mode driver. +; +; Refer to default.ini for the full list of available PMD features. +; +[Features] +Linux = Y +x86-32 = Y +x86-64 = Y diff --git a/doc/guides/nics/index.rst b/doc/guides/nics/index.rst index 8e371ac4a5..50688d9f64 100644 --- a/doc/guides/nics/index.rst +++ b/doc/guides/nics/index.rst @@ -60,6 +60,7 @@ Network Interface Controller Drivers pcap_ring pfe qede + r8169 sfc_efx softnic tap diff --git a/doc/guides/nics/r8169.rst b/doc/guides/nics/r8169.rst new file mode 100644 index 0000000000..071aebcdbf --- /dev/null +++ b/doc/guides/nics/r8169.rst @@ -0,0 +1,19 @@ +.. SPDX-License-Identifier: BSD-3-Clause + Copyright(c) 2024 Realtek Corporation. All rights reserved + +R8169 Poll Mode Driver +====================== + +The R8169 PMD provides poll mode driver support for Realtek 2.5 and 5 Gigabit +Ethernet NICs. + +More information about Realtek 2.5G Ethernet NIC can be found at `RTL8125 +`_. +More information about Realtek 5G Ethernet NIC can be found at `RTL8126 +`_. + +Supported Chipsets and NICs +--------------------------- + +- Realtek RTL8125 2.5 Gigabit Ethernet Controller +- Realtek RTL8126 5 Gigabit Ethernet Controller diff --git a/doc/guides/rel_notes/release_24_11.rst b/doc/guides/rel_notes/release_24_11.rst index 66b970e036..2393db1e54 100644 --- a/doc/guides/rel_notes/release_24_11.rst +++ b/doc/guides/rel_notes/release_24_11.rst @@ -219,6 +219,11 @@ New Features * Added support for DMA queue priority configuration. +* **Added Realtek network PMD.** + + Added a new network PMD which supports Realtek 2.5 and 5 Gigabit + Ethernet NICs. + * **Added event device pre-scheduling support.** Added support for pre-scheduling of events to event ports diff --git a/drivers/net/meson.build b/drivers/net/meson.build index 0a12914534..dafd637ba4 100644 --- a/drivers/net/meson.build +++ b/drivers/net/meson.build @@ -52,6 +52,7 @@ drivers = [ 'pcap', 'pfe', 'qede', + 'r8169', 'ring', 'sfc', 'softnic', diff --git a/drivers/net/r8169/meson.build b/drivers/net/r8169/meson.build new file mode 100644 index 0000000000..f14d4ae8fb --- /dev/null +++ b/drivers/net/r8169/meson.build @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2024 Realtek Corporation. All rights reserved + +sources = files( + 'r8169_ethdev.c', +) diff --git a/drivers/net/r8169/r8169_compat.h b/drivers/net/r8169/r8169_compat.h new file mode 100644 index 0000000000..e337ce3afa --- /dev/null +++ b/drivers/net/r8169/r8169_compat.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2024 Realtek Corporation. All rights reserved + */ + +#ifndef _R8169_COMPAT_H_ +#define _R8169_COMPAT_H_ + +#include + +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; + +#define PCI_VENDOR_ID_REALTEK 0x10EC + +#endif diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c new file mode 100644 index 0000000000..740f7957be --- /dev/null +++ b/drivers/net/r8169/r8169_ethdev.c @@ -0,0 +1,147 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2024 Realtek Corporation. All rights reserved + */ + +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "r8169_ethdev.h" +#include "r8169_compat.h" + +static int rtl_dev_configure(struct rte_eth_dev *dev); +static int rtl_dev_start(struct rte_eth_dev *dev); +static int rtl_dev_stop(struct rte_eth_dev *dev); +static int rtl_dev_reset(struct rte_eth_dev *dev); +static int rtl_dev_close(struct rte_eth_dev *dev); + +/* + * The set of PCI devices this driver supports + */ +static const struct rte_pci_id pci_id_r8169_map[] = { + { RTE_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8125) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8162) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8126) }, + { RTE_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x5000) }, + {.vendor_id = 0, /* sentinel */ }, +}; + +static const struct eth_dev_ops rtl_eth_dev_ops = { + .dev_configure = rtl_dev_configure, + .dev_start = rtl_dev_start, + .dev_stop = rtl_dev_stop, + .dev_close = rtl_dev_close, + .dev_reset = rtl_dev_reset, +}; + +static int +rtl_dev_configure(struct rte_eth_dev *dev __rte_unused) +{ + return 0; +} + +/* + * Configure device link speed and setup link. + * It returns 0 on success. + */ +static int +rtl_dev_start(struct rte_eth_dev *dev __rte_unused) +{ + return 0; +} + +/* + * Stop device: disable RX and TX functions to allow for reconfiguring. + */ +static int +rtl_dev_stop(struct rte_eth_dev *dev __rte_unused) +{ + return 0; +} + +/* + * Reset and stop device. + */ +static int +rtl_dev_close(struct rte_eth_dev *dev) +{ + int ret_stp; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + ret_stp = rtl_dev_stop(dev); + + return ret_stp; +} + +static int +rtl_dev_init(struct rte_eth_dev *dev) +{ + dev->dev_ops = &rtl_eth_dev_ops; + + /* For secondary processes, the primary process has done all the work */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + return 0; +} + +static int +rtl_dev_uninit(struct rte_eth_dev *dev) +{ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -EPERM; + + rtl_dev_close(dev); + + return 0; +} + +static int +rtl_dev_reset(struct rte_eth_dev *dev) +{ + int ret; + + ret = rtl_dev_uninit(dev); + if (ret) + return ret; + + ret = rtl_dev_init(dev); + + return ret; +} + +static int +rtl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, + struct rte_pci_device *pci_dev) +{ + return rte_eth_dev_pci_generic_probe(pci_dev, sizeof(struct rtl_adapter), + rtl_dev_init); +} + +static int +rtl_pci_remove(struct rte_pci_device *pci_dev) +{ + return rte_eth_dev_pci_generic_remove(pci_dev, rtl_dev_uninit); +} + +static struct rte_pci_driver rte_r8169_pmd = { + .id_table = pci_id_r8169_map, + .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC, + .probe = rtl_pci_probe, + .remove = rtl_pci_remove, +}; + +RTE_PMD_REGISTER_PCI(net_r8169, rte_r8169_pmd); +RTE_PMD_REGISTER_PCI_TABLE(net_r8169, pci_id_r8169_map); +RTE_PMD_REGISTER_KMOD_DEP(net_r8169, "* igb_uio | uio_pci_generic | vfio-pci"); diff --git a/drivers/net/r8169/r8169_ethdev.h b/drivers/net/r8169/r8169_ethdev.h new file mode 100644 index 0000000000..561caa7acf --- /dev/null +++ b/drivers/net/r8169/r8169_ethdev.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2024 Realtek Corporation. All rights reserved + */ + +#ifndef _R8169_ETHDEV_H_ +#define _R8169_ETHDEV_H_ + +#include + +#include +#include + +#include "r8169_compat.h" + +struct rtl_sw_stats { + u64 tx_packets; + u64 tx_bytes; + u64 tx_errors; + u64 rx_packets; + u64 rx_bytes; + u64 rx_errors; +}; + +struct rtl_adapter { + struct rtl_sw_stats sw_stats; +}; + +#define RTL_DEV_PRIVATE(eth_dev) \ + ((struct rtl_adapter *)((eth_dev)->data->dev_private)) + +#endif -- 2.34.1