diff options
Diffstat (limited to 'drivers/net/ethernet/brocade/bna/bfi.h')
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bfi.h | 400 |
1 files changed, 400 insertions, 0 deletions
diff --git a/drivers/net/ethernet/brocade/bna/bfi.h b/drivers/net/ethernet/brocade/bna/bfi.h new file mode 100644 index 000000000000..088211c2724f --- /dev/null +++ b/drivers/net/ethernet/brocade/bna/bfi.h | |||
@@ -0,0 +1,400 @@ | |||
1 | /* | ||
2 | * Linux network driver for Brocade Converged Network Adapter. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify it | ||
5 | * under the terms of the GNU General Public License (GPL) Version 2 as | ||
6 | * published by the Free Software Foundation | ||
7 | * | ||
8 | * This program is distributed in the hope that it will be useful, but | ||
9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
11 | * General Public License for more details. | ||
12 | */ | ||
13 | /* | ||
14 | * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. | ||
15 | * All rights reserved | ||
16 | * www.brocade.com | ||
17 | */ | ||
18 | |||
19 | #ifndef __BFI_H__ | ||
20 | #define __BFI_H__ | ||
21 | |||
22 | #include "bfa_defs.h" | ||
23 | |||
24 | #pragma pack(1) | ||
25 | |||
26 | /** | ||
27 | * BFI FW image type | ||
28 | */ | ||
29 | #define BFI_FLASH_CHUNK_SZ 256 /*!< Flash chunk size */ | ||
30 | #define BFI_FLASH_CHUNK_SZ_WORDS (BFI_FLASH_CHUNK_SZ/sizeof(u32)) | ||
31 | enum { | ||
32 | BFI_IMAGE_CB_FC, | ||
33 | BFI_IMAGE_CT_FC, | ||
34 | BFI_IMAGE_CT_CNA, | ||
35 | BFI_IMAGE_MAX, | ||
36 | }; | ||
37 | |||
38 | /** | ||
39 | * Msg header common to all msgs | ||
40 | */ | ||
41 | struct bfi_mhdr { | ||
42 | u8 msg_class; /*!< @ref enum bfi_mclass */ | ||
43 | u8 msg_id; /*!< msg opcode with in the class */ | ||
44 | union { | ||
45 | struct { | ||
46 | u8 rsvd; | ||
47 | u8 lpu_id; /*!< msg destination */ | ||
48 | } h2i; | ||
49 | u16 i2htok; /*!< token in msgs to host */ | ||
50 | } mtag; | ||
51 | }; | ||
52 | |||
53 | #define bfi_h2i_set(_mh, _mc, _op, _lpuid) do { \ | ||
54 | (_mh).msg_class = (_mc); \ | ||
55 | (_mh).msg_id = (_op); \ | ||
56 | (_mh).mtag.h2i.lpu_id = (_lpuid); \ | ||
57 | } while (0) | ||
58 | |||
59 | #define bfi_i2h_set(_mh, _mc, _op, _i2htok) do { \ | ||
60 | (_mh).msg_class = (_mc); \ | ||
61 | (_mh).msg_id = (_op); \ | ||
62 | (_mh).mtag.i2htok = (_i2htok); \ | ||
63 | } while (0) | ||
64 | |||
65 | /* | ||
66 | * Message opcodes: 0-127 to firmware, 128-255 to host | ||
67 | */ | ||
68 | #define BFI_I2H_OPCODE_BASE 128 | ||
69 | #define BFA_I2HM(_x) ((_x) + BFI_I2H_OPCODE_BASE) | ||
70 | |||
71 | /** | ||
72 | **************************************************************************** | ||
73 | * | ||
74 | * Scatter Gather Element and Page definition | ||
75 | * | ||
76 | **************************************************************************** | ||
77 | */ | ||
78 | |||
79 | #define BFI_SGE_INLINE 1 | ||
80 | #define BFI_SGE_INLINE_MAX (BFI_SGE_INLINE + 1) | ||
81 | |||
82 | /** | ||
83 | * SG Flags | ||
84 | */ | ||
85 | enum { | ||
86 | BFI_SGE_DATA = 0, /*!< data address, not last */ | ||
87 | BFI_SGE_DATA_CPL = 1, /*!< data addr, last in current page */ | ||
88 | BFI_SGE_DATA_LAST = 3, /*!< data address, last */ | ||
89 | BFI_SGE_LINK = 2, /*!< link address */ | ||
90 | BFI_SGE_PGDLEN = 2, /*!< cumulative data length for page */ | ||
91 | }; | ||
92 | |||
93 | /** | ||
94 | * DMA addresses | ||
95 | */ | ||
96 | union bfi_addr_u { | ||
97 | struct { | ||
98 | u32 addr_lo; | ||
99 | u32 addr_hi; | ||
100 | } a32; | ||
101 | }; | ||
102 | |||
103 | /** | ||
104 | * Scatter Gather Element | ||
105 | */ | ||
106 | struct bfi_sge { | ||
107 | #ifdef __BIGENDIAN | ||
108 | u32 flags:2, | ||
109 | rsvd:2, | ||
110 | sg_len:28; | ||
111 | #else | ||
112 | u32 sg_len:28, | ||
113 | rsvd:2, | ||
114 | flags:2; | ||
115 | #endif | ||
116 | union bfi_addr_u sga; | ||
117 | }; | ||
118 | |||
119 | /** | ||
120 | * Scatter Gather Page | ||
121 | */ | ||
122 | #define BFI_SGPG_DATA_SGES 7 | ||
123 | #define BFI_SGPG_SGES_MAX (BFI_SGPG_DATA_SGES + 1) | ||
124 | #define BFI_SGPG_RSVD_WD_LEN 8 | ||
125 | struct bfi_sgpg { | ||
126 | struct bfi_sge sges[BFI_SGPG_SGES_MAX]; | ||
127 | u32 rsvd[BFI_SGPG_RSVD_WD_LEN]; | ||
128 | }; | ||
129 | |||
130 | /* | ||
131 | * Large Message structure - 128 Bytes size Msgs | ||
132 | */ | ||
133 | #define BFI_LMSG_SZ 128 | ||
134 | #define BFI_LMSG_PL_WSZ \ | ||
135 | ((BFI_LMSG_SZ - sizeof(struct bfi_mhdr)) / 4) | ||
136 | |||
137 | struct bfi_msg { | ||
138 | struct bfi_mhdr mhdr; | ||
139 | u32 pl[BFI_LMSG_PL_WSZ]; | ||
140 | }; | ||
141 | |||
142 | /** | ||
143 | * Mailbox message structure | ||
144 | */ | ||
145 | #define BFI_MBMSG_SZ 7 | ||
146 | struct bfi_mbmsg { | ||
147 | struct bfi_mhdr mh; | ||
148 | u32 pl[BFI_MBMSG_SZ]; | ||
149 | }; | ||
150 | |||
151 | /** | ||
152 | * Message Classes | ||
153 | */ | ||
154 | enum bfi_mclass { | ||
155 | BFI_MC_IOC = 1, /*!< IO Controller (IOC) */ | ||
156 | BFI_MC_DIAG = 2, /*!< Diagnostic Msgs */ | ||
157 | BFI_MC_FLASH = 3, /*!< Flash message class */ | ||
158 | BFI_MC_CEE = 4, /*!< CEE */ | ||
159 | BFI_MC_FCPORT = 5, /*!< FC port */ | ||
160 | BFI_MC_IOCFC = 6, /*!< FC - IO Controller (IOC) */ | ||
161 | BFI_MC_LL = 7, /*!< Link Layer */ | ||
162 | BFI_MC_UF = 8, /*!< Unsolicited frame receive */ | ||
163 | BFI_MC_FCXP = 9, /*!< FC Transport */ | ||
164 | BFI_MC_LPS = 10, /*!< lport fc login services */ | ||
165 | BFI_MC_RPORT = 11, /*!< Remote port */ | ||
166 | BFI_MC_ITNIM = 12, /*!< I-T nexus (Initiator mode) */ | ||
167 | BFI_MC_IOIM_READ = 13, /*!< read IO (Initiator mode) */ | ||
168 | BFI_MC_IOIM_WRITE = 14, /*!< write IO (Initiator mode) */ | ||
169 | BFI_MC_IOIM_IO = 15, /*!< IO (Initiator mode) */ | ||
170 | BFI_MC_IOIM = 16, /*!< IO (Initiator mode) */ | ||
171 | BFI_MC_IOIM_IOCOM = 17, /*!< good IO completion */ | ||
172 | BFI_MC_TSKIM = 18, /*!< Initiator Task management */ | ||
173 | BFI_MC_SBOOT = 19, /*!< SAN boot services */ | ||
174 | BFI_MC_IPFC = 20, /*!< IP over FC Msgs */ | ||
175 | BFI_MC_PORT = 21, /*!< Physical port */ | ||
176 | BFI_MC_SFP = 22, /*!< SFP module */ | ||
177 | BFI_MC_MSGQ = 23, /*!< MSGQ */ | ||
178 | BFI_MC_ENET = 24, /*!< ENET commands/responses */ | ||
179 | BFI_MC_MAX = 32 | ||
180 | }; | ||
181 | |||
182 | #define BFI_IOC_MAX_CQS 4 | ||
183 | #define BFI_IOC_MAX_CQS_ASIC 8 | ||
184 | #define BFI_IOC_MSGLEN_MAX 32 /* 32 bytes */ | ||
185 | |||
186 | #define BFI_BOOT_TYPE_OFF 8 | ||
187 | #define BFI_BOOT_LOADER_OFF 12 | ||
188 | |||
189 | #define BFI_BOOT_TYPE_NORMAL 0 | ||
190 | #define BFI_BOOT_TYPE_FLASH 1 | ||
191 | #define BFI_BOOT_TYPE_MEMTEST 2 | ||
192 | |||
193 | #define BFI_BOOT_LOADER_OS 0 | ||
194 | |||
195 | #define BFI_BOOT_MEMTEST_RES_ADDR 0x900 | ||
196 | #define BFI_BOOT_MEMTEST_RES_SIG 0xA0A1A2A3 | ||
197 | |||
198 | /** | ||
199 | *---------------------------------------------------------------------- | ||
200 | * IOC | ||
201 | *---------------------------------------------------------------------- | ||
202 | */ | ||
203 | |||
204 | enum bfi_ioc_h2i_msgs { | ||
205 | BFI_IOC_H2I_ENABLE_REQ = 1, | ||
206 | BFI_IOC_H2I_DISABLE_REQ = 2, | ||
207 | BFI_IOC_H2I_GETATTR_REQ = 3, | ||
208 | BFI_IOC_H2I_DBG_SYNC = 4, | ||
209 | BFI_IOC_H2I_DBG_DUMP = 5, | ||
210 | }; | ||
211 | |||
212 | enum bfi_ioc_i2h_msgs { | ||
213 | BFI_IOC_I2H_ENABLE_REPLY = BFA_I2HM(1), | ||
214 | BFI_IOC_I2H_DISABLE_REPLY = BFA_I2HM(2), | ||
215 | BFI_IOC_I2H_GETATTR_REPLY = BFA_I2HM(3), | ||
216 | BFI_IOC_I2H_READY_EVENT = BFA_I2HM(4), | ||
217 | BFI_IOC_I2H_HBEAT = BFA_I2HM(5), | ||
218 | }; | ||
219 | |||
220 | /** | ||
221 | * BFI_IOC_H2I_GETATTR_REQ message | ||
222 | */ | ||
223 | struct bfi_ioc_getattr_req { | ||
224 | struct bfi_mhdr mh; | ||
225 | union bfi_addr_u attr_addr; | ||
226 | }; | ||
227 | |||
228 | struct bfi_ioc_attr { | ||
229 | u64 mfg_pwwn; /*!< Mfg port wwn */ | ||
230 | u64 mfg_nwwn; /*!< Mfg node wwn */ | ||
231 | mac_t mfg_mac; /*!< Mfg mac */ | ||
232 | u16 rsvd_a; | ||
233 | u64 pwwn; | ||
234 | u64 nwwn; | ||
235 | mac_t mac; /*!< PBC or Mfg mac */ | ||
236 | u16 rsvd_b; | ||
237 | mac_t fcoe_mac; | ||
238 | u16 rsvd_c; | ||
239 | char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; | ||
240 | u8 pcie_gen; | ||
241 | u8 pcie_lanes_orig; | ||
242 | u8 pcie_lanes; | ||
243 | u8 rx_bbcredit; /*!< receive buffer credits */ | ||
244 | u32 adapter_prop; /*!< adapter properties */ | ||
245 | u16 maxfrsize; /*!< max receive frame size */ | ||
246 | char asic_rev; | ||
247 | u8 rsvd_d; | ||
248 | char fw_version[BFA_VERSION_LEN]; | ||
249 | char optrom_version[BFA_VERSION_LEN]; | ||
250 | struct bfa_mfg_vpd vpd; | ||
251 | u32 card_type; /*!< card type */ | ||
252 | }; | ||
253 | |||
254 | /** | ||
255 | * BFI_IOC_I2H_GETATTR_REPLY message | ||
256 | */ | ||
257 | struct bfi_ioc_getattr_reply { | ||
258 | struct bfi_mhdr mh; /*!< Common msg header */ | ||
259 | u8 status; /*!< cfg reply status */ | ||
260 | u8 rsvd[3]; | ||
261 | }; | ||
262 | |||
263 | /** | ||
264 | * Firmware memory page offsets | ||
265 | */ | ||
266 | #define BFI_IOC_SMEM_PG0_CB (0x40) | ||
267 | #define BFI_IOC_SMEM_PG0_CT (0x180) | ||
268 | |||
269 | /** | ||
270 | * Firmware statistic offset | ||
271 | */ | ||
272 | #define BFI_IOC_FWSTATS_OFF (0x6B40) | ||
273 | #define BFI_IOC_FWSTATS_SZ (4096) | ||
274 | |||
275 | /** | ||
276 | * Firmware trace offset | ||
277 | */ | ||
278 | #define BFI_IOC_TRC_OFF (0x4b00) | ||
279 | #define BFI_IOC_TRC_ENTS 256 | ||
280 | |||
281 | #define BFI_IOC_FW_SIGNATURE (0xbfadbfad) | ||
282 | #define BFI_IOC_MD5SUM_SZ 4 | ||
283 | struct bfi_ioc_image_hdr { | ||
284 | u32 signature; /*!< constant signature */ | ||
285 | u32 rsvd_a; | ||
286 | u32 exec; /*!< exec vector */ | ||
287 | u32 param; /*!< parameters */ | ||
288 | u32 rsvd_b[4]; | ||
289 | u32 md5sum[BFI_IOC_MD5SUM_SZ]; | ||
290 | }; | ||
291 | |||
292 | enum bfi_fwboot_type { | ||
293 | BFI_FWBOOT_TYPE_NORMAL = 0, | ||
294 | BFI_FWBOOT_TYPE_FLASH = 1, | ||
295 | BFI_FWBOOT_TYPE_MEMTEST = 2, | ||
296 | }; | ||
297 | |||
298 | /** | ||
299 | * BFI_IOC_I2H_READY_EVENT message | ||
300 | */ | ||
301 | struct bfi_ioc_rdy_event { | ||
302 | struct bfi_mhdr mh; /*!< common msg header */ | ||
303 | u8 init_status; /*!< init event status */ | ||
304 | u8 rsvd[3]; | ||
305 | }; | ||
306 | |||
307 | struct bfi_ioc_hbeat { | ||
308 | struct bfi_mhdr mh; /*!< common msg header */ | ||
309 | u32 hb_count; /*!< current heart beat count */ | ||
310 | }; | ||
311 | |||
312 | /** | ||
313 | * IOC hardware/firmware state | ||
314 | */ | ||
315 | enum bfi_ioc_state { | ||
316 | BFI_IOC_UNINIT = 0, /*!< not initialized */ | ||
317 | BFI_IOC_INITING = 1, /*!< h/w is being initialized */ | ||
318 | BFI_IOC_HWINIT = 2, /*!< h/w is initialized */ | ||
319 | BFI_IOC_CFG = 3, /*!< IOC configuration in progress */ | ||
320 | BFI_IOC_OP = 4, /*!< IOC is operational */ | ||
321 | BFI_IOC_DISABLING = 5, /*!< IOC is being disabled */ | ||
322 | BFI_IOC_DISABLED = 6, /*!< IOC is disabled */ | ||
323 | BFI_IOC_CFG_DISABLED = 7, /*!< IOC is being disabled;transient */ | ||
324 | BFI_IOC_FAIL = 8, /*!< IOC heart-beat failure */ | ||
325 | BFI_IOC_MEMTEST = 9, /*!< IOC is doing memtest */ | ||
326 | }; | ||
327 | |||
328 | #define BFI_IOC_ENDIAN_SIG 0x12345678 | ||
329 | |||
330 | enum { | ||
331 | BFI_ADAPTER_TYPE_FC = 0x01, /*!< FC adapters */ | ||
332 | BFI_ADAPTER_TYPE_MK = 0x0f0000, /*!< adapter type mask */ | ||
333 | BFI_ADAPTER_TYPE_SH = 16, /*!< adapter type shift */ | ||
334 | BFI_ADAPTER_NPORTS_MK = 0xff00, /*!< number of ports mask */ | ||
335 | BFI_ADAPTER_NPORTS_SH = 8, /*!< number of ports shift */ | ||
336 | BFI_ADAPTER_SPEED_MK = 0xff, /*!< adapter speed mask */ | ||
337 | BFI_ADAPTER_SPEED_SH = 0, /*!< adapter speed shift */ | ||
338 | BFI_ADAPTER_PROTO = 0x100000, /*!< prototype adapaters */ | ||
339 | BFI_ADAPTER_TTV = 0x200000, /*!< TTV debug capable */ | ||
340 | BFI_ADAPTER_UNSUPP = 0x400000, /*!< unknown adapter type */ | ||
341 | }; | ||
342 | |||
343 | #define BFI_ADAPTER_GETP(__prop, __adap_prop) \ | ||
344 | (((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >> \ | ||
345 | BFI_ADAPTER_ ## __prop ## _SH) | ||
346 | #define BFI_ADAPTER_SETP(__prop, __val) \ | ||
347 | ((__val) << BFI_ADAPTER_ ## __prop ## _SH) | ||
348 | #define BFI_ADAPTER_IS_PROTO(__adap_type) \ | ||
349 | ((__adap_type) & BFI_ADAPTER_PROTO) | ||
350 | #define BFI_ADAPTER_IS_TTV(__adap_type) \ | ||
351 | ((__adap_type) & BFI_ADAPTER_TTV) | ||
352 | #define BFI_ADAPTER_IS_UNSUPP(__adap_type) \ | ||
353 | ((__adap_type) & BFI_ADAPTER_UNSUPP) | ||
354 | #define BFI_ADAPTER_IS_SPECIAL(__adap_type) \ | ||
355 | ((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO | \ | ||
356 | BFI_ADAPTER_UNSUPP)) | ||
357 | |||
358 | /** | ||
359 | * BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages | ||
360 | */ | ||
361 | struct bfi_ioc_ctrl_req { | ||
362 | struct bfi_mhdr mh; | ||
363 | u8 ioc_class; | ||
364 | u8 rsvd[3]; | ||
365 | u32 tv_sec; | ||
366 | }; | ||
367 | |||
368 | /** | ||
369 | * BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages | ||
370 | */ | ||
371 | struct bfi_ioc_ctrl_reply { | ||
372 | struct bfi_mhdr mh; /*!< Common msg header */ | ||
373 | u8 status; /*!< enable/disable status */ | ||
374 | u8 rsvd[3]; | ||
375 | }; | ||
376 | |||
377 | #define BFI_IOC_MSGSZ 8 | ||
378 | /** | ||
379 | * H2I Messages | ||
380 | */ | ||
381 | union bfi_ioc_h2i_msg_u { | ||
382 | struct bfi_mhdr mh; | ||
383 | struct bfi_ioc_ctrl_req enable_req; | ||
384 | struct bfi_ioc_ctrl_req disable_req; | ||
385 | struct bfi_ioc_getattr_req getattr_req; | ||
386 | u32 mboxmsg[BFI_IOC_MSGSZ]; | ||
387 | }; | ||
388 | |||
389 | /** | ||
390 | * I2H Messages | ||
391 | */ | ||
392 | union bfi_ioc_i2h_msg_u { | ||
393 | struct bfi_mhdr mh; | ||
394 | struct bfi_ioc_rdy_event rdy_event; | ||
395 | u32 mboxmsg[BFI_IOC_MSGSZ]; | ||
396 | }; | ||
397 | |||
398 | #pragma pack() | ||
399 | |||
400 | #endif /* __BFI_H__ */ | ||