New upstream version 17.11.3
[deb_dpdk.git] / drivers / net / qede / base / ecore_dcbx_api.h
1 /*
2  * Copyright (c) 2016 QLogic Corporation.
3  * All rights reserved.
4  * www.qlogic.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__ */