mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
ice: Add code to process LLDP MIB change events
This patch adds support to process LLDP MIB change notifications sent by the firmware. Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
0deab659a6
commit
00cc3f1b3a
5 changed files with 47 additions and 3 deletions
|
@ -588,8 +588,7 @@ ice_parse_org_tlv(struct ice_lldp_org_tlv *tlv, struct ice_dcbx_cfg *dcbcfg)
|
||||||
*
|
*
|
||||||
* Parse DCB configuration from the LLDPDU
|
* Parse DCB configuration from the LLDPDU
|
||||||
*/
|
*/
|
||||||
static enum ice_status
|
enum ice_status ice_lldp_to_dcb_cfg(u8 *lldpmib, struct ice_dcbx_cfg *dcbcfg)
|
||||||
ice_lldp_to_dcb_cfg(u8 *lldpmib, struct ice_dcbx_cfg *dcbcfg)
|
|
||||||
{
|
{
|
||||||
struct ice_lldp_org_tlv *tlv;
|
struct ice_lldp_org_tlv *tlv;
|
||||||
enum ice_status ret = 0;
|
enum ice_status ret = 0;
|
||||||
|
@ -871,7 +870,7 @@ out:
|
||||||
*
|
*
|
||||||
* Get DCB configuration from the Firmware
|
* Get DCB configuration from the Firmware
|
||||||
*/
|
*/
|
||||||
static enum ice_status ice_get_dcb_cfg(struct ice_port_info *pi)
|
enum ice_status ice_get_dcb_cfg(struct ice_port_info *pi)
|
||||||
{
|
{
|
||||||
struct ice_aqc_get_cee_dcb_cfg_resp cee_cfg;
|
struct ice_aqc_get_cee_dcb_cfg_resp cee_cfg;
|
||||||
struct ice_dcbx_cfg *dcbx_cfg;
|
struct ice_dcbx_cfg *dcbx_cfg;
|
||||||
|
|
|
@ -121,6 +121,8 @@ struct ice_cee_app_prio {
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
u8 ice_get_dcbx_status(struct ice_hw *hw);
|
u8 ice_get_dcbx_status(struct ice_hw *hw);
|
||||||
|
enum ice_status ice_lldp_to_dcb_cfg(u8 *lldpmib, struct ice_dcbx_cfg *dcbcfg);
|
||||||
|
enum ice_status ice_get_dcb_cfg(struct ice_port_info *pi);
|
||||||
enum ice_status ice_set_dcb_cfg(struct ice_port_info *pi);
|
enum ice_status ice_set_dcb_cfg(struct ice_port_info *pi);
|
||||||
enum ice_status ice_init_dcb(struct ice_hw *hw);
|
enum ice_status ice_init_dcb(struct ice_hw *hw);
|
||||||
enum ice_status
|
enum ice_status
|
||||||
|
|
|
@ -320,3 +320,39 @@ dcb_init_err:
|
||||||
dev_err(dev, "DCB init failed\n");
|
dev_err(dev, "DCB init failed\n");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ice_dcb_process_lldp_set_mib_change - Process MIB change
|
||||||
|
* @pf: ptr to ice_pf
|
||||||
|
* @event: pointer to the admin queue receive event
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,
|
||||||
|
struct ice_rq_event_info *event)
|
||||||
|
{
|
||||||
|
if (pf->dcbx_cap & DCB_CAP_DCBX_LLD_MANAGED) {
|
||||||
|
struct ice_dcbx_cfg *dcbcfg, *prev_cfg;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
prev_cfg = &pf->hw.port_info->local_dcbx_cfg;
|
||||||
|
dcbcfg = devm_kmemdup(&pf->pdev->dev, prev_cfg,
|
||||||
|
sizeof(*dcbcfg), GFP_KERNEL);
|
||||||
|
if (!dcbcfg)
|
||||||
|
return;
|
||||||
|
|
||||||
|
err = ice_lldp_to_dcb_cfg(event->msg_buf, dcbcfg);
|
||||||
|
if (!err)
|
||||||
|
ice_pf_dcb_cfg(pf, dcbcfg);
|
||||||
|
|
||||||
|
devm_kfree(&pf->pdev->dev, dcbcfg);
|
||||||
|
|
||||||
|
/* Get updated DCBx data from firmware */
|
||||||
|
err = ice_get_dcb_cfg(pf->hw.port_info);
|
||||||
|
if (err)
|
||||||
|
dev_err(&pf->pdev->dev,
|
||||||
|
"Failed to get DCB config\n");
|
||||||
|
} else {
|
||||||
|
dev_dbg(&pf->pdev->dev,
|
||||||
|
"MIB Change Event in HOST mode\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
u8 ice_dcb_get_ena_tc(struct ice_dcbx_cfg *dcbcfg);
|
u8 ice_dcb_get_ena_tc(struct ice_dcbx_cfg *dcbcfg);
|
||||||
u8 ice_dcb_get_num_tc(struct ice_dcbx_cfg *dcbcfg);
|
u8 ice_dcb_get_num_tc(struct ice_dcbx_cfg *dcbcfg);
|
||||||
int ice_init_pf_dcb(struct ice_pf *pf);
|
int ice_init_pf_dcb(struct ice_pf *pf);
|
||||||
|
void
|
||||||
|
ice_dcb_process_lldp_set_mib_change(struct ice_pf *pf,
|
||||||
|
struct ice_rq_event_info *event);
|
||||||
#else
|
#else
|
||||||
static inline u8 ice_dcb_get_ena_tc(struct ice_dcbx_cfg __always_unused *dcbcfg)
|
static inline u8 ice_dcb_get_ena_tc(struct ice_dcbx_cfg __always_unused *dcbcfg)
|
||||||
{
|
{
|
||||||
|
@ -28,5 +31,6 @@ static inline int ice_init_pf_dcb(struct ice_pf *pf)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ice_dcb_process_lldp_set_mib_change(pf, event) do {} while (0)
|
||||||
#endif /* CONFIG_DCB */
|
#endif /* CONFIG_DCB */
|
||||||
#endif /* _ICE_DCB_LIB_H_ */
|
#endif /* _ICE_DCB_LIB_H_ */
|
||||||
|
|
|
@ -936,6 +936,9 @@ static int __ice_clean_ctrlq(struct ice_pf *pf, enum ice_ctl_q q_type)
|
||||||
case ice_aqc_opc_fw_logging:
|
case ice_aqc_opc_fw_logging:
|
||||||
ice_output_fw_log(hw, &event.desc, event.msg_buf);
|
ice_output_fw_log(hw, &event.desc, event.msg_buf);
|
||||||
break;
|
break;
|
||||||
|
case ice_aqc_opc_lldp_set_mib_change:
|
||||||
|
ice_dcb_process_lldp_set_mib_change(pf, &event);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
dev_dbg(&pf->pdev->dev,
|
dev_dbg(&pf->pdev->dev,
|
||||||
"%s Receive Queue unknown event 0x%04x ignored\n",
|
"%s Receive Queue unknown event 0x%04x ignored\n",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue