net/ice/base: add functions for resource counter
1. ice_alloc_res_cntr - allocate resource counter 2. ice_free_res_cntr - free resource counter 3. ice_alloc_vlan_res_counter - allocate vlan resource counter 4. ice_free_vlan_res_counter - free vlan resource counter These APIs will be used when try to count the number of a flow be hit. Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> Reviewed-by: Qiming Yang <qiming.yang@intel.com> Reviewed-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
This commit is contained in:
parent
d781ccbdd1
commit
f1ffdec6cf
@ -3238,9 +3238,106 @@ void ice_remove_vsi_fltr(struct ice_hw *hw, u16 vsi_handle)
|
||||
ice_remove_vsi_lkup_fltr(hw, vsi_handle, ICE_SW_LKUP_PROMISC_VLAN);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_alloc_res_cntr - allocating resource counter
|
||||
* @hw: pointer to the hardware structure
|
||||
* @type: type of resource
|
||||
* @alloc_shared: if set it is shared else dedicated
|
||||
* @num_items: number of entries requested for FD resource type
|
||||
* @counter_id: counter index returned by AQ call
|
||||
*/
|
||||
enum ice_status
|
||||
ice_alloc_res_cntr(struct ice_hw *hw, u8 type, u8 alloc_shared, u16 num_items,
|
||||
u16 *counter_id)
|
||||
{
|
||||
struct ice_aqc_alloc_free_res_elem *buf;
|
||||
enum ice_status status;
|
||||
u16 buf_len;
|
||||
|
||||
/* Allocate resource */
|
||||
buf_len = sizeof(*buf);
|
||||
buf = (struct ice_aqc_alloc_free_res_elem *)
|
||||
ice_malloc(hw, buf_len);
|
||||
if (!buf)
|
||||
return ICE_ERR_NO_MEMORY;
|
||||
|
||||
buf->num_elems = CPU_TO_LE16(num_items);
|
||||
buf->res_type = CPU_TO_LE16(((type << ICE_AQC_RES_TYPE_S) &
|
||||
ICE_AQC_RES_TYPE_M) | alloc_shared);
|
||||
|
||||
status = ice_aq_alloc_free_res(hw, 1, buf, buf_len,
|
||||
ice_aqc_opc_alloc_res, NULL);
|
||||
if (status)
|
||||
goto exit;
|
||||
|
||||
*counter_id = LE16_TO_CPU(buf->elem[0].e.sw_resp);
|
||||
|
||||
exit:
|
||||
ice_free(hw, buf);
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_free_res_cntr - free resource counter
|
||||
* @hw: pointer to the hardware structure
|
||||
* @type: type of resource
|
||||
* @alloc_shared: if set it is shared else dedicated
|
||||
* @num_items: number of entries to be freed for FD resource type
|
||||
* @counter_id: counter ID resource which needs to be freed
|
||||
*/
|
||||
enum ice_status
|
||||
ice_free_res_cntr(struct ice_hw *hw, u8 type, u8 alloc_shared, u16 num_items,
|
||||
u16 counter_id)
|
||||
{
|
||||
struct ice_aqc_alloc_free_res_elem *buf;
|
||||
enum ice_status status;
|
||||
u16 buf_len;
|
||||
|
||||
/* Free resource */
|
||||
buf_len = sizeof(*buf);
|
||||
buf = (struct ice_aqc_alloc_free_res_elem *)
|
||||
ice_malloc(hw, buf_len);
|
||||
if (!buf)
|
||||
return ICE_ERR_NO_MEMORY;
|
||||
|
||||
buf->num_elems = CPU_TO_LE16(num_items);
|
||||
buf->res_type = CPU_TO_LE16(((type << ICE_AQC_RES_TYPE_S) &
|
||||
ICE_AQC_RES_TYPE_M) | alloc_shared);
|
||||
buf->elem[0].e.sw_resp = CPU_TO_LE16(counter_id);
|
||||
|
||||
status = ice_aq_alloc_free_res(hw, 1, buf, buf_len,
|
||||
ice_aqc_opc_free_res, NULL);
|
||||
if (status)
|
||||
ice_debug(hw, ICE_DBG_SW,
|
||||
"counter resource could not be freed\n");
|
||||
|
||||
ice_free(hw, buf);
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_alloc_vlan_res_counter - obtain counter resource for VLAN type
|
||||
* @hw: pointer to the hardware structure
|
||||
* @counter_id: returns counter index
|
||||
*/
|
||||
enum ice_status ice_alloc_vlan_res_counter(struct ice_hw *hw, u16 *counter_id)
|
||||
{
|
||||
return ice_alloc_res_cntr(hw, ICE_AQC_RES_TYPE_VLAN_COUNTER,
|
||||
ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1,
|
||||
counter_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_free_vlan_res_counter - Free counter resource for VLAN type
|
||||
* @hw: pointer to the hardware structure
|
||||
* @counter_id: counter index to be freed
|
||||
*/
|
||||
enum ice_status ice_free_vlan_res_counter(struct ice_hw *hw, u16 counter_id)
|
||||
{
|
||||
return ice_free_res_cntr(hw, ICE_AQC_RES_TYPE_VLAN_COUNTER,
|
||||
ICE_AQC_RES_TYPE_FLAG_DEDICATED, 1,
|
||||
counter_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_replay_vsi_fltr - Replay filters for requested VSI
|
||||
|
@ -338,6 +338,12 @@ enum ice_status
|
||||
ice_alloc_vlan_res_counter(struct ice_hw *hw, u16 *counter_id);
|
||||
enum ice_status
|
||||
ice_free_vlan_res_counter(struct ice_hw *hw, u16 counter_id);
|
||||
enum ice_status
|
||||
ice_alloc_res_cntr(struct ice_hw *hw, u8 type, u8 alloc_shared, u16 num_items,
|
||||
u16 *counter_id);
|
||||
enum ice_status
|
||||
ice_free_res_cntr(struct ice_hw *hw, u8 type, u8 alloc_shared, u16 num_items,
|
||||
u16 counter_id);
|
||||
|
||||
/* Switch/bridge related commands */
|
||||
enum ice_status ice_update_sw_rule_bridge_mode(struct ice_hw *hw);
|
||||
|
Loading…
Reference in New Issue
Block a user