net/ice/base: split capabilities discovering
Using the new ice_aq_list_caps and ice_parse_(dev|func)_caps functions, replace ice_discover_caps with two functions that each take a pointer to the dev_caps and func_caps structures respectively. This makes the side effect of updating the hw->dev_caps and hw->func_caps obvious from reading the implementation of the function. Additionally, it opens the way for enabling reading of device capabilities outside of the initialization flow. By passing in a pointer, another caller will be able to read the capabilities without modifying the hw capabilities structures. As there are no other callers, it is safe to now remove ice_aq_discover_caps and ice_parse_caps. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> Acked-by: Qiming Yang <qiming.yang@intel.com>
This commit is contained in:
parent
8a15c69ce9
commit
897aef75dc
@ -87,7 +87,8 @@ enum ice_status ice_clear_pf_cfg(struct ice_hw *hw)
|
|||||||
* is returned in user specified buffer. Please interpret user specified
|
* is returned in user specified buffer. Please interpret user specified
|
||||||
* buffer as "manage_mac_read" response.
|
* buffer as "manage_mac_read" response.
|
||||||
* Response such as various MAC addresses are stored in HW struct (port.mac)
|
* Response such as various MAC addresses are stored in HW struct (port.mac)
|
||||||
* ice_aq_discover_caps is expected to be called before this function is called.
|
* ice_discover_dev_caps is expected to be called before this function is
|
||||||
|
* called.
|
||||||
*/
|
*/
|
||||||
static enum ice_status
|
static enum ice_status
|
||||||
ice_aq_manage_mac_read(struct ice_hw *hw, void *buf, u16 buf_size,
|
ice_aq_manage_mac_read(struct ice_hw *hw, void *buf, u16 buf_size,
|
||||||
@ -2155,30 +2156,6 @@ ice_parse_dev_caps(struct ice_hw *hw, struct ice_hw_dev_caps *dev_p,
|
|||||||
ice_recalc_port_limited_caps(hw, &dev_p->common_cap);
|
ice_recalc_port_limited_caps(hw, &dev_p->common_cap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* ice_parse_caps - parse function/device capabilities
|
|
||||||
* @hw: pointer to the HW struct
|
|
||||||
* @buf: pointer to a buffer containing function/device capability records
|
|
||||||
* @cap_count: number of capability records in the list
|
|
||||||
* @opc: type of capabilities list to parse
|
|
||||||
*
|
|
||||||
* Helper function to parse function(0x000a)/device(0x000b) capabilities list.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
ice_parse_caps(struct ice_hw *hw, void *buf, u32 cap_count,
|
|
||||||
enum ice_adminq_opc opc)
|
|
||||||
{
|
|
||||||
if (!buf)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (opc == ice_aqc_opc_list_dev_caps)
|
|
||||||
ice_parse_dev_caps(hw, &hw->dev_caps, buf, cap_count);
|
|
||||||
else if (opc == ice_aqc_opc_list_func_caps)
|
|
||||||
ice_parse_func_caps(hw, &hw->func_caps, buf, cap_count);
|
|
||||||
else
|
|
||||||
ice_debug(hw, ICE_DBG_INIT, "wrong opcode\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_aq_list_caps - query function/device capabilities
|
* ice_aq_list_caps - query function/device capabilities
|
||||||
* @hw: pointer to the HW struct
|
* @hw: pointer to the HW struct
|
||||||
@ -2222,47 +2199,18 @@ ice_aq_list_caps(struct ice_hw *hw, void *buf, u16 buf_size, u32 *cap_count,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_aq_discover_caps - query function/device capabilities
|
* ice_discover_dev_caps - Read and extract device capabilities
|
||||||
* @hw: pointer to the HW struct
|
|
||||||
* @buf: a virtual buffer to hold the capabilities
|
|
||||||
* @buf_size: Size of the virtual buffer
|
|
||||||
* @cap_count: cap count needed if AQ err==ENOMEM
|
|
||||||
* @opc: capabilities type to discover - pass in the command opcode
|
|
||||||
* @cd: pointer to command details structure or NULL
|
|
||||||
*
|
|
||||||
* Get the function(0x000a)/device(0x000b) capabilities description from
|
|
||||||
* the firmware.
|
|
||||||
*
|
|
||||||
* NOTE: this function has the side effect of updating the hw->dev_caps or
|
|
||||||
* hw->func_caps by way of calling ice_parse_caps.
|
|
||||||
*/
|
|
||||||
static enum ice_status
|
|
||||||
ice_aq_discover_caps(struct ice_hw *hw, void *buf, u16 buf_size, u32 *cap_count,
|
|
||||||
enum ice_adminq_opc opc, struct ice_sq_cd *cd)
|
|
||||||
{
|
|
||||||
u32 local_cap_count = 0;
|
|
||||||
enum ice_status status;
|
|
||||||
|
|
||||||
status = ice_aq_list_caps(hw, buf, buf_size, &local_cap_count,
|
|
||||||
opc, cd);
|
|
||||||
if (!status)
|
|
||||||
ice_parse_caps(hw, buf, local_cap_count, opc);
|
|
||||||
else if (hw->adminq.sq_last_status == ICE_AQ_RC_ENOMEM)
|
|
||||||
*cap_count = local_cap_count;
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ice_discover_caps - get info about the HW
|
|
||||||
* @hw: pointer to the hardware structure
|
* @hw: pointer to the hardware structure
|
||||||
* @opc: capabilities type to discover - pass in the command opcode
|
* @dev_caps: pointer to device capabilities structure
|
||||||
|
*
|
||||||
|
* Read the device capabilities and extract them into the dev_caps structure
|
||||||
|
* for later use.
|
||||||
*/
|
*/
|
||||||
static enum ice_status
|
static enum ice_status
|
||||||
ice_discover_caps(struct ice_hw *hw, enum ice_adminq_opc opc)
|
ice_discover_dev_caps(struct ice_hw *hw, struct ice_hw_dev_caps *dev_caps)
|
||||||
{
|
{
|
||||||
enum ice_status status;
|
enum ice_status status;
|
||||||
u32 cap_count;
|
u32 cap_count = 0;
|
||||||
void *cbuf;
|
void *cbuf;
|
||||||
|
|
||||||
cbuf = ice_malloc(hw, ICE_AQ_MAX_BUF_LEN);
|
cbuf = ice_malloc(hw, ICE_AQ_MAX_BUF_LEN);
|
||||||
@ -2275,8 +2223,44 @@ ice_discover_caps(struct ice_hw *hw, enum ice_adminq_opc opc)
|
|||||||
*/
|
*/
|
||||||
cap_count = ICE_AQ_MAX_BUF_LEN / sizeof(struct ice_aqc_list_caps_elem);
|
cap_count = ICE_AQ_MAX_BUF_LEN / sizeof(struct ice_aqc_list_caps_elem);
|
||||||
|
|
||||||
status = ice_aq_discover_caps(hw, cbuf, ICE_AQ_MAX_BUF_LEN, &cap_count,
|
status = ice_aq_list_caps(hw, cbuf, ICE_AQ_MAX_BUF_LEN, &cap_count,
|
||||||
opc, NULL);
|
ice_aqc_opc_list_dev_caps, NULL);
|
||||||
|
if (!status)
|
||||||
|
ice_parse_dev_caps(hw, dev_caps, cbuf, cap_count);
|
||||||
|
ice_free(hw, cbuf);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ice_discover_func_caps - Read and extract function capabilities
|
||||||
|
* @hw: pointer to the hardware structure
|
||||||
|
* @func_caps: pointer to function capabilities structure
|
||||||
|
*
|
||||||
|
* Read the function capabilities and extract them into the func_caps structure
|
||||||
|
* for later use.
|
||||||
|
*/
|
||||||
|
static enum ice_status
|
||||||
|
ice_discover_func_caps(struct ice_hw *hw, struct ice_hw_func_caps *func_caps)
|
||||||
|
{
|
||||||
|
enum ice_status status;
|
||||||
|
u32 cap_count = 0;
|
||||||
|
void *cbuf;
|
||||||
|
|
||||||
|
cbuf = ice_malloc(hw, ICE_AQ_MAX_BUF_LEN);
|
||||||
|
if (!cbuf)
|
||||||
|
return ICE_ERR_NO_MEMORY;
|
||||||
|
|
||||||
|
/* Although the driver doesn't know the number of capabilities the
|
||||||
|
* device will return, we can simply send a 4KB buffer, the maximum
|
||||||
|
* possible size that firmware can return.
|
||||||
|
*/
|
||||||
|
cap_count = ICE_AQ_MAX_BUF_LEN / sizeof(struct ice_aqc_list_caps_elem);
|
||||||
|
|
||||||
|
status = ice_aq_list_caps(hw, cbuf, ICE_AQ_MAX_BUF_LEN, &cap_count,
|
||||||
|
ice_aqc_opc_list_func_caps, NULL);
|
||||||
|
if (!status)
|
||||||
|
ice_parse_func_caps(hw, func_caps, cbuf, cap_count);
|
||||||
ice_free(hw, cbuf);
|
ice_free(hw, cbuf);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@ -2354,11 +2338,11 @@ enum ice_status ice_get_caps(struct ice_hw *hw)
|
|||||||
{
|
{
|
||||||
enum ice_status status;
|
enum ice_status status;
|
||||||
|
|
||||||
status = ice_discover_caps(hw, ice_aqc_opc_list_dev_caps);
|
status = ice_discover_dev_caps(hw, &hw->dev_caps);
|
||||||
if (!status)
|
if (status)
|
||||||
status = ice_discover_caps(hw, ice_aqc_opc_list_func_caps);
|
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
return ice_discover_func_caps(hw, &hw->func_caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user