Imported Upstream version 16.07-rc1
[deb_dpdk.git] / drivers / net / qede / base / mcp_public.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 /****************************************************************************
10  *
11  * Name:        mcp_public.h
12  *
13  * Description: MCP public data
14  *
15  * Created:     13/01/2013 yanivr
16  *
17  ****************************************************************************/
18
19 #ifndef MCP_PUBLIC_H
20 #define MCP_PUBLIC_H
21
22 #define VF_MAX_STATIC 192       /* In case of AH */
23
24 #define MCP_GLOB_PATH_MAX       2
25 #define MCP_PORT_MAX            2       /* Global */
26 #define MCP_GLOB_PORT_MAX       4       /* Global */
27 #define MCP_GLOB_FUNC_MAX       16      /* Global */
28
29 typedef u32 offsize_t;          /* In DWORDS !!! */
30 /* Offset from the beginning of the MCP scratchpad */
31 #define OFFSIZE_OFFSET_SHIFT    0
32 #define OFFSIZE_OFFSET_MASK     0x0000ffff
33 /* Size of specific element (not the whole array if any) */
34 #define OFFSIZE_SIZE_SHIFT      16
35 #define OFFSIZE_SIZE_MASK       0xffff0000
36
37 /* SECTION_OFFSET is calculating the offset in bytes out of offsize */
38 #define SECTION_OFFSET(_offsize) \
39 ((((_offsize & OFFSIZE_OFFSET_MASK) >> OFFSIZE_OFFSET_SHIFT) << 2))
40
41 /* SECTION_SIZE is calculating the size in bytes out of offsize */
42 #define SECTION_SIZE(_offsize) \
43 (((_offsize & OFFSIZE_SIZE_MASK) >> OFFSIZE_SIZE_SHIFT) << 2)
44
45 #define SECTION_ADDR(_offsize, idx) \
46 (MCP_REG_SCRATCH + SECTION_OFFSET(_offsize) + (SECTION_SIZE(_offsize) * idx))
47
48 #define SECTION_OFFSIZE_ADDR(_pub_base, _section) \
49 (_pub_base + offsetof(struct mcp_public_data, sections[_section]))
50
51 /* PHY configuration */
52 struct pmm_phy_cfg {
53         u32 speed; /* 0 = autoneg, 1000/10000/20000/25000/40000/50000/100000 */
54 #define PMM_SPEED_AUTONEG   0
55 #define PMM_SPEED_SMARTLINQ  0x8
56
57         u32 pause;              /* bitmask */
58 #define PMM_PAUSE_NONE          0x0
59 #define PMM_PAUSE_AUTONEG       0x1
60 #define PMM_PAUSE_RX            0x2
61 #define PMM_PAUSE_TX            0x4
62
63         u32 adv_speed;          /* Default should be the speed_cap_mask */
64         u32 loopback_mode;
65 #define PMM_LOOPBACK_NONE               0
66 #define PMM_LOOPBACK_INT_PHY            1
67 #define PMM_LOOPBACK_EXT_PHY            2
68 #define PMM_LOOPBACK_EXT                3
69 #define PMM_LOOPBACK_MAC                4
70 #define PMM_LOOPBACK_CNIG_AH_ONLY_0123  5       /* Port to itself */
71 #define PMM_LOOPBACK_CNIG_AH_ONLY_2301  6       /* Port to Port */
72
73         /* features */
74         u32 feature_config_flags;
75
76 };
77
78 struct port_mf_cfg {
79         u32 dynamic_cfg;        /* device control channel */
80 #define PORT_MF_CFG_OV_TAG_MASK              0x0000ffff
81 #define PORT_MF_CFG_OV_TAG_SHIFT             0
82 #define PORT_MF_CFG_OV_TAG_DEFAULT         PORT_MF_CFG_OV_TAG_MASK
83
84         u32 reserved[1];
85 };
86
87 /* DO NOT add new fields in the middle
88  * MUST be synced with struct pmm_stats_map
89  */
90 struct pmm_stats {
91         u64 r64; /* 0x00 (Offset 0x00 ) RX 64-byte frame counter */
92         u64 r127; /* 0x01 (Offset 0x08 ) RX 65 to 127 byte frame counter */
93         u64 r255; /* 0x02 (Offset 0x10 ) RX 128 to 255 byte frame counter */
94         u64 r511; /* 0x03 (Offset 0x18 ) RX 256 to 511 byte frame counter */
95         u64 r1023; /* 0x04 (Offset 0x20 ) RX 512 to 1023 byte frame counter */
96         u64 r1518; /* 0x05 (Offset 0x28 ) RX 1024 to 1518 byte frame counter */
97         u64 r1522; /* 0x06 (Offset 0x30 ) RX 1519 to 1522 byte VLAN-tagged  */
98         u64 r2047; /* 0x07 (Offset 0x38 ) RX 1519 to 2047 byte frame counter */
99         u64 r4095; /* 0x08 (Offset 0x40 ) RX 2048 to 4095 byte frame counter */
100         u64 r9216; /* 0x09 (Offset 0x48 ) RX 4096 to 9216 byte frame counter */
101         u64 r16383; /* 0x0A (Offset 0x50 ) RX 9217 to 16383 byte frame ctr */
102         u64 rfcs; /* 0x0F (Offset 0x58 ) RX FCS error frame counter */
103         u64 rxcf; /* 0x10 (Offset 0x60 ) RX control frame counter */
104         u64 rxpf; /* 0x11 (Offset 0x68 ) RX pause frame counter */
105         u64 rxpp; /* 0x12 (Offset 0x70 ) RX PFC frame counter */
106         u64 raln; /* 0x16 (Offset 0x78 ) RX alignment error counter */
107         u64 rfcr; /* 0x19 (Offset 0x80 ) RX false carrier counter */
108         u64 rovr; /* 0x1A (Offset 0x88 ) RX oversized frame counter */
109         u64 rjbr; /* 0x1B (Offset 0x90 ) RX jabber frame counter */
110         u64 rund; /* 0x34 (Offset 0x98 ) RX undersized frame counter */
111         u64 rfrg; /* 0x35 (Offset 0xa0 ) RX fragment counter */
112         u64 t64; /* 0x40 (Offset 0xa8 ) TX 64-byte frame counter */
113         u64 t127; /* 0x41 (Offset 0xb0 ) TX 65 to 127 byte frame counter */
114         u64 t255; /* 0x42 (Offset 0xb8 ) TX 128 to 255 byte frame counter */
115         u64 t511; /* 0x43 (Offset 0xc0 ) TX 256 to 511 byte frame counter */
116         u64 t1023; /* 0x44 (Offset 0xc8 ) TX 512 to 1023 byte frame counter */
117         u64 t1518; /* 0x45 (Offset 0xd0 ) TX 1024 to 1518 byte frame counter */
118         u64 t2047; /* 0x47 (Offset 0xd8 ) TX 1519 to 2047 byte frame counter */
119         u64 t4095; /* 0x48 (Offset 0xe0 ) TX 2048 to 4095 byte frame counter */
120         u64 t9216; /* 0x49 (Offset 0xe8 ) TX 4096 to 9216 byte frame counter */
121         u64 t16383; /* 0x4A (Offset 0xf0 ) TX 9217 to 16383 byte frame ctr */
122         u64 txpf; /* 0x50 (Offset 0xf8 ) TX pause frame counter */
123         u64 txpp; /* 0x51 (Offset 0x100) TX PFC frame counter */
124         u64 tlpiec; /* 0x6C (Offset 0x108) Transmit Logical Type LLFC */
125         u64 tncl; /* 0x6E (Offset 0x110) Transmit Total Collision Counter */
126         u64 rbyte; /* 0x3d (Offset 0x118) RX byte counter */
127         u64 rxuca; /* 0x0c (Offset 0x120) RX UC frame counter */
128         u64 rxmca; /* 0x0d (Offset 0x128) RX MC frame counter */
129         u64 rxbca; /* 0x0e (Offset 0x130) RX BC frame counter */
130         u64 rxpok; /* 0x22 (Offset 0x138) RX good frame */
131         u64 tbyte; /* 0x6f (Offset 0x140) TX byte counter */
132         u64 txuca; /* 0x4d (Offset 0x148) TX UC frame counter */
133         u64 txmca; /* 0x4e (Offset 0x150) TX MC frame counter */
134         u64 txbca; /* 0x4f (Offset 0x158) TX BC frame counter */
135         u64 txcf; /* 0x54 (Offset 0x160) TX control frame counter */
136 };
137
138 struct brb_stats {
139         u64 brb_truncate[8];
140         u64 brb_discard[8];
141 };
142
143 struct port_stats {
144         struct brb_stats brb;
145         struct pmm_stats pmm;
146 };
147
148 /*-----+-----------------------------------------------------------------------
149  * Chip | Number and       | Ports in| Ports in|2 PHY-s |# of ports|# of engines
150  *      | rate of physical | team #1 | team #2 |are used|per path  | (paths)
151  *      | ports            |         |         |        |          |
152  *======+==================+=========+=========+========+======================
153  * BB   | 1x100G           | This is special mode, where there are 2 HW func
154  * BB   | 2x10/20Gbps      | 0,1     | NA      |  No    | 1        | 1
155  * BB   | 2x40 Gbps        | 0,1     | NA      |  Yes   | 1        | 1
156  * BB   | 2x50Gbps         | 0,1     | NA      |  No    | 1        | 1
157  * BB   | 4x10Gbps         | 0,2     | 1,3     |  No    | 1/2      | 1,2
158  * BB   | 4x10Gbps         | 0,1     | 2,3     |  No    | 1/2      | 1,2
159  * BB   | 4x10Gbps         | 0,3     | 1,2     |  No    | 1/2      | 1,2
160  * BB   | 4x10Gbps         | 0,1,2,3 | NA      |  No    | 1        | 1
161  * AH   | 2x10/20Gbps      | 0,1     | NA      |  NA    | 1        | NA
162  * AH   | 4x10Gbps         | 0,1     | 2,3     |  NA    | 2        | NA
163  * AH   | 4x10Gbps         | 0,2     | 1,3     |  NA    | 2        | NA
164  * AH   | 4x10Gbps         | 0,3     | 1,2     |  NA    | 2        | NA
165  * AH   | 4x10Gbps         | 0,1,2,3 | NA      |  NA    | 1        | NA
166  *======+==================+=========+=========+========+=======================
167  */
168
169 #define CMT_TEAM0 0
170 #define CMT_TEAM1 1
171 #define CMT_TEAM_MAX 2
172
173 struct couple_mode_teaming {
174         u8 port_cmt[MCP_GLOB_PORT_MAX];
175 #define PORT_CMT_IN_TEAM            (1 << 0)
176
177 #define PORT_CMT_PORT_ROLE          (1 << 1)
178 #define PORT_CMT_PORT_INACTIVE      (0 << 1)
179 #define PORT_CMT_PORT_ACTIVE        (1 << 1)
180
181 #define PORT_CMT_TEAM_MASK          (1 << 2)
182 #define PORT_CMT_TEAM0              (0 << 2)
183 #define PORT_CMT_TEAM1              (1 << 2)
184 };
185
186 /**************************************
187  *     LLDP and DCBX HSI structures
188  **************************************/
189 #define LLDP_CHASSIS_ID_STAT_LEN 4
190 #define LLDP_PORT_ID_STAT_LEN 4
191 #define DCBX_MAX_APP_PROTOCOL           32
192 #define MAX_SYSTEM_LLDP_TLV_DATA    32
193
194 typedef enum _lldp_agent_e {
195         LLDP_NEAREST_BRIDGE = 0,
196         LLDP_NEAREST_NON_TPMR_BRIDGE,
197         LLDP_NEAREST_CUSTOMER_BRIDGE,
198         LLDP_MAX_LLDP_AGENTS
199 } lldp_agent_e;
200
201 struct lldp_config_params_s {
202         u32 config;
203 #define LLDP_CONFIG_TX_INTERVAL_MASK        0x000000ff
204 #define LLDP_CONFIG_TX_INTERVAL_SHIFT       0
205 #define LLDP_CONFIG_HOLD_MASK               0x00000f00
206 #define LLDP_CONFIG_HOLD_SHIFT              8
207 #define LLDP_CONFIG_MAX_CREDIT_MASK         0x0000f000
208 #define LLDP_CONFIG_MAX_CREDIT_SHIFT        12
209 #define LLDP_CONFIG_ENABLE_RX_MASK          0x40000000
210 #define LLDP_CONFIG_ENABLE_RX_SHIFT         30
211 #define LLDP_CONFIG_ENABLE_TX_MASK          0x80000000
212 #define LLDP_CONFIG_ENABLE_TX_SHIFT         31
213         /* Holds local Chassis ID TLV header, subtype and 9B of payload.
214          * If firtst byte is 0, then we will use default chassis ID
215          */
216         u32 local_chassis_id[LLDP_CHASSIS_ID_STAT_LEN];
217         /* Holds local Port ID TLV header, subtype and 9B of payload.
218          * If firtst byte is 0, then we will use default port ID
219          */
220         u32 local_port_id[LLDP_PORT_ID_STAT_LEN];
221 };
222
223 struct lldp_status_params_s {
224         u32 prefix_seq_num;
225         u32 status;             /* TBD */
226         /* Holds remote Chassis ID TLV header, subtype and 9B of payload.
227          */
228         u32 local_port_id[LLDP_PORT_ID_STAT_LEN];
229         u32 peer_chassis_id[LLDP_CHASSIS_ID_STAT_LEN];
230         /* Holds remote Port ID TLV header, subtype and 9B of payload.
231          */
232         u32 peer_port_id[LLDP_PORT_ID_STAT_LEN];
233         u32 suffix_seq_num;
234 };
235
236 struct dcbx_ets_feature {
237         u32 flags;
238 #define DCBX_ETS_ENABLED_MASK                   0x00000001
239 #define DCBX_ETS_ENABLED_SHIFT                  0
240 #define DCBX_ETS_WILLING_MASK                   0x00000002
241 #define DCBX_ETS_WILLING_SHIFT                  1
242 #define DCBX_ETS_ERROR_MASK                     0x00000004
243 #define DCBX_ETS_ERROR_SHIFT                    2
244 #define DCBX_ETS_CBS_MASK                       0x00000008
245 #define DCBX_ETS_CBS_SHIFT                      3
246 #define DCBX_ETS_MAX_TCS_MASK                   0x000000f0
247 #define DCBX_ETS_MAX_TCS_SHIFT                  4
248         u32 pri_tc_tbl[1];
249 #define DCBX_CEE_STRICT_PRIORITY                0xf
250 #define DCBX_CEE_STRICT_PRIORITY_TC             0x7
251         u32 tc_bw_tbl[2];
252         u32 tc_tsa_tbl[2];
253 #define DCBX_ETS_TSA_STRICT                     0
254 #define DCBX_ETS_TSA_CBS                        1
255 #define DCBX_ETS_TSA_ETS                        2
256 };
257
258 struct dcbx_app_priority_entry {
259         u32 entry;
260 #define DCBX_APP_PRI_MAP_MASK       0x000000ff
261 #define DCBX_APP_PRI_MAP_SHIFT      0
262 #define DCBX_APP_PRI_0              0x01
263 #define DCBX_APP_PRI_1              0x02
264 #define DCBX_APP_PRI_2              0x04
265 #define DCBX_APP_PRI_3              0x08
266 #define DCBX_APP_PRI_4              0x10
267 #define DCBX_APP_PRI_5              0x20
268 #define DCBX_APP_PRI_6              0x40
269 #define DCBX_APP_PRI_7              0x80
270 #define DCBX_APP_SF_MASK            0x00000300
271 #define DCBX_APP_SF_SHIFT           8
272 #define DCBX_APP_SF_ETHTYPE         0
273 #define DCBX_APP_SF_PORT            1
274 #define DCBX_APP_PROTOCOL_ID_MASK   0xffff0000
275 #define DCBX_APP_PROTOCOL_ID_SHIFT  16
276 };
277
278 /* FW structure in BE */
279 struct dcbx_app_priority_feature {
280         u32 flags;
281 #define DCBX_APP_ENABLED_MASK           0x00000001
282 #define DCBX_APP_ENABLED_SHIFT          0
283 #define DCBX_APP_WILLING_MASK           0x00000002
284 #define DCBX_APP_WILLING_SHIFT          1
285 #define DCBX_APP_ERROR_MASK             0x00000004
286 #define DCBX_APP_ERROR_SHIFT            2
287         /* Not in use
288          * #define DCBX_APP_DEFAULT_PRI_MASK       0x00000f00
289          * #define DCBX_APP_DEFAULT_PRI_SHIFT      8
290          */
291 #define DCBX_APP_MAX_TCS_MASK           0x0000f000
292 #define DCBX_APP_MAX_TCS_SHIFT          12
293 #define DCBX_APP_NUM_ENTRIES_MASK       0x00ff0000
294 #define DCBX_APP_NUM_ENTRIES_SHIFT      16
295         struct dcbx_app_priority_entry app_pri_tbl[DCBX_MAX_APP_PROTOCOL];
296 };
297
298 /* FW structure in BE */
299 struct dcbx_features {
300         /* PG feature */
301         struct dcbx_ets_feature ets;
302         /* PFC feature */
303         u32 pfc;
304 #define DCBX_PFC_PRI_EN_BITMAP_MASK             0x000000ff
305 #define DCBX_PFC_PRI_EN_BITMAP_SHIFT            0
306 #define DCBX_PFC_PRI_EN_BITMAP_PRI_0            0x01
307 #define DCBX_PFC_PRI_EN_BITMAP_PRI_1            0x02
308 #define DCBX_PFC_PRI_EN_BITMAP_PRI_2            0x04
309 #define DCBX_PFC_PRI_EN_BITMAP_PRI_3            0x08
310 #define DCBX_PFC_PRI_EN_BITMAP_PRI_4            0x10
311 #define DCBX_PFC_PRI_EN_BITMAP_PRI_5            0x20
312 #define DCBX_PFC_PRI_EN_BITMAP_PRI_6            0x40
313 #define DCBX_PFC_PRI_EN_BITMAP_PRI_7            0x80
314
315 #define DCBX_PFC_FLAGS_MASK                     0x0000ff00
316 #define DCBX_PFC_FLAGS_SHIFT                    8
317 #define DCBX_PFC_CAPS_MASK                      0x00000f00
318 #define DCBX_PFC_CAPS_SHIFT                     8
319 #define DCBX_PFC_MBC_MASK                       0x00004000
320 #define DCBX_PFC_MBC_SHIFT                      14
321 #define DCBX_PFC_WILLING_MASK                   0x00008000
322 #define DCBX_PFC_WILLING_SHIFT                  15
323 #define DCBX_PFC_ENABLED_MASK                   0x00010000
324 #define DCBX_PFC_ENABLED_SHIFT                  16
325 #define DCBX_PFC_ERROR_MASK                     0x00020000
326 #define DCBX_PFC_ERROR_SHIFT                    17
327
328         /* APP feature */
329         struct dcbx_app_priority_feature app;
330 };
331
332 struct dcbx_local_params {
333         u32 config;
334 #define DCBX_CONFIG_VERSION_MASK            0x00000003
335 #define DCBX_CONFIG_VERSION_SHIFT           0
336 #define DCBX_CONFIG_VERSION_DISABLED        0
337 #define DCBX_CONFIG_VERSION_IEEE            1
338 #define DCBX_CONFIG_VERSION_CEE             2
339
340         u32 flags;
341         struct dcbx_features features;
342 };
343
344 struct dcbx_mib {
345         u32 prefix_seq_num;
346         u32 flags;
347         /*
348          * #define DCBX_CONFIG_VERSION_MASK            0x00000003
349          * #define DCBX_CONFIG_VERSION_SHIFT           0
350          * #define DCBX_CONFIG_VERSION_DISABLED        0
351          * #define DCBX_CONFIG_VERSION_IEEE            1
352          * #define DCBX_CONFIG_VERSION_CEE             2
353          */
354         struct dcbx_features features;
355         u32 suffix_seq_num;
356 };
357
358 struct lldp_system_tlvs_buffer_s {
359         u16 valid;
360         u16 length;
361         u32 data[MAX_SYSTEM_LLDP_TLV_DATA];
362 };
363
364 /**************************************/
365 /*                                    */
366 /*     P U B L I C      G L O B A L   */
367 /*                                    */
368 /**************************************/
369 struct public_global {
370         u32 max_path; /* 32bit is wasty, but this will be used often */
371         u32 max_ports; /* (Global) 32bit is wasty, this will be used often */
372 #define MODE_1P 1 /* TBD - NEED TO THINK OF A BETTER NAME */
373 #define MODE_2P 2
374 #define MODE_3P 3
375 #define MODE_4P 4
376         u32 debug_mb_offset;
377         u32 phymod_dbg_mb_offset;
378         struct couple_mode_teaming cmt;
379         s32 internal_temperature;
380         u32 mfw_ver;
381         u32 running_bundle_id;
382         s32 external_temperature;
383 };
384
385 /**************************************/
386 /*                                    */
387 /*     P U B L I C      P A T H       */
388 /*                                    */
389 /**************************************/
390
391 /****************************************************************************
392  * Shared Memory 2 Region                                                   *
393  ****************************************************************************/
394 /* The fw_flr_ack is actually built in the following way:                   */
395 /* 8 bit:  PF ack                                                           */
396 /* 128 bit: VF ack                                                           */
397 /* 8 bit:  ios_dis_ack                                                      */
398 /* In order to maintain endianity in the mailbox hsi, we want to keep using */
399 /* u32. The fw must have the VF right after the PF since this is how it     */
400 /* access arrays(it expects always the VF to reside after the PF, and that  */
401 /* makes the calculation much easier for it. )                              */
402 /* In order to answer both limitations, and keep the struct small, the code */
403 /* will abuse the structure defined here to achieve the actual partition    */
404 /* above                                                                    */
405 /****************************************************************************/
406 struct fw_flr_mb {
407         u32 aggint;
408         u32 opgen_addr;
409         u32 accum_ack;          /* 0..15:PF, 16..207:VF, 256..271:IOV_DIS */
410 #define ACCUM_ACK_PF_BASE       0
411 #define ACCUM_ACK_PF_SHIFT      0
412
413 #define ACCUM_ACK_VF_BASE       8
414 #define ACCUM_ACK_VF_SHIFT      3
415
416 #define ACCUM_ACK_IOV_DIS_BASE  256
417 #define ACCUM_ACK_IOV_DIS_SHIFT 8
418
419 };
420
421 struct public_path {
422         struct fw_flr_mb flr_mb;
423         /*
424          * mcp_vf_disabled is set by the MCP to indicate the driver about VFs
425          * which were disabled/flred
426          */
427         u32 mcp_vf_disabled[VF_MAX_STATIC / 32];        /* 0x003c */
428
429         u32 process_kill;
430         /* Reset on mcp reset, and incremented for eveny process kill event. */
431 #define PROCESS_KILL_COUNTER_MASK               0x0000ffff
432 #define PROCESS_KILL_COUNTER_SHIFT              0
433 #define PROCESS_KILL_GLOB_AEU_BIT_MASK          0xffff0000
434 #define PROCESS_KILL_GLOB_AEU_BIT_SHIFT         16
435 #define GLOBAL_AEU_BIT(aeu_reg_id, aeu_bit) (aeu_reg_id * 32 + aeu_bit)
436 };
437
438 /**************************************/
439 /*                                    */
440 /*     P U B L I C      P O R T       */
441 /*                                    */
442 /**************************************/
443 #define FC_NPIV_WWPN_SIZE 8
444 #define FC_NPIV_WWNN_SIZE 8
445 struct dci_npiv_settings {
446         u8 npiv_wwpn[FC_NPIV_WWPN_SIZE];
447         u8 npiv_wwnn[FC_NPIV_WWNN_SIZE];
448 };
449
450 struct dci_fc_npiv_cfg {
451         /* hdr used internally by the MFW */
452         u32 hdr;
453         u32 num_of_npiv;
454 };
455
456 #define MAX_NUMBER_NPIV 64
457 struct dci_fc_npiv_tbl {
458         struct dci_fc_npiv_cfg fc_npiv_cfg;
459         struct dci_npiv_settings settings[MAX_NUMBER_NPIV];
460 };
461
462 /****************************************************************************
463  * Driver <-> FW Mailbox                                                    *
464  ****************************************************************************/
465
466 struct public_port {
467         u32 validity_map;       /* 0x0 (4*2 = 0x8) */
468
469         /* validity bits */
470 #define MCP_VALIDITY_PCI_CFG                    0x00100000
471 #define MCP_VALIDITY_MB                         0x00200000
472 #define MCP_VALIDITY_DEV_INFO                   0x00400000
473 #define MCP_VALIDITY_RESERVED                   0x00000007
474
475         /* One licensing bit should be set */
476 #define MCP_VALIDITY_LIC_KEY_IN_EFFECT_MASK     0x00000038 /* yaniv - tbd  */
477 #define MCP_VALIDITY_LIC_MANUF_KEY_IN_EFFECT    0x00000008
478 #define MCP_VALIDITY_LIC_UPGRADE_KEY_IN_EFFECT  0x00000010
479 #define MCP_VALIDITY_LIC_NO_KEY_IN_EFFECT       0x00000020
480
481         /* Active MFW */
482 #define MCP_VALIDITY_ACTIVE_MFW_UNKNOWN         0x00000000
483 #define MCP_VALIDITY_ACTIVE_MFW_MASK            0x000001c0
484 #define MCP_VALIDITY_ACTIVE_MFW_NCSI            0x00000040
485 #define MCP_VALIDITY_ACTIVE_MFW_NONE            0x000001c0
486
487         u32 link_status;
488 #define LINK_STATUS_LINK_UP                     0x00000001
489 #define LINK_STATUS_SPEED_AND_DUPLEX_MASK                       0x0000001e
490 #define LINK_STATUS_SPEED_AND_DUPLEX_1000THD            (1 << 1)
491 #define LINK_STATUS_SPEED_AND_DUPLEX_1000TFD            (2 << 1)
492 #define LINK_STATUS_SPEED_AND_DUPLEX_10G                        (3 << 1)
493 #define LINK_STATUS_SPEED_AND_DUPLEX_20G                        (4 << 1)
494 #define LINK_STATUS_SPEED_AND_DUPLEX_40G                        (5 << 1)
495 #define LINK_STATUS_SPEED_AND_DUPLEX_50G                        (6 << 1)
496 #define LINK_STATUS_SPEED_AND_DUPLEX_100G                       (7 << 1)
497 #define LINK_STATUS_SPEED_AND_DUPLEX_25G                        (8 << 1)
498
499 #define LINK_STATUS_AUTO_NEGOTIATE_ENABLED                      0x00000020
500
501 #define LINK_STATUS_AUTO_NEGOTIATE_COMPLETE                     0x00000040
502 #define LINK_STATUS_PARALLEL_DETECTION_USED                     0x00000080
503
504 #define LINK_STATUS_PFC_ENABLED                         0x00000100
505 #define LINK_STATUS_LINK_PARTNER_1000TFD_CAPABLE        0x00000200
506 #define LINK_STATUS_LINK_PARTNER_1000THD_CAPABLE        0x00000400
507 #define LINK_STATUS_LINK_PARTNER_10G_CAPABLE            0x00000800
508 #define LINK_STATUS_LINK_PARTNER_20G_CAPABLE            0x00001000
509 #define LINK_STATUS_LINK_PARTNER_40G_CAPABLE            0x00002000
510 #define LINK_STATUS_LINK_PARTNER_50G_CAPABLE            0x00004000
511 #define LINK_STATUS_LINK_PARTNER_100G_CAPABLE           0x00008000
512 #define LINK_STATUS_LINK_PARTNER_25G_CAPABLE            0x00010000
513
514 #define LINK_STATUS_LINK_PARTNER_FLOW_CONTROL_MASK      0x000C0000
515 #define LINK_STATUS_LINK_PARTNER_NOT_PAUSE_CAPABLE      (0 << 18)
516 #define LINK_STATUS_LINK_PARTNER_SYMMETRIC_PAUSE        (1 << 18)
517 #define LINK_STATUS_LINK_PARTNER_ASYMMETRIC_PAUSE       (2 << 18)
518 #define LINK_STATUS_LINK_PARTNER_BOTH_PAUSE                     (3 << 18)
519
520 #define LINK_STATUS_SFP_TX_FAULT                                0x00100000
521 #define LINK_STATUS_TX_FLOW_CONTROL_ENABLED                     0x00200000
522 #define LINK_STATUS_RX_FLOW_CONTROL_ENABLED                     0x00400000
523 #define LINK_STATUS_RX_SIGNAL_PRESENT               0x00800000
524 #define LINK_STATUS_MAC_LOCAL_FAULT                 0x01000000
525 #define LINK_STATUS_MAC_REMOTE_FAULT                0x02000000
526 #define LINK_STATUS_UNSUPPORTED_SPD_REQ                         0x04000000
527
528         u32 link_status1;
529         u32 ext_phy_fw_version;
530         u32 drv_phy_cfg_addr;   /* Points to pmm_phy_cfg (For READ-ONLY) */
531
532         u32 port_stx;
533
534         u32 stat_nig_timer;
535
536         struct port_mf_cfg port_mf_config;
537         struct port_stats stats;
538
539         u32 media_type;
540 #define MEDIA_UNSPECIFIED               0x0
541 #define MEDIA_SFPP_10G_FIBER    0x1
542 #define MEDIA_XFP_FIBER                 0x2
543 #define MEDIA_DA_TWINAX                 0x3
544 #define MEDIA_BASE_T                    0x4
545 #define MEDIA_SFP_1G_FIBER              0x5
546 #define MEDIA_MODULE_FIBER              0x6
547 #define MEDIA_KR                                0xf0
548 #define MEDIA_NOT_PRESENT               0xff
549
550         u32 lfa_status;
551 #define LFA_LINK_FLAP_REASON_OFFSET             0
552 #define LFA_LINK_FLAP_REASON_MASK               0x000000ff
553 #define LFA_NO_REASON                                   (0 << 0)
554 #define LFA_LINK_DOWN                                   (1 << 0)
555 #define LFA_FORCE_INIT                                  (1 << 1)
556 #define LFA_LOOPBACK_MISMATCH                           (1 << 2)
557 #define LFA_SPEED_MISMATCH                              (1 << 3)
558 #define LFA_FLOW_CTRL_MISMATCH                          (1 << 4)
559 #define LFA_ADV_SPEED_MISMATCH                          (1 << 5)
560 #define LINK_FLAP_AVOIDANCE_COUNT_OFFSET        8
561 #define LINK_FLAP_AVOIDANCE_COUNT_MASK          0x0000ff00
562 #define LINK_FLAP_COUNT_OFFSET                  16
563 #define LINK_FLAP_COUNT_MASK                    0x00ff0000
564
565         u32 link_change_count;
566
567         /* LLDP params */
568         struct lldp_config_params_s lldp_config_params[LLDP_MAX_LLDP_AGENTS];
569         struct lldp_status_params_s lldp_status_params[LLDP_MAX_LLDP_AGENTS];
570         struct lldp_system_tlvs_buffer_s system_lldp_tlvs_buf;
571
572         /* DCBX related MIB */
573         struct dcbx_local_params local_admin_dcbx_mib;
574         struct dcbx_mib remote_dcbx_mib;
575         struct dcbx_mib operational_dcbx_mib;
576
577         /* FC_NPIV table offset & size in NVRAM value of 0 means not present */
578         u32 fc_npiv_nvram_tbl_addr;
579         u32 fc_npiv_nvram_tbl_size;
580         u32 transceiver_data;
581 #define PMM_TRANSCEIVER_STATE_MASK              0x000000FF
582 #define PMM_TRANSCEIVER_STATE_SHIFT             0x00000000
583 #define PMM_TRANSCEIVER_STATE_UNPLUGGED         0x00000000
584 #define PMM_TRANSCEIVER_STATE_PRESENT           0x00000001
585 #define PMM_TRANSCEIVER_STATE_VALID             0x00000003
586 #define PMM_TRANSCEIVER_STATE_UPDATING          0x00000008
587 #define PMM_TRANSCEIVER_TYPE_MASK               0x0000FF00
588 #define PMM_TRANSCEIVER_TYPE_SHIFT              0x00000008
589 #define PMM_TRANSCEIVER_TYPE_NONE               0x00000000
590 #define PMM_TRANSCEIVER_TYPE_UNKNOWN            0x000000FF
591 #define PMM_TRANSCEIVER_TYPE_1G_PCC     0x01    /* 1G Passive copper cable */
592 #define PMM_TRANSCEIVER_TYPE_1G_ACC     0x02    /* 1G Active copper cable  */
593 #define PMM_TRANSCEIVER_TYPE_1G_LX                              0x03
594 #define PMM_TRANSCEIVER_TYPE_1G_SX                              0x04
595 #define PMM_TRANSCEIVER_TYPE_10G_SR                             0x05
596 #define PMM_TRANSCEIVER_TYPE_10G_LR                             0x06
597 #define PMM_TRANSCEIVER_TYPE_10G_LRM                    0x07
598 #define PMM_TRANSCEIVER_TYPE_10G_ER                             0x08
599 #define PMM_TRANSCEIVER_TYPE_10G_PCC    0x09    /* 10G Passive copper cable */
600 #define PMM_TRANSCEIVER_TYPE_10G_ACC    0x0a    /* 10G Active copper cable  */
601 #define PMM_TRANSCEIVER_TYPE_XLPPI                              0x0b
602 #define PMM_TRANSCEIVER_TYPE_40G_LR4                    0x0c
603 #define PMM_TRANSCEIVER_TYPE_40G_SR4                    0x0d
604 #define PMM_TRANSCEIVER_TYPE_40G_CR4                    0x0e
605 #define PMM_TRANSCEIVER_TYPE_100G_AOC   0x0f    /* Active optical cable */
606 #define PMM_TRANSCEIVER_TYPE_100G_SR4                   0x10
607 #define PMM_TRANSCEIVER_TYPE_100G_LR4                   0x11
608 #define PMM_TRANSCEIVER_TYPE_100G_ER4                   0x12
609 #define PMM_TRANSCEIVER_TYPE_100G_ACC   0x13    /* Active copper cable */
610 #define PMM_TRANSCEIVER_TYPE_100G_CR4                   0x14
611 #define PMM_TRANSCEIVER_TYPE_4x10G_SR                   0x15
612 #define PMM_TRANSCEIVER_TYPE_25G_PCC_S  0x16
613 #define PMM_TRANSCEIVER_TYPE_25G_ACC_S  0x17
614 #define PMM_TRANSCEIVER_TYPE_25G_PCC_M  0x18
615 #define PMM_TRANSCEIVER_TYPE_25G_ACC_M  0x19
616 #define PMM_TRANSCEIVER_TYPE_25G_PCC_L  0x1a
617 #define PMM_TRANSCEIVER_TYPE_25G_ACC_L  0x1b
618 #define PMM_TRANSCEIVER_TYPE_25G_SR                             0x1c
619 #define PMM_TRANSCEIVER_TYPE_25G_LR                             0x1d
620 #define PMM_TRANSCEIVER_TYPE_25G_AOC                    0x1e
621
622 #define PMM_TRANSCEIVER_TYPE_4x10G                                      0x1d
623 #define PMM_TRANSCEIVER_TYPE_4x25G_CR                                   0x1e
624 #define PMM_TRANSCEIVER_TYPE_MULTI_RATE_10G_40GR                        0x30
625 #define PMM_TRANSCEIVER_TYPE_MULTI_RATE_10G_40G_CR                      0x31
626 #define PMM_TRANSCEIVER_TYPE_MULTI_RATE_10G_40G_LR                      0x32
627 #define PMM_TRANSCEIVER_TYPE_MULTI_RATE_40G_100G_SR                     0x33
628 #define PMM_TRANSCEIVER_TYPE_MULTI_RATE_40G_100G_CR                     0x34
629 #define PMM_TRANSCEIVER_TYPE_MULTI_RATE_40G_100G_LR                     0x35
630 #define PMM_TRANSCEIVER_TYPE_MULTI_RATE_40G_100G_AOC                    0x36
631 };
632
633 /**************************************/
634 /*                                    */
635 /*     P U B L I C      F U N C       */
636 /*                                    */
637 /**************************************/
638
639 struct public_func {
640         u32 dpdk_rsvd1[2];
641
642         /* MTU size per funciton is needed for the OV feature */
643         u32 mtu_size;
644         /* 9 entires for the C2S PCP map for each inner VLAN PCP + 1 default */
645         /* For PCP values 0-3 use the map lower */
646         /* 0xFF000000 - PCP 0, 0x00FF0000 - PCP 1,
647          * 0x0000FF00 - PCP 2, 0x000000FF PCP 3
648          */
649         u32 c2s_pcp_map_lower;
650         /* For PCP values 4-7 use the map upper */
651         /* 0xFF000000 - PCP 4, 0x00FF0000 - PCP 5,
652          * 0x0000FF00 - PCP 6, 0x000000FF PCP 7
653          */
654         u32 c2s_pcp_map_upper;
655
656         /* For PCP default value get the MSB byte of the map default */
657         u32 c2s_pcp_map_default;
658
659         u32 reserved[4];
660
661         /* replace old mf_cfg */
662         u32 config;
663         /* E/R/I/D */
664         /* function 0 of each port cannot be hidden */
665 #define FUNC_MF_CFG_FUNC_HIDE                   0x00000001
666 #define FUNC_MF_CFG_PAUSE_ON_HOST_RING          0x00000002
667 #define FUNC_MF_CFG_PAUSE_ON_HOST_RING_SHIFT    0x00000001
668
669 #define FUNC_MF_CFG_PROTOCOL_MASK               0x000000f0
670 #define FUNC_MF_CFG_PROTOCOL_SHIFT              4
671 #define FUNC_MF_CFG_PROTOCOL_ETHERNET           0x00000000
672 #define FUNC_MF_CFG_PROTOCOL_MAX                0x00000000
673
674         /* MINBW, MAXBW */
675         /* value range - 0..100, increments in 1 %  */
676 #define FUNC_MF_CFG_MIN_BW_MASK                 0x0000ff00
677 #define FUNC_MF_CFG_MIN_BW_SHIFT                8
678 #define FUNC_MF_CFG_MIN_BW_DEFAULT              0x00000000
679 #define FUNC_MF_CFG_MAX_BW_MASK                 0x00ff0000
680 #define FUNC_MF_CFG_MAX_BW_SHIFT                16
681 #define FUNC_MF_CFG_MAX_BW_DEFAULT              0x00640000
682
683         u32 status;
684 #define FUNC_STATUS_VLINK_DOWN                  0x00000001
685
686         u32 mac_upper;          /* MAC */
687 #define FUNC_MF_CFG_UPPERMAC_MASK               0x0000ffff
688 #define FUNC_MF_CFG_UPPERMAC_SHIFT              0
689 #define FUNC_MF_CFG_UPPERMAC_DEFAULT            FUNC_MF_CFG_UPPERMAC_MASK
690         u32 mac_lower;
691 #define FUNC_MF_CFG_LOWERMAC_DEFAULT            0xffffffff
692
693         u32 dpdk_rsvd2[4];
694
695         u32 ovlan_stag;         /* tags */
696 #define FUNC_MF_CFG_OV_STAG_MASK              0x0000ffff
697 #define FUNC_MF_CFG_OV_STAG_SHIFT             0
698 #define FUNC_MF_CFG_OV_STAG_DEFAULT           FUNC_MF_CFG_OV_STAG_MASK
699
700         u32 pf_allocation;      /* vf per pf */
701
702         u32 preserve_data;      /* Will be used bt CCM */
703
704         u32 driver_last_activity_ts;
705
706         /*
707          * drv_ack_vf_disabled is set by the PF driver to ack handled disabled
708          * VFs
709          */
710         u32 drv_ack_vf_disabled[VF_MAX_STATIC / 32];    /* 0x0044 */
711
712         u32 drv_id;
713 #define DRV_ID_PDA_COMP_VER_MASK        0x0000ffff
714 #define DRV_ID_PDA_COMP_VER_SHIFT       0
715
716 #define DRV_ID_MCP_HSI_VER_MASK         0x00ff0000
717 #define DRV_ID_MCP_HSI_VER_SHIFT        16
718 #define DRV_ID_MCP_HSI_VER_CURRENT      (1 << DRV_ID_MCP_HSI_VER_SHIFT)
719
720 #define DRV_ID_DRV_TYPE_MASK            0x7f000000
721 #define DRV_ID_DRV_TYPE_SHIFT           24
722 #define DRV_ID_DRV_TYPE_UNKNOWN         (0 << DRV_ID_DRV_TYPE_SHIFT)
723 #define DRV_ID_DRV_TYPE_LINUX           (1 << DRV_ID_DRV_TYPE_SHIFT)
724 #define DRV_ID_DRV_TYPE_WINDOWS         (2 << DRV_ID_DRV_TYPE_SHIFT)
725 #define DRV_ID_DRV_TYPE_DIAG            (3 << DRV_ID_DRV_TYPE_SHIFT)
726 #define DRV_ID_DRV_TYPE_PREBOOT         (4 << DRV_ID_DRV_TYPE_SHIFT)
727 #define DRV_ID_DRV_TYPE_SOLARIS         (5 << DRV_ID_DRV_TYPE_SHIFT)
728 #define DRV_ID_DRV_TYPE_VMWARE          (6 << DRV_ID_DRV_TYPE_SHIFT)
729 #define DRV_ID_DRV_TYPE_FREEBSD         (7 << DRV_ID_DRV_TYPE_SHIFT)
730 #define DRV_ID_DRV_TYPE_AIX             (8 << DRV_ID_DRV_TYPE_SHIFT)
731
732 #define DRV_ID_DRV_INIT_HW_MASK         0x80000000
733 #define DRV_ID_DRV_INIT_HW_SHIFT        31
734 #define DRV_ID_DRV_INIT_HW_FLAG         (1 << DRV_ID_DRV_INIT_HW_SHIFT)
735 };
736
737 /**************************************/
738 /*                                    */
739 /*     P U B L I C       M B          */
740 /*                                    */
741 /**************************************/
742 /* This is the only section that the driver can write to, and each */
743 /* Basically each driver request to set feature parameters,
744  * will be done using a different command, which will be linked
745  * to a specific data structure from the union below.
746  * For huge strucuture, the common blank structure should be used.
747  */
748
749 struct mcp_mac {
750         u32 mac_upper;          /* Upper 16 bits are always zeroes */
751         u32 mac_lower;
752 };
753
754 struct mcp_val64 {
755         u32 lo;
756         u32 hi;
757 };
758
759 struct mcp_file_att {
760         u32 nvm_start_addr;
761         u32 len;
762 };
763
764 #define MCP_DRV_VER_STR_SIZE 16
765 #define MCP_DRV_VER_STR_SIZE_DWORD (MCP_DRV_VER_STR_SIZE / sizeof(u32))
766 #define MCP_DRV_NVM_BUF_LEN 32
767 struct drv_version_stc {
768         u32 version;
769         u8 name[MCP_DRV_VER_STR_SIZE - 4];
770 };
771
772 /* statistics for ncsi */
773 struct lan_stats_stc {
774         u64 ucast_rx_pkts;
775         u64 ucast_tx_pkts;
776         u32 fcs_err;
777         u32 rserved;
778 };
779
780 struct ocbb_data_stc {
781         u32 ocbb_host_addr;
782         u32 ocsd_host_addr;
783         u32 ocsd_req_update_interval;
784 };
785
786 union drv_union_data {
787         u32 ver_str[MCP_DRV_VER_STR_SIZE_DWORD];        /* LOAD_REQ */
788         struct mcp_mac wol_mac; /* UNLOAD_DONE */
789
790         struct pmm_phy_cfg drv_phy_cfg;
791
792         struct mcp_val64 val64; /* For PHY / AVS commands */
793
794         u8 raw_data[MCP_DRV_NVM_BUF_LEN];
795
796         struct mcp_file_att file_att;
797
798         u32 ack_vf_disabled[VF_MAX_STATIC / 32];
799
800         struct drv_version_stc drv_version;
801
802         struct lan_stats_stc lan_stats;
803         u32 dpdk_rsvd[3];
804         struct ocbb_data_stc ocbb_info;
805
806         /* ... */
807 };
808
809 struct public_drv_mb {
810         u32 drv_mb_header;
811 #define DRV_MSG_CODE_MASK                       0xffff0000
812 #define DRV_MSG_CODE_LOAD_REQ                   0x10000000
813 #define DRV_MSG_CODE_LOAD_DONE                  0x11000000
814 #define DRV_MSG_CODE_INIT_HW                    0x12000000
815 #define DRV_MSG_CODE_UNLOAD_REQ                 0x20000000
816 #define DRV_MSG_CODE_UNLOAD_DONE                0x21000000
817 #define DRV_MSG_CODE_INIT_PHY                   0x22000000
818         /* Params - FORCE - Reinitialize the link regardless of LFA */
819         /*        - DONT_CARE - Don't flap the link if up */
820 #define DRV_MSG_CODE_LINK_RESET                 0x23000000
821
822         /* Vitaly: LLDP commands */
823 #define DRV_MSG_CODE_SET_LLDP                   0x24000000
824 #define DRV_MSG_CODE_SET_DCBX                   0x25000000
825         /* OneView feature driver HSI */
826 #define DRV_MSG_CODE_OV_UPDATE_CURR_CFG         0x26000000
827 #define DRV_MSG_CODE_OV_UPDATE_BUS_NUM          0x27000000
828 #define DRV_MSG_CODE_OV_UPDATE_BOOT_PROGRESS    0x28000000
829 #define DRV_MSG_CODE_OV_UPDATE_STORM_FW_VER     0x29000000
830 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE     0x31000000
831 #define DRV_MSG_CODE_BW_UPDATE_ACK              0x32000000
832 #define DRV_MSG_CODE_OV_UPDATE_MTU              0x33000000
833
834 #define DRV_MSG_CODE_NIG_DRAIN                  0x30000000
835
836 #define DRV_MSG_CODE_INITIATE_FLR               0x02000000
837 #define DRV_MSG_CODE_VF_DISABLED_DONE           0xc0000000
838 #define DRV_MSG_CODE_CFG_VF_MSIX                0xc0010000
839 #define DRV_MSG_CODE_NVM_PUT_FILE_BEGIN         0x00010000
840 #define DRV_MSG_CODE_NVM_PUT_FILE_DATA          0x00020000
841 #define DRV_MSG_CODE_NVM_GET_FILE_ATT           0x00030000
842 #define DRV_MSG_CODE_NVM_READ_NVRAM             0x00050000
843 #define DRV_MSG_CODE_NVM_WRITE_NVRAM            0x00060000
844 #define DRV_MSG_CODE_NVM_DEL_FILE               0x00080000
845 #define DRV_MSG_CODE_MCP_RESET                  0x00090000
846 #define DRV_MSG_CODE_SET_SECURE_MODE            0x000a0000
847 #define DRV_MSG_CODE_PHY_RAW_READ               0x000b0000
848 #define DRV_MSG_CODE_PHY_RAW_WRITE              0x000c0000
849 #define DRV_MSG_CODE_PHY_CORE_READ              0x000d0000
850 #define DRV_MSG_CODE_PHY_CORE_WRITE             0x000e0000
851 #define DRV_MSG_CODE_SET_VERSION                0x000f0000
852 #define DRV_MSG_CODE_MCP_HALT                   0x00100000
853 #define DRV_MSG_CODE_PMD_DIAG_DUMP              0x00140000
854 #define DRV_MSG_CODE_PMD_DIAG_EYE               0x00150000
855 #define DRV_MSG_CODE_TRANSCEIVER_READ           0x00160000
856 #define DRV_MSG_CODE_TRANSCEIVER_WRITE          0x00170000
857
858 #define DRV_MSG_CODE_SET_VMAC                   0x00110000
859 #define DRV_MSG_CODE_GET_VMAC                   0x00120000
860 #define DRV_MSG_CODE_VMAC_TYPE_MAC              1
861 #define DRV_MSG_CODE_VMAC_TYPE_WWNN             2
862 #define DRV_MSG_CODE_VMAC_TYPE_WWPN             3
863
864 #define DRV_MSG_CODE_GET_STATS                  0x00130000
865 #define DRV_MSG_CODE_STATS_TYPE_LAN             1
866
867 #define DRV_MSG_CODE_OCBB_DATA                  0x00180000
868 #define DRV_MSG_CODE_SET_BW                     0x00190000
869 #define DRV_MSG_CODE_MASK_PARITIES              0x001a0000
870 #define DRV_MSG_CODE_INDUCE_FAILURE             0x001b0000
871 #define DRV_MSG_FAN_FAILURE_TYPE                (1 << 0)
872 #define DRV_MSG_TEMPERATURE_FAILURE_TYPE        (1 << 1)
873
874 #define DRV_MSG_CODE_GPIO_READ                  0x001c0000
875 #define DRV_MSG_CODE_GPIO_WRITE                 0x001d0000
876
877 #define DRV_MSG_CODE_SET_LED_MODE               0x00200000
878 #define DRV_MSG_CODE_EMPTY_MB                   0x00220000
879
880 #define DRV_MSG_SEQ_NUMBER_MASK                 0x0000ffff
881
882         u32 drv_mb_param;
883         /* UNLOAD_REQ params */
884 #define DRV_MB_PARAM_UNLOAD_WOL_UNKNOWN         0x00000000
885 #define DRV_MB_PARAM_UNLOAD_WOL_MCP             0x00000001
886 #define DRV_MB_PARAM_UNLOAD_WOL_DISABLED        0x00000002
887 #define DRV_MB_PARAM_UNLOAD_WOL_ENABLED         0x00000003
888
889         /* UNLOAD_DONE_params */
890 #define DRV_MB_PARAM_UNLOAD_NON_D3_POWER        0x00000001
891
892         /* INIT_PHY params */
893 #define DRV_MB_PARAM_INIT_PHY_FORCE             0x00000001
894 #define DRV_MB_PARAM_INIT_PHY_DONT_CARE         0x00000002
895
896         /* LLDP / DCBX params */
897 #define DRV_MB_PARAM_LLDP_SEND_MASK             0x00000001
898 #define DRV_MB_PARAM_LLDP_SEND_SHIFT            0
899 #define DRV_MB_PARAM_LLDP_AGENT_MASK            0x00000006
900 #define DRV_MB_PARAM_LLDP_AGENT_SHIFT           1
901 #define DRV_MB_PARAM_DCBX_NOTIFY_MASK           0x00000008
902 #define DRV_MB_PARAM_DCBX_NOTIFY_SHIFT          3
903
904 #define DRV_MB_PARAM_NIG_DRAIN_PERIOD_MS_MASK   0x000000FF
905 #define DRV_MB_PARAM_NIG_DRAIN_PERIOD_MS_SHIFT  0
906
907 #define DRV_MB_PARAM_NVM_PUT_FILE_BEGIN_MFW     0x1
908 #define DRV_MB_PARAM_NVM_PUT_FILE_BEGIN_IMAGE   0x2
909
910 #define DRV_MB_PARAM_NVM_OFFSET_SHIFT           0
911 #define DRV_MB_PARAM_NVM_OFFSET_MASK            0x00FFFFFF
912 #define DRV_MB_PARAM_NVM_LEN_SHIFT              24
913 #define DRV_MB_PARAM_NVM_LEN_MASK               0xFF000000
914
915 #define DRV_MB_PARAM_PHY_ADDR_SHIFT             0
916 #define DRV_MB_PARAM_PHY_ADDR_MASK              0x1FF0FFFF
917 #define DRV_MB_PARAM_PHY_LANE_SHIFT             16
918 #define DRV_MB_PARAM_PHY_LANE_MASK              0x000F0000
919 #define DRV_MB_PARAM_PHY_SELECT_PORT_SHIFT      29
920 #define DRV_MB_PARAM_PHY_SELECT_PORT_MASK       0x20000000
921 #define DRV_MB_PARAM_PHY_PORT_SHIFT             30
922 #define DRV_MB_PARAM_PHY_PORT_MASK              0xc0000000
923
924 #define DRV_MB_PARAM_PHYMOD_LANE_SHIFT          0
925 #define DRV_MB_PARAM_PHYMOD_LANE_MASK           0x000000FF
926 #define DRV_MB_PARAM_PHYMOD_SIZE_SHIFT          8
927 #define DRV_MB_PARAM_PHYMOD_SIZE_MASK           0x000FFF00
928         /* configure vf MSIX params */
929 #define DRV_MB_PARAM_CFG_VF_MSIX_VF_ID_SHIFT    0
930 #define DRV_MB_PARAM_CFG_VF_MSIX_VF_ID_MASK     0x000000FF
931 #define DRV_MB_PARAM_CFG_VF_MSIX_SB_NUM_SHIFT   8
932 #define DRV_MB_PARAM_CFG_VF_MSIX_SB_NUM_MASK    0x0000FF00
933
934         /* OneView configuration parametres */
935 #define DRV_MB_PARAM_OV_CURR_CFG_SHIFT          0
936 #define DRV_MB_PARAM_OV_CURR_CFG_MASK           0x0000000F
937 #define DRV_MB_PARAM_OV_CURR_CFG_NONE           0
938 #define DRV_MB_PARAM_OV_CURR_CFG_OS                     1
939 #define DRV_MB_PARAM_OV_CURR_CFG_VENDOR_SPEC    2
940 #define DRV_MB_PARAM_OV_CURR_CFG_OTHER          3
941 #define DRV_MB_PARAM_OV_CURR_CFG_VC_CLP         4
942 #define DRV_MB_PARAM_OV_CURR_CFG_CNU            5
943 #define DRV_MB_PARAM_OV_CURR_CFG_DCI            6
944 #define DRV_MB_PARAM_OV_CURR_CFG_HII            7
945
946 #define DRV_MB_PARAM_OV_UPDATE_BOOT_PROG_SHIFT                  0
947 #define DRV_MB_PARAM_OV_UPDATE_BOOT_PROG_MASK                   0x000000FF
948 #define DRV_MB_PARAM_OV_UPDATE_BOOT_PROG_NONE                   (1 << 0)
949 #define DRV_MB_PARAM_OV_UPDATE_BOOT_PROG_TRARGET_FOUND                  (1 << 2)
950 #define DRV_MB_PARAM_OV_UPDATE_BOOT_PROG_LOGGED_INTO_TGT                (1 << 4)
951 #define DRV_MB_PARAM_OV_UPDATE_BOOT_PROG_IMG_DOWNLOADED                 (1 << 5)
952 #define DRV_MB_PARAM_OV_UPDATE_BOOT_PROG_OS_HANDOFF                     (1 << 6)
953 #define DRV_MB_PARAM_OV_UPDATE_BOOT_COMPLETED                           0
954
955 #define DRV_MB_PARAM_OV_PCI_BUS_NUM_SHIFT               0
956 #define DRV_MB_PARAM_OV_PCI_BUS_NUM_MASK                0x000000FF
957
958 #define DRV_MB_PARAM_OV_STORM_FW_VER_SHIFT              0
959 #define DRV_MB_PARAM_OV_STORM_FW_VER_MASK                       0xFFFFFFFF
960 #define DRV_MB_PARAM_OV_STORM_FW_VER_MAJOR_MASK         0xFF000000
961 #define DRV_MB_PARAM_OV_STORM_FW_VER_MINOR_MASK         0x00FF0000
962 #define DRV_MB_PARAM_OV_STORM_FW_VER_BUILD_MASK         0x0000FF00
963 #define DRV_MB_PARAM_OV_STORM_FW_VER_DROP_MASK          0x000000FF
964
965 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE_SHIFT               0
966 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE_MASK                0xF
967 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE_UNKNOWN             0x1
968 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE_NOT_LOADED  0x2
969 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE_LOADING             0x3
970 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE_DISABLED    0x4
971 #define DRV_MSG_CODE_OV_UPDATE_DRIVER_STATE_ACTIVE              0x5
972
973 #define DRV_MB_PARAM_OV_MTU_SIZE_SHIFT          0
974 #define DRV_MB_PARAM_OV_MTU_SIZE_MASK           0xFFFFFFFF
975
976 #define DRV_MB_PARAM_SET_LED_MODE_OPER          0x0
977 #define DRV_MB_PARAM_SET_LED_MODE_ON            0x1
978 #define DRV_MB_PARAM_SET_LED_MODE_OFF           0x2
979
980 #define DRV_MB_PARAM_TRANSCEIVER_PORT_SHIFT             0
981 #define DRV_MB_PARAM_TRANSCEIVER_PORT_MASK              0x00000003
982 #define DRV_MB_PARAM_TRANSCEIVER_SIZE_SHIFT             2
983 #define DRV_MB_PARAM_TRANSCEIVER_SIZE_MASK              0x000000FC
984 #define DRV_MB_PARAM_TRANSCEIVER_I2C_ADDRESS_SHIFT      8
985 #define DRV_MB_PARAM_TRANSCEIVER_I2C_ADDRESS_MASK       0x0000FF00
986 #define DRV_MB_PARAM_TRANSCEIVER_OFFSET_SHIFT           16
987 #define DRV_MB_PARAM_TRANSCEIVER_OFFSET_MASK            0xFFFF0000
988
989 #define DRV_MB_PARAM_GPIO_NUMBER_SHIFT          0
990 #define DRV_MB_PARAM_GPIO_NUMBER_MASK           0x0000FFFF
991 #define DRV_MB_PARAM_GPIO_VALUE_SHIFT           16
992 #define DRV_MB_PARAM_GPIO_VALUE_MASK            0xFFFF0000
993
994         u32 fw_mb_header;
995 #define FW_MSG_CODE_MASK                        0xffff0000
996 #define FW_MSG_CODE_DRV_LOAD_ENGINE             0x10100000
997 #define FW_MSG_CODE_DRV_LOAD_PORT               0x10110000
998 #define FW_MSG_CODE_DRV_LOAD_FUNCTION           0x10120000
999 #define FW_MSG_CODE_DRV_LOAD_REFUSED_PDA        0x10200000
1000 #define FW_MSG_CODE_DRV_LOAD_REFUSED_HSI        0x10210000
1001 #define FW_MSG_CODE_DRV_LOAD_REFUSED_DIAG       0x10220000
1002 #define FW_MSG_CODE_DRV_LOAD_DONE               0x11100000
1003 #define FW_MSG_CODE_DRV_UNLOAD_ENGINE           0x20110000
1004 #define FW_MSG_CODE_DRV_UNLOAD_PORT             0x20120000
1005 #define FW_MSG_CODE_DRV_UNLOAD_FUNCTION         0x20130000
1006 #define FW_MSG_CODE_DRV_UNLOAD_DONE             0x21100000
1007 #define FW_MSG_CODE_INIT_PHY_DONE               0x21200000
1008 #define FW_MSG_CODE_INIT_PHY_ERR_INVALID_ARGS   0x21300000
1009 #define FW_MSG_CODE_LINK_RESET_DONE             0x23000000
1010 #define FW_MSG_CODE_SET_LLDP_DONE               0x24000000
1011 #define FW_MSG_CODE_SET_LLDP_UNSUPPORTED_AGENT  0x24010000
1012 #define FW_MSG_CODE_SET_DCBX_DONE               0x25000000
1013 #define FW_MSG_CODE_UPDATE_CURR_CFG_DONE        0x26000000
1014 #define FW_MSG_CODE_UPDATE_BUS_NUM_DONE         0x27000000
1015 #define FW_MSG_CODE_UPDATE_BOOT_PROGRESS_DONE   0x28000000
1016 #define FW_MSG_CODE_UPDATE_STORM_FW_VER_DONE    0x29000000
1017 #define FW_MSG_CODE_UPDATE_DRIVER_STATE_DONE    0x31000000
1018 #define FW_MSG_CODE_DRV_MSG_CODE_BW_UPDATE_DONE 0x32000000
1019 #define FW_MSG_CODE_DRV_MSG_CODE_MTU_SIZE_DONE  0x33000000
1020 #define FW_MSG_CODE_NIG_DRAIN_DONE              0x30000000
1021 #define FW_MSG_CODE_VF_DISABLED_DONE            0xb0000000
1022 #define FW_MSG_CODE_DRV_CFG_VF_MSIX_DONE        0xb0010000
1023 #define FW_MSG_CODE_FLR_ACK                     0x02000000
1024 #define FW_MSG_CODE_FLR_NACK                    0x02100000
1025 #define FW_MSG_CODE_SET_DRIVER_DONE             0x02200000
1026 #define FW_MSG_CODE_SET_VMAC_SUCCESS            0x02300000
1027 #define FW_MSG_CODE_SET_VMAC_FAIL               0x02400000
1028
1029 #define FW_MSG_CODE_NVM_OK                      0x00010000
1030 #define FW_MSG_CODE_NVM_INVALID_MODE            0x00020000
1031 #define FW_MSG_CODE_NVM_PREV_CMD_WAS_NOT_FINISHED       0x00030000
1032 #define FW_MSG_CODE_NVM_FAILED_TO_ALLOCATE_PAGE 0x00040000
1033 #define FW_MSG_CODE_NVM_INVALID_DIR_FOUND       0x00050000
1034 #define FW_MSG_CODE_NVM_PAGE_NOT_FOUND          0x00060000
1035 #define FW_MSG_CODE_NVM_FAILED_PARSING_BNDLE_HEADER 0x00070000
1036 #define FW_MSG_CODE_NVM_FAILED_PARSING_IMAGE_HEADER 0x00080000
1037 #define FW_MSG_CODE_NVM_PARSING_OUT_OF_SYNC     0x00090000
1038 #define FW_MSG_CODE_NVM_FAILED_UPDATING_DIR     0x000a0000
1039 #define FW_MSG_CODE_NVM_FAILED_TO_FREE_PAGE     0x000b0000
1040 #define FW_MSG_CODE_NVM_FILE_NOT_FOUND          0x000c0000
1041 #define FW_MSG_CODE_NVM_OPERATION_FAILED        0x000d0000
1042 #define FW_MSG_CODE_NVM_FAILED_UNALIGNED        0x000e0000
1043 #define FW_MSG_CODE_NVM_BAD_OFFSET              0x000f0000
1044 #define FW_MSG_CODE_NVM_BAD_SIGNATURE           0x00100000
1045 #define FW_MSG_CODE_NVM_FILE_READ_ONLY          0x00200000
1046 #define FW_MSG_CODE_NVM_UNKNOWN_FILE            0x00300000
1047 #define FW_MSG_CODE_NVM_PUT_FILE_FINISH_OK      0x00400000
1048 #define FW_MSG_CODE_MCP_RESET_REJECT            0x00600000
1049 #define FW_MSG_CODE_PHY_OK                      0x00110000
1050 #define FW_MSG_CODE_PHY_ERROR                   0x00120000
1051 #define FW_MSG_CODE_SET_SECURE_MODE_ERROR       0x00130000
1052 #define FW_MSG_CODE_SET_SECURE_MODE_OK          0x00140000
1053 #define FW_MSG_MODE_PHY_PRIVILEGE_ERROR         0x00150000
1054 #define FW_MSG_CODE_OK                          0x00160000
1055 #define FW_MSG_CODE_LED_MODE_INVALID            0x00170000
1056 #define FW_MSG_CODE_PHY_DIAG_OK           0x00160000
1057 #define FW_MSG_CODE_PHY_DIAG_ERROR        0x00170000
1058 #define FW_MSG_CODE_INIT_HW_FAILED_TO_ALLOCATE_PAGE     0x00040000
1059 #define FW_MSG_CODE_INIT_HW_FAILED_BAD_STATE    0x00170000
1060 #define FW_MSG_CODE_INIT_HW_FAILED_TO_SET_WINDOW 0x000d0000
1061 #define FW_MSG_CODE_INIT_HW_FAILED_NO_IMAGE     0x000c0000
1062 #define FW_MSG_CODE_INIT_HW_FAILED_VERSION_MISMATCH     0x00100000
1063 #define FW_MSG_CODE_TRANSCEIVER_DIAG_OK           0x00160000
1064 #define FW_MSG_CODE_TRANSCEIVER_DIAG_ERROR        0x00170000
1065 #define FW_MSG_CODE_TRANSCEIVER_NOT_PRESENT             0x00020000
1066 #define FW_MSG_CODE_TRANSCEIVER_BAD_BUFFER_SIZE         0x000f0000
1067 #define FW_MSG_CODE_GPIO_OK           0x00160000
1068 #define FW_MSG_CODE_GPIO_DIRECTION_ERR        0x00170000
1069 #define FW_MSG_CODE_GPIO_CTRL_ERR               0x00020000
1070 #define FW_MSG_CODE_GPIO_INVALID                0x000f0000
1071 #define FW_MSG_CODE_GPIO_INVALID_VALUE  0x00050000
1072
1073 #define FW_MSG_SEQ_NUMBER_MASK                  0x0000ffff
1074
1075         u32 fw_mb_param;
1076
1077         u32 drv_pulse_mb;
1078 #define DRV_PULSE_SEQ_MASK                      0x00007fff
1079 #define DRV_PULSE_SYSTEM_TIME_MASK              0xffff0000
1080         /*
1081          * The system time is in the format of
1082          * (year-2001)*12*32 + month*32 + day.
1083          */
1084 #define DRV_PULSE_ALWAYS_ALIVE                  0x00008000
1085         /*
1086          * Indicate to the firmware not to go into the
1087          * OS-absent when it is not getting driver pulse.
1088          * This is used for debugging as well for PXE(MBA).
1089          */
1090
1091         u32 mcp_pulse_mb;
1092 #define MCP_PULSE_SEQ_MASK                      0x00007fff
1093 #define MCP_PULSE_ALWAYS_ALIVE                  0x00008000
1094         /* Indicates to the driver not to assert due to lack
1095          * of MCP response
1096          */
1097 #define MCP_EVENT_MASK                          0xffff0000
1098 #define MCP_EVENT_OTHER_DRIVER_RESET_REQ        0x00010000
1099
1100         union drv_union_data union_data;
1101 };
1102
1103 /* MFW - DRV MB */
1104 /**********************************************************************
1105  * Description
1106  *   Incremental Aggregative
1107  *   8-bit MFW counter per message
1108  *   8-bit ack-counter per message
1109  * Capabilities
1110  *   Provides up to 256 aggregative message per type
1111  *   Provides 4 message types in dword
1112  *   Message type pointers to byte offset
1113  *   Backward Compatibility by using sizeof for the counters.
1114  *   No lock requires for 32bit messages
1115  * Limitations:
1116  * In case of messages greater than 32bit, a dedicated mechanism(e.g lock)
1117  * is required to prevent data corruption.
1118  **********************************************************************/
1119 enum MFW_DRV_MSG_TYPE {
1120         MFW_DRV_MSG_LINK_CHANGE,
1121         MFW_DRV_MSG_FLR_FW_ACK_FAILED,
1122         MFW_DRV_MSG_VF_DISABLED,
1123         MFW_DRV_MSG_LLDP_DATA_UPDATED,
1124         MFW_DRV_MSG_DCBX_REMOTE_MIB_UPDATED,
1125         MFW_DRV_MSG_DCBX_OPERATIONAL_MIB_UPDATED,
1126         MFW_DRV_MSG_ERROR_RECOVERY,
1127         MFW_DRV_MSG_BW_UPDATE,
1128         MFW_DRV_MSG_S_TAG_UPDATE,
1129         MFW_DRV_MSG_GET_LAN_STATS,
1130         MFW_DRV_MSG_GET_FCOE_STATS,
1131         MFW_DRV_MSG_GET_ISCSI_STATS,
1132         MFW_DRV_MSG_GET_RDMA_STATS,
1133         MFW_DRV_MSG_FAILURE_DETECTED,
1134         MFW_DRV_MSG_TRANSCEIVER_STATE_CHANGE,
1135         MFW_DRV_MSG_MAX
1136 };
1137
1138 #define MFW_DRV_MSG_MAX_DWORDS(msgs)    (((msgs - 1) >> 2) + 1)
1139 #define MFW_DRV_MSG_DWORD(msg_id)       (msg_id >> 2)
1140 #define MFW_DRV_MSG_OFFSET(msg_id)      ((msg_id & 0x3) << 3)
1141 #define MFW_DRV_MSG_MASK(msg_id)        (0xff << MFW_DRV_MSG_OFFSET(msg_id))
1142
1143 #ifdef BIG_ENDIAN               /* Like MFW */
1144 #define DRV_ACK_MSG(msg_p, msg_id) \
1145 ((u8)((u8 *)msg_p)[msg_id]++;)
1146 #else
1147 #define DRV_ACK_MSG(msg_p, msg_id) \
1148 ((u8)((u8 *)msg_p)[((msg_id & ~3) | ((~msg_id) & 3))]++;)
1149 #endif
1150
1151 #define MFW_DRV_UPDATE(shmem_func, msg_id) \
1152 ((u8)((u8 *)(MFW_MB_P(shmem_func)->msg))[msg_id]++;)
1153
1154 struct public_mfw_mb {
1155         u32 sup_msgs;           /* Assigend with MFW_DRV_MSG_MAX */
1156         u32 msg[MFW_DRV_MSG_MAX_DWORDS(MFW_DRV_MSG_MAX)];
1157         u32 ack[MFW_DRV_MSG_MAX_DWORDS(MFW_DRV_MSG_MAX)];
1158 };
1159
1160 /**************************************/
1161 /*                                    */
1162 /*     P U B L I C       D A T A      */
1163 /*                                    */
1164 /**************************************/
1165 enum public_sections {
1166         PUBLIC_DRV_MB,          /* Points to the first drv_mb of path0 */
1167         PUBLIC_MFW_MB,          /* Points to the first mfw_mb of path0 */
1168         PUBLIC_GLOBAL,
1169         PUBLIC_PATH,
1170         PUBLIC_PORT,
1171         PUBLIC_FUNC,
1172         PUBLIC_MAX_SECTIONS
1173 };
1174
1175 struct drv_ver_info_stc {
1176         u32 ver;
1177         u8 name[32];
1178 };
1179
1180 /* Runtime data needs about 1/2K. We use 2K to be on the safe side.
1181  * Please make sure data does not exceed this size.
1182  */
1183 #define NUM_RUNTIME_DWORDS 16
1184 struct drv_init_hw_stc {
1185         u32 init_hw_bitmask[NUM_RUNTIME_DWORDS];
1186         u32 init_hw_data[NUM_RUNTIME_DWORDS * 32];
1187 };
1188
1189 struct mcp_public_data {
1190         /* The sections fields is an array */
1191         u32 num_sections;
1192         offsize_t sections[PUBLIC_MAX_SECTIONS];
1193         struct public_drv_mb drv_mb[MCP_GLOB_FUNC_MAX];
1194         struct public_mfw_mb mfw_mb[MCP_GLOB_FUNC_MAX];
1195         struct public_global global;
1196         struct public_path path[MCP_GLOB_PATH_MAX];
1197         struct public_port port[MCP_GLOB_PORT_MAX];
1198         struct public_func func[MCP_GLOB_FUNC_MAX];
1199 };
1200
1201 #define I2C_TRANSCEIVER_ADDR    0xa0
1202 #define MAX_I2C_TRANSACTION_SIZE        16
1203 #define MAX_I2C_TRANSCEIVER_PAGE_SIZE   256
1204
1205 #endif /* MCP_PUBLIC_H */