1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* Copyright(c) 2013 - 2018 Intel Corporation. */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef _I40E_DCB_H_ 5*4882a593Smuzhiyun #define _I40E_DCB_H_ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include "i40e_type.h" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #define I40E_DCBX_STATUS_IN_PROGRESS 1 10*4882a593Smuzhiyun #define I40E_DCBX_STATUS_DONE 2 11*4882a593Smuzhiyun #define I40E_DCBX_STATUS_DISABLED 7 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define I40E_TLV_TYPE_END 0 14*4882a593Smuzhiyun #define I40E_TLV_TYPE_ORG 127 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define I40E_IEEE_8021QAZ_OUI 0x0080C2 17*4882a593Smuzhiyun #define I40E_IEEE_SUBTYPE_ETS_CFG 9 18*4882a593Smuzhiyun #define I40E_IEEE_SUBTYPE_ETS_REC 10 19*4882a593Smuzhiyun #define I40E_IEEE_SUBTYPE_PFC_CFG 11 20*4882a593Smuzhiyun #define I40E_IEEE_SUBTYPE_APP_PRI 12 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #define I40E_CEE_DCBX_OUI 0x001b21 23*4882a593Smuzhiyun #define I40E_CEE_DCBX_TYPE 2 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #define I40E_CEE_SUBTYPE_PG_CFG 2 26*4882a593Smuzhiyun #define I40E_CEE_SUBTYPE_PFC_CFG 3 27*4882a593Smuzhiyun #define I40E_CEE_SUBTYPE_APP_PRI 4 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #define I40E_CEE_MAX_FEAT_TYPE 3 30*4882a593Smuzhiyun #define I40E_LLDP_CURRENT_STATUS_XL710_OFFSET 0x2B 31*4882a593Smuzhiyun #define I40E_LLDP_CURRENT_STATUS_X722_OFFSET 0x31 32*4882a593Smuzhiyun #define I40E_LLDP_CURRENT_STATUS_OFFSET 1 33*4882a593Smuzhiyun #define I40E_LLDP_CURRENT_STATUS_SIZE 1 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* Defines for LLDP TLV header */ 36*4882a593Smuzhiyun #define I40E_LLDP_TLV_LEN_SHIFT 0 37*4882a593Smuzhiyun #define I40E_LLDP_TLV_LEN_MASK (0x01FF << I40E_LLDP_TLV_LEN_SHIFT) 38*4882a593Smuzhiyun #define I40E_LLDP_TLV_TYPE_SHIFT 9 39*4882a593Smuzhiyun #define I40E_LLDP_TLV_TYPE_MASK (0x7F << I40E_LLDP_TLV_TYPE_SHIFT) 40*4882a593Smuzhiyun #define I40E_LLDP_TLV_SUBTYPE_SHIFT 0 41*4882a593Smuzhiyun #define I40E_LLDP_TLV_SUBTYPE_MASK (0xFF << I40E_LLDP_TLV_SUBTYPE_SHIFT) 42*4882a593Smuzhiyun #define I40E_LLDP_TLV_OUI_SHIFT 8 43*4882a593Smuzhiyun #define I40E_LLDP_TLV_OUI_MASK (0xFFFFFF << I40E_LLDP_TLV_OUI_SHIFT) 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* Defines for IEEE ETS TLV */ 46*4882a593Smuzhiyun #define I40E_IEEE_ETS_MAXTC_SHIFT 0 47*4882a593Smuzhiyun #define I40E_IEEE_ETS_MAXTC_MASK (0x7 << I40E_IEEE_ETS_MAXTC_SHIFT) 48*4882a593Smuzhiyun #define I40E_IEEE_ETS_CBS_SHIFT 6 49*4882a593Smuzhiyun #define I40E_IEEE_ETS_CBS_MASK BIT(I40E_IEEE_ETS_CBS_SHIFT) 50*4882a593Smuzhiyun #define I40E_IEEE_ETS_WILLING_SHIFT 7 51*4882a593Smuzhiyun #define I40E_IEEE_ETS_WILLING_MASK BIT(I40E_IEEE_ETS_WILLING_SHIFT) 52*4882a593Smuzhiyun #define I40E_IEEE_ETS_PRIO_0_SHIFT 0 53*4882a593Smuzhiyun #define I40E_IEEE_ETS_PRIO_0_MASK (0x7 << I40E_IEEE_ETS_PRIO_0_SHIFT) 54*4882a593Smuzhiyun #define I40E_IEEE_ETS_PRIO_1_SHIFT 4 55*4882a593Smuzhiyun #define I40E_IEEE_ETS_PRIO_1_MASK (0x7 << I40E_IEEE_ETS_PRIO_1_SHIFT) 56*4882a593Smuzhiyun #define I40E_CEE_PGID_PRIO_0_SHIFT 0 57*4882a593Smuzhiyun #define I40E_CEE_PGID_PRIO_0_MASK (0xF << I40E_CEE_PGID_PRIO_0_SHIFT) 58*4882a593Smuzhiyun #define I40E_CEE_PGID_PRIO_1_SHIFT 4 59*4882a593Smuzhiyun #define I40E_CEE_PGID_PRIO_1_MASK (0xF << I40E_CEE_PGID_PRIO_1_SHIFT) 60*4882a593Smuzhiyun #define I40E_CEE_PGID_STRICT 15 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun /* Defines for IEEE TSA types */ 63*4882a593Smuzhiyun #define I40E_IEEE_TSA_STRICT 0 64*4882a593Smuzhiyun #define I40E_IEEE_TSA_ETS 2 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* Defines for IEEE PFC TLV */ 67*4882a593Smuzhiyun #define I40E_IEEE_PFC_CAP_SHIFT 0 68*4882a593Smuzhiyun #define I40E_IEEE_PFC_CAP_MASK (0xF << I40E_IEEE_PFC_CAP_SHIFT) 69*4882a593Smuzhiyun #define I40E_IEEE_PFC_MBC_SHIFT 6 70*4882a593Smuzhiyun #define I40E_IEEE_PFC_MBC_MASK BIT(I40E_IEEE_PFC_MBC_SHIFT) 71*4882a593Smuzhiyun #define I40E_IEEE_PFC_WILLING_SHIFT 7 72*4882a593Smuzhiyun #define I40E_IEEE_PFC_WILLING_MASK BIT(I40E_IEEE_PFC_WILLING_SHIFT) 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* Defines for IEEE APP TLV */ 75*4882a593Smuzhiyun #define I40E_IEEE_APP_SEL_SHIFT 0 76*4882a593Smuzhiyun #define I40E_IEEE_APP_SEL_MASK (0x7 << I40E_IEEE_APP_SEL_SHIFT) 77*4882a593Smuzhiyun #define I40E_IEEE_APP_PRIO_SHIFT 5 78*4882a593Smuzhiyun #define I40E_IEEE_APP_PRIO_MASK (0x7 << I40E_IEEE_APP_PRIO_SHIFT) 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #pragma pack(1) 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /* IEEE 802.1AB LLDP Organization specific TLV */ 84*4882a593Smuzhiyun struct i40e_lldp_org_tlv { 85*4882a593Smuzhiyun __be16 typelength; 86*4882a593Smuzhiyun __be32 ouisubtype; 87*4882a593Smuzhiyun u8 tlvinfo[1]; 88*4882a593Smuzhiyun }; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun struct i40e_cee_tlv_hdr { 91*4882a593Smuzhiyun __be16 typelen; 92*4882a593Smuzhiyun u8 operver; 93*4882a593Smuzhiyun u8 maxver; 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun struct i40e_cee_ctrl_tlv { 97*4882a593Smuzhiyun struct i40e_cee_tlv_hdr hdr; 98*4882a593Smuzhiyun __be32 seqno; 99*4882a593Smuzhiyun __be32 ackno; 100*4882a593Smuzhiyun }; 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun struct i40e_cee_feat_tlv { 103*4882a593Smuzhiyun struct i40e_cee_tlv_hdr hdr; 104*4882a593Smuzhiyun u8 en_will_err; /* Bits: |En|Will|Err|Reserved(5)| */ 105*4882a593Smuzhiyun #define I40E_CEE_FEAT_TLV_WILLING_MASK 0x40 106*4882a593Smuzhiyun u8 subtype; 107*4882a593Smuzhiyun u8 tlvinfo[1]; 108*4882a593Smuzhiyun }; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun struct i40e_cee_app_prio { 111*4882a593Smuzhiyun __be16 protocol; 112*4882a593Smuzhiyun u8 upper_oui_sel; /* Bits: |Upper OUI(6)|Selector(2)| */ 113*4882a593Smuzhiyun #define I40E_CEE_APP_SELECTOR_MASK 0x03 114*4882a593Smuzhiyun __be16 lower_oui; 115*4882a593Smuzhiyun u8 prio_map; 116*4882a593Smuzhiyun }; 117*4882a593Smuzhiyun #pragma pack() 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun i40e_status i40e_get_dcbx_status(struct i40e_hw *hw, 120*4882a593Smuzhiyun u16 *status); 121*4882a593Smuzhiyun i40e_status i40e_lldp_to_dcb_config(u8 *lldpmib, 122*4882a593Smuzhiyun struct i40e_dcbx_config *dcbcfg); 123*4882a593Smuzhiyun i40e_status i40e_aq_get_dcb_config(struct i40e_hw *hw, u8 mib_type, 124*4882a593Smuzhiyun u8 bridgetype, 125*4882a593Smuzhiyun struct i40e_dcbx_config *dcbcfg); 126*4882a593Smuzhiyun i40e_status i40e_get_dcb_config(struct i40e_hw *hw); 127*4882a593Smuzhiyun i40e_status i40e_init_dcb(struct i40e_hw *hw, bool enable_mib_change); 128*4882a593Smuzhiyun #endif /* _I40E_DCB_H_ */ 129