From: Junfeng Guo <junfeng.guo@intel.com>
To: intel-wired-lan@lists.osuosl.org
Cc: ivecera@redhat.com, netdev@vger.kernel.org, qi.z.zhang@intel.com,
jesse.brandeburg@intel.com, anthony.l.nguyen@intel.com,
horms@kernel.org
Subject: [Intel-wired-lan] [PATCH iwl-next v7 04/15] ice: init parse graph cam tables for parser
Date: Wed, 23 Aug 2023 17:31:47 +0800 [thread overview]
Message-ID: <20230823093158.782802-5-junfeng.guo@intel.com> (raw)
In-Reply-To: <20230823093158.782802-1-junfeng.guo@intel.com>
Parse DDP section ICE_SID_RXPARSER_CAM or ICE_SID_RXPARSER_PG_SPILL
into an array of struct ice_pg_cam_item.
Parse DDP section ICE_SID_RXPARSER_NOMATCH_CAM or
ICE_SID_RXPARSER_NOMATCH_SPILL into an array of struct ice_pg_nm_cam_item.
Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
drivers/net/ethernet/intel/ice/ice_parser.c | 40 +++
drivers/net/ethernet/intel/ice/ice_parser.h | 13 +
drivers/net/ethernet/intel/ice/ice_pg_cam.c | 321 ++++++++++++++++++++
drivers/net/ethernet/intel/ice/ice_pg_cam.h | 136 +++++++++
4 files changed, 510 insertions(+)
create mode 100644 drivers/net/ethernet/intel/ice/ice_pg_cam.c
create mode 100644 drivers/net/ethernet/intel/ice/ice_pg_cam.h
diff --git a/drivers/net/ethernet/intel/ice/ice_parser.c b/drivers/net/ethernet/intel/ice/ice_parser.c
index e2e49fcf69c1..b654135419fb 100644
--- a/drivers/net/ethernet/intel/ice/ice_parser.c
+++ b/drivers/net/ethernet/intel/ice/ice_parser.c
@@ -28,6 +28,18 @@ void *ice_parser_sect_item_get(u32 sect_type, void *section,
case ICE_SID_RXPARSER_METADATA_INIT:
size = ICE_SID_RXPARSER_METADATA_INIT_ENTRY_SIZE;
break;
+ case ICE_SID_RXPARSER_CAM:
+ size = ICE_SID_RXPARSER_CAM_ENTRY_SIZE;
+ break;
+ case ICE_SID_RXPARSER_PG_SPILL:
+ size = ICE_SID_RXPARSER_PG_SPILL_ENTRY_SIZE;
+ break;
+ case ICE_SID_RXPARSER_NOMATCH_CAM:
+ size = ICE_SID_RXPARSER_NOMATCH_CAM_ENTRY_SIZE;
+ break;
+ case ICE_SID_RXPARSER_NOMATCH_SPILL:
+ size = ICE_SID_RXPARSER_NOMATCH_SPILL_ENTRY_SIZE;
+ break;
default:
return NULL;
}
@@ -120,6 +132,30 @@ int ice_parser_create(struct ice_hw *hw, struct ice_parser **psr)
goto err;
}
+ p->pg_cam_table = ice_pg_cam_table_get(hw);
+ if (!p->pg_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
+ p->pg_sp_cam_table = ice_pg_sp_cam_table_get(hw);
+ if (!p->pg_sp_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
+ p->pg_nm_cam_table = ice_pg_nm_cam_table_get(hw);
+ if (!p->pg_nm_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
+ p->pg_nm_sp_cam_table = ice_pg_nm_sp_cam_table_get(hw);
+ if (!p->pg_nm_sp_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
*psr = p;
return 0;
err:
@@ -135,6 +171,10 @@ void ice_parser_destroy(struct ice_parser *psr)
{
devm_kfree(ice_hw_to_dev(psr->hw), psr->imem_table);
devm_kfree(ice_hw_to_dev(psr->hw), psr->mi_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_cam_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_sp_cam_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_nm_cam_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_nm_sp_cam_table);
devm_kfree(ice_hw_to_dev(psr->hw), psr);
}
diff --git a/drivers/net/ethernet/intel/ice/ice_parser.h b/drivers/net/ethernet/intel/ice/ice_parser.h
index b52abad747b2..c709c56bf2e6 100644
--- a/drivers/net/ethernet/intel/ice/ice_parser.h
+++ b/drivers/net/ethernet/intel/ice/ice_parser.h
@@ -6,10 +6,15 @@
#include "ice_metainit.h"
#include "ice_imem.h"
+#include "ice_pg_cam.h"
#define ICE_SEC_DATA_OFFSET 4
#define ICE_SID_RXPARSER_IMEM_ENTRY_SIZE 48
#define ICE_SID_RXPARSER_METADATA_INIT_ENTRY_SIZE 24
+#define ICE_SID_RXPARSER_CAM_ENTRY_SIZE 16
+#define ICE_SID_RXPARSER_PG_SPILL_ENTRY_SIZE 17
+#define ICE_SID_RXPARSER_NOMATCH_CAM_ENTRY_SIZE 12
+#define ICE_SID_RXPARSER_NOMATCH_SPILL_ENTRY_SIZE 13
struct ice_parser {
struct ice_hw *hw; /* pointer to the hardware structure */
@@ -18,6 +23,14 @@ struct ice_parser {
struct ice_imem_item *imem_table;
/* load data from section ICE_SID_RXPARSER_METADATA_INIT */
struct ice_metainit_item *mi_table;
+ /* load data from section ICE_SID_RXPARSER_CAM */
+ struct ice_pg_cam_item *pg_cam_table;
+ /* load data from section ICE_SID_RXPARSER_PG_SPILL */
+ struct ice_pg_cam_item *pg_sp_cam_table;
+ /* load data from section ICE_SID_RXPARSER_NOMATCH_CAM */
+ struct ice_pg_nm_cam_item *pg_nm_cam_table;
+ /* load data from section ICE_SID_RXPARSER_NOMATCH_SPILL */
+ struct ice_pg_nm_cam_item *pg_nm_sp_cam_table;
};
int ice_parser_create(struct ice_hw *hw, struct ice_parser **psr);
diff --git a/drivers/net/ethernet/intel/ice/ice_pg_cam.c b/drivers/net/ethernet/intel/ice/ice_pg_cam.c
new file mode 100644
index 000000000000..82a8c916d5ce
--- /dev/null
+++ b/drivers/net/ethernet/intel/ice/ice_pg_cam.c
@@ -0,0 +1,321 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2023 Intel Corporation */
+
+#include "ice_common.h"
+#include "ice_parser_util.h"
+
+static void _ice_pg_cam_key_dump(struct ice_hw *hw, struct ice_pg_cam_key *key)
+{
+ dev_info(ice_hw_to_dev(hw), "key:\n");
+ dev_info(ice_hw_to_dev(hw), "\tvalid = %d\n", key->valid);
+ dev_info(ice_hw_to_dev(hw), "\tnode_id = %d\n", key->node_id);
+ dev_info(ice_hw_to_dev(hw), "\tflag0 = %d\n", key->flag0);
+ dev_info(ice_hw_to_dev(hw), "\tflag1 = %d\n", key->flag1);
+ dev_info(ice_hw_to_dev(hw), "\tflag2 = %d\n", key->flag2);
+ dev_info(ice_hw_to_dev(hw), "\tflag3 = %d\n", key->flag3);
+ dev_info(ice_hw_to_dev(hw), "\tboost_idx = %d\n", key->boost_idx);
+ dev_info(ice_hw_to_dev(hw), "\talu_reg = 0x%04x\n", key->alu_reg);
+ dev_info(ice_hw_to_dev(hw), "\tnext_proto = 0x%08x\n",
+ key->next_proto);
+}
+
+static void _ice_pg_nm_cam_key_dump(struct ice_hw *hw,
+ struct ice_pg_nm_cam_key *key)
+{
+ dev_info(ice_hw_to_dev(hw), "key:\n");
+ dev_info(ice_hw_to_dev(hw), "\tvalid = %d\n", key->valid);
+ dev_info(ice_hw_to_dev(hw), "\tnode_id = %d\n", key->node_id);
+ dev_info(ice_hw_to_dev(hw), "\tflag0 = %d\n", key->flag0);
+ dev_info(ice_hw_to_dev(hw), "\tflag1 = %d\n", key->flag1);
+ dev_info(ice_hw_to_dev(hw), "\tflag2 = %d\n", key->flag2);
+ dev_info(ice_hw_to_dev(hw), "\tflag3 = %d\n", key->flag3);
+ dev_info(ice_hw_to_dev(hw), "\tboost_idx = %d\n", key->boost_idx);
+ dev_info(ice_hw_to_dev(hw), "\talu_reg = 0x%04x\n", key->alu_reg);
+}
+
+static void _ice_pg_cam_action_dump(struct ice_hw *hw,
+ struct ice_pg_cam_action *action)
+{
+ dev_info(ice_hw_to_dev(hw), "action:\n");
+ dev_info(ice_hw_to_dev(hw), "\tnext_node = %d\n", action->next_node);
+ dev_info(ice_hw_to_dev(hw), "\tnext_pc = %d\n", action->next_pc);
+ dev_info(ice_hw_to_dev(hw), "\tis_pg = %d\n", action->is_pg);
+ dev_info(ice_hw_to_dev(hw), "\tproto_id = %d\n", action->proto_id);
+ dev_info(ice_hw_to_dev(hw), "\tis_mg = %d\n", action->is_mg);
+ dev_info(ice_hw_to_dev(hw), "\tmarker_id = %d\n", action->marker_id);
+ dev_info(ice_hw_to_dev(hw), "\tis_last_round = %d\n",
+ action->is_last_round);
+ dev_info(ice_hw_to_dev(hw), "\tho_polarity = %d\n",
+ action->ho_polarity);
+ dev_info(ice_hw_to_dev(hw), "\tho_inc = %d\n", action->ho_inc);
+}
+
+/**
+ * ice_pg_cam_dump - dump an parse graph cam info
+ * @hw: pointer to the hardware structure
+ * @item: parse graph cam to dump
+ */
+void ice_pg_cam_dump(struct ice_hw *hw, struct ice_pg_cam_item *item)
+{
+ dev_info(ice_hw_to_dev(hw), "index = %d\n", item->idx);
+ _ice_pg_cam_key_dump(hw, &item->key);
+ _ice_pg_cam_action_dump(hw, &item->action);
+}
+
+/**
+ * ice_pg_nm_cam_dump - dump an parse graph no match cam info
+ * @hw: pointer to the hardware structure
+ * @item: parse graph no match cam to dump
+ */
+void ice_pg_nm_cam_dump(struct ice_hw *hw, struct ice_pg_nm_cam_item *item)
+{
+ dev_info(ice_hw_to_dev(hw), "index = %d\n", item->idx);
+ _ice_pg_nm_cam_key_dump(hw, &item->key);
+ _ice_pg_cam_action_dump(hw, &item->action);
+}
+
+/** The function parses a 55 bits Parse Graph CAM Action with below format:
+ * BIT 0-10: Next Node ID (action->next_node)
+ * BIT 11-18: Next PC (action->next_pc)
+ * BIT 19: Is Protocol Group (action->is_pg)
+ * BIT 20-22: reserved
+ * BIT 23-30: Protocol ID (action->proto_id)
+ * BIT 31: Is Marker Group (action->is_mg)
+ * BIT 32-39: Marker ID (action->marker_id)
+ * BIT 40: Is Last Round (action->is_last_round)
+ * BIT 41: Header Offset Polarity (action->ho_poloarity)
+ * BIT 42-50: Header Offset Inc (action->ho_inc)
+ * BIT 51-54: reserved
+ */
+static void _ice_pg_cam_action_init(struct ice_pg_cam_action *action, u64 data)
+{
+ action->next_node = (u16)(data & ICE_PGCA_NN_M);
+ action->next_pc = (u8)((data >> ICE_PGCA_NP_S) & ICE_PGCA_NP_M);
+ action->is_pg = !!((data >> ICE_PGCA_IPG_S) & ICE_PGCA_IPG_M);
+ action->proto_id = ((data >> ICE_PGCA_PID_S) & ICE_PGCA_PID_M);
+ action->is_mg = !!((data >> ICE_PGCA_IMG_S) & ICE_PGCA_IMG_M);
+ action->marker_id = ((data >> ICE_PGCA_MID_S) & ICE_PGCA_MID_M);
+ action->is_last_round = !!((data >> ICE_PGCA_ILR_S) & ICE_PGCA_ILR_M);
+ action->ho_polarity = !!((data >> ICE_PGCA_HOP_S) & ICE_PGCA_HOP_M);
+ action->ho_inc = ((data >> ICE_PGCA_HOI_S) & ICE_PGCA_HOI_M);
+}
+
+/** The function parses a 41 bits Parse Graph NoMatch CAM Key with below format:
+ * BIT 0: Valid (key->valid)
+ * BIT 1-11: Node ID (key->node_id)
+ * BIT 12: Flag 0 (key->flag0)
+ * BIT 13: Flag 1 (key->flag1)
+ * BIT 14: Flag 2 (key->flag2)
+ * BIT 15: Flag 3 (key->flag3)
+ * BIT 16: Boost Hit (key->boost_idx to 0 if it is 0)
+ * BIT 17-24: Boost Index (key->boost_idx only if Boost Hit is not 0)
+ * BIT 25-40: ALU Reg (key->alu_reg)
+ */
+static void _ice_pg_nm_cam_key_init(struct ice_pg_nm_cam_key *key, u64 data)
+{
+ key->valid = !!(data & ICE_PGNCK_VLD_M);
+ key->node_id = (u16)((data >> ICE_PGNCK_NID_S) & ICE_PGNCK_NID_M);
+ key->flag0 = !!((data >> ICE_PGNCK_F0_S) & ICE_PGNCK_F0_M);
+ key->flag1 = !!((data >> ICE_PGNCK_F1_S) & ICE_PGNCK_F1_M);
+ key->flag2 = !!((data >> ICE_PGNCK_F2_S) & ICE_PGNCK_F2_M);
+ key->flag3 = !!((data >> ICE_PGNCK_F3_S) & ICE_PGNCK_F3_M);
+ if ((data >> ICE_PGNCK_BH_S) & ICE_PGNCK_BH_M)
+ key->boost_idx =
+ (u8)((data >> ICE_PGNCK_BI_S) & ICE_PGNCK_BI_M);
+ else
+ key->boost_idx = 0;
+ key->alu_reg = (u16)((data >> ICE_PGNCK_AR_S) & ICE_PGNCK_AR_M);
+}
+
+/** The function parses a 73 bits Parse Graph CAM Key with below format:
+ * BIT 0: Valid (key->valid)
+ * BIT 1-11: Node ID (key->node_id)
+ * BIT 12: Flag 0 (key->flag0)
+ * BIT 13: Flag 1 (key->flag1)
+ * BIT 14: Flag 2 (key->flag2)
+ * BIT 15: Flag 3 (key->flag3)
+ * BIT 16: Boost Hit (key->boost_idx to 0 if it is 0)
+ * BIT 17-24: Boost Index (key->boost_idx only if Boost Hit is not 0)
+ * BIT 25-40: ALU Reg (key->alu_reg)
+ * BIT 41-72: Next Proto Key (key->next_proto)
+ */
+static void _ice_pg_cam_key_init(struct ice_pg_cam_key *key, u8 *data)
+{
+ u64 d64 = *(u64 *)data;
+ u8 idd, off;
+
+ key->valid = !!(d64 & ICE_PGCK_VLD_M);
+ key->node_id = (u16)((d64 >> ICE_PGCK_NID_S) & ICE_PGCK_NID_M);
+ key->flag0 = !!((d64 >> ICE_PGCK_F0_S) & ICE_PGCK_F0_M);
+ key->flag1 = !!((d64 >> ICE_PGCK_F1_S) & ICE_PGCK_F1_M);
+ key->flag2 = !!((d64 >> ICE_PGCK_F2_S) & ICE_PGCK_F2_M);
+ key->flag3 = !!((d64 >> ICE_PGCK_F3_S) & ICE_PGCK_F3_M);
+ if ((d64 >> ICE_PGCK_BH_S) & ICE_PGCK_BH_M)
+ key->boost_idx = (u8)((d64 >> ICE_PGCK_BI_S) & ICE_PGCK_BI_M);
+ else
+ key->boost_idx = 0;
+ key->alu_reg = (u16)((d64 >> ICE_PGCK_AR_S) & ICE_PGCK_AR_M);
+
+ idd = ICE_PGCK_NPK_S / BITS_PER_BYTE;
+ off = ICE_PGCK_NPK_S % BITS_PER_BYTE;
+ d64 = *((u64 *)&data[idd]) >> off;
+
+ key->next_proto = (u32)(d64 & ICE_PGCK_NPK_M);
+}
+
+/** The function parses a 128 bits Parse Graph CAM Entry with below format:
+ * BIT 0-72: Key (ci->key)
+ * BIT 73-127: Action (ci->action)
+ */
+static void _ice_pg_cam_parse_item(struct ice_hw *hw, u16 idx, void *item,
+ void *data, int size)
+{
+ struct ice_pg_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 off;
+
+ ci->idx = idx;
+
+ _ice_pg_cam_key_init(&ci->key, buf);
+
+ off = ICE_PG_CAM_ACT_OFF % BITS_PER_BYTE;
+ d64 = *((u64 *)&buf[ICE_PG_CAM_ACT_OFF / BITS_PER_BYTE]) >> off;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_cam_dump(hw, ci);
+}
+
+/** The function parses a 136 bits Parse Graph Spill CAM Entry with below
+ * format:
+ * BIT 0-55: Action (ci->key)
+ * BIT 56-135: Key (ci->action)
+ */
+static void _ice_pg_sp_cam_parse_item(struct ice_hw *hw, u16 idx, void *item,
+ void *data, int size)
+{
+ struct ice_pg_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 idd;
+
+ ci->idx = idx;
+
+ d64 = *(u64 *)buf;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ idd = ICE_PG_SP_CAM_KEY_OFF / BITS_PER_BYTE;
+ _ice_pg_cam_key_init(&ci->key, &buf[idd]);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_cam_dump(hw, ci);
+}
+
+/** The function parses a 96 bits Parse Graph NoMatch CAM Entry with below
+ * format:
+ * BIT 0-40: Key (ci->key)
+ * BIT 41-95: Action (ci->action)
+ */
+static void _ice_pg_nm_cam_parse_item(struct ice_hw *hw, u16 idx, void *item,
+ void *data, int size)
+{
+ struct ice_pg_nm_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 off;
+
+ ci->idx = idx;
+
+ d64 = *(u64 *)buf;
+ _ice_pg_nm_cam_key_init(&ci->key, d64);
+
+ off = ICE_PG_NM_CAM_ACT_OFF % BITS_PER_BYTE;
+ d64 = *((u64 *)&buf[ICE_PG_NM_CAM_ACT_OFF / BITS_PER_BYTE]) >> off;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_nm_cam_dump(hw, ci);
+}
+
+/** The function parses a 104 bits Parse Graph NoMatch Spill CAM Entry with
+ * below format:
+ * BIT 0-55: Key (ci->key)
+ * BIT 56-103: Action (ci->action)
+ */
+static void _ice_pg_nm_sp_cam_parse_item(struct ice_hw *hw, u16 idx,
+ void *item, void *data, int size)
+{
+ struct ice_pg_nm_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 off;
+
+ ci->idx = idx;
+
+ d64 = *(u64 *)buf;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ off = ICE_PG_NM_SP_CAM_ACT_OFF % BITS_PER_BYTE;
+ d64 = *((u64 *)&buf[ICE_PG_NM_SP_CAM_ACT_OFF / BITS_PER_BYTE]) >> off;
+ _ice_pg_nm_cam_key_init(&ci->key, d64);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_nm_cam_dump(hw, ci);
+}
+
+/**
+ * ice_pg_cam_table_get - create a parse graph cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_cam_item *ice_pg_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_CAM,
+ sizeof(struct ice_pg_cam_item),
+ ICE_PG_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_cam_parse_item);
+}
+
+/**
+ * ice_pg_sp_cam_table_get - create a parse graph spill cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_cam_item *ice_pg_sp_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_PG_SPILL,
+ sizeof(struct ice_pg_cam_item),
+ ICE_PG_SP_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_sp_cam_parse_item);
+}
+
+/**
+ * ice_pg_nm_cam_table_get - create a parse graph no match cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_nm_cam_item *ice_pg_nm_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_nm_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_NOMATCH_CAM,
+ sizeof(struct ice_pg_nm_cam_item),
+ ICE_PG_NM_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_nm_cam_parse_item);
+}
+
+/**
+ * ice_pg_nm_sp_cam_table_get - create a parse graph no match spill cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_nm_cam_item *ice_pg_nm_sp_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_nm_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_NOMATCH_SPILL,
+ sizeof(struct ice_pg_nm_cam_item),
+ ICE_PG_NM_SP_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_nm_sp_cam_parse_item);
+}
diff --git a/drivers/net/ethernet/intel/ice/ice_pg_cam.h b/drivers/net/ethernet/intel/ice/ice_pg_cam.h
new file mode 100644
index 000000000000..0d5c84d380d3
--- /dev/null
+++ b/drivers/net/ethernet/intel/ice/ice_pg_cam.h
@@ -0,0 +1,136 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (C) 2023 Intel Corporation */
+
+#ifndef _ICE_PG_CAM_H_
+#define _ICE_PG_CAM_H_
+
+#define ICE_PG_CAM_TABLE_SIZE 2048
+#define ICE_PG_SP_CAM_TABLE_SIZE 128
+#define ICE_PG_NM_CAM_TABLE_SIZE 1024
+#define ICE_PG_NM_SP_CAM_TABLE_SIZE 64
+
+#define ICE_PGCK_VLD_S 0
+#define ICE_PGCK_VLD_M BITMAP_MASK(1)
+#define ICE_PGCK_NID_S 1
+#define ICE_PGCK_NID_M BITMAP_MASK(11)
+#define ICE_PGCK_F0_S 12
+#define ICE_PGCK_F0_M BITMAP_MASK(1)
+#define ICE_PGCK_F1_S 13
+#define ICE_PGCK_F1_M BITMAP_MASK(1)
+#define ICE_PGCK_F2_S 14
+#define ICE_PGCK_F2_M BITMAP_MASK(1)
+#define ICE_PGCK_F3_S 15
+#define ICE_PGCK_F3_M BITMAP_MASK(1)
+#define ICE_PGCK_BH_S 16
+#define ICE_PGCK_BH_M BITMAP_MASK(1)
+#define ICE_PGCK_BI_S 17
+#define ICE_PGCK_BI_M BITMAP_MASK(8)
+#define ICE_PGCK_AR_S 25
+#define ICE_PGCK_AR_M BITMAP_MASK(16)
+#define ICE_PGCK_NPK_S 41
+#define ICE_PGCK_NPK_M BITMAP_MASK(32)
+
+struct ice_pg_cam_key {
+ bool valid;
+ u16 node_id;
+ bool flag0;
+ bool flag1;
+ bool flag2;
+ bool flag3;
+ u8 boost_idx;
+ u16 alu_reg;
+ u32 next_proto;
+};
+
+#define ICE_PGNCK_VLD_S 0
+#define ICE_PGNCK_VLD_M BITMAP_MASK(1)
+#define ICE_PGNCK_NID_S 1
+#define ICE_PGNCK_NID_M BITMAP_MASK(11)
+#define ICE_PGNCK_F0_S 12
+#define ICE_PGNCK_F0_M BITMAP_MASK(1)
+#define ICE_PGNCK_F1_S 13
+#define ICE_PGNCK_F1_M BITMAP_MASK(1)
+#define ICE_PGNCK_F2_S 14
+#define ICE_PGNCK_F2_M BITMAP_MASK(1)
+#define ICE_PGNCK_F3_S 15
+#define ICE_PGNCK_F3_M BITMAP_MASK(1)
+#define ICE_PGNCK_BH_S 16
+#define ICE_PGNCK_BH_M BITMAP_MASK(1)
+#define ICE_PGNCK_BI_S 17
+#define ICE_PGNCK_BI_M BITMAP_MASK(8)
+#define ICE_PGNCK_AR_S 25
+#define ICE_PGNCK_AR_M BITMAP_MASK(16)
+
+struct ice_pg_nm_cam_key {
+ bool valid;
+ u16 node_id;
+ bool flag0;
+ bool flag1;
+ bool flag2;
+ bool flag3;
+ u8 boost_idx;
+ u16 alu_reg;
+};
+
+#define ICE_PGCA_NN_S 0
+#define ICE_PGCA_NN_M BITMAP_MASK(11)
+#define ICE_PGCA_NP_S 11
+#define ICE_PGCA_NP_M BITMAP_MASK(8)
+#define ICE_PGCA_IPG_S 19
+#define ICE_PGCA_IPG_M BITMAP_MASK(1)
+#define ICE_PGCA_PID_S 23
+#define ICE_PGCA_PID_M BITMAP_MASK(8)
+#define ICE_PGCA_IMG_S 31
+#define ICE_PGCA_IMG_M BITMAP_MASK(1)
+#define ICE_PGCA_MID_S 32
+#define ICE_PGCA_MID_M BITMAP_MASK(8)
+#define ICE_PGCA_ILR_S 40
+#define ICE_PGCA_ILR_M BITMAP_MASK(1)
+#define ICE_PGCA_HOP_S 41
+#define ICE_PGCA_HOP_M BITMAP_MASK(1)
+#define ICE_PGCA_HOI_S 42
+#define ICE_PGCA_HOI_M BITMAP_MASK(9)
+
+struct ice_pg_cam_action {
+ u16 next_node;
+ u8 next_pc;
+ bool is_pg;
+ u8 proto_id;
+ bool is_mg;
+ u8 marker_id;
+ bool is_last_round;
+ bool ho_polarity;
+ u16 ho_inc;
+};
+
+#define ICE_PG_CAM_KEY_OFF 0
+#define ICE_PG_CAM_ACT_OFF 73
+#define ICE_PG_SP_CAM_ACT_OFF 0
+#define ICE_PG_SP_CAM_KEY_OFF 56
+
+struct ice_pg_cam_item {
+ u16 idx;
+ struct ice_pg_cam_key key;
+ struct ice_pg_cam_action action;
+};
+
+#define ICE_PG_NM_CAM_KEY_OFF 0
+#define ICE_PG_NM_CAM_ACT_OFF 41
+#define ICE_PG_NM_SP_CAM_KEY_OFF 0
+#define ICE_PG_NM_SP_CAM_ACT_OFF 56
+
+struct ice_pg_nm_cam_item {
+ u16 idx;
+ struct ice_pg_nm_cam_key key;
+ struct ice_pg_cam_action action;
+};
+
+void ice_pg_cam_dump(struct ice_hw *hw, struct ice_pg_cam_item *item);
+void ice_pg_nm_cam_dump(struct ice_hw *hw, struct ice_pg_nm_cam_item *item);
+
+struct ice_pg_cam_item *ice_pg_cam_table_get(struct ice_hw *hw);
+struct ice_pg_cam_item *ice_pg_sp_cam_table_get(struct ice_hw *hw);
+
+struct ice_pg_nm_cam_item *ice_pg_nm_cam_table_get(struct ice_hw *hw);
+struct ice_pg_nm_cam_item *ice_pg_nm_sp_cam_table_get(struct ice_hw *hw);
+#endif /* _ICE_PG_CAM_H_ */
--
2.25.1
_______________________________________________
Intel-wired-lan mailing list
Intel-wired-lan@osuosl.org
https://lists.osuosl.org/mailman/listinfo/intel-wired-lan
WARNING: multiple messages have this Message-ID (diff)
From: Junfeng Guo <junfeng.guo@intel.com>
To: intel-wired-lan@lists.osuosl.org
Cc: netdev@vger.kernel.org, anthony.l.nguyen@intel.com,
jesse.brandeburg@intel.com, qi.z.zhang@intel.com,
ivecera@redhat.com, sridhar.samudrala@intel.com,
horms@kernel.org, Junfeng Guo <junfeng.guo@intel.com>
Subject: [PATCH iwl-next v7 04/15] ice: init parse graph cam tables for parser
Date: Wed, 23 Aug 2023 17:31:47 +0800 [thread overview]
Message-ID: <20230823093158.782802-5-junfeng.guo@intel.com> (raw)
In-Reply-To: <20230823093158.782802-1-junfeng.guo@intel.com>
Parse DDP section ICE_SID_RXPARSER_CAM or ICE_SID_RXPARSER_PG_SPILL
into an array of struct ice_pg_cam_item.
Parse DDP section ICE_SID_RXPARSER_NOMATCH_CAM or
ICE_SID_RXPARSER_NOMATCH_SPILL into an array of struct ice_pg_nm_cam_item.
Signed-off-by: Junfeng Guo <junfeng.guo@intel.com>
---
drivers/net/ethernet/intel/ice/ice_parser.c | 40 +++
drivers/net/ethernet/intel/ice/ice_parser.h | 13 +
drivers/net/ethernet/intel/ice/ice_pg_cam.c | 321 ++++++++++++++++++++
drivers/net/ethernet/intel/ice/ice_pg_cam.h | 136 +++++++++
4 files changed, 510 insertions(+)
create mode 100644 drivers/net/ethernet/intel/ice/ice_pg_cam.c
create mode 100644 drivers/net/ethernet/intel/ice/ice_pg_cam.h
diff --git a/drivers/net/ethernet/intel/ice/ice_parser.c b/drivers/net/ethernet/intel/ice/ice_parser.c
index e2e49fcf69c1..b654135419fb 100644
--- a/drivers/net/ethernet/intel/ice/ice_parser.c
+++ b/drivers/net/ethernet/intel/ice/ice_parser.c
@@ -28,6 +28,18 @@ void *ice_parser_sect_item_get(u32 sect_type, void *section,
case ICE_SID_RXPARSER_METADATA_INIT:
size = ICE_SID_RXPARSER_METADATA_INIT_ENTRY_SIZE;
break;
+ case ICE_SID_RXPARSER_CAM:
+ size = ICE_SID_RXPARSER_CAM_ENTRY_SIZE;
+ break;
+ case ICE_SID_RXPARSER_PG_SPILL:
+ size = ICE_SID_RXPARSER_PG_SPILL_ENTRY_SIZE;
+ break;
+ case ICE_SID_RXPARSER_NOMATCH_CAM:
+ size = ICE_SID_RXPARSER_NOMATCH_CAM_ENTRY_SIZE;
+ break;
+ case ICE_SID_RXPARSER_NOMATCH_SPILL:
+ size = ICE_SID_RXPARSER_NOMATCH_SPILL_ENTRY_SIZE;
+ break;
default:
return NULL;
}
@@ -120,6 +132,30 @@ int ice_parser_create(struct ice_hw *hw, struct ice_parser **psr)
goto err;
}
+ p->pg_cam_table = ice_pg_cam_table_get(hw);
+ if (!p->pg_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
+ p->pg_sp_cam_table = ice_pg_sp_cam_table_get(hw);
+ if (!p->pg_sp_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
+ p->pg_nm_cam_table = ice_pg_nm_cam_table_get(hw);
+ if (!p->pg_nm_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
+ p->pg_nm_sp_cam_table = ice_pg_nm_sp_cam_table_get(hw);
+ if (!p->pg_nm_sp_cam_table) {
+ status = -EINVAL;
+ goto err;
+ }
+
*psr = p;
return 0;
err:
@@ -135,6 +171,10 @@ void ice_parser_destroy(struct ice_parser *psr)
{
devm_kfree(ice_hw_to_dev(psr->hw), psr->imem_table);
devm_kfree(ice_hw_to_dev(psr->hw), psr->mi_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_cam_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_sp_cam_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_nm_cam_table);
+ devm_kfree(ice_hw_to_dev(psr->hw), psr->pg_nm_sp_cam_table);
devm_kfree(ice_hw_to_dev(psr->hw), psr);
}
diff --git a/drivers/net/ethernet/intel/ice/ice_parser.h b/drivers/net/ethernet/intel/ice/ice_parser.h
index b52abad747b2..c709c56bf2e6 100644
--- a/drivers/net/ethernet/intel/ice/ice_parser.h
+++ b/drivers/net/ethernet/intel/ice/ice_parser.h
@@ -6,10 +6,15 @@
#include "ice_metainit.h"
#include "ice_imem.h"
+#include "ice_pg_cam.h"
#define ICE_SEC_DATA_OFFSET 4
#define ICE_SID_RXPARSER_IMEM_ENTRY_SIZE 48
#define ICE_SID_RXPARSER_METADATA_INIT_ENTRY_SIZE 24
+#define ICE_SID_RXPARSER_CAM_ENTRY_SIZE 16
+#define ICE_SID_RXPARSER_PG_SPILL_ENTRY_SIZE 17
+#define ICE_SID_RXPARSER_NOMATCH_CAM_ENTRY_SIZE 12
+#define ICE_SID_RXPARSER_NOMATCH_SPILL_ENTRY_SIZE 13
struct ice_parser {
struct ice_hw *hw; /* pointer to the hardware structure */
@@ -18,6 +23,14 @@ struct ice_parser {
struct ice_imem_item *imem_table;
/* load data from section ICE_SID_RXPARSER_METADATA_INIT */
struct ice_metainit_item *mi_table;
+ /* load data from section ICE_SID_RXPARSER_CAM */
+ struct ice_pg_cam_item *pg_cam_table;
+ /* load data from section ICE_SID_RXPARSER_PG_SPILL */
+ struct ice_pg_cam_item *pg_sp_cam_table;
+ /* load data from section ICE_SID_RXPARSER_NOMATCH_CAM */
+ struct ice_pg_nm_cam_item *pg_nm_cam_table;
+ /* load data from section ICE_SID_RXPARSER_NOMATCH_SPILL */
+ struct ice_pg_nm_cam_item *pg_nm_sp_cam_table;
};
int ice_parser_create(struct ice_hw *hw, struct ice_parser **psr);
diff --git a/drivers/net/ethernet/intel/ice/ice_pg_cam.c b/drivers/net/ethernet/intel/ice/ice_pg_cam.c
new file mode 100644
index 000000000000..82a8c916d5ce
--- /dev/null
+++ b/drivers/net/ethernet/intel/ice/ice_pg_cam.c
@@ -0,0 +1,321 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2023 Intel Corporation */
+
+#include "ice_common.h"
+#include "ice_parser_util.h"
+
+static void _ice_pg_cam_key_dump(struct ice_hw *hw, struct ice_pg_cam_key *key)
+{
+ dev_info(ice_hw_to_dev(hw), "key:\n");
+ dev_info(ice_hw_to_dev(hw), "\tvalid = %d\n", key->valid);
+ dev_info(ice_hw_to_dev(hw), "\tnode_id = %d\n", key->node_id);
+ dev_info(ice_hw_to_dev(hw), "\tflag0 = %d\n", key->flag0);
+ dev_info(ice_hw_to_dev(hw), "\tflag1 = %d\n", key->flag1);
+ dev_info(ice_hw_to_dev(hw), "\tflag2 = %d\n", key->flag2);
+ dev_info(ice_hw_to_dev(hw), "\tflag3 = %d\n", key->flag3);
+ dev_info(ice_hw_to_dev(hw), "\tboost_idx = %d\n", key->boost_idx);
+ dev_info(ice_hw_to_dev(hw), "\talu_reg = 0x%04x\n", key->alu_reg);
+ dev_info(ice_hw_to_dev(hw), "\tnext_proto = 0x%08x\n",
+ key->next_proto);
+}
+
+static void _ice_pg_nm_cam_key_dump(struct ice_hw *hw,
+ struct ice_pg_nm_cam_key *key)
+{
+ dev_info(ice_hw_to_dev(hw), "key:\n");
+ dev_info(ice_hw_to_dev(hw), "\tvalid = %d\n", key->valid);
+ dev_info(ice_hw_to_dev(hw), "\tnode_id = %d\n", key->node_id);
+ dev_info(ice_hw_to_dev(hw), "\tflag0 = %d\n", key->flag0);
+ dev_info(ice_hw_to_dev(hw), "\tflag1 = %d\n", key->flag1);
+ dev_info(ice_hw_to_dev(hw), "\tflag2 = %d\n", key->flag2);
+ dev_info(ice_hw_to_dev(hw), "\tflag3 = %d\n", key->flag3);
+ dev_info(ice_hw_to_dev(hw), "\tboost_idx = %d\n", key->boost_idx);
+ dev_info(ice_hw_to_dev(hw), "\talu_reg = 0x%04x\n", key->alu_reg);
+}
+
+static void _ice_pg_cam_action_dump(struct ice_hw *hw,
+ struct ice_pg_cam_action *action)
+{
+ dev_info(ice_hw_to_dev(hw), "action:\n");
+ dev_info(ice_hw_to_dev(hw), "\tnext_node = %d\n", action->next_node);
+ dev_info(ice_hw_to_dev(hw), "\tnext_pc = %d\n", action->next_pc);
+ dev_info(ice_hw_to_dev(hw), "\tis_pg = %d\n", action->is_pg);
+ dev_info(ice_hw_to_dev(hw), "\tproto_id = %d\n", action->proto_id);
+ dev_info(ice_hw_to_dev(hw), "\tis_mg = %d\n", action->is_mg);
+ dev_info(ice_hw_to_dev(hw), "\tmarker_id = %d\n", action->marker_id);
+ dev_info(ice_hw_to_dev(hw), "\tis_last_round = %d\n",
+ action->is_last_round);
+ dev_info(ice_hw_to_dev(hw), "\tho_polarity = %d\n",
+ action->ho_polarity);
+ dev_info(ice_hw_to_dev(hw), "\tho_inc = %d\n", action->ho_inc);
+}
+
+/**
+ * ice_pg_cam_dump - dump an parse graph cam info
+ * @hw: pointer to the hardware structure
+ * @item: parse graph cam to dump
+ */
+void ice_pg_cam_dump(struct ice_hw *hw, struct ice_pg_cam_item *item)
+{
+ dev_info(ice_hw_to_dev(hw), "index = %d\n", item->idx);
+ _ice_pg_cam_key_dump(hw, &item->key);
+ _ice_pg_cam_action_dump(hw, &item->action);
+}
+
+/**
+ * ice_pg_nm_cam_dump - dump an parse graph no match cam info
+ * @hw: pointer to the hardware structure
+ * @item: parse graph no match cam to dump
+ */
+void ice_pg_nm_cam_dump(struct ice_hw *hw, struct ice_pg_nm_cam_item *item)
+{
+ dev_info(ice_hw_to_dev(hw), "index = %d\n", item->idx);
+ _ice_pg_nm_cam_key_dump(hw, &item->key);
+ _ice_pg_cam_action_dump(hw, &item->action);
+}
+
+/** The function parses a 55 bits Parse Graph CAM Action with below format:
+ * BIT 0-10: Next Node ID (action->next_node)
+ * BIT 11-18: Next PC (action->next_pc)
+ * BIT 19: Is Protocol Group (action->is_pg)
+ * BIT 20-22: reserved
+ * BIT 23-30: Protocol ID (action->proto_id)
+ * BIT 31: Is Marker Group (action->is_mg)
+ * BIT 32-39: Marker ID (action->marker_id)
+ * BIT 40: Is Last Round (action->is_last_round)
+ * BIT 41: Header Offset Polarity (action->ho_poloarity)
+ * BIT 42-50: Header Offset Inc (action->ho_inc)
+ * BIT 51-54: reserved
+ */
+static void _ice_pg_cam_action_init(struct ice_pg_cam_action *action, u64 data)
+{
+ action->next_node = (u16)(data & ICE_PGCA_NN_M);
+ action->next_pc = (u8)((data >> ICE_PGCA_NP_S) & ICE_PGCA_NP_M);
+ action->is_pg = !!((data >> ICE_PGCA_IPG_S) & ICE_PGCA_IPG_M);
+ action->proto_id = ((data >> ICE_PGCA_PID_S) & ICE_PGCA_PID_M);
+ action->is_mg = !!((data >> ICE_PGCA_IMG_S) & ICE_PGCA_IMG_M);
+ action->marker_id = ((data >> ICE_PGCA_MID_S) & ICE_PGCA_MID_M);
+ action->is_last_round = !!((data >> ICE_PGCA_ILR_S) & ICE_PGCA_ILR_M);
+ action->ho_polarity = !!((data >> ICE_PGCA_HOP_S) & ICE_PGCA_HOP_M);
+ action->ho_inc = ((data >> ICE_PGCA_HOI_S) & ICE_PGCA_HOI_M);
+}
+
+/** The function parses a 41 bits Parse Graph NoMatch CAM Key with below format:
+ * BIT 0: Valid (key->valid)
+ * BIT 1-11: Node ID (key->node_id)
+ * BIT 12: Flag 0 (key->flag0)
+ * BIT 13: Flag 1 (key->flag1)
+ * BIT 14: Flag 2 (key->flag2)
+ * BIT 15: Flag 3 (key->flag3)
+ * BIT 16: Boost Hit (key->boost_idx to 0 if it is 0)
+ * BIT 17-24: Boost Index (key->boost_idx only if Boost Hit is not 0)
+ * BIT 25-40: ALU Reg (key->alu_reg)
+ */
+static void _ice_pg_nm_cam_key_init(struct ice_pg_nm_cam_key *key, u64 data)
+{
+ key->valid = !!(data & ICE_PGNCK_VLD_M);
+ key->node_id = (u16)((data >> ICE_PGNCK_NID_S) & ICE_PGNCK_NID_M);
+ key->flag0 = !!((data >> ICE_PGNCK_F0_S) & ICE_PGNCK_F0_M);
+ key->flag1 = !!((data >> ICE_PGNCK_F1_S) & ICE_PGNCK_F1_M);
+ key->flag2 = !!((data >> ICE_PGNCK_F2_S) & ICE_PGNCK_F2_M);
+ key->flag3 = !!((data >> ICE_PGNCK_F3_S) & ICE_PGNCK_F3_M);
+ if ((data >> ICE_PGNCK_BH_S) & ICE_PGNCK_BH_M)
+ key->boost_idx =
+ (u8)((data >> ICE_PGNCK_BI_S) & ICE_PGNCK_BI_M);
+ else
+ key->boost_idx = 0;
+ key->alu_reg = (u16)((data >> ICE_PGNCK_AR_S) & ICE_PGNCK_AR_M);
+}
+
+/** The function parses a 73 bits Parse Graph CAM Key with below format:
+ * BIT 0: Valid (key->valid)
+ * BIT 1-11: Node ID (key->node_id)
+ * BIT 12: Flag 0 (key->flag0)
+ * BIT 13: Flag 1 (key->flag1)
+ * BIT 14: Flag 2 (key->flag2)
+ * BIT 15: Flag 3 (key->flag3)
+ * BIT 16: Boost Hit (key->boost_idx to 0 if it is 0)
+ * BIT 17-24: Boost Index (key->boost_idx only if Boost Hit is not 0)
+ * BIT 25-40: ALU Reg (key->alu_reg)
+ * BIT 41-72: Next Proto Key (key->next_proto)
+ */
+static void _ice_pg_cam_key_init(struct ice_pg_cam_key *key, u8 *data)
+{
+ u64 d64 = *(u64 *)data;
+ u8 idd, off;
+
+ key->valid = !!(d64 & ICE_PGCK_VLD_M);
+ key->node_id = (u16)((d64 >> ICE_PGCK_NID_S) & ICE_PGCK_NID_M);
+ key->flag0 = !!((d64 >> ICE_PGCK_F0_S) & ICE_PGCK_F0_M);
+ key->flag1 = !!((d64 >> ICE_PGCK_F1_S) & ICE_PGCK_F1_M);
+ key->flag2 = !!((d64 >> ICE_PGCK_F2_S) & ICE_PGCK_F2_M);
+ key->flag3 = !!((d64 >> ICE_PGCK_F3_S) & ICE_PGCK_F3_M);
+ if ((d64 >> ICE_PGCK_BH_S) & ICE_PGCK_BH_M)
+ key->boost_idx = (u8)((d64 >> ICE_PGCK_BI_S) & ICE_PGCK_BI_M);
+ else
+ key->boost_idx = 0;
+ key->alu_reg = (u16)((d64 >> ICE_PGCK_AR_S) & ICE_PGCK_AR_M);
+
+ idd = ICE_PGCK_NPK_S / BITS_PER_BYTE;
+ off = ICE_PGCK_NPK_S % BITS_PER_BYTE;
+ d64 = *((u64 *)&data[idd]) >> off;
+
+ key->next_proto = (u32)(d64 & ICE_PGCK_NPK_M);
+}
+
+/** The function parses a 128 bits Parse Graph CAM Entry with below format:
+ * BIT 0-72: Key (ci->key)
+ * BIT 73-127: Action (ci->action)
+ */
+static void _ice_pg_cam_parse_item(struct ice_hw *hw, u16 idx, void *item,
+ void *data, int size)
+{
+ struct ice_pg_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 off;
+
+ ci->idx = idx;
+
+ _ice_pg_cam_key_init(&ci->key, buf);
+
+ off = ICE_PG_CAM_ACT_OFF % BITS_PER_BYTE;
+ d64 = *((u64 *)&buf[ICE_PG_CAM_ACT_OFF / BITS_PER_BYTE]) >> off;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_cam_dump(hw, ci);
+}
+
+/** The function parses a 136 bits Parse Graph Spill CAM Entry with below
+ * format:
+ * BIT 0-55: Action (ci->key)
+ * BIT 56-135: Key (ci->action)
+ */
+static void _ice_pg_sp_cam_parse_item(struct ice_hw *hw, u16 idx, void *item,
+ void *data, int size)
+{
+ struct ice_pg_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 idd;
+
+ ci->idx = idx;
+
+ d64 = *(u64 *)buf;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ idd = ICE_PG_SP_CAM_KEY_OFF / BITS_PER_BYTE;
+ _ice_pg_cam_key_init(&ci->key, &buf[idd]);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_cam_dump(hw, ci);
+}
+
+/** The function parses a 96 bits Parse Graph NoMatch CAM Entry with below
+ * format:
+ * BIT 0-40: Key (ci->key)
+ * BIT 41-95: Action (ci->action)
+ */
+static void _ice_pg_nm_cam_parse_item(struct ice_hw *hw, u16 idx, void *item,
+ void *data, int size)
+{
+ struct ice_pg_nm_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 off;
+
+ ci->idx = idx;
+
+ d64 = *(u64 *)buf;
+ _ice_pg_nm_cam_key_init(&ci->key, d64);
+
+ off = ICE_PG_NM_CAM_ACT_OFF % BITS_PER_BYTE;
+ d64 = *((u64 *)&buf[ICE_PG_NM_CAM_ACT_OFF / BITS_PER_BYTE]) >> off;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_nm_cam_dump(hw, ci);
+}
+
+/** The function parses a 104 bits Parse Graph NoMatch Spill CAM Entry with
+ * below format:
+ * BIT 0-55: Key (ci->key)
+ * BIT 56-103: Action (ci->action)
+ */
+static void _ice_pg_nm_sp_cam_parse_item(struct ice_hw *hw, u16 idx,
+ void *item, void *data, int size)
+{
+ struct ice_pg_nm_cam_item *ci = item;
+ u8 *buf = data;
+ u64 d64;
+ u8 off;
+
+ ci->idx = idx;
+
+ d64 = *(u64 *)buf;
+ _ice_pg_cam_action_init(&ci->action, d64);
+
+ off = ICE_PG_NM_SP_CAM_ACT_OFF % BITS_PER_BYTE;
+ d64 = *((u64 *)&buf[ICE_PG_NM_SP_CAM_ACT_OFF / BITS_PER_BYTE]) >> off;
+ _ice_pg_nm_cam_key_init(&ci->key, d64);
+
+ if (hw->debug_mask & ICE_DBG_PARSER)
+ ice_pg_nm_cam_dump(hw, ci);
+}
+
+/**
+ * ice_pg_cam_table_get - create a parse graph cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_cam_item *ice_pg_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_CAM,
+ sizeof(struct ice_pg_cam_item),
+ ICE_PG_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_cam_parse_item);
+}
+
+/**
+ * ice_pg_sp_cam_table_get - create a parse graph spill cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_cam_item *ice_pg_sp_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_PG_SPILL,
+ sizeof(struct ice_pg_cam_item),
+ ICE_PG_SP_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_sp_cam_parse_item);
+}
+
+/**
+ * ice_pg_nm_cam_table_get - create a parse graph no match cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_nm_cam_item *ice_pg_nm_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_nm_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_NOMATCH_CAM,
+ sizeof(struct ice_pg_nm_cam_item),
+ ICE_PG_NM_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_nm_cam_parse_item);
+}
+
+/**
+ * ice_pg_nm_sp_cam_table_get - create a parse graph no match spill cam table
+ * @hw: pointer to the hardware structure
+ */
+struct ice_pg_nm_cam_item *ice_pg_nm_sp_cam_table_get(struct ice_hw *hw)
+{
+ return (struct ice_pg_nm_cam_item *)
+ ice_parser_create_table(hw, ICE_SID_RXPARSER_NOMATCH_SPILL,
+ sizeof(struct ice_pg_nm_cam_item),
+ ICE_PG_NM_SP_CAM_TABLE_SIZE,
+ ice_parser_sect_item_get,
+ _ice_pg_nm_sp_cam_parse_item);
+}
diff --git a/drivers/net/ethernet/intel/ice/ice_pg_cam.h b/drivers/net/ethernet/intel/ice/ice_pg_cam.h
new file mode 100644
index 000000000000..0d5c84d380d3
--- /dev/null
+++ b/drivers/net/ethernet/intel/ice/ice_pg_cam.h
@@ -0,0 +1,136 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (C) 2023 Intel Corporation */
+
+#ifndef _ICE_PG_CAM_H_
+#define _ICE_PG_CAM_H_
+
+#define ICE_PG_CAM_TABLE_SIZE 2048
+#define ICE_PG_SP_CAM_TABLE_SIZE 128
+#define ICE_PG_NM_CAM_TABLE_SIZE 1024
+#define ICE_PG_NM_SP_CAM_TABLE_SIZE 64
+
+#define ICE_PGCK_VLD_S 0
+#define ICE_PGCK_VLD_M BITMAP_MASK(1)
+#define ICE_PGCK_NID_S 1
+#define ICE_PGCK_NID_M BITMAP_MASK(11)
+#define ICE_PGCK_F0_S 12
+#define ICE_PGCK_F0_M BITMAP_MASK(1)
+#define ICE_PGCK_F1_S 13
+#define ICE_PGCK_F1_M BITMAP_MASK(1)
+#define ICE_PGCK_F2_S 14
+#define ICE_PGCK_F2_M BITMAP_MASK(1)
+#define ICE_PGCK_F3_S 15
+#define ICE_PGCK_F3_M BITMAP_MASK(1)
+#define ICE_PGCK_BH_S 16
+#define ICE_PGCK_BH_M BITMAP_MASK(1)
+#define ICE_PGCK_BI_S 17
+#define ICE_PGCK_BI_M BITMAP_MASK(8)
+#define ICE_PGCK_AR_S 25
+#define ICE_PGCK_AR_M BITMAP_MASK(16)
+#define ICE_PGCK_NPK_S 41
+#define ICE_PGCK_NPK_M BITMAP_MASK(32)
+
+struct ice_pg_cam_key {
+ bool valid;
+ u16 node_id;
+ bool flag0;
+ bool flag1;
+ bool flag2;
+ bool flag3;
+ u8 boost_idx;
+ u16 alu_reg;
+ u32 next_proto;
+};
+
+#define ICE_PGNCK_VLD_S 0
+#define ICE_PGNCK_VLD_M BITMAP_MASK(1)
+#define ICE_PGNCK_NID_S 1
+#define ICE_PGNCK_NID_M BITMAP_MASK(11)
+#define ICE_PGNCK_F0_S 12
+#define ICE_PGNCK_F0_M BITMAP_MASK(1)
+#define ICE_PGNCK_F1_S 13
+#define ICE_PGNCK_F1_M BITMAP_MASK(1)
+#define ICE_PGNCK_F2_S 14
+#define ICE_PGNCK_F2_M BITMAP_MASK(1)
+#define ICE_PGNCK_F3_S 15
+#define ICE_PGNCK_F3_M BITMAP_MASK(1)
+#define ICE_PGNCK_BH_S 16
+#define ICE_PGNCK_BH_M BITMAP_MASK(1)
+#define ICE_PGNCK_BI_S 17
+#define ICE_PGNCK_BI_M BITMAP_MASK(8)
+#define ICE_PGNCK_AR_S 25
+#define ICE_PGNCK_AR_M BITMAP_MASK(16)
+
+struct ice_pg_nm_cam_key {
+ bool valid;
+ u16 node_id;
+ bool flag0;
+ bool flag1;
+ bool flag2;
+ bool flag3;
+ u8 boost_idx;
+ u16 alu_reg;
+};
+
+#define ICE_PGCA_NN_S 0
+#define ICE_PGCA_NN_M BITMAP_MASK(11)
+#define ICE_PGCA_NP_S 11
+#define ICE_PGCA_NP_M BITMAP_MASK(8)
+#define ICE_PGCA_IPG_S 19
+#define ICE_PGCA_IPG_M BITMAP_MASK(1)
+#define ICE_PGCA_PID_S 23
+#define ICE_PGCA_PID_M BITMAP_MASK(8)
+#define ICE_PGCA_IMG_S 31
+#define ICE_PGCA_IMG_M BITMAP_MASK(1)
+#define ICE_PGCA_MID_S 32
+#define ICE_PGCA_MID_M BITMAP_MASK(8)
+#define ICE_PGCA_ILR_S 40
+#define ICE_PGCA_ILR_M BITMAP_MASK(1)
+#define ICE_PGCA_HOP_S 41
+#define ICE_PGCA_HOP_M BITMAP_MASK(1)
+#define ICE_PGCA_HOI_S 42
+#define ICE_PGCA_HOI_M BITMAP_MASK(9)
+
+struct ice_pg_cam_action {
+ u16 next_node;
+ u8 next_pc;
+ bool is_pg;
+ u8 proto_id;
+ bool is_mg;
+ u8 marker_id;
+ bool is_last_round;
+ bool ho_polarity;
+ u16 ho_inc;
+};
+
+#define ICE_PG_CAM_KEY_OFF 0
+#define ICE_PG_CAM_ACT_OFF 73
+#define ICE_PG_SP_CAM_ACT_OFF 0
+#define ICE_PG_SP_CAM_KEY_OFF 56
+
+struct ice_pg_cam_item {
+ u16 idx;
+ struct ice_pg_cam_key key;
+ struct ice_pg_cam_action action;
+};
+
+#define ICE_PG_NM_CAM_KEY_OFF 0
+#define ICE_PG_NM_CAM_ACT_OFF 41
+#define ICE_PG_NM_SP_CAM_KEY_OFF 0
+#define ICE_PG_NM_SP_CAM_ACT_OFF 56
+
+struct ice_pg_nm_cam_item {
+ u16 idx;
+ struct ice_pg_nm_cam_key key;
+ struct ice_pg_cam_action action;
+};
+
+void ice_pg_cam_dump(struct ice_hw *hw, struct ice_pg_cam_item *item);
+void ice_pg_nm_cam_dump(struct ice_hw *hw, struct ice_pg_nm_cam_item *item);
+
+struct ice_pg_cam_item *ice_pg_cam_table_get(struct ice_hw *hw);
+struct ice_pg_cam_item *ice_pg_sp_cam_table_get(struct ice_hw *hw);
+
+struct ice_pg_nm_cam_item *ice_pg_nm_cam_table_get(struct ice_hw *hw);
+struct ice_pg_nm_cam_item *ice_pg_nm_sp_cam_table_get(struct ice_hw *hw);
+#endif /* _ICE_PG_CAM_H_ */
--
2.25.1
next prev parent reply other threads:[~2023-08-23 9:32 UTC|newest]
Thread overview: 228+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-05 5:46 [Intel-wired-lan] [PATCH iwl-next v2 00/15] Introduce the Parser Library Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 01/15] ice: add parser create and destroy skeleton Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 02/15] ice: init imem table for parser Junfeng Guo
2023-07-24 10:26 ` Ivan Vecera
2023-08-02 7:55 ` Guo, Junfeng
2023-08-02 15:56 ` Ivan Vecera
2023-08-03 3:28 ` Guo, Junfeng
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 03/15] ice: init metainit " Junfeng Guo
2023-07-24 10:31 ` Ivan Vecera
2023-08-02 7:56 ` Guo, Junfeng
2023-08-02 15:57 ` Ivan Vecera
2023-08-03 3:28 ` Guo, Junfeng
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 04/15] ice: init parse graph cam " Junfeng Guo
2023-07-24 10:37 ` Ivan Vecera
2023-08-02 7:56 ` Guo, Junfeng
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 05/15] ice: init boost tcam " Junfeng Guo
2023-07-24 10:39 ` Ivan Vecera
2023-08-02 7:56 ` Guo, Junfeng
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 06/15] ice: init ptype marker " Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 07/15] ice: init marker and protocol group " Junfeng Guo
2023-07-24 11:01 ` Ivan Vecera
2023-08-02 7:56 ` Guo, Junfeng
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 08/15] ice: init flag redirect " Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 09/15] ice: init XLT key builder " Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 10/15] ice: add parser runtime skeleton Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 11/15] ice: add internal help functions Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 12/15] ice: add parser execution main loop Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 13/15] ice: support double vlan mode configure for parser Junfeng Guo
2023-07-24 11:09 ` Ivan Vecera
2023-08-02 7:56 ` Guo, Junfeng
2023-08-02 15:59 ` Ivan Vecera
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 14/15] ice: add tunnel port support " Junfeng Guo
2023-06-05 5:46 ` [Intel-wired-lan] [PATCH iwl-next v2 15/15] ice: add API for parser profile initialization Junfeng Guo
2023-07-24 11:17 ` Ivan Vecera
2023-08-02 7:56 ` Guo, Junfeng
2023-08-02 15:59 ` Ivan Vecera
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 00/15] Introduce the Parser Library Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 01/15] ice: add parser create and destroy skeleton Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 00/15] Introduce the Parser Library Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 01/15] ice: add parser create and destroy skeleton Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 02/15] ice: init imem table for parser Junfeng Guo
2023-08-22 14:57 ` Ivan Vecera
2023-08-23 9:41 ` Guo, Junfeng
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 03/15] ice: init metainit " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 04/15] ice: init parse graph cam tables " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 05/15] ice: init boost tcam and label " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 06/15] ice: init ptype marker tcam table " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 07/15] ice: init marker and protocol group tables " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 08/15] ice: init flag redirect table " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 09/15] ice: init XLT key builder " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 10/15] ice: add parser runtime skeleton Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 11/15] ice: add internal help functions Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 12/15] ice: add parser execution main loop Junfeng Guo
2023-08-23 12:50 ` Ivan Vecera
2023-08-24 7:10 ` Guo, Junfeng
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 13/15] ice: support double vlan mode configure for parser Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 14/15] ice: add tunnel port support " Junfeng Guo
2023-08-17 9:42 ` [Intel-wired-lan] [PATCH net-next v4 15/15] ice: add API for parser profile initialization Junfeng Guo
2023-08-18 18:40 ` [Intel-wired-lan] [PATCH net-next v4 00/15] Introduce the Parser Library Tony Nguyen
2023-08-21 2:28 ` Guo, Junfeng
2023-08-25 2:48 ` Guo, Junfeng
2023-08-25 8:55 ` Przemek Kitszel
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 02/15] ice: init imem table for parser Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 03/15] ice: init metainit " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 04/15] ice: init parse graph cam tables " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 05/15] ice: init boost tcam and label " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 06/15] ice: init ptype marker tcam table " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 07/15] ice: init marker and protocol group tables " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 08/15] ice: init flag redirect table " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 09/15] ice: init XLT key builder " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 10/15] ice: add parser runtime skeleton Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 11/15] ice: add internal help functions Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 12/15] ice: add parser execution main loop Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 13/15] ice: support double vlan mode configure for parser Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 14/15] ice: add tunnel port support " Junfeng Guo
2023-08-17 9:34 ` [Intel-wired-lan] [PATCH net-next v3 15/15] ice: add API for parser profile initialization Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 00/15] Introduce the Parser Library Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 01/15] ice: add parser create and destroy skeleton Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 7:20 ` [Intel-wired-lan] " Simon Horman
2023-08-21 7:20 ` Simon Horman
2023-08-21 7:30 ` [Intel-wired-lan] " Simon Horman
2023-08-21 7:30 ` Simon Horman
2023-08-21 7:34 ` [Intel-wired-lan] " Guo, Junfeng
2023-08-21 7:34 ` Guo, Junfeng
2023-08-21 14:47 ` [Intel-wired-lan] " Simon Horman
2023-08-21 14:47 ` Simon Horman
2023-08-22 2:47 ` [Intel-wired-lan] " Guo, Junfeng
2023-08-22 2:47 ` Guo, Junfeng
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 02/15] ice: init imem table for parser Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 03/15] ice: init metainit " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 04/15] ice: init parse graph cam tables " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 05/15] ice: init boost tcam and label " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 06/15] ice: init ptype marker tcam table " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 07/15] ice: init marker and protocol group tables " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 08/15] ice: init flag redirect table " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 09/15] ice: init XLT key builder " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 10/15] ice: add parser runtime skeleton Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 11/15] ice: add internal help functions Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 12/15] ice: add parser execution main loop Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 13/15] ice: support double vlan mode configure for parser Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 14/15] ice: add tunnel port support " Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 2:38 ` [Intel-wired-lan] [PATCH iwl-next v5 15/15] ice: add API for parser profile initialization Junfeng Guo
2023-08-21 2:38 ` Junfeng Guo
2023-08-21 6:46 ` [Intel-wired-lan] [EXT] [PATCH iwl-next v5 00/15] Introduce the Parser Library Subbaraya Sundeep Bhatta
2023-08-21 6:46 ` Subbaraya Sundeep Bhatta
2023-08-21 7:15 ` [Intel-wired-lan] " Guo, Junfeng
2023-08-21 7:15 ` Guo, Junfeng
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 01/15] ice: add parser create and destroy skeleton Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 02/15] ice: init imem table for parser Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 03/15] ice: init metainit " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 04/15] ice: init parse graph cam tables " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 05/15] ice: init boost tcam and label " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 06/15] ice: init ptype marker tcam table " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 07/15] ice: init marker and protocol group tables " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 08/15] ice: init flag redirect table " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 09/15] ice: init XLT key builder " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 10/15] ice: add parser runtime skeleton Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 11/15] ice: add internal help functions Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 12/15] ice: add parser execution main loop Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 13/15] ice: support double vlan mode configure for parser Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 14/15] ice: add tunnel port support " Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-21 8:14 ` [Intel-wired-lan] [PATCH iwl-next v6 15/15] ice: add API for parser profile initialization Junfeng Guo
2023-08-21 8:14 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 00/15] Introduce the Parser Library Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 01/15] ice: add parser create and destroy skeleton Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 02/15] ice: init imem table for parser Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 03/15] ice: init metainit " Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo [this message]
2023-08-23 9:31 ` [PATCH iwl-next v7 04/15] ice: init parse graph cam tables " Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 05/15] ice: init boost tcam and label " Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 06/15] ice: init ptype marker tcam table " Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 07/15] ice: init marker and protocol group tables " Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 08/15] ice: init flag redirect table " Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 09/15] ice: init XLT key builder " Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 10/15] ice: add parser runtime skeleton Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 11/15] ice: add internal help functions Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 12/15] ice: add parser execution main loop Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 13/15] ice: support double vlan mode configure for parser Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 14/15] ice: add tunnel port support " Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-23 9:31 ` [Intel-wired-lan] [PATCH iwl-next v7 15/15] ice: add API for parser profile initialization Junfeng Guo
2023-08-23 9:31 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 00/15] Introduce the Parser Library Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 01/15] ice: add parser create and destroy skeleton Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 02/15] ice: init imem table for parser Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-28 9:55 ` [Intel-wired-lan] " Ivan Vecera
2023-08-28 9:55 ` Ivan Vecera
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 03/15] ice: init metainit " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 04/15] ice: init parse graph cam tables " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 05/15] ice: init boost tcam and label " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 06/15] ice: init ptype marker tcam table " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 07/15] ice: init marker and protocol group tables " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 08/15] ice: init flag redirect table " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 09/15] ice: init XLT key builder " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 10/15] ice: add parser runtime skeleton Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 11/15] ice: add internal help functions Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 12/15] ice: add parser execution main loop Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 15:39 ` [Intel-wired-lan] " Simon Horman
2023-08-24 15:39 ` Simon Horman
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 13/15] ice: support double vlan mode configure for parser Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:54 ` [Intel-wired-lan] [PATCH iwl-next v8 14/15] ice: add tunnel port support " Junfeng Guo
2023-08-24 7:54 ` Junfeng Guo
2023-08-24 7:55 ` [Intel-wired-lan] [PATCH iwl-next v8 15/15] ice: add API for parser profile initialization Junfeng Guo
2023-08-24 7:55 ` Junfeng Guo
2023-08-24 15:20 ` [Intel-wired-lan] [PATCH iwl-next v8 00/15] Introduce the Parser Library Jakub Kicinski
2023-08-24 15:20 ` Jakub Kicinski
2023-08-25 10:52 ` [Intel-wired-lan] " Alexander Lobakin
2023-08-25 10:52 ` Alexander Lobakin
2023-08-26 0:23 ` [Intel-wired-lan] " Jakub Kicinski
2023-08-26 0:23 ` Jakub Kicinski
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=20230823093158.782802-5-junfeng.guo@intel.com \
--to=junfeng.guo@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=horms@kernel.org \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=ivecera@redhat.com \
--cc=jesse.brandeburg@intel.com \
--cc=netdev@vger.kernel.org \
--cc=qi.z.zhang@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.