1 /* 2 * Copyright (c) 2016 - 2018 Cavium Inc. 3 * All rights reserved. 4 * www.cavium.com 5 * 6 * See LICENSE.qede_pmd for copyright and licensing details. 7 */ 8 9 #ifndef __ECORE_DCBX_API_H__ 10 #define __ECORE_DCBX_API_H__ 11 12 #include "ecore_status.h" 13 14 #define DCBX_CONFIG_MAX_APP_PROTOCOL 4 15 16 enum ecore_mib_read_type { 17 ECORE_DCBX_OPERATIONAL_MIB, 18 ECORE_DCBX_REMOTE_MIB, 19 ECORE_DCBX_LOCAL_MIB, 20 ECORE_DCBX_REMOTE_LLDP_MIB, 21 ECORE_DCBX_LOCAL_LLDP_MIB, 22 ECORE_DCBX_LLDP_TLVS 23 }; 24 25 struct ecore_dcbx_app_data { 26 bool enable; /* DCB enabled */ 27 u8 update; /* Update indication */ 28 u8 priority; /* Priority */ 29 u8 tc; /* Traffic Class */ 30 bool dscp_enable; /* DSCP enabled */ 31 u8 dscp_val; /* DSCP value */ 32 bool dont_add_vlan0; /* Do not insert a vlan tag with id 0 */ 33 }; 34 35 #ifndef __EXTRACT__LINUX__ 36 enum dcbx_protocol_type { 37 DCBX_PROTOCOL_ISCSI, 38 DCBX_PROTOCOL_FCOE, 39 DCBX_PROTOCOL_ROCE, 40 DCBX_PROTOCOL_ROCE_V2, 41 DCBX_PROTOCOL_ETH, 42 DCBX_PROTOCOL_IWARP, 43 DCBX_MAX_PROTOCOL_TYPE 44 }; 45 46 #define ECORE_LLDP_CHASSIS_ID_STAT_LEN 4 47 #define ECORE_LLDP_PORT_ID_STAT_LEN 4 48 #define ECORE_DCBX_MAX_APP_PROTOCOL 32 49 #define ECORE_MAX_PFC_PRIORITIES 8 50 #define ECORE_DCBX_DSCP_SIZE 64 51 52 struct ecore_dcbx_lldp_remote { 53 u32 peer_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 54 u32 peer_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 55 bool enable_rx; 56 bool enable_tx; 57 u32 tx_interval; 58 u32 max_credit; 59 }; 60 61 struct ecore_dcbx_lldp_local { 62 u32 local_chassis_id[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 63 u32 local_port_id[ECORE_LLDP_PORT_ID_STAT_LEN]; 64 }; 65 66 struct ecore_dcbx_app_prio { 67 u8 roce; 68 u8 roce_v2; 69 u8 fcoe; 70 u8 iscsi; 71 u8 eth; 72 }; 73 74 struct ecore_dbcx_pfc_params { 75 bool willing; 76 bool enabled; 77 u8 prio[ECORE_MAX_PFC_PRIORITIES]; 78 u8 max_tc; 79 }; 80 81 enum ecore_dcbx_sf_ieee_type { 82 ECORE_DCBX_SF_IEEE_ETHTYPE, 83 ECORE_DCBX_SF_IEEE_TCP_PORT, 84 ECORE_DCBX_SF_IEEE_UDP_PORT, 85 ECORE_DCBX_SF_IEEE_TCP_UDP_PORT 86 }; 87 88 struct ecore_app_entry { 89 bool ethtype; 90 enum ecore_dcbx_sf_ieee_type sf_ieee; 91 bool enabled; 92 u8 prio; 93 u16 proto_id; 94 enum dcbx_protocol_type proto_type; 95 }; 96 97 struct ecore_dcbx_params { 98 struct ecore_app_entry app_entry[ECORE_DCBX_MAX_APP_PROTOCOL]; 99 u16 num_app_entries; 100 bool app_willing; 101 bool app_valid; 102 bool app_error; 103 bool ets_willing; 104 bool ets_enabled; 105 bool ets_cbs; 106 u8 ets_pri_tc_tbl[ECORE_MAX_PFC_PRIORITIES]; 107 u8 ets_tc_bw_tbl[ECORE_MAX_PFC_PRIORITIES]; 108 u8 ets_tc_tsa_tbl[ECORE_MAX_PFC_PRIORITIES]; 109 struct ecore_dbcx_pfc_params pfc; 110 u8 max_ets_tc; 111 }; 112 113 struct ecore_dcbx_admin_params { 114 struct ecore_dcbx_params params; 115 bool valid; /* Indicate validity of params */ 116 }; 117 118 struct ecore_dcbx_remote_params { 119 struct ecore_dcbx_params params; 120 bool valid; /* Indicate validity of params */ 121 }; 122 123 struct ecore_dcbx_operational_params { 124 struct ecore_dcbx_app_prio app_prio; 125 struct ecore_dcbx_params params; 126 bool valid; /* Indicate validity of params */ 127 bool enabled; 128 bool ieee; 129 bool cee; 130 bool local; 131 u32 err; 132 }; 133 134 struct ecore_dcbx_dscp_params { 135 bool enabled; 136 u8 dscp_pri_map[ECORE_DCBX_DSCP_SIZE]; 137 }; 138 139 struct ecore_dcbx_get { 140 struct ecore_dcbx_operational_params operational; 141 struct ecore_dcbx_lldp_remote lldp_remote; 142 struct ecore_dcbx_lldp_local lldp_local; 143 struct ecore_dcbx_remote_params remote; 144 struct ecore_dcbx_admin_params local; 145 struct ecore_dcbx_dscp_params dscp; 146 }; 147 #endif 148 149 #define ECORE_DCBX_VERSION_DISABLED 0 150 #define ECORE_DCBX_VERSION_IEEE 1 151 #define ECORE_DCBX_VERSION_CEE 2 152 #define ECORE_DCBX_VERSION_DYNAMIC 3 153 154 struct ecore_dcbx_set { 155 #define ECORE_DCBX_OVERRIDE_STATE (1 << 0) 156 #define ECORE_DCBX_OVERRIDE_PFC_CFG (1 << 1) 157 #define ECORE_DCBX_OVERRIDE_ETS_CFG (1 << 2) 158 #define ECORE_DCBX_OVERRIDE_APP_CFG (1 << 3) 159 #define ECORE_DCBX_OVERRIDE_DSCP_CFG (1 << 4) 160 u32 override_flags; 161 bool enabled; 162 struct ecore_dcbx_admin_params config; 163 u32 ver_num; 164 struct ecore_dcbx_dscp_params dscp; 165 }; 166 167 struct ecore_dcbx_results { 168 bool dcbx_enabled; 169 u8 pf_id; 170 struct ecore_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE]; 171 }; 172 173 struct ecore_dcbx_app_metadata { 174 enum dcbx_protocol_type id; 175 const char *name; /* @DPDK */ 176 enum ecore_pci_personality personality; 177 }; 178 179 enum ecore_lldp_agent { 180 ECORE_LLDP_NEAREST_BRIDGE = 0, 181 ECORE_LLDP_NEAREST_NON_TPMR_BRIDGE, 182 ECORE_LLDP_NEAREST_CUSTOMER_BRIDGE, 183 ECORE_LLDP_MAX_AGENTS 184 }; 185 186 struct ecore_lldp_config_params { 187 enum ecore_lldp_agent agent; 188 u8 tx_interval; 189 u8 tx_hold; 190 u8 tx_credit; 191 bool rx_enable; 192 bool tx_enable; 193 u32 chassis_id_tlv[ECORE_LLDP_CHASSIS_ID_STAT_LEN]; 194 u32 port_id_tlv[ECORE_LLDP_PORT_ID_STAT_LEN]; 195 }; 196 197 #define ECORE_LLDP_SYS_TLV_SIZE 256 198 struct ecore_lldp_sys_tlvs { 199 bool discard_mandatory_tlv; 200 u8 buf[ECORE_LLDP_SYS_TLV_SIZE]; 201 u16 buf_size; 202 }; 203 204 enum _ecore_status_t ecore_dcbx_query_params(struct ecore_hwfn *, 205 struct ecore_dcbx_get *, 206 enum ecore_mib_read_type); 207 208 enum _ecore_status_t ecore_dcbx_get_config_params(struct ecore_hwfn *, 209 struct ecore_dcbx_set *); 210 211 enum _ecore_status_t ecore_dcbx_config_params(struct ecore_hwfn *, 212 struct ecore_ptt *, 213 struct ecore_dcbx_set *, 214 bool); 215 216 enum _ecore_status_t ecore_lldp_register_tlv(struct ecore_hwfn *p_hwfn, 217 struct ecore_ptt *p_ptt, 218 enum ecore_lldp_agent agent, 219 u8 tlv_type); 220 221 enum _ecore_status_t 222 ecore_lldp_get_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 223 struct ecore_lldp_config_params *p_params); 224 225 enum _ecore_status_t 226 ecore_lldp_set_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 227 struct ecore_lldp_config_params *p_params); 228 229 enum _ecore_status_t 230 ecore_lldp_set_system_tlvs(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, 231 struct ecore_lldp_sys_tlvs *p_params); 232 233 static const struct ecore_dcbx_app_metadata ecore_dcbx_app_update[] = { 234 {DCBX_PROTOCOL_ISCSI, "ISCSI", ECORE_PCI_ISCSI}, 235 {DCBX_PROTOCOL_FCOE, "FCOE", ECORE_PCI_FCOE}, 236 {DCBX_PROTOCOL_ROCE, "ROCE", ECORE_PCI_ETH_ROCE}, 237 {DCBX_PROTOCOL_ROCE_V2, "ROCE_V2", ECORE_PCI_ETH_ROCE}, 238 {DCBX_PROTOCOL_ETH, "ETH", ECORE_PCI_ETH}, 239 {DCBX_PROTOCOL_IWARP, "IWARP", ECORE_PCI_ETH_IWARP} 240 }; 241 242 #endif /* __ECORE_DCBX_API_H__ */ 243