From: <wanry@3snic.com>
To: <dev@dpdk.org>
Cc: <ferruh.yigit@amd.com>, Renyong Wan <wanry@3snic.com>,
Steven Song <steven.song@3snic.com>
Subject: [PATCH v5 04/32] net/sssnic: initialize hardware base
Date: Mon, 4 Sep 2023 12:56:30 +0800 [thread overview]
Message-ID: <20230904045658.238185-5-wanry@3snic.com> (raw)
In-Reply-To: <20230904045658.238185-1-wanry@3snic.com>
From: Renyong Wan <wanry@3snic.com>
Initializing hardware base make hardware ready to be access.
Signed-off-by: Steven Song <steven.song@3snic.com>
Signed-off-by: Renyong Wan <wanry@3snic.com>
---
drivers/net/sssnic/base/meson.build | 13 ++
drivers/net/sssnic/base/sssnic_hw.c | 207 +++++++++++++++++++++++++++
drivers/net/sssnic/base/sssnic_hw.h | 49 +++++++
drivers/net/sssnic/base/sssnic_reg.h | 169 ++++++++++++++++++++++
drivers/net/sssnic/meson.build | 3 +
drivers/net/sssnic/sssnic_ethdev.c | 46 +++++-
drivers/net/sssnic/sssnic_ethdev.h | 18 +++
7 files changed, 501 insertions(+), 4 deletions(-)
create mode 100644 drivers/net/sssnic/base/meson.build
create mode 100644 drivers/net/sssnic/base/sssnic_hw.c
create mode 100644 drivers/net/sssnic/base/sssnic_reg.h
create mode 100644 drivers/net/sssnic/sssnic_ethdev.h
diff --git a/drivers/net/sssnic/base/meson.build b/drivers/net/sssnic/base/meson.build
new file mode 100644
index 0000000000..3e64112c72
--- /dev/null
+++ b/drivers/net/sssnic/base/meson.build
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2018-2022 Shenzhen 3SNIC Information Technology Co., Ltd.
+
+sources = [
+ 'sssnic_hw.c',
+]
+
+c_args = cflags
+base_lib = static_library('sssnic_base', sources,
+ dependencies: [static_rte_eal, static_rte_ethdev, static_rte_bus_pci, static_rte_net],
+ c_args: c_args)
+
+base_objs = base_lib.extract_all_objects()
diff --git a/drivers/net/sssnic/base/sssnic_hw.c b/drivers/net/sssnic/base/sssnic_hw.c
new file mode 100644
index 0000000000..8b7bba7644
--- /dev/null
+++ b/drivers/net/sssnic/base/sssnic_hw.c
@@ -0,0 +1,207 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018-2022 Shenzhen 3SNIC Information Technology Co., Ltd.
+ */
+
+#include <rte_byteorder.h>
+#include <rte_cycles.h>
+#include <ethdev_pci.h>
+
+#include "../sssnic_log.h"
+#include "sssnic_hw.h"
+#include "sssnic_reg.h"
+
+static int
+wait_for_sssnic_hw_ready(struct sssnic_hw *hw)
+{
+ struct sssnic_attr1_reg reg;
+ uint32_t timeout_ms = 10;
+
+ do {
+ reg.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR1_REG);
+ if (reg.u32 != 0xffffffff && reg.mgmt_init_status != 0)
+ return 0;
+ rte_delay_ms(1);
+ } while (--timeout_ms);
+
+ return -EBUSY;
+}
+
+static int
+wait_for_sssnic_db_enabled(struct sssnic_hw *hw)
+{
+ struct sssnic_attr4_reg r4;
+ struct sssnic_attr5_reg r5;
+ uint32_t timeout_ms = 60000;
+
+ do {
+ r4.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR4_REG);
+ r5.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR5_REG);
+ if (r4.db_ctrl == SSSNIC_DB_CTRL_ENABLE &&
+ r5.outbound_ctrl == SSSNIC_DB_CTRL_ENABLE)
+ return 0;
+ rte_delay_ms(1);
+ } while (--timeout_ms);
+
+ return -EBUSY;
+}
+
+static void
+sssnic_attr_setup(struct sssnic_hw *hw)
+{
+ struct sssnic_attr0_reg attr0;
+ struct sssnic_attr1_reg attr1;
+ struct sssnic_attr2_reg attr2;
+ struct sssnic_attr3_reg attr3;
+ struct sssnic_hw_attr *attr = &hw->attr;
+
+ attr0.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR0_REG);
+ attr1.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR1_REG);
+ attr2.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR2_REG);
+ attr3.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR3_REG);
+
+ attr->func_idx = attr0.func_idx;
+ attr->pf_idx = attr0.pf_idx;
+ attr->pci_idx = attr0.pci_idx;
+ attr->vf_off = attr0.vf_off;
+ attr->func_type = attr0.func_type;
+ attr->af_idx = attr1.af_idx;
+ attr->num_aeq = RTE_BIT32(attr1.num_aeq);
+ attr->num_ceq = attr2.num_ceq;
+ attr->num_irq = attr2.num_irq;
+ attr->global_vf_off = attr3.global_vf_off;
+
+ PMD_DRV_LOG(DEBUG, "attr0=0x%x, attr1=0x%x, attr2=0x%x, attr3=0x%x",
+ attr0.u32, attr1.u32, attr2.u32, attr3.u32);
+}
+
+/* AF and MF election */
+static void
+sssnic_af_setup(struct sssnic_hw *hw)
+{
+ struct sssnic_af_election_reg reg0;
+ struct sssnic_mf_election_reg reg1;
+
+ /* AF election */
+ reg0.u32 = sssnic_mgmt_reg_read(hw, SSSNIC_AF_ELECTION_REG);
+ reg0.func_idx = hw->attr.func_idx;
+ sssnic_mgmt_reg_write(hw, SSSNIC_AF_ELECTION_REG, reg0.u32);
+ reg0.u32 = sssnic_mgmt_reg_read(hw, SSSNIC_AF_ELECTION_REG);
+ hw->attr.af_idx = reg0.func_idx;
+ if (hw->attr.af_idx == hw->attr.func_idx) {
+ hw->attr.func_type = SSSNIC_FUNC_TYPE_AF;
+ PMD_DRV_LOG(INFO, "Elected PF %d as AF", hw->attr.func_idx);
+
+ /* MF election */
+ reg1.u32 = sssnic_mgmt_reg_read(hw, SSSNIC_MF_ELECTION_REG);
+ reg1.func_idx = hw->attr.func_idx;
+ sssnic_mgmt_reg_write(hw, SSSNIC_MF_ELECTION_REG, reg1.u32);
+ reg1.u32 = sssnic_mgmt_reg_read(hw, SSSNIC_MF_ELECTION_REG);
+ hw->attr.mf_idx = reg1.func_idx;
+ if (hw->attr.mf_idx == hw->attr.func_idx)
+ PMD_DRV_LOG(INFO, "Elected PF %d as MF",
+ hw->attr.func_idx);
+ }
+}
+
+void
+sssnic_msix_state_set(struct sssnic_hw *hw, uint16_t msix_id, int state)
+{
+ struct sssnic_msix_ctrl_reg reg;
+
+ reg.u32 = 0;
+ if (state == SSSNIC_MSIX_ENABLE)
+ reg.int_msk_clr = 1;
+ else
+ reg.int_msk_set = 1;
+ reg.msxi_idx = msix_id;
+ sssnic_cfg_reg_write(hw, SSSNIC_MSIX_CTRL_REG, reg.u32);
+}
+
+static void
+sssnic_msix_all_disable(struct sssnic_hw *hw)
+{
+ uint16_t i;
+ int num_irqs = hw->attr.num_irq;
+
+ for (i = 0; i < num_irqs; i++)
+ sssnic_msix_state_set(hw, i, SSSNIC_MSIX_DISABLE);
+}
+
+static void
+sssnic_pf_status_set(struct sssnic_hw *hw, enum sssnic_pf_status status)
+{
+ struct sssnic_attr6_reg reg;
+
+ reg.u32 = sssnic_cfg_reg_read(hw, SSSNIC_ATTR6_REG);
+ reg.pf_status = status;
+ sssnic_cfg_reg_write(hw, SSSNIC_ATTR6_REG, reg.u32);
+}
+
+static int
+sssnic_base_init(struct sssnic_hw *hw)
+{
+ int ret;
+ struct rte_pci_device *pci_dev;
+
+ PMD_INIT_FUNC_TRACE();
+
+ pci_dev = hw->pci_dev;
+
+ /* get base addresses of hw registers */
+ hw->cfg_base_addr =
+ (uint8_t *)pci_dev->mem_resource[SSSNIC_PCI_BAR_CFG].addr;
+ hw->mgmt_base_addr =
+ (uint8_t *)pci_dev->mem_resource[SSSNIC_PCI_BAR_MGMT].addr;
+ hw->db_base_addr =
+ (uint8_t *)pci_dev->mem_resource[SSSNIC_PCI_BAR_DB].addr;
+ hw->db_mem_len =
+ (uint8_t *)pci_dev->mem_resource[SSSNIC_PCI_BAR_DB].len;
+
+ ret = wait_for_sssnic_hw_ready(hw);
+ if (ret != 0) {
+ PMD_DRV_LOG(ERR, "Hardware is not ready!");
+ return -EBUSY;
+ }
+ sssnic_attr_setup(hw);
+ ret = wait_for_sssnic_db_enabled(hw);
+ if (ret != 0) {
+ PMD_DRV_LOG(ERR, "Doorbell is not enabled!");
+ return -EBUSY;
+ }
+ sssnic_af_setup(hw);
+ sssnic_msix_all_disable(hw);
+ sssnic_pf_status_set(hw, SSSNIC_PF_STATUS_INIT);
+
+ PMD_DRV_LOG(DEBUG,
+ "func_idx:%d, func_type:%d, pci_idx:%d, vf_off:%d, global_vf_off:%d "
+ "pf_idx:%d, af_idx:%d, mf_idx:%d, num_aeq:%d, num_ceq:%d, num_irq:%d",
+ hw->attr.func_idx, hw->attr.func_type, hw->attr.pci_idx,
+ hw->attr.vf_off, hw->attr.global_vf_off, hw->attr.pf_idx,
+ hw->attr.af_idx, hw->attr.mf_idx, hw->attr.num_aeq,
+ hw->attr.num_ceq, hw->attr.num_irq);
+
+ return 0;
+}
+
+int
+sssnic_hw_init(struct sssnic_hw *hw)
+{
+ int ret;
+
+ PMD_INIT_FUNC_TRACE();
+
+ ret = sssnic_base_init(hw);
+ if (ret != 0) {
+ PMD_DRV_LOG(ERR, "Failed to initialize hardware base");
+ return ret;
+ }
+
+ return -EINVAL;
+}
+
+void
+sssnic_hw_shutdown(struct sssnic_hw *hw)
+{
+ RTE_SET_USED(hw);
+ PMD_INIT_FUNC_TRACE();
+}
diff --git a/drivers/net/sssnic/base/sssnic_hw.h b/drivers/net/sssnic/base/sssnic_hw.h
index db916b1977..65d4d562b4 100644
--- a/drivers/net/sssnic/base/sssnic_hw.h
+++ b/drivers/net/sssnic/base/sssnic_hw.h
@@ -8,4 +8,53 @@
#define SSSNIC_PCI_VENDOR_ID 0x1F3F
#define SSSNIC_DEVICE_ID_STD 0x9020
+#define SSSNIC_PCI_BAR_CFG 1
+#define SSSNIC_PCI_BAR_MGMT 3
+#define SSSNIC_PCI_BAR_DB 4
+
+#define SSSNIC_FUNC_TYPE_PF 0
+#define SSSNIC_FUNC_TYPE_VF 1
+#define SSSNIC_FUNC_TYPE_AF 2
+#define SSSNIC_FUNC_TYPE_INVALID 3
+
+#define SSSNIC_DB_CTRL_ENABLE 0x0
+#define SSSNIC_DB_CTRL_DISABLE 0x1
+
+#define SSSNIC_MSIX_ENABLE 0
+#define SSSNIC_MSIX_DISABLE 1
+
+enum sssnic_pf_status {
+ SSSNIC_PF_STATUS_INIT = 0x0,
+ SSSNIC_PF_STATUS_ACTIVE = 0x11,
+ SSSNIC_PF_STATUS_START = 0x12,
+ SSSNIC_PF_STATUS_FINI = 0x13,
+};
+
+struct sssnic_hw_attr {
+ uint16_t func_idx;
+ uint8_t pf_idx;
+ uint8_t pci_idx;
+ uint8_t vf_off; /* vf offset in pf */
+ uint8_t global_vf_off;
+ uint8_t func_type;
+ uint8_t af_idx;
+ uint8_t mf_idx;
+ uint8_t num_aeq;
+ uint16_t num_ceq;
+ uint16_t num_irq;
+};
+
+struct sssnic_hw {
+ struct rte_pci_device *pci_dev;
+ uint8_t *cfg_base_addr;
+ uint8_t *mgmt_base_addr;
+ uint8_t *db_base_addr;
+ uint8_t *db_mem_len;
+ struct sssnic_hw_attr attr;
+};
+
+int sssnic_hw_init(struct sssnic_hw *hw);
+void sssnic_hw_shutdown(struct sssnic_hw *hw);
+void sssnic_msix_state_set(struct sssnic_hw *hw, uint16_t msix_id, int state);
+
#endif /* _SSSNIC_HW_H_ */
diff --git a/drivers/net/sssnic/base/sssnic_reg.h b/drivers/net/sssnic/base/sssnic_reg.h
new file mode 100644
index 0000000000..77d83292eb
--- /dev/null
+++ b/drivers/net/sssnic/base/sssnic_reg.h
@@ -0,0 +1,169 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018-2022 Shenzhen 3SNIC Information Technology Co., Ltd.
+ */
+
+#ifndef _SSSNIC_REG_H_
+#define _SSSNIC_REG_H_
+
+#include <rte_io.h>
+
+/* registers of config */
+#define SSSNIC_ATTR0_REG 0x0
+#define SSSNIC_ATTR1_REG 0x4
+#define SSSNIC_ATTR2_REG 0x8
+#define SSSNIC_ATTR3_REG 0xC
+#define SSSNIC_ATTR4_REG 0x10
+#define SSSNIC_ATTR5_REG 0x14
+#define SSSNIC_ATTR6_REG 0x18
+
+#define SSSNIC_MSIX_CTRL_REG 0x58
+
+/* registers of mgmt */
+#define SSSNIC_AF_ELECTION_REG 0x6000
+#define SSSNIC_MF_ELECTION_REG 0x6020
+
+struct sssnic_attr0_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t func_idx : 12;
+ uint32_t pf_idx : 5;
+ uint32_t pci_idx : 3;
+ uint32_t vf_off : 8; /* vf offset in pf */
+ uint32_t func_type : 1;
+ uint32_t resvd_0 : 4;
+ };
+ };
+};
+
+struct sssnic_attr1_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t af_idx : 6;
+ uint32_t resvd_0 : 2;
+ uint32_t num_aeq : 2;
+ uint32_t resvd_1 : 20;
+ uint32_t mgmt_init_status : 1;
+ uint32_t pf_init_status : 1;
+ };
+ };
+};
+
+struct sssnic_attr2_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t num_ceq : 9;
+ uint32_t num_dma_attr : 3;
+ uint32_t resvd_0 : 4;
+ uint32_t num_irq : 11;
+ uint32_t resvd_1 : 5;
+ };
+ };
+};
+
+struct sssnic_attr3_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t global_vf_off1 : 12;
+ uint32_t resvd_0 : 4;
+ uint32_t global_vf_off : 12; /*global vf offset*/
+ uint32_t resvd_1 : 4;
+ };
+ };
+};
+
+struct sssnic_attr4_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t db_ctrl : 1;
+ uint32_t resvd_0 : 31;
+ };
+ };
+};
+
+struct sssnic_attr5_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t outbound_ctrl : 1;
+ uint32_t resvd_0 : 31;
+ };
+ };
+};
+
+struct sssnic_attr6_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t pf_status : 16;
+ uint32_t resvd_0 : 6;
+ uint32_t msix_en : 1;
+ uint32_t max_queues : 9;
+ };
+ };
+};
+
+struct sssnic_af_election_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t func_idx : 6;
+ uint32_t resvd_0 : 26;
+ };
+ };
+};
+
+struct sssnic_mf_election_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t func_idx : 5;
+ uint32_t resvd_0 : 27;
+ };
+ };
+};
+
+struct sssnic_msix_ctrl_reg {
+ union {
+ uint32_t u32;
+ struct {
+ uint32_t resend_timer_clr : 1;
+ uint32_t int_msk_set : 1;
+ uint32_t int_msk_clr : 1;
+ uint32_t auto_msk_set : 1;
+ uint32_t auto_msk_clr : 1;
+ uint32_t resvd_0 : 17;
+ uint32_t msxi_idx : 10;
+ };
+ };
+};
+
+static inline uint32_t
+sssnic_cfg_reg_read(struct sssnic_hw *hw, uint32_t reg)
+{
+ return rte_be_to_cpu_32(rte_read32(hw->cfg_base_addr + reg));
+}
+
+static inline void
+sssnic_cfg_reg_write(struct sssnic_hw *hw, uint32_t reg, uint32_t val)
+{
+ rte_write32(rte_cpu_to_be_32(val), hw->cfg_base_addr + reg);
+}
+
+static inline uint32_t
+sssnic_mgmt_reg_read(struct sssnic_hw *hw, uint32_t reg)
+{
+ return rte_be_to_cpu_32(rte_read32(hw->mgmt_base_addr + reg));
+}
+
+static inline void
+sssnic_mgmt_reg_write(struct sssnic_hw *hw, uint32_t reg, uint32_t val)
+{
+ rte_write32(rte_cpu_to_be_32(val), hw->mgmt_base_addr + reg);
+}
+
+#endif /*_SSSNIC_REG_H_*/
diff --git a/drivers/net/sssnic/meson.build b/drivers/net/sssnic/meson.build
index fda65aa380..328bb41436 100644
--- a/drivers/net/sssnic/meson.build
+++ b/drivers/net/sssnic/meson.build
@@ -13,6 +13,9 @@ if (arch_subdir != 'x86' and arch_subdir != 'arm') or (not dpdk_conf.get('RTE_AR
subdir_done()
endif
+subdir('base')
+objs = [base_objs]
+
sources = files(
'sssnic_ethdev.c',
)
diff --git a/drivers/net/sssnic/sssnic_ethdev.c b/drivers/net/sssnic/sssnic_ethdev.c
index 4f8b5c2684..e198b1e1d0 100644
--- a/drivers/net/sssnic/sssnic_ethdev.c
+++ b/drivers/net/sssnic/sssnic_ethdev.c
@@ -7,25 +7,62 @@
#include "sssnic_log.h"
#include "base/sssnic_hw.h"
+#include "sssnic_ethdev.h"
+
+static void
+sssnic_ethdev_release(struct rte_eth_dev *ethdev)
+{
+ struct sssnic_hw *hw = SSSNIC_ETHDEV_TO_HW(ethdev);
+
+ sssnic_hw_shutdown(hw);
+ rte_free(hw);
+}
static int
sssnic_ethdev_init(struct rte_eth_dev *ethdev)
{
- RTE_SET_USED(ethdev);
+ int ret;
+ struct sssnic_hw *hw;
+ struct sssnic_netdev *netdev;
+ struct rte_pci_device *pci_dev;
+
PMD_INIT_FUNC_TRACE();
- return -EINVAL;
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return 0;
+
+ netdev = SSSNIC_ETHDEV_PRIVATE(ethdev);
+ pci_dev = RTE_ETH_DEV_TO_PCI(ethdev);
+ hw = rte_zmalloc("sssnic_hw", sizeof(struct sssnic_hw), 0);
+ if (hw == NULL) {
+ PMD_DRV_LOG(ERR, "Failed to alloc memory for hw");
+ return -ENOMEM;
+ }
+ netdev->hw = hw;
+ hw->pci_dev = pci_dev;
+ ret = sssnic_hw_init(hw);
+ if (ret != 0) {
+ rte_free(hw);
+ return ret;
+ }
+
+ return 0;
}
static int
sssnic_ethdev_uninit(struct rte_eth_dev *ethdev)
{
- RTE_SET_USED(ethdev);
PMD_INIT_FUNC_TRACE();
if (rte_eal_process_type() != RTE_PROC_PRIMARY)
return 0;
+ /* ethdev port has been released */
+ if (ethdev->state == RTE_ETH_DEV_UNUSED)
+ return 0;
+
+ sssnic_ethdev_release(ethdev);
+
return -EINVAL;
}
@@ -35,7 +72,8 @@ sssnic_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
RTE_SET_USED(pci_drv);
PMD_INIT_FUNC_TRACE();
- return rte_eth_dev_pci_generic_probe(pci_dev, 0, sssnic_ethdev_init);
+ return rte_eth_dev_pci_generic_probe(pci_dev,
+ sizeof(struct sssnic_netdev), sssnic_ethdev_init);
}
static int
diff --git a/drivers/net/sssnic/sssnic_ethdev.h b/drivers/net/sssnic/sssnic_ethdev.h
new file mode 100644
index 0000000000..5d951134cc
--- /dev/null
+++ b/drivers/net/sssnic/sssnic_ethdev.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018-2022 Shenzhen 3SNIC Information Technology Co., Ltd.
+ */
+
+#ifndef _SSSNIC_ETHDEV_H_
+#define _SSSNIC_ETHDEV_H_
+
+struct sssnic_netdev {
+ void *hw;
+};
+
+#define SSSNIC_ETHDEV_PRIVATE(eth_dev) \
+ ((struct sssnic_netdev *)(eth_dev)->data->dev_private)
+#define SSSNIC_NETDEV_TO_HW(netdev) ((struct sssnic_hw *)(netdev)->hw)
+#define SSSNIC_ETHDEV_TO_HW(eth_dev) \
+ SSSNIC_NETDEV_TO_HW(SSSNIC_ETHDEV_PRIVATE(eth_dev))
+
+#endif /*_SSSNIC_ETHDEV_H_*/
--
2.27.0
next prev parent reply other threads:[~2023-09-04 4:57 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-04 4:56 [PATCH v5 00/32] Introduce sssnic PMD for 3SNIC's 9x0 serials Ethernet adapters wanry
2023-09-04 4:56 ` [PATCH v5 01/32] net/sssnic: add build and doc infrastructure wanry
2023-09-26 13:06 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 02/32] net/sssnic: add log type and log macros wanry
2023-09-04 4:56 ` [PATCH v5 03/32] net/sssnic: support probe and remove wanry
2023-09-18 16:08 ` Stephen Hemminger
2023-09-19 2:00 ` Renyong Wan
2023-09-04 4:56 ` wanry [this message]
2023-09-18 2:28 ` [PATCH v5 04/32] net/sssnic: initialize hardware base Stephen Hemminger
2023-09-18 4:47 ` Renyong Wan
2023-09-04 4:56 ` [PATCH v5 05/32] net/sssnic: add event queue wanry
2023-09-04 4:56 ` [PATCH v5 06/32] net/sssnic/base: add message definition and utility wanry
2023-09-18 2:31 ` Stephen Hemminger
2023-09-18 5:08 ` Renyong Wan
2023-09-04 4:56 ` [PATCH v5 07/32] net/sssnic/base: add mailbox support wanry
2023-09-18 2:32 ` Stephen Hemminger
2023-09-18 5:10 ` Renyong Wan
2023-09-26 13:13 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 08/32] net/sssnic/base: add work queue wanry
2023-09-18 2:33 ` Stephen Hemminger
2023-09-18 5:11 ` Renyong Wan
2023-09-04 4:56 ` [PATCH v5 09/32] net/sssnic/base: add control queue wanry
2023-09-18 2:36 ` Stephen Hemminger
2023-09-18 5:22 ` Renyong Wan
2023-09-04 4:56 ` [PATCH v5 10/32] net/sssnic: add dev configure and infos get wanry
2023-09-04 4:56 ` [PATCH v5 11/32] net/sssnic: add dev MAC ops wanry
2023-09-26 13:07 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 12/32] net/sssnic: support dev link status wanry
2023-09-04 4:56 ` [PATCH v5 13/32] net/sssnic: support link status event wanry
2023-09-26 13:08 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 14/32] net/sssnic: support Rx queue setup and release wanry
2023-09-04 4:56 ` [PATCH v5 15/32] net/sssnic: support Tx " wanry
2023-09-04 4:56 ` [PATCH v5 16/32] net/sssnic: support Rx queue start and stop wanry
2023-09-04 4:56 ` [PATCH v5 17/32] net/sssnic: support Tx " wanry
2023-09-04 4:56 ` [PATCH v5 18/32] net/sssnic: add Rx interrupt support wanry
2023-09-04 4:56 ` [PATCH v5 19/32] net/sssnic: support dev start and stop wanry
2023-09-26 13:09 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 20/32] net/sssnic: support dev close and reset wanry
2023-09-26 13:09 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 21/32] net/sssnic: add allmulticast and promiscuous ops wanry
2023-09-04 4:56 ` [PATCH v5 22/32] net/sssnic: add basic and extended stats ops wanry
2023-09-04 4:56 ` [PATCH v5 23/32] net/sssnic: support Rx packet burst wanry
2023-09-04 4:56 ` [PATCH v5 24/32] net/sssnic: support Tx " wanry
2023-09-26 13:10 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 25/32] net/sssnic: add RSS support wanry
2023-09-04 4:56 ` [PATCH v5 26/32] net/sssnic: support dev MTU set wanry
2023-09-04 4:56 ` [PATCH v5 27/32] net/sssnic: support dev queue info get wanry
2023-09-04 4:56 ` [PATCH v5 28/32] net/sssnic: support dev firmware version get wanry
2023-09-04 4:56 ` [PATCH v5 29/32] net/sssnic: add dev flow control ops wanry
2023-09-26 13:12 ` Ferruh Yigit
2023-09-04 4:56 ` [PATCH v5 30/32] net/sssnic: support VLAN offload and filter wanry
2023-09-04 4:56 ` [PATCH v5 31/32] net/sssnic: add generic flow ops wanry
2023-09-04 4:56 ` [PATCH v5 32/32] net/sssnic: add VF dev support wanry
2023-09-26 13:11 ` Ferruh Yigit
2023-09-18 2:37 ` [PATCH v5 00/32] Introduce sssnic PMD for 3SNIC's 9x0 serials Ethernet adapters Stephen Hemminger
2023-09-18 3:23 ` Renyong Wan
2023-09-19 3:19 ` Stephen Hemminger
2023-09-19 5:18 ` Renyong Wan
2023-09-19 3:21 ` Stephen Hemminger
2023-09-19 5:18 ` Renyong Wan
2023-09-19 3:23 ` Stephen Hemminger
2023-09-19 5:19 ` Renyong Wan
2023-09-19 15:24 ` Stephen Hemminger
2023-09-26 13:13 ` Ferruh Yigit
2024-03-29 11:32 ` Ferruh Yigit
2024-07-31 17:32 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230904045658.238185-5-wanry@3snic.com \
--to=wanry@3snic.com \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@amd.com \
--cc=steven.song@3snic.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).