2 * Copyright (c) 2016 QLogic Corporation.
6 * See LICENSE.qede_pmd for copyright and licensing details.
9 #ifndef __ECORE_DCBX_API_H__
10 #define __ECORE_DCBX_API_H__
12 #include "ecore_status.h"
14 #define DCBX_CONFIG_MAX_APP_PROTOCOL 4
16 enum ecore_mib_read_type {
17 ECORE_DCBX_OPERATIONAL_MIB,
18 ECORE_DCBX_REMOTE_MIB,
20 ECORE_DCBX_REMOTE_LLDP_MIB,
21 ECORE_DCBX_LOCAL_LLDP_MIB,
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 */
35 #ifndef __EXTRACT__LINUX__
36 enum dcbx_protocol_type {
40 DCBX_PROTOCOL_ROCE_V2,
43 DCBX_MAX_PROTOCOL_TYPE
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
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];
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];
66 struct ecore_dcbx_app_prio {
74 struct ecore_dbcx_pfc_params {
77 u8 prio[ECORE_MAX_PFC_PRIORITIES];
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
88 struct ecore_app_entry {
90 enum ecore_dcbx_sf_ieee_type sf_ieee;
94 enum dcbx_protocol_type proto_type;
97 struct ecore_dcbx_params {
98 struct ecore_app_entry app_entry[ECORE_DCBX_MAX_APP_PROTOCOL];
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;
113 struct ecore_dcbx_admin_params {
114 struct ecore_dcbx_params params;
115 bool valid; /* Indicate validity of params */
118 struct ecore_dcbx_remote_params {
119 struct ecore_dcbx_params params;
120 bool valid; /* Indicate validity of params */
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 */
134 struct ecore_dcbx_dscp_params {
136 u8 dscp_pri_map[ECORE_DCBX_DSCP_SIZE];
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;
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
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)
162 struct ecore_dcbx_admin_params config;
164 struct ecore_dcbx_dscp_params dscp;
167 struct ecore_dcbx_results {
170 struct ecore_dcbx_app_data arr[DCBX_MAX_PROTOCOL_TYPE];
173 struct ecore_dcbx_app_metadata {
174 enum dcbx_protocol_type id;
175 const char *name; /* @DPDK */
176 enum ecore_pci_personality personality;
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
186 struct ecore_lldp_config_params {
187 enum ecore_lldp_agent agent;
193 u32 chassis_id_tlv[ECORE_LLDP_CHASSIS_ID_STAT_LEN];
194 u32 port_id_tlv[ECORE_LLDP_PORT_ID_STAT_LEN];
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];
204 enum _ecore_status_t ecore_dcbx_query_params(struct ecore_hwfn *,
205 struct ecore_dcbx_get *,
206 enum ecore_mib_read_type);
208 enum _ecore_status_t ecore_dcbx_get_config_params(struct ecore_hwfn *,
209 struct ecore_dcbx_set *);
211 enum _ecore_status_t ecore_dcbx_config_params(struct ecore_hwfn *,
213 struct ecore_dcbx_set *,
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,
222 ecore_lldp_get_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
223 struct ecore_lldp_config_params *p_params);
226 ecore_lldp_set_params(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
227 struct ecore_lldp_config_params *p_params);
230 ecore_lldp_set_system_tlvs(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt,
231 struct ecore_lldp_sys_tlvs *p_params);
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}
242 #endif /* __ECORE_DCBX_API_H__ */