net/ice/base: add package ptype enable information
Scan the 'Marker PType TCAM' session to retrieve the Rx parser PTYPE enable information from the current package. Signed-off-by: Haiyue Wang <haiyue.wang@intel.com> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
This commit is contained in:
parent
171522b829
commit
b3d554edfe
@ -316,6 +316,84 @@ ice_pkg_enum_entry(struct ice_seg *ice_seg, struct ice_pkg_enum *state,
|
||||
return entry;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_hw_ptype_ena - check if the PTYPE is enabled or not
|
||||
* @hw: pointer to the HW structure
|
||||
* @ptype: the hardware PTYPE
|
||||
*/
|
||||
bool ice_hw_ptype_ena(struct ice_hw *hw, u16 ptype)
|
||||
{
|
||||
return ptype < ICE_FLOW_PTYPE_MAX &&
|
||||
ice_is_bit_set(hw->hw_ptype, ptype);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_marker_ptype_tcam_handler
|
||||
* @sect_type: section type
|
||||
* @section: pointer to section
|
||||
* @index: index of the Marker PType TCAM entry to be returned
|
||||
* @offset: pointer to receive absolute offset, always 0 for ptype TCAM sections
|
||||
*
|
||||
* This is a callback function that can be passed to ice_pkg_enum_entry.
|
||||
* Handles enumeration of individual Marker PType TCAM entries.
|
||||
*/
|
||||
static void *
|
||||
ice_marker_ptype_tcam_handler(u32 sect_type, void *section, u32 index,
|
||||
u32 *offset)
|
||||
{
|
||||
struct ice_marker_ptype_tcam_section *marker_ptype;
|
||||
|
||||
if (!section)
|
||||
return NULL;
|
||||
|
||||
if (sect_type != ICE_SID_RXPARSER_MARKER_PTYPE)
|
||||
return NULL;
|
||||
|
||||
/* cppcheck-suppress nullPointer */
|
||||
if (index > ICE_MAX_MARKER_PTYPE_TCAMS_IN_BUF)
|
||||
return NULL;
|
||||
|
||||
if (offset)
|
||||
*offset = 0;
|
||||
|
||||
marker_ptype = (struct ice_marker_ptype_tcam_section *)section;
|
||||
if (index >= LE16_TO_CPU(marker_ptype->count))
|
||||
return NULL;
|
||||
|
||||
return marker_ptype->tcam + index;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_fill_hw_ptype - fill the enabled PTYPE bit information
|
||||
* @hw: pointer to the HW structure
|
||||
*/
|
||||
static void
|
||||
ice_fill_hw_ptype(struct ice_hw *hw)
|
||||
{
|
||||
struct ice_marker_ptype_tcam_entry *tcam;
|
||||
struct ice_seg *seg = hw->seg;
|
||||
struct ice_pkg_enum state;
|
||||
|
||||
ice_zero_bitmap(hw->hw_ptype, ICE_FLOW_PTYPE_MAX);
|
||||
if (!seg)
|
||||
return;
|
||||
|
||||
ice_memset(&state, 0, sizeof(state), ICE_NONDMA_MEM);
|
||||
|
||||
do {
|
||||
tcam = (struct ice_marker_ptype_tcam_entry *)
|
||||
ice_pkg_enum_entry(seg, &state,
|
||||
ICE_SID_RXPARSER_MARKER_PTYPE, NULL,
|
||||
ice_marker_ptype_tcam_handler);
|
||||
if (tcam &&
|
||||
LE16_TO_CPU(tcam->addr) < ICE_MARKER_PTYPE_TCAM_ADDR_MAX &&
|
||||
LE16_TO_CPU(tcam->ptype) < ICE_FLOW_PTYPE_MAX)
|
||||
ice_set_bit(LE16_TO_CPU(tcam->ptype), hw->hw_ptype);
|
||||
|
||||
seg = NULL;
|
||||
} while (tcam);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_boost_tcam_handler
|
||||
* @sect_type: section type
|
||||
@ -1541,6 +1619,7 @@ enum ice_status ice_init_pkg(struct ice_hw *hw, u8 *buf, u32 len)
|
||||
*/
|
||||
ice_init_pkg_regs(hw);
|
||||
ice_fill_blk_tbls(hw);
|
||||
ice_fill_hw_ptype(hw);
|
||||
ice_get_prof_index_max(hw);
|
||||
} else {
|
||||
ice_debug(hw, ICE_DBG_INIT, "package load failed, %d\n",
|
||||
|
@ -54,6 +54,9 @@ bool ice_tunnel_port_in_use(struct ice_hw *hw, u16 port, u16 *index);
|
||||
bool
|
||||
ice_tunnel_get_type(struct ice_hw *hw, u16 port, enum ice_tunnel_type *type);
|
||||
|
||||
/* RX parser PType functions */
|
||||
bool ice_hw_ptype_ena(struct ice_hw *hw, u16 ptype);
|
||||
|
||||
/* XLT2/VSI group functions */
|
||||
enum ice_status
|
||||
ice_vsig_find_vsi(struct ice_hw *hw, enum ice_block blk, u16 vsi, u16 *vsig);
|
||||
|
@ -472,6 +472,25 @@ struct ice_boost_tcam_section {
|
||||
sizeof(struct ice_boost_tcam_entry), \
|
||||
sizeof(struct ice_boost_tcam_entry))
|
||||
|
||||
/* package Marker PType TCAM entry */
|
||||
struct ice_marker_ptype_tcam_entry {
|
||||
#define ICE_MARKER_PTYPE_TCAM_ADDR_MAX 1024
|
||||
__le16 addr;
|
||||
__le16 ptype;
|
||||
u8 keys[20];
|
||||
};
|
||||
|
||||
struct ice_marker_ptype_tcam_section {
|
||||
__le16 count;
|
||||
__le16 reserved;
|
||||
struct ice_marker_ptype_tcam_entry tcam[STRUCT_HACK_VAR_LEN];
|
||||
};
|
||||
|
||||
#define ICE_MAX_MARKER_PTYPE_TCAMS_IN_BUF ICE_MAX_ENTRIES_IN_BUF( \
|
||||
ice_struct_size((struct ice_marker_ptype_tcam_section *)0, tcam, 1) - \
|
||||
sizeof(struct ice_marker_ptype_tcam_entry), \
|
||||
sizeof(struct ice_marker_ptype_tcam_entry))
|
||||
|
||||
struct ice_xlt1_section {
|
||||
__le16 count;
|
||||
__le16 offset;
|
||||
|
@ -995,6 +995,7 @@ struct ice_hw {
|
||||
struct ice_lock rss_locks; /* protect RSS configuration */
|
||||
struct LIST_HEAD_TYPE rss_list_head;
|
||||
struct ice_vlan_mode_ops vlan_mode_ops;
|
||||
ice_declare_bitmap(hw_ptype, ICE_FLOW_PTYPE_MAX);
|
||||
};
|
||||
|
||||
/* Statistics collected by each port, VSI, VEB, and S-channel */
|
||||
|
Loading…
Reference in New Issue
Block a user