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