From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: dev@dpdk.org
Cc: Jay Ding <jay.ding@broadcom.com>,
Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>,
Randy Schacher <stuart.schacher@broadcom.com>
Subject: [dpdk-dev] [PATCH v5 28/51] net/bnxt: implement IF tables set and get
Date: Fri, 3 Jul 2020 14:01:47 -0700 [thread overview]
Message-ID: <20200703210210.40568-29-ajit.khaparde@broadcom.com> (raw)
In-Reply-To: <20200703210210.40568-1-ajit.khaparde@broadcom.com>
From: Jay Ding <jay.ding@broadcom.com>
- Implement set/get for PROF_SPIF_CTXT, LKUP_PF_DFLT_ARP,
PROF_PF_ERR_ARP with tunneled HWRM messages
- Add IF table for PROF_PARIF_DFLT_ARP
- Fix page size offset in the HCAPI code
- Fix Entry offset calculation
Signed-off-by: Jay Ding <jay.ding@broadcom.com>
Signed-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>
Reviewed-by: Randy Schacher <stuart.schacher@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
drivers/net/bnxt/hcapi/cfa_p40_tbl.h | 53 +++++
drivers/net/bnxt/hcapi/hcapi_cfa_defs.h | 12 +-
drivers/net/bnxt/hcapi/hcapi_cfa_p4.c | 8 +-
drivers/net/bnxt/hcapi/hcapi_cfa_p4.h | 18 +-
drivers/net/bnxt/meson.build | 2 +-
drivers/net/bnxt/tf_core/Makefile | 2 +
drivers/net/bnxt/tf_core/hwrm_tf.h | 63 +++++-
drivers/net/bnxt/tf_core/tf_core.c | 116 +++++++++++
drivers/net/bnxt/tf_core/tf_core.h | 104 ++++++++++
drivers/net/bnxt/tf_core/tf_device.c | 21 ++
drivers/net/bnxt/tf_core/tf_device.h | 39 ++++
drivers/net/bnxt/tf_core/tf_device_p4.c | 5 +
drivers/net/bnxt/tf_core/tf_device_p4.h | 10 +
drivers/net/bnxt/tf_core/tf_em_common.c | 5 +-
drivers/net/bnxt/tf_core/tf_em_host.c | 12 +-
drivers/net/bnxt/tf_core/tf_identifier.c | 3 +-
drivers/net/bnxt/tf_core/tf_if_tbl.c | 178 +++++++++++++++++
drivers/net/bnxt/tf_core/tf_if_tbl.h | 236 +++++++++++++++++++++++
drivers/net/bnxt/tf_core/tf_msg.c | 186 +++++++++++++++---
drivers/net/bnxt/tf_core/tf_msg.h | 30 +++
drivers/net/bnxt/tf_core/tf_session.c | 14 +-
21 files changed, 1060 insertions(+), 57 deletions(-)
create mode 100644 drivers/net/bnxt/tf_core/tf_if_tbl.c
create mode 100644 drivers/net/bnxt/tf_core/tf_if_tbl.h
diff --git a/drivers/net/bnxt/hcapi/cfa_p40_tbl.h b/drivers/net/bnxt/hcapi/cfa_p40_tbl.h
index c30e4f49c..3243b3f2b 100644
--- a/drivers/net/bnxt/hcapi/cfa_p40_tbl.h
+++ b/drivers/net/bnxt/hcapi/cfa_p40_tbl.h
@@ -127,6 +127,11 @@ const struct hcapi_cfa_field cfa_p40_prof_profile_tcam_remap_mem_layout[] = {
CFA_P40_PROF_PROFILE_TCAM_REMAP_MEM_TCAM_PROFILE_ID_NUM_BITS},
{CFA_P40_PROF_PROFILE_TCAM_REMAP_MEM_TCAM_KEY_ID_BITPOS,
CFA_P40_PROF_PROFILE_TCAM_REMAP_MEM_TCAM_KEY_ID_NUM_BITS},
+ /* Fields below not generated through automation */
+ {CFA_P40_PROF_PROFILE_TCAM_REMAP_MEM_BYPASS_OPT_BITPOS,
+ CFA_P40_PROF_PROFILE_TCAM_REMAP_MEM_BYPASS_OPT_NUM_BITS},
+ {CFA_P40_PROF_PROFILE_TCAM_REMAP_MEM_ACT_REC_PTR_BITPOS,
+ CFA_P40_PROF_PROFILE_TCAM_REMAP_MEM_ACT_REC_PTR_NUM_BITS},
};
const struct hcapi_cfa_field cfa_p40_prof_profile_tcam_layout[] = {
@@ -247,4 +252,52 @@ const struct hcapi_cfa_field cfa_p40_eem_key_tbl_layout[] = {
CFA_P40_EEM_KEY_TBL_AR_PTR_NUM_BITS},
};
+
+const struct hcapi_cfa_field cfa_p40_mirror_tbl_layout[] = {
+ {CFA_P40_MIRROR_TBL_SP_PTR_BITPOS,
+ CFA_P40_MIRROR_TBL_SP_PTR_NUM_BITS},
+
+ {CFA_P40_MIRROR_TBL_IGN_DROP_BITPOS,
+ CFA_P40_MIRROR_TBL_IGN_DROP_NUM_BITS},
+
+ {CFA_P40_MIRROR_TBL_COPY_BITPOS,
+ CFA_P40_MIRROR_TBL_COPY_NUM_BITS},
+
+ {CFA_P40_MIRROR_TBL_EN_BITPOS,
+ CFA_P40_MIRROR_TBL_EN_NUM_BITS},
+
+ {CFA_P40_MIRROR_TBL_AR_PTR_BITPOS,
+ CFA_P40_MIRROR_TBL_AR_PTR_NUM_BITS},
+};
+
+/* P45 Defines */
+
+const struct hcapi_cfa_field cfa_p45_prof_l2_ctxt_tcam_layout[] = {
+ {CFA_P45_PROF_L2_CTXT_TCAM_VALID_BITPOS,
+ CFA_P45_PROF_L2_CTXT_TCAM_VALID_NUM_BITS},
+ {CFA_P45_PROF_L2_CTXT_TCAM_SPARIF_BITPOS,
+ CFA_P45_PROF_L2_CTXT_TCAM_SPARIF_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_KEY_TYPE_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_KEY_TYPE_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_TUN_HDR_TYPE_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_TUN_HDR_TYPE_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_T_L2_NUMTAGS_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_T_L2_NUMTAGS_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_L2_NUMTAGS_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_L2_NUMTAGS_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_MAC1_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_MAC1_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_T_OVID_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_T_OVID_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_T_IVID_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_T_IVID_NUM_BITS},
+ {CFA_P45_PROF_L2_CTXT_TCAM_SVIF_BITPOS,
+ CFA_P45_PROF_L2_CTXT_TCAM_SVIF_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_MAC0_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_MAC0_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_OVID_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_OVID_NUM_BITS},
+ {CFA_P40_PROF_L2_CTXT_TCAM_IVID_BITPOS,
+ CFA_P40_PROF_L2_CTXT_TCAM_IVID_NUM_BITS},
+};
#endif /* _CFA_P40_TBL_H_ */
diff --git a/drivers/net/bnxt/hcapi/hcapi_cfa_defs.h b/drivers/net/bnxt/hcapi/hcapi_cfa_defs.h
index ea8d99d01..53a284887 100644
--- a/drivers/net/bnxt/hcapi/hcapi_cfa_defs.h
+++ b/drivers/net/bnxt/hcapi/hcapi_cfa_defs.h
@@ -35,10 +35,6 @@
#define CFA_GLOBAL_CFG_DATA_SZ (100)
-#if SUPPORT_CFA_HW_P4 && SUPPORT_CFA_HW_P58 && SUPPORT_CFA_HW_P59
-#define SUPPORT_CFA_HW_ALL (1)
-#endif
-
#include "hcapi_cfa_p4.h"
#define CFA_PROF_L2CTXT_TCAM_MAX_FIELD_CNT CFA_P40_PROF_L2_CTXT_TCAM_MAX_FLD
#define CFA_PROF_L2CTXT_REMAP_MAX_FIELD_CNT CFA_P40_PROF_L2_CTXT_RMP_DR_MAX_FLD
@@ -121,6 +117,8 @@ struct hcapi_cfa_layout {
const struct hcapi_cfa_field *field_array;
/** [out] number of HW field entries in the HW layout field array */
uint32_t array_sz;
+ /** [out] layout_id - layout id associated with the layout */
+ uint16_t layout_id;
};
/**
@@ -247,6 +245,8 @@ struct hcapi_cfa_key_tbl {
* applicable for newer chip
*/
uint8_t *base1;
+ /** [in] Page size for EEM tables */
+ uint32_t page_size;
};
/**
@@ -267,7 +267,7 @@ struct hcapi_cfa_key_obj {
struct hcapi_cfa_key_data {
/** [in] For on-chip key table, it is the offset in unit of smallest
* key. For off-chip key table, it is the byte offset relative
- * to the key record memory base.
+ * to the key record memory base and adjusted for page and entry size.
*/
uint32_t offset;
/** [in] HW key data buffer pointer */
@@ -668,5 +668,5 @@ int hcapi_cfa_key_hw_op(struct hcapi_cfa_hwop *op,
struct hcapi_cfa_key_loc *key_loc);
uint64_t hcapi_get_table_page(struct hcapi_cfa_em_table *mem,
- uint32_t offset);
+ uint32_t page);
#endif /* HCAPI_CFA_DEFS_H_ */
diff --git a/drivers/net/bnxt/hcapi/hcapi_cfa_p4.c b/drivers/net/bnxt/hcapi/hcapi_cfa_p4.c
index 42b37da0f..a01bbdbbb 100644
--- a/drivers/net/bnxt/hcapi/hcapi_cfa_p4.c
+++ b/drivers/net/bnxt/hcapi/hcapi_cfa_p4.c
@@ -13,7 +13,6 @@
#include "hcapi_cfa_defs.h"
#define HCAPI_CFA_LKUP_SEED_MEM_SIZE 512
-#define TF_EM_PAGE_SIZE (1 << 21)
uint32_t hcapi_cfa_lkup_lkup3_init_cfg;
uint32_t hcapi_cfa_lkup_em_seed_mem[HCAPI_CFA_LKUP_SEED_MEM_SIZE];
bool hcapi_cfa_lkup_init;
@@ -199,10 +198,9 @@ static uint32_t hcapi_cfa_lookup3_hash(uint8_t *in_key)
uint64_t hcapi_get_table_page(struct hcapi_cfa_em_table *mem,
- uint32_t offset)
+ uint32_t page)
{
int level = 0;
- int page = offset / TF_EM_PAGE_SIZE;
uint64_t addr;
if (mem == NULL)
@@ -362,7 +360,9 @@ int hcapi_cfa_key_hw_op(struct hcapi_cfa_hwop *op,
op->hw.base_addr =
hcapi_get_table_page((struct hcapi_cfa_em_table *)
key_tbl->base0,
- key_obj->offset);
+ key_obj->offset / key_tbl->page_size);
+ /* Offset is adjusted to be the offset into the page */
+ key_obj->offset = key_obj->offset % key_tbl->page_size;
if (op->hw.base_addr == 0)
return -1;
diff --git a/drivers/net/bnxt/hcapi/hcapi_cfa_p4.h b/drivers/net/bnxt/hcapi/hcapi_cfa_p4.h
index 0661d6363..c6113707f 100644
--- a/drivers/net/bnxt/hcapi/hcapi_cfa_p4.h
+++ b/drivers/net/bnxt/hcapi/hcapi_cfa_p4.h
@@ -21,6 +21,10 @@ enum cfa_p4_tbl_id {
CFA_P4_TBL_WC_TCAM_REMAP,
CFA_P4_TBL_VEB_TCAM,
CFA_P4_TBL_SP_TCAM,
+ CFA_P4_TBL_PROF_SPIF_DFLT_L2CTXT,
+ CFA_P4_TBL_PROF_PARIF_DFLT_ACT_REC_PTR,
+ CFA_P4_TBL_PROF_PARIF_ERR_ACT_REC_PTR,
+ CFA_P4_TBL_LKUP_PARIF_DFLT_ACT_REC_PTR,
CFA_P4_TBL_MAX
};
@@ -333,17 +337,29 @@ enum cfa_p4_action_sram_entry_type {
*/
/** SRAM Action Record */
- CFA_P4_ACTION_SRAM_ENTRY_TYPE_ACT,
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_FULL_ACTION,
+
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_FORMAT_0_ACTION,
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_FORMAT_1_ACTION,
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_FORMAT_2_ACTION,
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_FORMAT_3_ACTION,
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_FORMAT_4_ACTION,
+
/** SRAM Action Encap 8 Bytes */
CFA_P4_ACTION_SRAM_ENTRY_TYPE_ENCAP_8B,
/** SRAM Action Encap 16 Bytes */
CFA_P4_ACTION_SRAM_ENTRY_TYPE_ENCAP_16B,
/** SRAM Action Encap 64 Bytes */
CFA_P4_ACTION_SRAM_ENTRY_TYPE_ENCAP_64B,
+
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_MODIFY_PORT_SRC,
+ CFA_P4_ACTION_SRAM_ENTRY_TYPE_MODIFY_PORT_DEST,
+
/** SRAM Action Modify IPv4 Source */
CFA_P4_ACTION_SRAM_ENTRY_TYPE_MODIFY_IPV4_SRC,
/** SRAM Action Modify IPv4 Destination */
CFA_P4_ACTION_SRAM_ENTRY_TYPE_MODIFY_IPV4_DEST,
+
/** SRAM Action Source Properties SMAC */
CFA_P4_ACTION_SRAM_ENTRY_TYPE_SP_SMAC,
/** SRAM Action Source Properties SMAC IPv4 */
diff --git a/drivers/net/bnxt/meson.build b/drivers/net/bnxt/meson.build
index 7f3ec6204..f25a9448d 100644
--- a/drivers/net/bnxt/meson.build
+++ b/drivers/net/bnxt/meson.build
@@ -43,7 +43,7 @@ sources = files('bnxt_cpr.c',
'tf_core/tf_shadow_tcam.c',
'tf_core/tf_tcam.c',
'tf_core/tf_util.c',
- 'tf_core/tf_rm.c',
+ 'tf_core/tf_if_tbl.c',
'hcapi/hcapi_cfa_p4.c',
diff --git a/drivers/net/bnxt/tf_core/Makefile b/drivers/net/bnxt/tf_core/Makefile
index 9ba60e1c2..1924bef02 100644
--- a/drivers/net/bnxt/tf_core/Makefile
+++ b/drivers/net/bnxt/tf_core/Makefile
@@ -25,6 +25,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += tf_core/tf_shadow_tbl.c
SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += tf_core/tf_shadow_tcam.c
SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += tf_core/tf_tcam.c
SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += tf_core/tf_util.c
+SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += tf_core/tf_if_tbl.c
SYMLINK-$(CONFIG_RTE_LIBRTE_BNXT_PMD)-include += tf_core/tf_core.h
SYMLINK-$(CONFIG_RTE_LIBRTE_BNXT_PMD)-include += tf_core/tf_project.h
@@ -33,3 +34,4 @@ SYMLINK-$(CONFIG_RTE_LIBRTE_BNXT_PMD)-include += tf_core/tf_identifier.h
SYMLINK-$(CONFIG_RTE_LIBRTE_BNXT_PMD)-include += tf_core/tf_tbl.h
SYMLINK-$(CONFIG_RTE_LIBRTE_BNXT_PMD)-include += tf_core/stack.h
SYMLINK-$(CONFIG_RTE_LIBRTE_BNXT_PMD)-include += tf_core/tf_tcam.h
+SYMLINK-$(CONFIG_RTE_LIBRTE_BNXT_PMD)-include += tf_core/tf_if_tbl.h
diff --git a/drivers/net/bnxt/tf_core/hwrm_tf.h b/drivers/net/bnxt/tf_core/hwrm_tf.h
index 26836e488..32f152314 100644
--- a/drivers/net/bnxt/tf_core/hwrm_tf.h
+++ b/drivers/net/bnxt/tf_core/hwrm_tf.h
@@ -16,7 +16,9 @@ typedef enum tf_subtype {
HWRM_TFT_REG_GET = 821,
HWRM_TFT_REG_SET = 822,
HWRM_TFT_TBL_TYPE_BULK_GET = 825,
- TF_SUBTYPE_LAST = HWRM_TFT_TBL_TYPE_BULK_GET,
+ HWRM_TFT_IF_TBL_SET = 827,
+ HWRM_TFT_IF_TBL_GET = 828,
+ TF_SUBTYPE_LAST = HWRM_TFT_IF_TBL_GET,
} tf_subtype_t;
/* Request and Response compile time checking */
@@ -46,7 +48,17 @@ typedef enum tf_subtype {
/* WC DMA Address Type */
#define TF_DEV_DATA_TYPE_TF_WC_DMA_ADDR 0x30d0UL
/* WC Entry */
-#define TF_DEV_DATA_TYPE_TF_WC_ENTRY 0x30d1UL
+#define TF_DEV_DATA_TYPE_TF_WC_ENTRY 0x30d1UL
+/* SPIF DFLT L2 CTXT Entry */
+#define TF_DEV_DATA_TYPE_SPIF_DFLT_L2_CTXT 0x3131UL
+/* PARIF DFLT ACT REC PTR Entry */
+#define TF_DEV_DATA_TYPE_PARIF_DFLT_ACT_REC 0x3132UL
+/* PARIF ERR DFLT ACT REC PTR Entry */
+#define TF_DEV_DATA_TYPE_PARIF_ERR_DFLT_ACT_REC 0x3133UL
+/* ILT Entry */
+#define TF_DEV_DATA_TYPE_ILT 0x3134UL
+/* VNIC SVIF entry */
+#define TF_DEV_DATA_TYPE_VNIC_SVIF 0x3135UL
/* Action Data */
#define TF_DEV_DATA_TYPE_TF_ACTION_DATA 0x3170UL
#define TF_DEV_DATA_TYPE_LAST TF_DEV_DATA_TYPE_TF_ACTION_DATA
@@ -56,6 +68,9 @@ typedef enum tf_subtype {
struct tf_tbl_type_bulk_get_input;
struct tf_tbl_type_bulk_get_output;
+struct tf_if_tbl_set_input;
+struct tf_if_tbl_get_input;
+struct tf_if_tbl_get_output;
/* Input params for table type get */
typedef struct tf_tbl_type_bulk_get_input {
@@ -85,4 +100,48 @@ typedef struct tf_tbl_type_bulk_get_output {
uint16_t size;
} tf_tbl_type_bulk_get_output_t, *ptf_tbl_type_bulk_get_output_t;
+/* Input params for if tbl set */
+typedef struct tf_if_tbl_set_input {
+ /* Session Id */
+ uint32_t fw_session_id;
+ /* flags */
+ uint16_t flags;
+ /* When set to 0, indicates the query apply to RX */
+#define TF_IF_TBL_SET_INPUT_FLAGS_DIR_RX (0x0)
+ /* When set to 1, indicates the query apply to TX */
+#define TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX (0x1)
+ /* if table type */
+ uint16_t tf_if_tbl_type;
+ /* index of table entry */
+ uint16_t idx;
+ /* size of the data write to table entry */
+ uint32_t data_sz_in_bytes;
+ /* data to write into table entry */
+ uint32_t data[2];
+} tf_if_tbl_set_input_t, *ptf_if_tbl_set_input_t;
+
+/* Input params for if tbl get */
+typedef struct tf_if_tbl_get_input {
+ /* Session Id */
+ uint32_t fw_session_id;
+ /* flags */
+ uint16_t flags;
+ /* When set to 0, indicates the query apply to RX */
+#define TF_IF_TBL_GET_INPUT_FLAGS_DIR_RX (0x0)
+ /* When set to 1, indicates the query apply to TX */
+#define TF_IF_TBL_GET_INPUT_FLAGS_DIR_TX (0x1)
+ /* if table type */
+ uint16_t tf_if_tbl_type;
+ /* size of the data get from table entry */
+ uint32_t data_sz_in_bytes;
+ /* index of table entry */
+ uint16_t idx;
+} tf_if_tbl_get_input_t, *ptf_if_tbl_get_input_t;
+
+/* output params for if tbl get */
+typedef struct tf_if_tbl_get_output {
+ /* Value read from table entry */
+ uint32_t data[2];
+} tf_if_tbl_get_output_t, *ptf_if_tbl_get_output_t;
+
#endif /* _HWRM_TF_H_ */
diff --git a/drivers/net/bnxt/tf_core/tf_core.c b/drivers/net/bnxt/tf_core/tf_core.c
index 45accb0ab..a980a2056 100644
--- a/drivers/net/bnxt/tf_core/tf_core.c
+++ b/drivers/net/bnxt/tf_core/tf_core.c
@@ -1039,3 +1039,119 @@ tf_free_tbl_scope(struct tf *tfp,
return rc;
}
+
+int
+tf_set_if_tbl_entry(struct tf *tfp,
+ struct tf_set_if_tbl_entry_parms *parms)
+{
+ int rc;
+ struct tf_session *tfs;
+ struct tf_dev_info *dev;
+ struct tf_if_tbl_set_parms sparms = { 0 };
+
+ TF_CHECK_PARMS2(tfp, parms);
+
+ /* Retrieve the session information */
+ rc = tf_session_get_session(tfp, &tfs);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup session, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ /* Retrieve the device information */
+ rc = tf_session_get_device(tfs, &dev);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup device, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ if (dev->ops->tf_dev_set_if_tbl == NULL) {
+ rc = -EOPNOTSUPP;
+ TFP_DRV_LOG(ERR,
+ "%s: Operation not supported, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ sparms.dir = parms->dir;
+ sparms.type = parms->type;
+ sparms.idx = parms->idx;
+ sparms.data_sz_in_bytes = parms->data_sz_in_bytes;
+ sparms.data = parms->data;
+
+ rc = dev->ops->tf_dev_set_if_tbl(tfp, &sparms);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: If_tbl set failed, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ return 0;
+}
+
+int
+tf_get_if_tbl_entry(struct tf *tfp,
+ struct tf_get_if_tbl_entry_parms *parms)
+{
+ int rc;
+ struct tf_session *tfs;
+ struct tf_dev_info *dev;
+ struct tf_if_tbl_get_parms gparms = { 0 };
+
+ TF_CHECK_PARMS2(tfp, parms);
+
+ /* Retrieve the session information */
+ rc = tf_session_get_session(tfp, &tfs);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup session, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ /* Retrieve the device information */
+ rc = tf_session_get_device(tfs, &dev);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup device, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ if (dev->ops->tf_dev_get_if_tbl == NULL) {
+ rc = -EOPNOTSUPP;
+ TFP_DRV_LOG(ERR,
+ "%s: Operation not supported, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ gparms.dir = parms->dir;
+ gparms.type = parms->type;
+ gparms.idx = parms->idx;
+ gparms.data_sz_in_bytes = parms->data_sz_in_bytes;
+ gparms.data = parms->data;
+
+ rc = dev->ops->tf_dev_get_if_tbl(tfp, &gparms);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: If_tbl get failed, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ return 0;
+}
diff --git a/drivers/net/bnxt/tf_core/tf_core.h b/drivers/net/bnxt/tf_core/tf_core.h
index e898f19a0..e3d46bd45 100644
--- a/drivers/net/bnxt/tf_core/tf_core.h
+++ b/drivers/net/bnxt/tf_core/tf_core.h
@@ -1556,4 +1556,108 @@ int tf_delete_em_entry(struct tf *tfp,
int tf_search_em_entry(struct tf *tfp,
struct tf_search_em_entry_parms *parms);
+/**
+ * @page if_tbl Interface Table Access
+ *
+ * @ref tf_set_if_tbl_entry
+ *
+ * @ref tf_get_if_tbl_entry
+ *
+ * @ref tf_restore_if_tbl_entry
+ */
+/**
+ * Enumeration of TruFlow interface table types.
+ */
+enum tf_if_tbl_type {
+ /** Default Profile L2 Context Entry */
+ TF_IF_TBL_TYPE_PROF_SPIF_DFLT_L2_CTXT,
+ /** Default Profile TCAM/Lookup Action Record Pointer Table */
+ TF_IF_TBL_TYPE_PROF_PARIF_DFLT_ACT_REC_PTR,
+ /** Error Profile TCAM Miss Action Record Pointer Table */
+ TF_IF_TBL_TYPE_PROF_PARIF_ERR_ACT_REC_PTR,
+ /** Default Error Profile TCAM Miss Action Record Pointer Table */
+ TF_IF_TBL_TYPE_LKUP_PARIF_DFLT_ACT_REC_PTR,
+ /** SR2 Ingress lookup table */
+ TF_IF_TBL_TYPE_ILT,
+ /** SR2 VNIC/SVIF Table */
+ TF_IF_TBL_TYPE_VNIC_SVIF,
+ TF_IF_TBL_TYPE_MAX
+};
+
+/**
+ * tf_set_if_tbl_entry parameter definition
+ */
+struct tf_set_if_tbl_entry_parms {
+ /**
+ * [in] Receive or transmit direction
+ */
+ enum tf_dir dir;
+ /**
+ * [in] Type of object to set
+ */
+ enum tf_if_tbl_type type;
+ /**
+ * [in] Entry data
+ */
+ uint32_t *data;
+ /**
+ * [in] Entry size
+ */
+ uint16_t data_sz_in_bytes;
+ /**
+ * [in] Interface to write
+ */
+ uint32_t idx;
+};
+
+/**
+ * set interface table entry
+ *
+ * Used to set an interface table. This API is used for managing tables indexed
+ * by SVIF/SPIF/PARIF interfaces. In current implementation only the value is
+ * set.
+ * Returns success or failure code.
+ */
+int tf_set_if_tbl_entry(struct tf *tfp,
+ struct tf_set_if_tbl_entry_parms *parms);
+
+/**
+ * tf_get_if_tbl_entry parameter definition
+ */
+struct tf_get_if_tbl_entry_parms {
+ /**
+ * [in] Receive or transmit direction
+ */
+ enum tf_dir dir;
+ /**
+ * [in] Type of table to get
+ */
+ enum tf_if_tbl_type type;
+ /**
+ * [out] Entry data
+ */
+ uint32_t *data;
+ /**
+ * [in] Entry size
+ */
+ uint16_t data_sz_in_bytes;
+ /**
+ * [in] Entry index to read
+ */
+ uint32_t idx;
+};
+
+/**
+ * get interface table entry
+ *
+ * Used to retrieve an interface table entry.
+ *
+ * Reads the interface table entry value
+ *
+ * Returns success or failure code. Failure will be returned if the
+ * provided data buffer is too small for the data type requested.
+ */
+int tf_get_if_tbl_entry(struct tf *tfp,
+ struct tf_get_if_tbl_entry_parms *parms);
+
#endif /* _TF_CORE_H_ */
diff --git a/drivers/net/bnxt/tf_core/tf_device.c b/drivers/net/bnxt/tf_core/tf_device.c
index 20b0c5948..a3073c826 100644
--- a/drivers/net/bnxt/tf_core/tf_device.c
+++ b/drivers/net/bnxt/tf_core/tf_device.c
@@ -44,6 +44,7 @@ tf_dev_bind_p4(struct tf *tfp,
struct tf_tbl_cfg_parms tbl_cfg;
struct tf_tcam_cfg_parms tcam_cfg;
struct tf_em_cfg_parms em_cfg;
+ struct tf_if_tbl_cfg_parms if_tbl_cfg;
dev_handle->type = TF_DEVICE_TYPE_WH;
/* Initial function initialization */
@@ -114,6 +115,19 @@ tf_dev_bind_p4(struct tf *tfp,
goto fail;
}
+ /*
+ * IF_TBL
+ */
+ if_tbl_cfg.num_elements = TF_IF_TBL_TYPE_MAX;
+ if_tbl_cfg.cfg = tf_if_tbl_p4;
+ if_tbl_cfg.shadow_copy = shadow_copy;
+ rc = tf_if_tbl_bind(tfp, &if_tbl_cfg);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "IF Table initialization failure\n");
+ goto fail;
+ }
+
/* Final function initialization */
dev_handle->ops = &tf_dev_ops_p4;
@@ -186,6 +200,13 @@ tf_dev_unbind_p4(struct tf *tfp)
fail = true;
}
+ rc = tf_if_tbl_unbind(tfp);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "Device unbind failed, IF Table Type\n");
+ fail = true;
+ }
+
if (fail)
return -1;
diff --git a/drivers/net/bnxt/tf_core/tf_device.h b/drivers/net/bnxt/tf_core/tf_device.h
index 58b7a4ab2..5a0943ad7 100644
--- a/drivers/net/bnxt/tf_core/tf_device.h
+++ b/drivers/net/bnxt/tf_core/tf_device.h
@@ -10,6 +10,7 @@
#include "tf_identifier.h"
#include "tf_tbl.h"
#include "tf_tcam.h"
+#include "tf_if_tbl.h"
struct tf;
struct tf_session;
@@ -567,6 +568,44 @@ struct tf_dev_ops {
*/
int (*tf_dev_free_tbl_scope)(struct tf *tfp,
struct tf_free_tbl_scope_parms *parms);
+
+ /**
+ * Sets the specified interface table type element.
+ *
+ * This API sets the specified element data by invoking the
+ * firmware.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to interface table set parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_set_if_tbl)(struct tf *tfp,
+ struct tf_if_tbl_set_parms *parms);
+
+ /**
+ * Retrieves the specified interface table type element.
+ *
+ * This API retrieves the specified element data by invoking the
+ * firmware.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to table get parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_if_tbl)(struct tf *tfp,
+ struct tf_if_tbl_get_parms *parms);
};
/**
diff --git a/drivers/net/bnxt/tf_core/tf_device_p4.c b/drivers/net/bnxt/tf_core/tf_device_p4.c
index 9a3230787..2dc34b853 100644
--- a/drivers/net/bnxt/tf_core/tf_device_p4.c
+++ b/drivers/net/bnxt/tf_core/tf_device_p4.c
@@ -11,6 +11,7 @@
#include "tf_tbl.h"
#include "tf_tcam.h"
#include "tf_em.h"
+#include "tf_if_tbl.h"
/**
* Device specific function that retrieves the MAX number of HCAPI
@@ -105,6 +106,8 @@ const struct tf_dev_ops tf_dev_ops_p4_init = {
.tf_dev_delete_ext_em_entry = NULL,
.tf_dev_alloc_tbl_scope = NULL,
.tf_dev_free_tbl_scope = NULL,
+ .tf_dev_set_if_tbl = NULL,
+ .tf_dev_get_if_tbl = NULL,
};
/**
@@ -135,4 +138,6 @@ const struct tf_dev_ops tf_dev_ops_p4 = {
.tf_dev_delete_ext_em_entry = tf_em_delete_ext_entry,
.tf_dev_alloc_tbl_scope = tf_em_ext_common_alloc,
.tf_dev_free_tbl_scope = tf_em_ext_common_free,
+ .tf_dev_set_if_tbl = tf_if_tbl_set,
+ .tf_dev_get_if_tbl = tf_if_tbl_get,
};
diff --git a/drivers/net/bnxt/tf_core/tf_device_p4.h b/drivers/net/bnxt/tf_core/tf_device_p4.h
index 298e100f3..3b03a7c4e 100644
--- a/drivers/net/bnxt/tf_core/tf_device_p4.h
+++ b/drivers/net/bnxt/tf_core/tf_device_p4.h
@@ -10,6 +10,7 @@
#include "tf_core.h"
#include "tf_rm.h"
+#include "tf_if_tbl.h"
struct tf_rm_element_cfg tf_ident_p4[TF_IDENT_TYPE_MAX] = {
{ TF_RM_ELEM_CFG_HCAPI_BA, CFA_RESOURCE_TYPE_P4_L2_CTXT_REMAP },
@@ -86,4 +87,13 @@ struct tf_rm_element_cfg tf_em_int_p4[TF_EM_TBL_TYPE_MAX] = {
{ TF_RM_ELEM_CFG_NULL, CFA_RESOURCE_TYPE_INVALID },
};
+struct tf_if_tbl_cfg tf_if_tbl_p4[TF_IF_TBL_TYPE_MAX] = {
+ { TF_IF_TBL_CFG, CFA_P4_TBL_PROF_SPIF_DFLT_L2CTXT },
+ { TF_IF_TBL_CFG, CFA_P4_TBL_PROF_PARIF_DFLT_ACT_REC_PTR },
+ { TF_IF_TBL_CFG, CFA_P4_TBL_PROF_PARIF_ERR_ACT_REC_PTR },
+ { TF_IF_TBL_CFG, CFA_P4_TBL_LKUP_PARIF_DFLT_ACT_REC_PTR },
+ { TF_IF_TBL_CFG_NULL, CFA_IF_TBL_TYPE_INVALID },
+ { TF_IF_TBL_CFG_NULL, CFA_IF_TBL_TYPE_INVALID }
+};
+
#endif /* _TF_DEVICE_P4_H_ */
diff --git a/drivers/net/bnxt/tf_core/tf_em_common.c b/drivers/net/bnxt/tf_core/tf_em_common.c
index 39a8412b3..23a7fc9c2 100644
--- a/drivers/net/bnxt/tf_core/tf_em_common.c
+++ b/drivers/net/bnxt/tf_core/tf_em_common.c
@@ -337,11 +337,10 @@ tf_em_ext_common_bind(struct tf *tfp,
db_exists = 1;
}
- if (db_exists) {
- mem_type = parms->mem_type;
+ if (db_exists)
init = 1;
- }
+ mem_type = parms->mem_type;
return 0;
}
diff --git a/drivers/net/bnxt/tf_core/tf_em_host.c b/drivers/net/bnxt/tf_core/tf_em_host.c
index d7c147a15..2626a59fe 100644
--- a/drivers/net/bnxt/tf_core/tf_em_host.c
+++ b/drivers/net/bnxt/tf_core/tf_em_host.c
@@ -831,7 +831,8 @@ tf_insert_eem_entry(struct tf_tbl_scope_cb *tbl_scope_cb,
op.opcode = HCAPI_CFA_HWOPS_ADD;
key_tbl.base0 = (uint8_t *)
&tbl_scope_cb->em_ctx_info[parms->dir].em_tables[TF_KEY0_TABLE];
- key_obj.offset = (index * TF_EM_KEY_RECORD_SIZE) % TF_EM_PAGE_SIZE;
+ key_tbl.page_size = TF_EM_PAGE_SIZE;
+ key_obj.offset = index * TF_EM_KEY_RECORD_SIZE;
key_obj.data = (uint8_t *)&key_entry;
key_obj.size = TF_EM_KEY_RECORD_SIZE;
@@ -847,8 +848,7 @@ tf_insert_eem_entry(struct tf_tbl_scope_cb *tbl_scope_cb,
key_tbl.base0 = (uint8_t *)
&tbl_scope_cb->em_ctx_info[parms->dir].em_tables[TF_KEY1_TABLE];
- key_obj.offset =
- (index * TF_EM_KEY_RECORD_SIZE) % TF_EM_PAGE_SIZE;
+ key_obj.offset = index * TF_EM_KEY_RECORD_SIZE;
rc = hcapi_cfa_key_hw_op(&op,
&key_tbl,
@@ -914,7 +914,8 @@ tf_delete_eem_entry(struct tf_tbl_scope_cb *tbl_scope_cb,
&tbl_scope_cb->em_ctx_info[parms->dir].em_tables[(hash_type == 0 ?
TF_KEY0_TABLE :
TF_KEY1_TABLE)];
- key_obj.offset = (index * TF_EM_KEY_RECORD_SIZE) % TF_EM_PAGE_SIZE;
+ key_tbl.page_size = TF_EM_PAGE_SIZE;
+ key_obj.offset = index * TF_EM_KEY_RECORD_SIZE;
key_obj.data = NULL;
key_obj.size = TF_EM_KEY_RECORD_SIZE;
@@ -1195,7 +1196,8 @@ int tf_tbl_ext_host_set(struct tf *tfp,
op.opcode = HCAPI_CFA_HWOPS_PUT;
key_tbl.base0 =
(uint8_t *)&tbl_scope_cb->em_ctx_info[parms->dir].em_tables[TF_RECORD_TABLE];
- key_obj.offset = parms->idx % TF_EM_PAGE_SIZE;
+ key_tbl.page_size = TF_EM_PAGE_SIZE;
+ key_obj.offset = parms->idx;
key_obj.data = parms->data;
key_obj.size = parms->data_sz_in_bytes;
diff --git a/drivers/net/bnxt/tf_core/tf_identifier.c b/drivers/net/bnxt/tf_core/tf_identifier.c
index 2cc43b40f..90aeaa468 100644
--- a/drivers/net/bnxt/tf_core/tf_identifier.c
+++ b/drivers/net/bnxt/tf_core/tf_identifier.c
@@ -68,7 +68,7 @@ tf_ident_bind(struct tf *tfp,
int
tf_ident_unbind(struct tf *tfp)
{
- int rc;
+ int rc = 0;
int i;
struct tf_rm_free_db_parms fparms = { 0 };
@@ -89,7 +89,6 @@ tf_ident_unbind(struct tf *tfp)
TFP_DRV_LOG(ERR,
"rm free failed on unbind\n");
}
-
ident_db[i] = NULL;
}
diff --git a/drivers/net/bnxt/tf_core/tf_if_tbl.c b/drivers/net/bnxt/tf_core/tf_if_tbl.c
new file mode 100644
index 000000000..dc73ba2d0
--- /dev/null
+++ b/drivers/net/bnxt/tf_core/tf_if_tbl.c
@@ -0,0 +1,178 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019-2020 Broadcom
+ * All rights reserved.
+ */
+
+#include <rte_common.h>
+
+#include "tf_if_tbl.h"
+#include "tf_common.h"
+#include "tf_rm.h"
+#include "tf_util.h"
+#include "tf_msg.h"
+#include "tfp.h"
+
+struct tf;
+
+/**
+ * IF Table DBs.
+ */
+static void *if_tbl_db[TF_DIR_MAX];
+
+/**
+ * IF Table Shadow DBs
+ */
+/* static void *shadow_if_tbl_db[TF_DIR_MAX]; */
+
+/**
+ * Init flag, set on bind and cleared on unbind
+ */
+static uint8_t init;
+
+/**
+ * Shadow init flag, set on bind and cleared on unbind
+ */
+/* static uint8_t shadow_init; */
+
+/**
+ * Convert if_tbl_type to hwrm type.
+ *
+ * [in] if_tbl_type
+ * Interface table type
+ *
+ * [out] hwrm_type
+ * HWRM device data type
+ *
+ * Returns:
+ * 0 - Success
+ * -EOPNOTSUPP - Type not supported
+ */
+static int
+tf_if_tbl_get_hcapi_type(struct tf_if_tbl_get_hcapi_parms *parms)
+{
+ struct tf_if_tbl_cfg *tbl_cfg;
+ enum tf_if_tbl_cfg_type cfg_type;
+
+ tbl_cfg = (struct tf_if_tbl_cfg *)parms->tbl_db;
+ cfg_type = tbl_cfg[parms->db_index].cfg_type;
+
+ if (cfg_type != TF_IF_TBL_CFG)
+ return -ENOTSUP;
+
+ *parms->hcapi_type = tbl_cfg[parms->db_index].hcapi_type;
+
+ return 0;
+}
+
+int
+tf_if_tbl_bind(struct tf *tfp __rte_unused,
+ struct tf_if_tbl_cfg_parms *parms)
+{
+ TF_CHECK_PARMS2(tfp, parms);
+
+ if (init) {
+ TFP_DRV_LOG(ERR,
+ "IF TBL DB already initialized\n");
+ return -EINVAL;
+ }
+
+ if_tbl_db[TF_DIR_RX] = parms->cfg;
+ if_tbl_db[TF_DIR_TX] = parms->cfg;
+
+ init = 1;
+
+ TFP_DRV_LOG(INFO,
+ "Table Type - initialized\n");
+
+ return 0;
+}
+
+int
+tf_if_tbl_unbind(struct tf *tfp __rte_unused)
+{
+ /* Bail if nothing has been initialized */
+ if (!init) {
+ TFP_DRV_LOG(INFO,
+ "No Table DBs created\n");
+ return 0;
+ }
+
+ if_tbl_db[TF_DIR_RX] = NULL;
+ if_tbl_db[TF_DIR_TX] = NULL;
+ init = 0;
+
+ return 0;
+}
+
+int
+tf_if_tbl_set(struct tf *tfp,
+ struct tf_if_tbl_set_parms *parms)
+{
+ int rc;
+ struct tf_if_tbl_get_hcapi_parms hparms;
+
+ TF_CHECK_PARMS3(tfp, parms, parms->data);
+
+ if (!init) {
+ TFP_DRV_LOG(ERR,
+ "%s: No Table DBs created\n",
+ tf_dir_2_str(parms->dir));
+ return -EINVAL;
+ }
+
+ /* Convert TF type to HCAPI type */
+ hparms.tbl_db = if_tbl_db[parms->dir];
+ hparms.db_index = parms->type;
+ hparms.hcapi_type = &parms->hcapi_type;
+ rc = tf_if_tbl_get_hcapi_type(&hparms);
+ if (rc)
+ return rc;
+
+ rc = tf_msg_set_if_tbl_entry(tfp, parms);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s, If Tbl set failed, type:%d, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ parms->type,
+ strerror(-rc));
+ }
+
+ return 0;
+}
+
+int
+tf_if_tbl_get(struct tf *tfp,
+ struct tf_if_tbl_get_parms *parms)
+{
+ int rc;
+ struct tf_if_tbl_get_hcapi_parms hparms;
+
+ TF_CHECK_PARMS3(tfp, parms, parms->data);
+
+ if (!init) {
+ TFP_DRV_LOG(ERR,
+ "%s: No Table DBs created\n",
+ tf_dir_2_str(parms->dir));
+ return -EINVAL;
+ }
+
+ /* Convert TF type to HCAPI type */
+ hparms.tbl_db = if_tbl_db[parms->dir];
+ hparms.db_index = parms->type;
+ hparms.hcapi_type = &parms->hcapi_type;
+ rc = tf_if_tbl_get_hcapi_type(&hparms);
+ if (rc)
+ return rc;
+
+ /* Get the entry */
+ rc = tf_msg_get_if_tbl_entry(tfp, parms);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s, If Tbl get failed, type:%d, rc:%s\n",
+ tf_dir_2_str(parms->dir),
+ parms->type,
+ strerror(-rc));
+ }
+
+ return 0;
+}
diff --git a/drivers/net/bnxt/tf_core/tf_if_tbl.h b/drivers/net/bnxt/tf_core/tf_if_tbl.h
new file mode 100644
index 000000000..54d4c37f5
--- /dev/null
+++ b/drivers/net/bnxt/tf_core/tf_if_tbl.h
@@ -0,0 +1,236 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019-2020 Broadcom
+ * All rights reserved.
+ */
+
+#ifndef TF_IF_TBL_TYPE_H_
+#define TF_IF_TBL_TYPE_H_
+
+#include "tf_core.h"
+#include "stack.h"
+
+/*
+ * This is the constant used to define invalid CFA
+ * types across all devices.
+ */
+#define CFA_IF_TBL_TYPE_INVALID 65535
+
+struct tf;
+
+/**
+ * The IF Table module provides processing of Internal TF interface table types.
+ */
+
+/**
+ * IF table configuration enumeration.
+ */
+enum tf_if_tbl_cfg_type {
+ /**
+ * No configuration
+ */
+ TF_IF_TBL_CFG_NULL,
+ /**
+ * HCAPI 'controlled'
+ */
+ TF_IF_TBL_CFG,
+};
+
+/**
+ * IF table configuration structure, used by the Device to configure
+ * how an individual TF type is configured in regard to the HCAPI type.
+ */
+struct tf_if_tbl_cfg {
+ /**
+ * IF table config controls how the DB for that element is
+ * processed.
+ */
+ enum tf_if_tbl_cfg_type cfg_type;
+
+ /**
+ * HCAPI Type for the element. Used for TF to HCAPI type
+ * conversion.
+ */
+ uint16_t hcapi_type;
+};
+
+/**
+ * Get HCAPI type parameters for a single element
+ */
+struct tf_if_tbl_get_hcapi_parms {
+ /**
+ * [in] IF Tbl DB Handle
+ */
+ void *tbl_db;
+ /**
+ * [in] DB Index, indicates which DB entry to perform the
+ * action on.
+ */
+ uint16_t db_index;
+ /**
+ * [out] Pointer to the hcapi type for the specified db_index
+ */
+ uint16_t *hcapi_type;
+};
+
+/**
+ * Table configuration parameters
+ */
+struct tf_if_tbl_cfg_parms {
+ /**
+ * Number of table types in each of the configuration arrays
+ */
+ uint16_t num_elements;
+ /**
+ * Table Type element configuration array
+ */
+ struct tf_if_tbl_cfg *cfg;
+ /**
+ * Shadow table type configuration array
+ */
+ struct tf_shadow_if_tbl_cfg *shadow_cfg;
+ /**
+ * Boolean controlling the request shadow copy.
+ */
+ bool shadow_copy;
+};
+
+/**
+ * IF Table set parameters
+ */
+struct tf_if_tbl_set_parms {
+ /**
+ * [in] Receive or transmit direction
+ */
+ enum tf_dir dir;
+ /**
+ * [in] Type of object to set
+ */
+ enum tf_if_tbl_type type;
+ /**
+ * [in] Type of HCAPI
+ */
+ uint16_t hcapi_type;
+ /**
+ * [in] Entry data
+ */
+ uint32_t *data;
+ /**
+ * [in] Entry size
+ */
+ uint16_t data_sz_in_bytes;
+ /**
+ * [in] Entry index to write to
+ */
+ uint32_t idx;
+};
+
+/**
+ * IF Table get parameters
+ */
+struct tf_if_tbl_get_parms {
+ /**
+ * [in] Receive or transmit direction
+ */
+ enum tf_dir dir;
+ /**
+ * [in] Type of object to get
+ */
+ enum tf_if_tbl_type type;
+ /**
+ * [in] Type of HCAPI
+ */
+ uint16_t hcapi_type;
+ /**
+ * [out] Entry data
+ */
+ uint32_t *data;
+ /**
+ * [out] Entry size
+ */
+ uint16_t data_sz_in_bytes;
+ /**
+ * [in] Entry index to read
+ */
+ uint32_t idx;
+};
+
+/**
+ * @page if tbl Table
+ *
+ * @ref tf_if_tbl_bind
+ *
+ * @ref tf_if_tbl_unbind
+ *
+ * @ref tf_tbl_set
+ *
+ * @ref tf_tbl_get
+ *
+ * @ref tf_tbl_restore
+ */
+/**
+ * Initializes the Table module with the requested DBs. Must be
+ * invoked as the first thing before any of the access functions.
+ *
+ * [in] tfp
+ * Pointer to TF handle, used for HCAPI communication
+ *
+ * [in] parms
+ * Pointer to Table configuration parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+int tf_if_tbl_bind(struct tf *tfp,
+ struct tf_if_tbl_cfg_parms *parms);
+
+/**
+ * Cleans up the private DBs and releases all the data.
+ *
+ * [in] tfp
+ * Pointer to TF handle, used for HCAPI communication
+ *
+ * [in] parms
+ * Pointer to parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+int tf_if_tbl_unbind(struct tf *tfp);
+
+/**
+ * Configures the requested element by sending a firmware request which
+ * then installs it into the device internal structures.
+ *
+ * [in] tfp
+ * Pointer to TF handle, used for HCAPI communication
+ *
+ * [in] parms
+ * Pointer to Interface Table set parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+int tf_if_tbl_set(struct tf *tfp,
+ struct tf_if_tbl_set_parms *parms);
+
+/**
+ * Retrieves the requested element by sending a firmware request to get
+ * the element.
+ *
+ * [in] tfp
+ * Pointer to TF handle, used for HCAPI communication
+ *
+ * [in] parms
+ * Pointer to Table get parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+int tf_if_tbl_get(struct tf *tfp,
+ struct tf_if_tbl_get_parms *parms);
+
+#endif /* TF_IF_TBL_TYPE_H */
diff --git a/drivers/net/bnxt/tf_core/tf_msg.c b/drivers/net/bnxt/tf_core/tf_msg.c
index 659065de3..6600a14c8 100644
--- a/drivers/net/bnxt/tf_core/tf_msg.c
+++ b/drivers/net/bnxt/tf_core/tf_msg.c
@@ -125,12 +125,19 @@ tf_msg_session_close(struct tf *tfp)
int rc;
struct hwrm_tf_session_close_input req = { 0 };
struct hwrm_tf_session_close_output resp = { 0 };
- struct tf_session *tfs = (struct tf_session *)(tfp->session->core_data);
struct tfp_send_msg_parms parms = { 0 };
+ uint8_t fw_session_id;
+
+ rc = tf_session_get_fw_session_id(tfp, &fw_session_id);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "Unable to lookup FW id, rc:%s\n",
+ strerror(-rc));
+ return rc;
+ }
/* Populate the request */
- req.fw_session_id =
- tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
parms.tf_type = HWRM_TF_SESSION_CLOSE;
parms.req_data = (uint32_t *)&req;
@@ -150,12 +157,19 @@ tf_msg_session_qcfg(struct tf *tfp)
int rc;
struct hwrm_tf_session_qcfg_input req = { 0 };
struct hwrm_tf_session_qcfg_output resp = { 0 };
- struct tf_session *tfs = (struct tf_session *)(tfp->session->core_data);
struct tfp_send_msg_parms parms = { 0 };
+ uint8_t fw_session_id;
+
+ rc = tf_session_get_fw_session_id(tfp, &fw_session_id);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "Unable to lookup FW id, rc:%s\n",
+ strerror(-rc));
+ return rc;
+ }
/* Populate the request */
- req.fw_session_id =
- tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
parms.tf_type = HWRM_TF_SESSION_QCFG,
parms.req_data = (uint32_t *)&req;
@@ -448,13 +462,22 @@ tf_msg_insert_em_internal_entry(struct tf *tfp,
struct tfp_send_msg_parms parms = { 0 };
struct hwrm_tf_em_insert_input req = { 0 };
struct hwrm_tf_em_insert_output resp = { 0 };
- struct tf_session *tfs = (struct tf_session *)(tfp->session->core_data);
struct tf_em_64b_entry *em_result =
(struct tf_em_64b_entry *)em_parms->em_record;
uint16_t flags;
+ uint8_t fw_session_id;
- req.fw_session_id =
- tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ rc = tf_session_get_fw_session_id(tfp, &fw_session_id);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Unable to lookup FW id, rc:%s\n",
+ tf_dir_2_str(em_parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ /* Populate the request */
+ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
tfp_memcpy(req.em_key,
em_parms->key,
((em_parms->key_sz_in_bits + 7) / 8));
@@ -498,11 +521,19 @@ tf_msg_delete_em_entry(struct tf *tfp,
struct hwrm_tf_em_delete_input req = { 0 };
struct hwrm_tf_em_delete_output resp = { 0 };
uint16_t flags;
- struct tf_session *tfs =
- (struct tf_session *)(tfp->session->core_data);
+ uint8_t fw_session_id;
- req.fw_session_id =
- tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ rc = tf_session_get_fw_session_id(tfp, &fw_session_id);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Unable to lookup FW id, rc:%s\n",
+ tf_dir_2_str(em_parms->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ /* Populate the request */
+ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
flags = (em_parms->dir == TF_DIR_TX ?
HWRM_TF_EM_DELETE_INPUT_FLAGS_DIR_TX :
@@ -789,21 +820,19 @@ tf_msg_set_tbl_entry(struct tf *tfp,
struct hwrm_tf_tbl_type_set_input req = { 0 };
struct hwrm_tf_tbl_type_set_output resp = { 0 };
struct tfp_send_msg_parms parms = { 0 };
- struct tf_session *tfs;
+ uint8_t fw_session_id;
- /* Retrieve the session information */
- rc = tf_session_get_session(tfp, &tfs);
+ rc = tf_session_get_fw_session_id(tfp, &fw_session_id);
if (rc) {
TFP_DRV_LOG(ERR,
- "%s: Failed to lookup session, rc:%s\n",
+ "%s: Unable to lookup FW id, rc:%s\n",
tf_dir_2_str(dir),
strerror(-rc));
return rc;
}
/* Populate the request */
- req.fw_session_id =
- tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
req.flags = tfp_cpu_to_le_16(dir);
req.type = tfp_cpu_to_le_32(hcapi_type);
req.size = tfp_cpu_to_le_16(size);
@@ -840,21 +869,19 @@ tf_msg_get_tbl_entry(struct tf *tfp,
struct hwrm_tf_tbl_type_get_input req = { 0 };
struct hwrm_tf_tbl_type_get_output resp = { 0 };
struct tfp_send_msg_parms parms = { 0 };
- struct tf_session *tfs;
+ uint8_t fw_session_id;
- /* Retrieve the session information */
- rc = tf_session_get_session(tfp, &tfs);
+ rc = tf_session_get_fw_session_id(tfp, &fw_session_id);
if (rc) {
TFP_DRV_LOG(ERR,
- "%s: Failed to lookup session, rc:%s\n",
+ "%s: Unable to lookup FW id, rc:%s\n",
tf_dir_2_str(dir),
strerror(-rc));
return rc;
}
/* Populate the request */
- req.fw_session_id =
- tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
req.flags = tfp_cpu_to_le_16(dir);
req.type = tfp_cpu_to_le_32(hcapi_type);
req.index = tfp_cpu_to_le_32(index);
@@ -897,22 +924,20 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp,
struct tfp_send_msg_parms parms = { 0 };
struct tf_tbl_type_bulk_get_input req = { 0 };
struct tf_tbl_type_bulk_get_output resp = { 0 };
- struct tf_session *tfs;
int data_size = 0;
+ uint8_t fw_session_id;
- /* Retrieve the session information */
- rc = tf_session_get_session(tfp, &tfs);
+ rc = tf_session_get_fw_session_id(tfp, &fw_session_id);
if (rc) {
TFP_DRV_LOG(ERR,
- "%s: Failed to lookup session, rc:%s\n",
+ "%s: Unable to lookup FW id, rc:%s\n",
tf_dir_2_str(dir),
strerror(-rc));
return rc;
}
/* Populate the request */
- req.fw_session_id =
- tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id);
req.flags = tfp_cpu_to_le_16(dir);
req.type = tfp_cpu_to_le_32(hcapi_type);
req.start_index = tfp_cpu_to_le_32(starting_idx);
@@ -939,3 +964,102 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp,
return tfp_le_to_cpu_32(parms.tf_resp_code);
}
+
+int
+tf_msg_get_if_tbl_entry(struct tf *tfp,
+ struct tf_if_tbl_get_parms *params)
+{
+ int rc = 0;
+ struct tfp_send_msg_parms parms = { 0 };
+ tf_if_tbl_get_input_t req = { 0 };
+ tf_if_tbl_get_output_t resp;
+ uint32_t flags = 0;
+ struct tf_session *tfs;
+
+ /* Retrieve the session information */
+ rc = tf_session_get_session(tfp, &tfs);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup session, rc:%s\n",
+ tf_dir_2_str(params->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+ flags = (params->dir == TF_DIR_TX ? TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX :
+ TF_IF_TBL_SET_INPUT_FLAGS_DIR_RX);
+
+ /* Populate the request */
+ req.fw_session_id =
+ tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ req.flags = flags;
+ req.tf_if_tbl_type = params->hcapi_type;
+ req.idx = tfp_cpu_to_le_16(params->idx);
+ req.data_sz_in_bytes = tfp_cpu_to_le_16(params->data_sz_in_bytes);
+
+ MSG_PREP(parms,
+ TF_KONG_MB,
+ HWRM_TF,
+ HWRM_TFT_IF_TBL_GET,
+ req,
+ resp);
+
+ rc = tfp_send_msg_tunneled(tfp, &parms);
+
+ if (rc != 0)
+ return rc;
+
+ if (parms.tf_resp_code != 0)
+ return tfp_le_to_cpu_32(parms.tf_resp_code);
+
+ tfp_memcpy(¶ms->data[0], resp.data, req.data_sz_in_bytes);
+
+ return tfp_le_to_cpu_32(parms.tf_resp_code);
+}
+
+int
+tf_msg_set_if_tbl_entry(struct tf *tfp,
+ struct tf_if_tbl_set_parms *params)
+{
+ int rc = 0;
+ struct tfp_send_msg_parms parms = { 0 };
+ tf_if_tbl_set_input_t req = { 0 };
+ uint32_t flags = 0;
+ struct tf_session *tfs;
+
+ /* Retrieve the session information */
+ rc = tf_session_get_session(tfp, &tfs);
+ if (rc) {
+ TFP_DRV_LOG(ERR,
+ "%s: Failed to lookup session, rc:%s\n",
+ tf_dir_2_str(params->dir),
+ strerror(-rc));
+ return rc;
+ }
+
+
+ flags = (params->dir == TF_DIR_TX ? TF_IF_TBL_SET_INPUT_FLAGS_DIR_TX :
+ TF_IF_TBL_SET_INPUT_FLAGS_DIR_RX);
+
+ /* Populate the request */
+ req.fw_session_id =
+ tfp_cpu_to_le_32(tfs->session_id.internal.fw_session_id);
+ req.flags = flags;
+ req.tf_if_tbl_type = params->hcapi_type;
+ req.idx = tfp_cpu_to_le_32(params->idx);
+ req.data_sz_in_bytes = tfp_cpu_to_le_32(params->data_sz_in_bytes);
+ tfp_memcpy(&req.data[0], params->data, params->data_sz_in_bytes);
+
+ MSG_PREP_NO_RESP(parms,
+ TF_KONG_MB,
+ HWRM_TF,
+ HWRM_TFT_IF_TBL_SET,
+ req);
+
+ rc = tfp_send_msg_tunneled(tfp, &parms);
+
+ if (rc != 0)
+ return rc;
+
+ return tfp_le_to_cpu_32(parms.tf_resp_code);
+}
diff --git a/drivers/net/bnxt/tf_core/tf_msg.h b/drivers/net/bnxt/tf_core/tf_msg.h
index 7432873d7..37f291016 100644
--- a/drivers/net/bnxt/tf_core/tf_msg.h
+++ b/drivers/net/bnxt/tf_core/tf_msg.h
@@ -428,4 +428,34 @@ int tf_msg_bulk_get_tbl_entry(struct tf *tfp,
uint16_t entry_sz_in_bytes,
uint64_t physical_mem_addr);
+/**
+ * Sends Set message of a IF Table Type element to the firmware.
+ *
+ * [in] tfp
+ * Pointer to session handle
+ *
+ * [in] parms
+ * Pointer to IF table set parameters
+ *
+ * Returns:
+ * 0 on Success else internal Truflow error
+ */
+int tf_msg_set_if_tbl_entry(struct tf *tfp,
+ struct tf_if_tbl_set_parms *params);
+
+/**
+ * Sends get message of a IF Table Type element to the firmware.
+ *
+ * [in] tfp
+ * Pointer to session handle
+ *
+ * [in] parms
+ * Pointer to IF table get parameters
+ *
+ * Returns:
+ * 0 on Success else internal Truflow error
+ */
+int tf_msg_get_if_tbl_entry(struct tf *tfp,
+ struct tf_if_tbl_get_parms *params);
+
#endif /* _TF_MSG_H_ */
diff --git a/drivers/net/bnxt/tf_core/tf_session.c b/drivers/net/bnxt/tf_core/tf_session.c
index b08d06306..529ea5083 100644
--- a/drivers/net/bnxt/tf_core/tf_session.c
+++ b/drivers/net/bnxt/tf_core/tf_session.c
@@ -70,14 +70,24 @@ tf_session_open_session(struct tf *tfp,
goto cleanup;
}
tfp->session->core_data = cparms.mem_va;
+ session_id = &parms->open_cfg->session_id;
+
+ /* Update Session Info, which is what is visible to the caller */
+ tfp->session->ver.major = 0;
+ tfp->session->ver.minor = 0;
+ tfp->session->ver.update = 0;
- /* Initialize Session and Device */
+ tfp->session->session_id.internal.domain = session_id->internal.domain;
+ tfp->session->session_id.internal.bus = session_id->internal.bus;
+ tfp->session->session_id.internal.device = session_id->internal.device;
+ tfp->session->session_id.internal.fw_session_id = fw_session_id;
+
+ /* Initialize Session and Device, which is private */
session = (struct tf_session *)tfp->session->core_data;
session->ver.major = 0;
session->ver.minor = 0;
session->ver.update = 0;
- session_id = &parms->open_cfg->session_id;
session->session_id.internal.domain = session_id->internal.domain;
session->session_id.internal.bus = session_id->internal.bus;
session->session_id.internal.device = session_id->internal.device;
--
2.21.1 (Apple Git-122.3)
next prev parent reply other threads:[~2020-07-03 21:09 UTC|newest]
Thread overview: 271+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-12 13:28 [dpdk-dev] [PATCH 00/50] add features for host-based flow management Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 01/50] net/bnxt: Basic infrastructure support for VF representors Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 02/50] net/bnxt: Infrastructure support for VF-reps data path Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 03/50] net/bnxt: add support to get FID, default vnic ID and svif of VF-Rep Endpoint Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 04/50] net/bnxt: initialize parent PF information Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 05/50] net/bnxt: modify ulp_port_db_dev_port_intf_update prototype Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 06/50] net/bnxt: get port & function related information Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 07/50] net/bnxt: add support for bnxt_hwrm_port_phy_qcaps Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 08/50] net/bnxt: modify port_db to store & retrieve more info Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 09/50] net/bnxt: add support for Exact Match Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 10/50] net/bnxt: modify EM insert and delete to use HWRM direct Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 11/50] net/bnxt: add multi device support Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 12/50] net/bnxt: support bulk table get and mirror Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 13/50] net/bnxt: update multi device design support Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 14/50] net/bnxt: support two-level priority for TCAMs Somnath Kotur
2020-06-12 13:28 ` [dpdk-dev] [PATCH 15/50] net/bnxt: add HCAPI interface support Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 16/50] net/bnxt: add core changes for EM and EEM lookups Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 17/50] net/bnxt: implement support for TCAM access Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 18/50] net/bnxt: multiple device implementation Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 19/50] net/bnxt: update identifier with remap support Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 20/50] net/bnxt: update RM with residual checker Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 21/50] net/bnxt: support two level priority for TCAMs Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 22/50] net/bnxt: support EM and TCAM lookup with table scope Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 23/50] net/bnxt: update table get to use new design Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 24/50] net/bnxt: update RM to support HCAPI only Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 25/50] net/bnxt: remove table scope from session Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 26/50] net/bnxt: add external action alloc and free Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 27/50] net/bnxt: align CFA resources with RM Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 28/50] net/bnxt: implement IF tables set and get Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 29/50] net/bnxt: add TF register and unregister Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 30/50] net/bnxt: add global config set and get APIs Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 31/50] net/bnxt: add support for EEM System memory Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 32/50] net/bnxt: integrate with the latest tf_core library Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 33/50] net/bnxt: add support for internal encap records Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 34/50] net/bnxt: add support for if table processing Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 35/50] net/bnxt: disable vector mode in tx direction when truflow is enabled Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 36/50] net/bnxt: add index opcode and index operand mapper table Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 37/50] net/bnxt: add support for global resource templates Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 38/50] net/bnxt: add support for internal exact match entries Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 39/50] net/bnxt: add support for conditional execution of mapper tables Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 40/50] net/bnxt: enable HWRM_PORT_MAC_QCFG for trusted vf Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 41/50] net/bnxt: enhancements for port db Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 42/50] net/bnxt: fix for VF to VFR conduit Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 43/50] net/bnxt: fix to parse representor along with other dev-args Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 44/50] net/bnxt: fill mapper parameters with default rules info Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 45/50] net/bnxt: add support for vf rep and stat templates Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 46/50] net/bnxt: create default flow rules for the VF-rep conduit Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 47/50] net/bnxt: add ingress & egress port default rules Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 48/50] net/bnxt: fill cfa_action in the tx buffer descriptor properly Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 49/50] net/bnxt: support for ULP Flow counter Manager Somnath Kotur
2020-06-12 13:29 ` [dpdk-dev] [PATCH 50/50] net/bnxt: Add support for flow query with action_type COUNT Somnath Kotur
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 00/51] add features for host-based flow management Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 01/51] net/bnxt: add basic infrastructure for VF representors Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 02/51] net/bnxt: add support for VF-reps data path Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 03/51] net/bnxt: get IDs for VF-Rep endpoint Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 04/51] net/bnxt: initialize parent PF information Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 05/51] net/bnxt: modify port db dev interface Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 06/51] net/bnxt: get port and function info Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 07/51] net/bnxt: add support for hwrm port phy qcaps Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 08/51] net/bnxt: modify port db to handle more info Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 09/51] net/bnxt: add support for exact match Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 10/51] net/bnxt: modify EM insert and delete to use HWRM direct Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 11/51] net/bnxt: add multi device support Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 12/51] net/bnxt: support bulk table get and mirror Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 13/51] net/bnxt: update multi device design support Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 14/51] net/bnxt: support two-level priority for TCAMs Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 15/51] net/bnxt: add HCAPI interface support Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 16/51] net/bnxt: add core changes for EM and EEM lookups Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 17/51] net/bnxt: implement support for TCAM access Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 18/51] net/bnxt: multiple device implementation Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 19/51] net/bnxt: update identifier with remap support Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 20/51] net/bnxt: update RM with residual checker Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 21/51] net/bnxt: support two level priority for TCAMs Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 22/51] net/bnxt: support EM and TCAM lookup with table scope Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 23/51] net/bnxt: update table get to use new design Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 24/51] net/bnxt: update RM to support HCAPI only Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 25/51] net/bnxt: remove table scope from session Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 26/51] net/bnxt: add external action alloc and free Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 27/51] net/bnxt: align CFA resources with RM Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 28/51] net/bnxt: implement IF tables set and get Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 29/51] net/bnxt: add TF register and unregister Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 30/51] net/bnxt: add global config set and get APIs Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 31/51] net/bnxt: add support for EEM System memory Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 32/51] net/bnxt: integrate with the latest tf core changes Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 33/51] net/bnxt: add support for internal encap records Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 34/51] net/bnxt: add support for if table processing Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 35/51] net/bnxt: disable Tx vector mode if truflow is enabled Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 36/51] net/bnxt: add index opcode and operand to mapper table Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 37/51] net/bnxt: add support for global resource templates Ajit Khaparde
2020-07-01 6:51 ` [dpdk-dev] [PATCH v2 38/51] net/bnxt: add support for internal exact match entries Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 39/51] net/bnxt: add support for conditional execution of mapper tables Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 40/51] net/bnxt: enable port MAC qcfg command for trusted VF Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 41/51] net/bnxt: enhancements for port db Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 42/51] net/bnxt: manage VF to VFR conduit Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 43/51] net/bnxt: parse representor along with other dev-args Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 44/51] net/bnxt: fill mapper parameters with default rules info Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 45/51] net/bnxt: add VF-rep and stat templates Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 46/51] net/bnxt: create default flow rules for the VF-rep conduit Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 47/51] net/bnxt: add port default rules for ingress and egress Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 48/51] net/bnxt: fill cfa action in the Tx descriptor Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 49/51] net/bnxt: add ULP Flow counter Manager Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 50/51] net/bnxt: add support for count action in flow query Ajit Khaparde
2020-07-01 6:52 ` [dpdk-dev] [PATCH v2 51/51] doc: update release notes Ajit Khaparde
2020-07-01 14:26 ` [dpdk-dev] [PATCH v2 00/51] add features for host-based flow management Ajit Khaparde
2020-07-01 21:31 ` Ferruh Yigit
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 " Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 01/51] net/bnxt: add basic infrastructure for VF reps Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 02/51] net/bnxt: add support for VF-reps data path Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 03/51] net/bnxt: get IDs for VF-Rep endpoint Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 04/51] net/bnxt: initialize parent PF information Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 05/51] net/bnxt: modify port db dev interface Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 06/51] net/bnxt: get port and function info Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 07/51] net/bnxt: add support for hwrm port phy qcaps Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 08/51] net/bnxt: modify port db to handle more info Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 09/51] net/bnxt: add support for exact match Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 10/51] net/bnxt: modify EM insert and delete to use HWRM direct Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 11/51] net/bnxt: add multi device support Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 12/51] net/bnxt: support bulk table get and mirror Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 13/51] net/bnxt: update multi device design support Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 14/51] net/bnxt: support two-level priority for TCAMs Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 15/51] net/bnxt: add HCAPI interface support Ajit Khaparde
2020-07-02 4:10 ` [dpdk-dev] [PATCH v3 16/51] net/bnxt: add core changes for EM and EEM lookups Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 17/51] net/bnxt: implement support for TCAM access Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 18/51] net/bnxt: multiple device implementation Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 19/51] net/bnxt: update identifier with remap support Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 20/51] net/bnxt: update RM with residual checker Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 21/51] net/bnxt: support two level priority for TCAMs Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 22/51] net/bnxt: support EM and TCAM lookup with table scope Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 23/51] net/bnxt: update table get to use new design Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 24/51] net/bnxt: update RM to support HCAPI only Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 25/51] net/bnxt: remove table scope from session Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 26/51] net/bnxt: add external action alloc and free Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 27/51] net/bnxt: align CFA resources with RM Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 28/51] net/bnxt: implement IF tables set and get Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 29/51] net/bnxt: add TF register and unregister Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 30/51] net/bnxt: add global config set and get APIs Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 31/51] net/bnxt: add support for EEM System memory Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 32/51] net/bnxt: integrate with the latest tf core changes Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 33/51] net/bnxt: add support for internal encap records Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 34/51] net/bnxt: add support for if table processing Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 35/51] net/bnxt: disable Tx vector mode if truflow is enabled Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 36/51] net/bnxt: add index opcode and operand to mapper table Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 37/51] net/bnxt: add support for global resource templates Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 38/51] net/bnxt: add support for internal exact match entries Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 39/51] net/bnxt: add conditional execution of mapper tables Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 40/51] net/bnxt: enable port MAC qcfg for trusted VF Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 41/51] net/bnxt: enhancements for port db Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 42/51] net/bnxt: manage VF to VFR conduit Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 43/51] net/bnxt: parse reps along with other dev-args Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 44/51] net/bnxt: fill mapper parameters with default rules Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 45/51] net/bnxt: add VF-rep and stat templates Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 46/51] net/bnxt: create default flow rules for the VF-rep Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 47/51] net/bnxt: add port default rules for ingress and egress Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 48/51] net/bnxt: fill cfa action in the Tx descriptor Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 49/51] net/bnxt: add ULP Flow counter Manager Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 50/51] net/bnxt: add support for count action in flow query Ajit Khaparde
2020-07-02 4:11 ` [dpdk-dev] [PATCH v3 51/51] doc: update release notes Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 00/51] add features for host-based flow management Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 01/51] net/bnxt: add basic infrastructure for VF reps Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 02/51] net/bnxt: add support for VF-reps data path Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 03/51] net/bnxt: get IDs for VF-Rep endpoint Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 04/51] net/bnxt: initialize parent PF information Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 05/51] net/bnxt: modify port db dev interface Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 06/51] net/bnxt: get port and function info Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 07/51] net/bnxt: add support for hwrm port phy qcaps Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 08/51] net/bnxt: modify port db to handle more info Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 09/51] net/bnxt: add support for exact match Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 10/51] net/bnxt: modify EM insert and delete to use HWRM direct Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 11/51] net/bnxt: add multi device support Ajit Khaparde
2020-07-02 23:27 ` [dpdk-dev] [PATCH v4 12/51] net/bnxt: support bulk table get and mirror Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 13/51] net/bnxt: update multi device design support Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 14/51] net/bnxt: support two-level priority for TCAMs Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 15/51] net/bnxt: add HCAPI interface support Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 16/51] net/bnxt: add core changes for EM and EEM lookups Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 17/51] net/bnxt: implement support for TCAM access Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 18/51] net/bnxt: multiple device implementation Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 19/51] net/bnxt: update identifier with remap support Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 20/51] net/bnxt: update RM with residual checker Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 21/51] net/bnxt: support two level priority for TCAMs Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 22/51] net/bnxt: support EM and TCAM lookup with table scope Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 23/51] net/bnxt: update table get to use new design Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 24/51] net/bnxt: update RM to support HCAPI only Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 25/51] net/bnxt: remove table scope from session Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 26/51] net/bnxt: add external action alloc and free Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 27/51] net/bnxt: align CFA resources with RM Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 28/51] net/bnxt: implement IF tables set and get Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 29/51] net/bnxt: add TF register and unregister Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 30/51] net/bnxt: add global config set and get APIs Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 31/51] net/bnxt: add support for EEM System memory Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 32/51] net/bnxt: integrate with the latest tf core changes Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 33/51] net/bnxt: add support for internal encap records Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 34/51] net/bnxt: add support for if table processing Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 35/51] net/bnxt: disable Tx vector mode if truflow is enabled Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 36/51] net/bnxt: add index opcode and operand to mapper table Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 37/51] net/bnxt: add support for global resource templates Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 38/51] net/bnxt: add support for internal exact match entries Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 39/51] net/bnxt: add support for conditional execution of mapper tables Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 40/51] net/bnxt: enable port MAC qcfg command for trusted VF Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 41/51] net/bnxt: enhancements for port db Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 42/51] net/bnxt: manage VF to VFR conduit Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 43/51] net/bnxt: parse reps along with other dev-args Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 44/51] net/bnxt: fill mapper parameters with default rules Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 45/51] net/bnxt: add VF-rep and stat templates Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 46/51] net/bnxt: create default flow rules for the VF-rep Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 47/51] net/bnxt: add port default rules for ingress and egress Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 48/51] net/bnxt: fill cfa action in the Tx descriptor Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 49/51] net/bnxt: add ULP Flow counter Manager Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 50/51] net/bnxt: add support for count action in flow query Ajit Khaparde
2020-07-02 23:28 ` [dpdk-dev] [PATCH v4 51/51] doc: update release notes Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 00/51] net/bnxt: add features for host-based flow management Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 01/51] net/bnxt: add basic infrastructure for VF reps Ajit Khaparde
2020-07-06 10:07 ` Ferruh Yigit
2020-07-06 14:04 ` Somnath Kotur
2020-07-06 14:14 ` Ajit Khaparde
2020-07-06 18:35 ` Ferruh Yigit
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 02/51] net/bnxt: add support for VF-reps data path Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 03/51] net/bnxt: get IDs for VF-Rep endpoint Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 04/51] net/bnxt: initialize parent PF information Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 05/51] net/bnxt: modify port db dev interface Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 06/51] net/bnxt: get port and function info Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 07/51] net/bnxt: add support for hwrm port phy qcaps Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 08/51] net/bnxt: modify port db to handle more info Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 09/51] net/bnxt: add support for exact match Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 10/51] net/bnxt: use HWRM direct for EM insert and delete Ajit Khaparde
2020-07-06 18:47 ` Ferruh Yigit
2020-07-06 19:11 ` Ferruh Yigit
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 11/51] net/bnxt: add multi device support Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 12/51] net/bnxt: support bulk table get and mirror Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 13/51] net/bnxt: update multi device design support Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 14/51] net/bnxt: support two-level priority for TCAMs Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 15/51] net/bnxt: add HCAPI interface support Ajit Khaparde
2020-07-07 8:03 ` Ferruh Yigit
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 16/51] net/bnxt: add core changes for EM and EEM lookups Ajit Khaparde
2020-07-07 8:08 ` Ferruh Yigit
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 17/51] net/bnxt: implement support for TCAM access Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 18/51] net/bnxt: multiple device implementation Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 19/51] net/bnxt: update identifier with remap support Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 20/51] net/bnxt: update RM with residual checker Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 21/51] net/bnxt: support two level priority for TCAMs Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 22/51] net/bnxt: use table scope for EM and TCAM lookup Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 23/51] net/bnxt: update table get to use new design Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 24/51] net/bnxt: update RM to support HCAPI only Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 25/51] net/bnxt: remove table scope from session Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 26/51] net/bnxt: add external action alloc and free Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 27/51] net/bnxt: align CFA resources with RM Ajit Khaparde
2020-07-03 21:01 ` Ajit Khaparde [this message]
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 29/51] net/bnxt: add TF register and unregister Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 30/51] net/bnxt: add global config set and get APIs Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 31/51] net/bnxt: add support for EEM System memory Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 32/51] net/bnxt: integrate with the latest tf core changes Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 33/51] net/bnxt: add support for internal encap records Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 34/51] net/bnxt: add support for if table processing Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 35/51] net/bnxt: disable Tx vector mode if truflow is set Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 36/51] net/bnxt: add index opcode and operand to mapper table Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 37/51] net/bnxt: add support for global resource templates Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 38/51] net/bnxt: add support for internal exact match Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 39/51] net/bnxt: add conditional execution of mapper tables Ajit Khaparde
2020-07-03 21:01 ` [dpdk-dev] [PATCH v5 40/51] net/bnxt: allow port MAC qcfg command for trusted VF Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 41/51] net/bnxt: enhancements for port db Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 42/51] net/bnxt: manage VF to VFR conduit Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 43/51] net/bnxt: parse reps along with other dev-args Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 44/51] net/bnxt: fill mapper parameters with default rules Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 45/51] net/bnxt: add VF-rep and stat templates Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 46/51] net/bnxt: create default flow rules for the VF-rep Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 47/51] net/bnxt: add port default rules for ingress and egress Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 48/51] net/bnxt: fill cfa action in the Tx descriptor Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 49/51] net/bnxt: add ULP Flow counter Manager Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 50/51] net/bnxt: add support for count action in flow query Ajit Khaparde
2020-07-03 21:02 ` [dpdk-dev] [PATCH v5 51/51] doc: update release notes Ajit Khaparde
2020-07-06 1:47 ` [dpdk-dev] [PATCH v5 00/51] net/bnxt: add features for host-based flow management Ajit Khaparde
2020-07-06 10:10 ` Ferruh Yigit
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=20200703210210.40568-29-ajit.khaparde@broadcom.com \
--to=ajit.khaparde@broadcom.com \
--cc=dev@dpdk.org \
--cc=jay.ding@broadcom.com \
--cc=stuart.schacher@broadcom.com \
--cc=venkatkumar.duvvuru@broadcom.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).