net/ice/base: refactor interface for flash read
[dpdk.git] / drivers / net / ice / base / ice_dcb.c
index b9643b5..3510385 100644 (file)
@@ -738,22 +738,27 @@ ice_aq_get_cee_dcb_cfg(struct ice_hw *hw,
 /**
  * ice_cee_to_dcb_cfg
  * @cee_cfg: pointer to CEE configuration struct
- * @dcbcfg: DCB configuration struct
+ * @pi: port information structure
  *
  * Convert CEE configuration from firmware to DCB configuration
  */
 static void
 ice_cee_to_dcb_cfg(struct ice_aqc_get_cee_dcb_cfg_resp *cee_cfg,
-                  struct ice_dcbx_cfg *dcbcfg)
+                  struct ice_port_info *pi)
 {
        u32 status, tlv_status = LE32_TO_CPU(cee_cfg->tlv_status);
        u32 ice_aqc_cee_status_mask, ice_aqc_cee_status_shift;
+       u8 i, j, err, sync, oper, app_index, ice_app_sel_type;
        u16 app_prio = LE16_TO_CPU(cee_cfg->oper_app_prio);
-       u8 i, err, sync, oper, app_index, ice_app_sel_type;
        u16 ice_aqc_cee_app_mask, ice_aqc_cee_app_shift;
+       struct ice_dcbx_cfg *cmp_dcbcfg, *dcbcfg;
        u16 ice_app_prot_id_type;
 
-       /* CEE PG data to ETS config */
+       dcbcfg = &pi->qos_cfg.local_dcbx_cfg;
+       dcbcfg->dcbx_mode = ICE_DCBX_MODE_CEE;
+       dcbcfg->tlv_status = tlv_status;
+
+       /* CEE PG data */
        dcbcfg->etscfg.maxtcs = cee_cfg->oper_num_tc;
 
        /* Note that the FW creates the oper_prio_tc nibbles reversed
@@ -780,10 +785,16 @@ ice_cee_to_dcb_cfg(struct ice_aqc_get_cee_dcb_cfg_resp *cee_cfg,
                }
        }
 
-       /* CEE PFC data to ETS config */
+       /* CEE PFC data */
        dcbcfg->pfc.pfcena = cee_cfg->oper_pfc_en;
        dcbcfg->pfc.pfccap = ICE_MAX_TRAFFIC_CLASS;
 
+       /* CEE APP TLV data */
+       if (dcbcfg->app_mode == ICE_DCBX_APPS_NON_WILLING)
+               cmp_dcbcfg = &pi->qos_cfg.desired_dcbx_cfg;
+       else
+               cmp_dcbcfg = &pi->qos_cfg.remote_dcbx_cfg;
+
        app_index = 0;
        for (i = 0; i < 3; i++) {
                if (i == 0) {
@@ -802,6 +813,18 @@ ice_cee_to_dcb_cfg(struct ice_aqc_get_cee_dcb_cfg_resp *cee_cfg,
                        ice_aqc_cee_app_shift = ICE_AQC_CEE_APP_ISCSI_S;
                        ice_app_sel_type = ICE_APP_SEL_TCPIP;
                        ice_app_prot_id_type = ICE_APP_PROT_ID_ISCSI;
+
+                       for (j = 0; j < cmp_dcbcfg->numapps; j++) {
+                               u16 prot_id = cmp_dcbcfg->app[j].prot_id;
+                               u8 sel = cmp_dcbcfg->app[j].selector;
+
+                               if  (sel == ICE_APP_SEL_TCPIP &&
+                                    (prot_id == ICE_APP_PROT_ID_ISCSI ||
+                                     prot_id == ICE_APP_PROT_ID_ISCSI_860)) {
+                                       ice_app_prot_id_type = prot_id;
+                                       break;
+                               }
+                       }
                } else {
                        /* FIP APP */
                        ice_aqc_cee_status_mask = ICE_AQC_CEE_FIP_STATUS_M;
@@ -850,9 +873,9 @@ ice_get_ieee_or_cee_dcb_cfg(struct ice_port_info *pi, u8 dcbx_mode)
                return ICE_ERR_PARAM;
 
        if (dcbx_mode == ICE_DCBX_MODE_IEEE)
-               dcbx_cfg = &pi->local_dcbx_cfg;
+               dcbx_cfg = &pi->qos_cfg.local_dcbx_cfg;
        else if (dcbx_mode == ICE_DCBX_MODE_CEE)
-               dcbx_cfg = &pi->desired_dcbx_cfg;
+               dcbx_cfg = &pi->qos_cfg.desired_dcbx_cfg;
 
        /* Get Local DCB Config in case of ICE_DCBX_MODE_IEEE
         * or get CEE DCB Desired Config in case of ICE_DCBX_MODE_CEE
@@ -863,7 +886,7 @@ ice_get_ieee_or_cee_dcb_cfg(struct ice_port_info *pi, u8 dcbx_mode)
                goto out;
 
        /* Get Remote DCB Config */
-       dcbx_cfg = &pi->remote_dcbx_cfg;
+       dcbx_cfg = &pi->qos_cfg.remote_dcbx_cfg;
        ret = ice_aq_get_dcb_cfg(pi->hw, ICE_AQ_LLDP_MIB_REMOTE,
                                 ICE_AQ_LLDP_BRID_TYPE_NEAREST_BRID, dcbx_cfg);
        /* Don't treat ENOENT as an error for Remote MIBs */
@@ -892,14 +915,11 @@ enum ice_status ice_get_dcb_cfg(struct ice_port_info *pi)
        ret = ice_aq_get_cee_dcb_cfg(pi->hw, &cee_cfg, NULL);
        if (ret == ICE_SUCCESS) {
                /* CEE mode */
-               dcbx_cfg = &pi->local_dcbx_cfg;
-               dcbx_cfg->dcbx_mode = ICE_DCBX_MODE_CEE;
-               dcbx_cfg->tlv_status = LE32_TO_CPU(cee_cfg.tlv_status);
-               ice_cee_to_dcb_cfg(&cee_cfg, dcbx_cfg);
                ret = ice_get_ieee_or_cee_dcb_cfg(pi, ICE_DCBX_MODE_CEE);
+               ice_cee_to_dcb_cfg(&cee_cfg, pi);
        } else if (pi->hw->adminq.sq_last_status == ICE_AQ_RC_ENOENT) {
                /* CEE mode not enabled try querying IEEE data */
-               dcbx_cfg = &pi->local_dcbx_cfg;
+               dcbx_cfg = &pi->qos_cfg.local_dcbx_cfg;
                dcbx_cfg->dcbx_mode = ICE_DCBX_MODE_IEEE;
                ret = ice_get_ieee_or_cee_dcb_cfg(pi, ICE_DCBX_MODE_IEEE);
        }
@@ -916,26 +936,26 @@ enum ice_status ice_get_dcb_cfg(struct ice_port_info *pi)
  */
 enum ice_status ice_init_dcb(struct ice_hw *hw, bool enable_mib_change)
 {
-       struct ice_port_info *pi = hw->port_info;
+       struct ice_qos_cfg *qos_cfg = &hw->port_info->qos_cfg;
        enum ice_status ret = ICE_SUCCESS;
 
        if (!hw->func_caps.common_cap.dcb)
                return ICE_ERR_NOT_SUPPORTED;
 
-       pi->is_sw_lldp = true;
+       qos_cfg->is_sw_lldp = true;
 
        /* Get DCBX status */
-       pi->dcbx_status = ice_get_dcbx_status(hw);
+       qos_cfg->dcbx_status = ice_get_dcbx_status(hw);
 
-       if (pi->dcbx_status == ICE_DCBX_STATUS_DONE ||
-           pi->dcbx_status == ICE_DCBX_STATUS_IN_PROGRESS ||
-           pi->dcbx_status == ICE_DCBX_STATUS_NOT_STARTED) {
+       if (qos_cfg->dcbx_status == ICE_DCBX_STATUS_DONE ||
+           qos_cfg->dcbx_status == ICE_DCBX_STATUS_IN_PROGRESS ||
+           qos_cfg->dcbx_status == ICE_DCBX_STATUS_NOT_STARTED) {
                /* Get current DCBX configuration */
-               ret = ice_get_dcb_cfg(pi);
+               ret = ice_get_dcb_cfg(hw->port_info);
                if (ret)
                        return ret;
-               pi->is_sw_lldp = false;
-       } else if (pi->dcbx_status == ICE_DCBX_STATUS_DIS) {
+               qos_cfg->is_sw_lldp = false;
+       } else if (qos_cfg->dcbx_status == ICE_DCBX_STATUS_DIS) {
                return ICE_ERR_NOT_READY;
        }
 
@@ -943,7 +963,7 @@ enum ice_status ice_init_dcb(struct ice_hw *hw, bool enable_mib_change)
        if (enable_mib_change) {
                ret = ice_aq_cfg_lldp_mib_change(hw, true, NULL);
                if (ret)
-                       pi->is_sw_lldp = true;
+                       qos_cfg->is_sw_lldp = true;
        }
 
        return ret;
@@ -958,21 +978,21 @@ enum ice_status ice_init_dcb(struct ice_hw *hw, bool enable_mib_change)
  */
 enum ice_status ice_cfg_lldp_mib_change(struct ice_hw *hw, bool ena_mib)
 {
-       struct ice_port_info *pi = hw->port_info;
+       struct ice_qos_cfg *qos_cfg = &hw->port_info->qos_cfg;
        enum ice_status ret;
 
        if (!hw->func_caps.common_cap.dcb)
                return ICE_ERR_NOT_SUPPORTED;
 
        /* Get DCBX status */
-       pi->dcbx_status = ice_get_dcbx_status(hw);
+       qos_cfg->dcbx_status = ice_get_dcbx_status(hw);
 
-       if (pi->dcbx_status == ICE_DCBX_STATUS_DIS)
+       if (qos_cfg->dcbx_status == ICE_DCBX_STATUS_DIS)
                return ICE_ERR_NOT_READY;
 
        ret = ice_aq_cfg_lldp_mib_change(hw, ena_mib, NULL);
        if (!ret)
-               pi->is_sw_lldp = !ena_mib;
+               qos_cfg->is_sw_lldp = !ena_mib;
 
        return ret;
 }
@@ -1269,7 +1289,7 @@ enum ice_status ice_set_dcb_cfg(struct ice_port_info *pi)
        hw = pi->hw;
 
        /* update the HW local config */
-       dcbcfg = &pi->local_dcbx_cfg;
+       dcbcfg = &pi->qos_cfg.local_dcbx_cfg;
        /* Allocate the LLDPDU */
        lldpmib = (u8 *)ice_malloc(hw, ICE_LLDPDU_SIZE);
        if (!lldpmib)
@@ -1328,7 +1348,7 @@ ice_update_port_tc_tree_cfg(struct ice_port_info *pi,
                            struct ice_aqc_port_ets_elem *buf)
 {
        struct ice_sched_node *node, *tc_node;
-       struct ice_aqc_get_elem elem;
+       struct ice_aqc_txsched_elem_data elem;
        enum ice_status status = ICE_SUCCESS;
        u32 teid1, teid2;
        u8 i, j;
@@ -1370,7 +1390,7 @@ ice_update_port_tc_tree_cfg(struct ice_port_info *pi,
                /* new TC */
                status = ice_sched_query_elem(pi->hw, teid2, &elem);
                if (!status)
-                       status = ice_sched_add_node(pi, 1, &elem.generic[0]);
+                       status = ice_sched_add_node(pi, 1, &elem);
                if (status)
                        break;
                /* update the TC number */