Commit | Line | Data |
---|---|---|
a36c61f9 KG |
1 | /* |
2 | * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. | |
3 | * All rights reserved | |
4 | * www.brocade.com | |
5 | * | |
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify it | |
9 | * under the terms of the GNU General Public License (GPL) Version 2 as | |
10 | * published by the Free Software Foundation | |
11 | * | |
12 | * This program is distributed in the hope that it will be useful, but | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * General Public License for more details. | |
16 | */ | |
17 | ||
18 | #ifndef __BFI_H__ | |
19 | #define __BFI_H__ | |
20 | ||
21 | #include "bfa_defs.h" | |
22 | #include "bfa_defs_svc.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_s { | |
42 | u8 msg_class; /* @ref bfi_mclass_t */ | |
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_s { | |
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_s { | |
126 | struct bfi_sge_s 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_s)) / 4) | |
136 | ||
137 | struct bfi_msg_s { | |
138 | struct bfi_mhdr_s 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_s { | |
147 | struct bfi_mhdr_s 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_FCPORT = 5, /* FC port */ | |
157 | BFI_MC_IOCFC = 6, /* FC - IO Controller (IOC) */ | |
158 | BFI_MC_LL = 7, /* Link Layer */ | |
159 | BFI_MC_UF = 8, /* Unsolicited frame receive */ | |
160 | BFI_MC_FCXP = 9, /* FC Transport */ | |
161 | BFI_MC_LPS = 10, /* lport fc login services */ | |
162 | BFI_MC_RPORT = 11, /* Remote port */ | |
163 | BFI_MC_ITNIM = 12, /* I-T nexus (Initiator mode) */ | |
164 | BFI_MC_IOIM_READ = 13, /* read IO (Initiator mode) */ | |
165 | BFI_MC_IOIM_WRITE = 14, /* write IO (Initiator mode) */ | |
166 | BFI_MC_IOIM_IO = 15, /* IO (Initiator mode) */ | |
167 | BFI_MC_IOIM = 16, /* IO (Initiator mode) */ | |
168 | BFI_MC_IOIM_IOCOM = 17, /* good IO completion */ | |
169 | BFI_MC_TSKIM = 18, /* Initiator Task management */ | |
170 | BFI_MC_PORT = 21, /* Physical port */ | |
171 | BFI_MC_MAX = 32 | |
172 | }; | |
173 | ||
174 | #define BFI_IOC_MAX_CQS 4 | |
175 | #define BFI_IOC_MAX_CQS_ASIC 8 | |
176 | #define BFI_IOC_MSGLEN_MAX 32 /* 32 bytes */ | |
177 | ||
178 | #define BFI_BOOT_TYPE_OFF 8 | |
179 | #define BFI_BOOT_LOADER_OFF 12 | |
180 | ||
181 | #define BFI_BOOT_TYPE_NORMAL 0 | |
182 | #define BFI_BOOT_TYPE_FLASH 1 | |
183 | #define BFI_BOOT_TYPE_MEMTEST 2 | |
184 | ||
185 | #define BFI_BOOT_LOADER_OS 0 | |
186 | #define BFI_BOOT_LOADER_BIOS 1 | |
187 | #define BFI_BOOT_LOADER_UEFI 2 | |
188 | ||
189 | /** | |
190 | *---------------------------------------------------------------------- | |
191 | * IOC | |
192 | *---------------------------------------------------------------------- | |
193 | */ | |
194 | ||
195 | enum bfi_ioc_h2i_msgs { | |
196 | BFI_IOC_H2I_ENABLE_REQ = 1, | |
197 | BFI_IOC_H2I_DISABLE_REQ = 2, | |
198 | BFI_IOC_H2I_GETATTR_REQ = 3, | |
199 | BFI_IOC_H2I_DBG_SYNC = 4, | |
200 | BFI_IOC_H2I_DBG_DUMP = 5, | |
201 | }; | |
202 | ||
203 | enum bfi_ioc_i2h_msgs { | |
204 | BFI_IOC_I2H_ENABLE_REPLY = BFA_I2HM(1), | |
205 | BFI_IOC_I2H_DISABLE_REPLY = BFA_I2HM(2), | |
206 | BFI_IOC_I2H_GETATTR_REPLY = BFA_I2HM(3), | |
207 | BFI_IOC_I2H_READY_EVENT = BFA_I2HM(4), | |
208 | BFI_IOC_I2H_HBEAT = BFA_I2HM(5), | |
209 | }; | |
210 | ||
211 | /** | |
212 | * BFI_IOC_H2I_GETATTR_REQ message | |
213 | */ | |
214 | struct bfi_ioc_getattr_req_s { | |
215 | struct bfi_mhdr_s mh; | |
216 | union bfi_addr_u attr_addr; | |
217 | }; | |
218 | ||
219 | struct bfi_ioc_attr_s { | |
220 | wwn_t mfg_pwwn; /* Mfg port wwn */ | |
221 | wwn_t mfg_nwwn; /* Mfg node wwn */ | |
222 | mac_t mfg_mac; /* Mfg mac */ | |
223 | u16 rsvd_a; | |
224 | wwn_t pwwn; | |
225 | wwn_t nwwn; | |
226 | mac_t mac; /* PBC or Mfg mac */ | |
227 | u16 rsvd_b; | |
228 | mac_t fcoe_mac; | |
229 | u16 rsvd_c; | |
230 | char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)]; | |
231 | u8 pcie_gen; | |
232 | u8 pcie_lanes_orig; | |
233 | u8 pcie_lanes; | |
234 | u8 rx_bbcredit; /* receive buffer credits */ | |
235 | u32 adapter_prop; /* adapter properties */ | |
236 | u16 maxfrsize; /* max receive frame size */ | |
237 | char asic_rev; | |
238 | u8 rsvd_d; | |
239 | char fw_version[BFA_VERSION_LEN]; | |
240 | char optrom_version[BFA_VERSION_LEN]; | |
241 | struct bfa_mfg_vpd_s vpd; | |
242 | u32 card_type; /* card type */ | |
243 | }; | |
244 | ||
245 | /** | |
246 | * BFI_IOC_I2H_GETATTR_REPLY message | |
247 | */ | |
248 | struct bfi_ioc_getattr_reply_s { | |
249 | struct bfi_mhdr_s mh; /* Common msg header */ | |
250 | u8 status; /* cfg reply status */ | |
251 | u8 rsvd[3]; | |
252 | }; | |
253 | ||
254 | /** | |
255 | * Firmware memory page offsets | |
256 | */ | |
257 | #define BFI_IOC_SMEM_PG0_CB (0x40) | |
258 | #define BFI_IOC_SMEM_PG0_CT (0x180) | |
259 | ||
260 | /** | |
261 | * Firmware statistic offset | |
262 | */ | |
263 | #define BFI_IOC_FWSTATS_OFF (0x6B40) | |
264 | #define BFI_IOC_FWSTATS_SZ (4096) | |
265 | ||
266 | /** | |
267 | * Firmware trace offset | |
268 | */ | |
269 | #define BFI_IOC_TRC_OFF (0x4b00) | |
270 | #define BFI_IOC_TRC_ENTS 256 | |
271 | ||
272 | #define BFI_IOC_FW_SIGNATURE (0xbfadbfad) | |
273 | #define BFI_IOC_MD5SUM_SZ 4 | |
274 | struct bfi_ioc_image_hdr_s { | |
275 | u32 signature; /* constant signature */ | |
276 | u32 rsvd_a; | |
277 | u32 exec; /* exec vector */ | |
278 | u32 param; /* parameters */ | |
279 | u32 rsvd_b[4]; | |
280 | u32 md5sum[BFI_IOC_MD5SUM_SZ]; | |
281 | }; | |
282 | ||
283 | /** | |
284 | * BFI_IOC_I2H_READY_EVENT message | |
285 | */ | |
286 | struct bfi_ioc_rdy_event_s { | |
287 | struct bfi_mhdr_s mh; /* common msg header */ | |
288 | u8 init_status; /* init event status */ | |
289 | u8 rsvd[3]; | |
290 | }; | |
291 | ||
292 | struct bfi_ioc_hbeat_s { | |
293 | struct bfi_mhdr_s mh; /* common msg header */ | |
294 | u32 hb_count; /* current heart beat count */ | |
295 | }; | |
296 | ||
297 | /** | |
298 | * IOC hardware/firmware state | |
299 | */ | |
300 | enum bfi_ioc_state { | |
301 | BFI_IOC_UNINIT = 0, /* not initialized */ | |
302 | BFI_IOC_INITING = 1, /* h/w is being initialized */ | |
303 | BFI_IOC_HWINIT = 2, /* h/w is initialized */ | |
304 | BFI_IOC_CFG = 3, /* IOC configuration in progress */ | |
305 | BFI_IOC_OP = 4, /* IOC is operational */ | |
306 | BFI_IOC_DISABLING = 5, /* IOC is being disabled */ | |
307 | BFI_IOC_DISABLED = 6, /* IOC is disabled */ | |
308 | BFI_IOC_CFG_DISABLED = 7, /* IOC is being disabled;transient */ | |
309 | BFI_IOC_FAIL = 8, /* IOC heart-beat failure */ | |
310 | BFI_IOC_MEMTEST = 9, /* IOC is doing memtest */ | |
311 | }; | |
312 | ||
313 | #define BFI_IOC_ENDIAN_SIG 0x12345678 | |
314 | ||
315 | enum { | |
316 | BFI_ADAPTER_TYPE_FC = 0x01, /* FC adapters */ | |
317 | BFI_ADAPTER_TYPE_MK = 0x0f0000, /* adapter type mask */ | |
318 | BFI_ADAPTER_TYPE_SH = 16, /* adapter type shift */ | |
319 | BFI_ADAPTER_NPORTS_MK = 0xff00, /* number of ports mask */ | |
320 | BFI_ADAPTER_NPORTS_SH = 8, /* number of ports shift */ | |
321 | BFI_ADAPTER_SPEED_MK = 0xff, /* adapter speed mask */ | |
322 | BFI_ADAPTER_SPEED_SH = 0, /* adapter speed shift */ | |
323 | BFI_ADAPTER_PROTO = 0x100000, /* prototype adapaters */ | |
324 | BFI_ADAPTER_TTV = 0x200000, /* TTV debug capable */ | |
325 | BFI_ADAPTER_UNSUPP = 0x400000, /* unknown adapter type */ | |
326 | }; | |
327 | ||
328 | #define BFI_ADAPTER_GETP(__prop, __adap_prop) \ | |
329 | (((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >> \ | |
330 | BFI_ADAPTER_ ## __prop ## _SH) | |
331 | #define BFI_ADAPTER_SETP(__prop, __val) \ | |
332 | ((__val) << BFI_ADAPTER_ ## __prop ## _SH) | |
333 | #define BFI_ADAPTER_IS_PROTO(__adap_type) \ | |
334 | ((__adap_type) & BFI_ADAPTER_PROTO) | |
335 | #define BFI_ADAPTER_IS_TTV(__adap_type) \ | |
336 | ((__adap_type) & BFI_ADAPTER_TTV) | |
337 | #define BFI_ADAPTER_IS_UNSUPP(__adap_type) \ | |
338 | ((__adap_type) & BFI_ADAPTER_UNSUPP) | |
339 | #define BFI_ADAPTER_IS_SPECIAL(__adap_type) \ | |
340 | ((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO | \ | |
341 | BFI_ADAPTER_UNSUPP)) | |
342 | ||
343 | /** | |
344 | * BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages | |
345 | */ | |
346 | struct bfi_ioc_ctrl_req_s { | |
347 | struct bfi_mhdr_s mh; | |
348 | u8 ioc_class; | |
349 | u8 rsvd[3]; | |
350 | u32 tv_sec; | |
351 | }; | |
352 | #define bfi_ioc_enable_req_t struct bfi_ioc_ctrl_req_s; | |
353 | #define bfi_ioc_disable_req_t struct bfi_ioc_ctrl_req_s; | |
354 | ||
355 | /** | |
356 | * BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages | |
357 | */ | |
358 | struct bfi_ioc_ctrl_reply_s { | |
359 | struct bfi_mhdr_s mh; /* Common msg header */ | |
360 | u8 status; /* enable/disable status */ | |
361 | u8 rsvd[3]; | |
362 | }; | |
363 | #define bfi_ioc_enable_reply_t struct bfi_ioc_ctrl_reply_s; | |
364 | #define bfi_ioc_disable_reply_t struct bfi_ioc_ctrl_reply_s; | |
365 | ||
366 | #define BFI_IOC_MSGSZ 8 | |
367 | /** | |
368 | * H2I Messages | |
369 | */ | |
370 | union bfi_ioc_h2i_msg_u { | |
371 | struct bfi_mhdr_s mh; | |
372 | struct bfi_ioc_ctrl_req_s enable_req; | |
373 | struct bfi_ioc_ctrl_req_s disable_req; | |
374 | struct bfi_ioc_getattr_req_s getattr_req; | |
375 | u32 mboxmsg[BFI_IOC_MSGSZ]; | |
376 | }; | |
377 | ||
378 | /** | |
379 | * I2H Messages | |
380 | */ | |
381 | union bfi_ioc_i2h_msg_u { | |
382 | struct bfi_mhdr_s mh; | |
383 | struct bfi_ioc_rdy_event_s rdy_event; | |
384 | u32 mboxmsg[BFI_IOC_MSGSZ]; | |
385 | }; | |
386 | ||
387 | ||
388 | /** | |
389 | *---------------------------------------------------------------------- | |
390 | * PBC | |
391 | *---------------------------------------------------------------------- | |
392 | */ | |
393 | ||
394 | #define BFI_PBC_MAX_BLUNS 8 | |
395 | #define BFI_PBC_MAX_VPORTS 16 | |
396 | ||
397 | /** | |
398 | * PBC boot lun configuration | |
399 | */ | |
400 | struct bfi_pbc_blun_s { | |
401 | wwn_t tgt_pwwn; | |
402 | lun_t tgt_lun; | |
403 | }; | |
404 | ||
405 | /** | |
406 | * PBC virtual port configuration | |
407 | */ | |
408 | struct bfi_pbc_vport_s { | |
409 | wwn_t vp_pwwn; | |
410 | wwn_t vp_nwwn; | |
411 | }; | |
412 | ||
413 | /** | |
414 | * BFI pre-boot configuration information | |
415 | */ | |
416 | struct bfi_pbc_s { | |
417 | u8 port_enabled; | |
418 | u8 boot_enabled; | |
419 | u8 nbluns; | |
420 | u8 nvports; | |
421 | u8 port_speed; | |
422 | u8 rsvd_a; | |
423 | u16 hss; | |
424 | wwn_t pbc_pwwn; | |
425 | wwn_t pbc_nwwn; | |
426 | struct bfi_pbc_blun_s blun[BFI_PBC_MAX_BLUNS]; | |
427 | struct bfi_pbc_vport_s vport[BFI_PBC_MAX_VPORTS]; | |
428 | }; | |
429 | ||
430 | /** | |
431 | *---------------------------------------------------------------------- | |
432 | * MSGQ | |
433 | *---------------------------------------------------------------------- | |
434 | */ | |
435 | #define BFI_MSGQ_FULL(_q) (((_q->pi + 1) % _q->q_depth) == _q->ci) | |
436 | #define BFI_MSGQ_EMPTY(_q) (_q->pi == _q->ci) | |
437 | #define BFI_MSGQ_UPDATE_CI(_q) (_q->ci = (_q->ci + 1) % _q->q_depth) | |
438 | #define BFI_MSGQ_UPDATE_PI(_q) (_q->pi = (_q->pi + 1) % _q->q_depth) | |
439 | ||
440 | /* q_depth must be power of 2 */ | |
441 | #define BFI_MSGQ_FREE_CNT(_q) ((_q->ci - _q->pi - 1) & (_q->q_depth - 1)) | |
442 | ||
443 | enum bfi_msgq_h2i_msgs_e { | |
444 | BFI_MSGQ_H2I_INIT_REQ = 1, | |
445 | BFI_MSGQ_H2I_DOORBELL = 2, | |
446 | BFI_MSGQ_H2I_SHUTDOWN = 3, | |
447 | }; | |
448 | ||
449 | enum bfi_msgq_i2h_msgs_e { | |
450 | BFI_MSGQ_I2H_INIT_RSP = 1, | |
451 | BFI_MSGQ_I2H_DOORBELL = 2, | |
452 | }; | |
453 | ||
454 | ||
455 | /* Messages(commands/responsed/AENS will have the following header */ | |
456 | struct bfi_msgq_mhdr_s { | |
457 | u8 msg_class; | |
458 | u8 msg_id; | |
459 | u16 msg_token; | |
460 | u16 num_entries; | |
461 | u8 enet_id; | |
462 | u8 rsvd[1]; | |
463 | }; | |
464 | ||
465 | #define bfi_msgq_mhdr_set(_mh, _mc, _mid, _tok, _enet_id) do { \ | |
466 | (_mh).msg_class = (_mc); \ | |
467 | (_mh).msg_id = (_mid); \ | |
468 | (_mh).msg_token = (_tok); \ | |
469 | (_mh).enet_id = (_enet_id); \ | |
470 | } while (0) | |
471 | ||
472 | /* | |
473 | * Mailbox for messaging interface | |
474 | * | |
475 | */ | |
476 | #define BFI_MSGQ_CMD_ENTRY_SIZE (64) /* TBD */ | |
477 | #define BFI_MSGQ_RSP_ENTRY_SIZE (64) /* TBD */ | |
478 | #define BFI_MSGQ_MSG_SIZE_MAX (2048) /* TBD */ | |
479 | ||
480 | struct bfi_msgq_s { | |
481 | union bfi_addr_u addr; | |
482 | u16 q_depth; /* Total num of entries in the queue */ | |
483 | u8 rsvd[2]; | |
484 | }; | |
485 | ||
486 | /* BFI_ENET_MSGQ_CFG_REQ TBD init or cfg? */ | |
487 | struct bfi_msgq_cfg_req_s { | |
488 | struct bfi_mhdr_s mh; | |
489 | struct bfi_msgq_s cmdq; | |
490 | struct bfi_msgq_s rspq; | |
491 | }; | |
492 | ||
493 | /* BFI_ENET_MSGQ_CFG_RSP */ | |
494 | struct bfi_msgq_cfg_rsp_s { | |
495 | struct bfi_mhdr_s mh; | |
496 | u8 cmd_status; | |
497 | u8 rsvd[3]; | |
498 | }; | |
499 | ||
500 | ||
501 | /* BFI_MSGQ_H2I_DOORBELL */ | |
502 | struct bfi_msgq_h2i_db_s { | |
503 | struct bfi_mhdr_s mh; | |
504 | u16 cmdq_pi; | |
505 | u16 rspq_ci; | |
506 | }; | |
507 | ||
508 | /* BFI_MSGQ_I2H_DOORBELL */ | |
509 | struct bfi_msgq_i2h_db_s { | |
510 | struct bfi_mhdr_s mh; | |
511 | u16 rspq_pi; | |
512 | u16 cmdq_ci; | |
513 | }; | |
514 | ||
515 | #pragma pack() | |
516 | ||
517 | /* BFI port specific */ | |
518 | #pragma pack(1) | |
519 | ||
520 | enum bfi_port_h2i { | |
521 | BFI_PORT_H2I_ENABLE_REQ = (1), | |
522 | BFI_PORT_H2I_DISABLE_REQ = (2), | |
523 | BFI_PORT_H2I_GET_STATS_REQ = (3), | |
524 | BFI_PORT_H2I_CLEAR_STATS_REQ = (4), | |
525 | }; | |
526 | ||
527 | enum bfi_port_i2h { | |
528 | BFI_PORT_I2H_ENABLE_RSP = BFA_I2HM(1), | |
529 | BFI_PORT_I2H_DISABLE_RSP = BFA_I2HM(2), | |
530 | BFI_PORT_I2H_GET_STATS_RSP = BFA_I2HM(3), | |
531 | BFI_PORT_I2H_CLEAR_STATS_RSP = BFA_I2HM(4), | |
532 | }; | |
533 | ||
534 | /** | |
535 | * Generic REQ type | |
536 | */ | |
537 | struct bfi_port_generic_req_s { | |
538 | struct bfi_mhdr_s mh; /* msg header */ | |
539 | u32 msgtag; /* msgtag for reply */ | |
540 | u32 rsvd; | |
541 | }; | |
542 | ||
543 | /** | |
544 | * Generic RSP type | |
545 | */ | |
546 | struct bfi_port_generic_rsp_s { | |
547 | struct bfi_mhdr_s mh; /* common msg header */ | |
548 | u8 status; /* port enable status */ | |
549 | u8 rsvd[3]; | |
550 | u32 msgtag; /* msgtag for reply */ | |
551 | }; | |
552 | ||
553 | /** | |
554 | * BFI_PORT_H2I_GET_STATS_REQ | |
555 | */ | |
556 | struct bfi_port_get_stats_req_s { | |
557 | struct bfi_mhdr_s mh; /* common msg header */ | |
558 | union bfi_addr_u dma_addr; | |
559 | }; | |
560 | ||
561 | union bfi_port_h2i_msg_u { | |
562 | struct bfi_mhdr_s mh; | |
563 | struct bfi_port_generic_req_s enable_req; | |
564 | struct bfi_port_generic_req_s disable_req; | |
565 | struct bfi_port_get_stats_req_s getstats_req; | |
566 | struct bfi_port_generic_req_s clearstats_req; | |
567 | }; | |
568 | ||
569 | union bfi_port_i2h_msg_u { | |
570 | struct bfi_mhdr_s mh; | |
571 | struct bfi_port_generic_rsp_s enable_rsp; | |
572 | struct bfi_port_generic_rsp_s disable_rsp; | |
573 | struct bfi_port_generic_rsp_s getstats_rsp; | |
574 | struct bfi_port_generic_rsp_s clearstats_rsp; | |
575 | }; | |
576 | ||
577 | #pragma pack() | |
578 | ||
579 | #endif /* __BFI_H__ */ |