net/ice/base: add functions to get allocated resources
1. ice_aq_get_res_alloc - get allocated resources. 2. ice_aq_get_res_descs - get allocated resource descriptors. These APIs may help to PMD to enable some debug utilities to dump the resource allocation status. 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
157d00901f
commit
d781ccbdd1
@ -281,6 +281,34 @@ struct ice_aqc_get_sw_cfg_resp {
|
||||
|
||||
#define ICE_AQC_RES_TYPE_FLAG_DEDICATED 0x00
|
||||
|
||||
#define ICE_AQC_RES_TYPE_S 0
|
||||
#define ICE_AQC_RES_TYPE_M (0x07F << ICE_AQC_RES_TYPE_S)
|
||||
|
||||
/* Get Resource Allocation command (indirect 0x0204) */
|
||||
struct ice_aqc_get_res_alloc {
|
||||
__le16 resp_elem_num; /* Used in response, reserved in command */
|
||||
u8 reserved[6];
|
||||
__le32 addr_high;
|
||||
__le32 addr_low;
|
||||
};
|
||||
|
||||
/* Get Resource Allocation Response Buffer per response */
|
||||
struct ice_aqc_get_res_resp_elem {
|
||||
__le16 res_type; /* Types defined above cmd 0x0204 */
|
||||
__le16 total_capacity; /* Resources available to all PF's */
|
||||
__le16 total_function; /* Resources allocated for a PF */
|
||||
__le16 total_shared; /* Resources allocated as shared */
|
||||
__le16 total_free; /* Resources un-allocated/not reserved by any PF */
|
||||
};
|
||||
|
||||
/* Buffer for Get Resource command */
|
||||
struct ice_aqc_get_res_resp {
|
||||
/* Number of resource entries to be calculated using
|
||||
* datalen/sizeof(struct ice_aqc_cmd_resp)).
|
||||
* Value of 'datalen' gets updated as part of response.
|
||||
*/
|
||||
struct ice_aqc_get_res_resp_elem elem[1];
|
||||
};
|
||||
|
||||
|
||||
/* Allocate Resources command (indirect 0x0208)
|
||||
@ -314,6 +342,28 @@ struct ice_aqc_alloc_free_res_elem {
|
||||
};
|
||||
|
||||
|
||||
/* Get Allocated Resource Descriptors Command (indirect 0x020A) */
|
||||
struct ice_aqc_get_allocd_res_desc {
|
||||
union {
|
||||
struct {
|
||||
__le16 res; /* Types defined above cmd 0x0204 */
|
||||
__le16 first_desc;
|
||||
__le32 reserved;
|
||||
} cmd;
|
||||
struct {
|
||||
__le16 res;
|
||||
__le16 next_desc;
|
||||
__le16 num_desc;
|
||||
__le16 reserved;
|
||||
} resp;
|
||||
} ops;
|
||||
__le32 addr_high;
|
||||
__le32 addr_low;
|
||||
};
|
||||
|
||||
struct ice_aqc_get_allocd_res_desc_resp {
|
||||
struct ice_aqc_res_elem elem[1];
|
||||
};
|
||||
|
||||
|
||||
/* Add VSI (indirect 0x0210)
|
||||
@ -1912,7 +1962,6 @@ struct ice_aq_desc {
|
||||
struct ice_aqc_query_node_to_root query_node_to_root;
|
||||
struct ice_aqc_cfg_l2_node_cgd cfg_l2_node_cgd;
|
||||
struct ice_aqc_rl_profile rl_profile;
|
||||
|
||||
struct ice_aqc_nvm nvm;
|
||||
struct ice_aqc_nvm_cfg nvm_cfg;
|
||||
struct ice_aqc_nvm_checksum nvm_checksum;
|
||||
@ -1930,6 +1979,8 @@ struct ice_aq_desc {
|
||||
struct ice_aqc_get_clear_fw_log get_clear_fw_log;
|
||||
struct ice_aqc_set_mac_lb set_mac_lb;
|
||||
struct ice_aqc_alloc_free_res_cmd sw_res_ctrl;
|
||||
struct ice_aqc_get_res_alloc get_res;
|
||||
struct ice_aqc_get_allocd_res_desc get_res_desc;
|
||||
struct ice_aqc_set_mac_cfg set_mac_cfg;
|
||||
struct ice_aqc_set_event_mask set_event_mask;
|
||||
struct ice_aqc_get_link_status get_link_status;
|
||||
|
@ -2042,6 +2042,89 @@ exit:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_aq_get_res_alloc - get allocated resources
|
||||
* @hw: pointer to the HW struct
|
||||
* @num_entries: pointer to u16 to store the number of resource entries returned
|
||||
* @buf: pointer to user-supplied buffer
|
||||
* @buf_size: size of buff
|
||||
* @cd: pointer to command details structure or NULL
|
||||
*
|
||||
* The user-supplied buffer must be large enough to store the resource
|
||||
* information for all resource types. Each resource type is an
|
||||
* ice_aqc_get_res_resp_data_elem structure.
|
||||
*/
|
||||
enum ice_status
|
||||
ice_aq_get_res_alloc(struct ice_hw *hw, u16 *num_entries, void *buf,
|
||||
u16 buf_size, struct ice_sq_cd *cd)
|
||||
{
|
||||
struct ice_aqc_get_res_alloc *resp;
|
||||
enum ice_status status;
|
||||
struct ice_aq_desc desc;
|
||||
|
||||
if (!buf)
|
||||
return ICE_ERR_BAD_PTR;
|
||||
|
||||
if (buf_size < ICE_AQ_GET_RES_ALLOC_BUF_LEN)
|
||||
return ICE_ERR_INVAL_SIZE;
|
||||
|
||||
resp = &desc.params.get_res;
|
||||
|
||||
ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_get_res_alloc);
|
||||
status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd);
|
||||
|
||||
if (!status && num_entries)
|
||||
*num_entries = LE16_TO_CPU(resp->resp_elem_num);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_aq_get_res_descs - get allocated resource descriptors
|
||||
* @hw: pointer to the hardware structure
|
||||
* @num_entries: number of resource entries in buffer
|
||||
* @buf: Indirect buffer to hold data parameters and response
|
||||
* @buf_size: size of buffer for indirect commands
|
||||
* @res_type: resource type
|
||||
* @res_shared: is resource shared
|
||||
* @desc_id: input - first desc ID to start; output - next desc ID
|
||||
* @cd: pointer to command details structure or NULL
|
||||
*/
|
||||
enum ice_status
|
||||
ice_aq_get_res_descs(struct ice_hw *hw, u16 num_entries,
|
||||
struct ice_aqc_get_allocd_res_desc_resp *buf,
|
||||
u16 buf_size, u16 res_type, bool res_shared, u16 *desc_id,
|
||||
struct ice_sq_cd *cd)
|
||||
{
|
||||
struct ice_aqc_get_allocd_res_desc *cmd;
|
||||
struct ice_aq_desc desc;
|
||||
enum ice_status status;
|
||||
|
||||
ice_debug(hw, ICE_DBG_TRACE, "ice_aq_get_res_descs");
|
||||
|
||||
cmd = &desc.params.get_res_desc;
|
||||
|
||||
if (!buf)
|
||||
return ICE_ERR_PARAM;
|
||||
|
||||
if (buf_size != (num_entries * sizeof(*buf)))
|
||||
return ICE_ERR_PARAM;
|
||||
|
||||
ice_fill_dflt_direct_cmd_desc(&desc, ice_aqc_opc_get_allocd_res_desc);
|
||||
|
||||
cmd->ops.cmd.res = CPU_TO_LE16(((res_type << ICE_AQC_RES_TYPE_S) &
|
||||
ICE_AQC_RES_TYPE_M) | (res_shared ?
|
||||
ICE_AQC_RES_TYPE_FLAG_SHARED : 0));
|
||||
cmd->ops.cmd.first_desc = CPU_TO_LE16(*desc_id);
|
||||
|
||||
desc.flags |= CPU_TO_LE16(ICE_AQ_FLAG_RD);
|
||||
|
||||
status = ice_aq_send_cmd(hw, &desc, buf, buf_size, cd);
|
||||
if (!status)
|
||||
*desc_id = LE16_TO_CPU(cmd->ops.resp.next_desc);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ice_add_mac - Add a MAC address based filter rule
|
||||
|
@ -13,6 +13,10 @@
|
||||
#define ICE_DFLT_VSI_INVAL 0xff
|
||||
|
||||
|
||||
/* Worst case buffer length for ice_aqc_opc_get_res_alloc */
|
||||
#define ICE_MAX_RES_TYPES 0x80
|
||||
#define ICE_AQ_GET_RES_ALLOC_BUF_LEN \
|
||||
(ICE_MAX_RES_TYPES * sizeof(struct ice_aqc_get_res_resp_elem))
|
||||
|
||||
#define ICE_VSI_INVAL_ID 0xFFFF
|
||||
#define ICE_INVAL_Q_HANDLE 0xFFFF
|
||||
@ -343,6 +347,14 @@ ice_alloc_sw(struct ice_hw *hw, bool ena_stats, bool shared_res, u16 *sw_id,
|
||||
enum ice_status
|
||||
ice_free_sw(struct ice_hw *hw, u16 sw_id, u16 counter_id);
|
||||
enum ice_status
|
||||
ice_aq_get_res_alloc(struct ice_hw *hw, u16 *num_entries, void *buf,
|
||||
u16 buf_size, struct ice_sq_cd *cd);
|
||||
enum ice_status
|
||||
ice_aq_get_res_descs(struct ice_hw *hw, u16 num_entries,
|
||||
struct ice_aqc_get_allocd_res_desc_resp *buf,
|
||||
u16 buf_size, u16 res_type, bool res_shared, u16 *desc_id,
|
||||
struct ice_sq_cd *cd);
|
||||
enum ice_status
|
||||
ice_add_vlan(struct ice_hw *hw, struct LIST_HEAD_TYPE *m_list);
|
||||
enum ice_status ice_add_mac(struct ice_hw *hw, struct LIST_HEAD_TYPE *m_lst);
|
||||
enum ice_status ice_remove_mac(struct ice_hw *hw, struct LIST_HEAD_TYPE *m_lst);
|
||||
|
Loading…
x
Reference in New Issue
Block a user