1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright (c) 2016 - 2018 Cavium Inc.
7 #ifndef __ECORE_DCBX_API_H__
8 #define __ECORE_DCBX_API_H__
10 #include "ecore_status.h"
12 #define DCBX_CONFIG_MAX_APP_PROTOCOL 4
14 enum ecore_mib_read_type
{
15 ECORE_DCBX_OPERATIONAL_MIB
,
16 ECORE_DCBX_REMOTE_MIB
,
18 ECORE_DCBX_REMOTE_LLDP_MIB
,
19 ECORE_DCBX_LOCAL_LLDP_MIB
,
23 struct ecore_dcbx_app_data
{
24 bool enable
; /* DCB enabled */
25 u8 update
; /* Update indication */
26 u8 priority
; /* Priority */
27 u8 tc
; /* Traffic Class */
28 bool dscp_enable
; /* DSCP enabled */
29 u8 dscp_val
; /* DSCP value */
30 bool dont_add_vlan0
; /* Do not insert a vlan tag with id 0 */
33 #ifndef __EXTRACT__LINUX__
34 enum dcbx_protocol_type
{
38 DCBX_PROTOCOL_ROCE_V2
,
41 DCBX_MAX_PROTOCOL_TYPE
44 #define ECORE_LLDP_CHASSIS_ID_STAT_LEN 4
45 #define ECORE_LLDP_PORT_ID_STAT_LEN 4
46 #define ECORE_DCBX_MAX_APP_PROTOCOL 32
47 #define ECORE_MAX_PFC_PRIORITIES 8
48 #define ECORE_DCBX_DSCP_SIZE 64
50 struct ecore_dcbx_lldp_remote
{
51 u32 peer_chassis_id
[ECORE_LLDP_CHASSIS_ID_STAT_LEN
];
52 u32 peer_port_id
[ECORE_LLDP_PORT_ID_STAT_LEN
];
59 struct ecore_dcbx_lldp_local
{
60 u32 local_chassis_id
[ECORE_LLDP_CHASSIS_ID_STAT_LEN
];
61 u32 local_port_id
[ECORE_LLDP_PORT_ID_STAT_LEN
];
64 struct ecore_dcbx_app_prio
{
72 struct ecore_dbcx_pfc_params
{
75 u8 prio
[ECORE_MAX_PFC_PRIORITIES
];
79 enum ecore_dcbx_sf_ieee_type
{
80 ECORE_DCBX_SF_IEEE_ETHTYPE
,
81 ECORE_DCBX_SF_IEEE_TCP_PORT
,
82 ECORE_DCBX_SF_IEEE_UDP_PORT
,
83 ECORE_DCBX_SF_IEEE_TCP_UDP_PORT
86 struct ecore_app_entry
{
88 enum ecore_dcbx_sf_ieee_type sf_ieee
;
92 enum dcbx_protocol_type proto_type
;
95 struct ecore_dcbx_params
{
96 struct ecore_app_entry app_entry
[ECORE_DCBX_MAX_APP_PROTOCOL
];
104 u8 ets_pri_tc_tbl
[ECORE_MAX_PFC_PRIORITIES
];
105 u8 ets_tc_bw_tbl
[ECORE_MAX_PFC_PRIORITIES
];
106 u8 ets_tc_tsa_tbl
[ECORE_MAX_PFC_PRIORITIES
];
107 struct ecore_dbcx_pfc_params pfc
;
111 struct ecore_dcbx_admin_params
{
112 struct ecore_dcbx_params params
;
113 bool valid
; /* Indicate validity of params */
116 struct ecore_dcbx_remote_params
{
117 struct ecore_dcbx_params params
;
118 bool valid
; /* Indicate validity of params */
121 struct ecore_dcbx_operational_params
{
122 struct ecore_dcbx_app_prio app_prio
;
123 struct ecore_dcbx_params params
;
124 bool valid
; /* Indicate validity of params */
132 struct ecore_dcbx_dscp_params
{
134 u8 dscp_pri_map
[ECORE_DCBX_DSCP_SIZE
];
137 struct ecore_dcbx_get
{
138 struct ecore_dcbx_operational_params operational
;
139 struct ecore_dcbx_lldp_remote lldp_remote
;
140 struct ecore_dcbx_lldp_local lldp_local
;
141 struct ecore_dcbx_remote_params remote
;
142 struct ecore_dcbx_admin_params local
;
143 struct ecore_dcbx_dscp_params dscp
;
147 #define ECORE_DCBX_VERSION_DISABLED 0
148 #define ECORE_DCBX_VERSION_IEEE 1
149 #define ECORE_DCBX_VERSION_CEE 2
150 #define ECORE_DCBX_VERSION_DYNAMIC 3
152 struct ecore_dcbx_set
{
153 #define ECORE_DCBX_OVERRIDE_STATE (1 << 0)
154 #define ECORE_DCBX_OVERRIDE_PFC_CFG (1 << 1)
155 #define ECORE_DCBX_OVERRIDE_ETS_CFG (1 << 2)
156 #define ECORE_DCBX_OVERRIDE_APP_CFG (1 << 3)
157 #define ECORE_DCBX_OVERRIDE_DSCP_CFG (1 << 4)
160 struct ecore_dcbx_admin_params config
;
162 struct ecore_dcbx_dscp_params dscp
;
165 struct ecore_dcbx_results
{
168 struct ecore_dcbx_app_data arr
[DCBX_MAX_PROTOCOL_TYPE
];
171 struct ecore_dcbx_app_metadata
{
172 enum dcbx_protocol_type id
;
173 const char *name
; /* @DPDK */
174 enum ecore_pci_personality personality
;
177 enum ecore_lldp_agent
{
178 ECORE_LLDP_NEAREST_BRIDGE
= 0,
179 ECORE_LLDP_NEAREST_NON_TPMR_BRIDGE
,
180 ECORE_LLDP_NEAREST_CUSTOMER_BRIDGE
,
181 ECORE_LLDP_MAX_AGENTS
184 struct ecore_lldp_config_params
{
185 enum ecore_lldp_agent agent
;
191 u32 chassis_id_tlv
[ECORE_LLDP_CHASSIS_ID_STAT_LEN
];
192 u32 port_id_tlv
[ECORE_LLDP_PORT_ID_STAT_LEN
];
195 #define ECORE_LLDP_SYS_TLV_SIZE 256
196 struct ecore_lldp_sys_tlvs
{
197 bool discard_mandatory_tlv
;
198 u8 buf
[ECORE_LLDP_SYS_TLV_SIZE
];
202 enum _ecore_status_t
ecore_dcbx_query_params(struct ecore_hwfn
*,
203 struct ecore_dcbx_get
*,
204 enum ecore_mib_read_type
);
206 enum _ecore_status_t
ecore_dcbx_get_config_params(struct ecore_hwfn
*,
207 struct ecore_dcbx_set
*);
209 enum _ecore_status_t
ecore_dcbx_config_params(struct ecore_hwfn
*,
211 struct ecore_dcbx_set
*,
214 enum _ecore_status_t
ecore_lldp_register_tlv(struct ecore_hwfn
*p_hwfn
,
215 struct ecore_ptt
*p_ptt
,
216 enum ecore_lldp_agent agent
,
220 ecore_lldp_get_params(struct ecore_hwfn
*p_hwfn
, struct ecore_ptt
*p_ptt
,
221 struct ecore_lldp_config_params
*p_params
);
224 ecore_lldp_set_params(struct ecore_hwfn
*p_hwfn
, struct ecore_ptt
*p_ptt
,
225 struct ecore_lldp_config_params
*p_params
);
228 ecore_lldp_set_system_tlvs(struct ecore_hwfn
*p_hwfn
, struct ecore_ptt
*p_ptt
,
229 struct ecore_lldp_sys_tlvs
*p_params
);
231 /* Returns priority value for a given dscp index */
233 ecore_dcbx_get_dscp_priority(struct ecore_hwfn
*p_hwfn
,
234 u8 dscp_index
, u8
*p_dscp_pri
);
236 /* Sets priority value for a given dscp index */
238 ecore_dcbx_set_dscp_priority(struct ecore_hwfn
*p_hwfn
, struct ecore_ptt
*p_ptt
,
239 u8 dscp_index
, u8 pri_val
);
241 static const struct ecore_dcbx_app_metadata ecore_dcbx_app_update
[] = {
242 {DCBX_PROTOCOL_ISCSI
, "ISCSI", ECORE_PCI_ISCSI
},
243 {DCBX_PROTOCOL_FCOE
, "FCOE", ECORE_PCI_FCOE
},
244 {DCBX_PROTOCOL_ROCE
, "ROCE", ECORE_PCI_ETH_ROCE
},
245 {DCBX_PROTOCOL_ROCE_V2
, "ROCE_V2", ECORE_PCI_ETH_ROCE
},
246 {DCBX_PROTOCOL_ETH
, "ETH", ECORE_PCI_ETH
},
247 {DCBX_PROTOCOL_IWARP
, "IWARP", ECORE_PCI_ETH_IWARP
}
250 #endif /* __ECORE_DCBX_API_H__ */