[PATCH v8 16/17] net/r8169: add support for getting FW version

Howard Wang howard_wang at realsil.com.cn
Wed Nov 13 10:28:53 CET 2024


Signed-off-by: Howard Wang <howard_wang at realsil.com.cn>
---
 doc/guides/nics/features/r8169.ini |  1 +
 drivers/net/r8169/r8169_ethdev.c   | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/doc/guides/nics/features/r8169.ini b/doc/guides/nics/features/r8169.ini
index a509107dea..6a91aa2240 100644
--- a/doc/guides/nics/features/r8169.ini
+++ b/doc/guides/nics/features/r8169.ini
@@ -17,6 +17,7 @@ Flow control         = Y
 L3 checksum offload  = Y
 L4 checksum offload  = Y
 Basic stats          = Y
+FW version           = Y
 Linux                = Y
 x86-32               = Y
 x86-64               = Y
diff --git a/drivers/net/r8169/r8169_ethdev.c b/drivers/net/r8169/r8169_ethdev.c
index 8daf1c26ab..cda9fd5ae8 100644
--- a/drivers/net/r8169/r8169_ethdev.c
+++ b/drivers/net/r8169/r8169_ethdev.c
@@ -43,6 +43,8 @@ static int rtl_promiscuous_disable(struct rte_eth_dev *dev);
 static int rtl_allmulticast_enable(struct rte_eth_dev *dev);
 static int rtl_allmulticast_disable(struct rte_eth_dev *dev);
 static int rtl_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
+static int rtl_fw_version_get(struct rte_eth_dev *dev, char *fw_version,
+			      size_t fw_size);
 
 /*
  * The set of PCI devices this driver supports
@@ -91,6 +93,8 @@ static const struct eth_dev_ops rtl_eth_dev_ops = {
 
 	.mtu_set              = rtl_dev_mtu_set,
 
+	.fw_version_get       = rtl_fw_version_get,
+
 	.rx_queue_setup       = rtl_rx_queue_setup,
 	.rx_queue_release     = rtl_rx_queue_release,
 	.rxq_info_get         = rtl_rxq_info_get,
@@ -616,6 +620,22 @@ rtl_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
 	return 0;
 }
 
+static int
+rtl_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size)
+{
+	struct rtl_adapter *adapter = RTL_DEV_PRIVATE(dev);
+	struct rtl_hw *hw = &adapter->hw;
+	int ret;
+
+	ret = snprintf(fw_version, fw_size, "0x%08x", hw->hw_ram_code_ver);
+
+	ret += 1; /* Add the size of '\0' */
+	if (fw_size < (u32)ret)
+		return ret;
+	else
+		return 0;
+}
+
 static int
 rtl_dev_init(struct rte_eth_dev *dev)
 {
-- 
2.34.1



More information about the dev mailing list