GNU Linux-libre 6.8.9-gnu
[releases.git] / drivers / scsi / bfa / bfi.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
4  * Copyright (c) 2014- QLogic Corporation.
5  * All rights reserved
6  * www.qlogic.com
7  *
8  * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
9  */
10
11 #ifndef __BFI_H__
12 #define __BFI_H__
13
14 #include "bfa_defs.h"
15 #include "bfa_defs_svc.h"
16
17 #pragma pack(1)
18
19 /* Per dma segment max size */
20 #define BFI_MEM_DMA_SEG_SZ      (131072)
21
22 /* Get number of dma segments required */
23 #define BFI_MEM_DMA_NSEGS(_num_reqs, _req_sz)                           \
24         ((u16)(((((_num_reqs) * (_req_sz)) + BFI_MEM_DMA_SEG_SZ - 1) &  \
25          ~(BFI_MEM_DMA_SEG_SZ - 1)) / BFI_MEM_DMA_SEG_SZ))
26
27 /* Get num dma reqs - that fit in a segment */
28 #define BFI_MEM_NREQS_SEG(_rqsz) (BFI_MEM_DMA_SEG_SZ / (_rqsz))
29
30 /* Get segment num from tag */
31 #define BFI_MEM_SEG_FROM_TAG(_tag, _rqsz) ((_tag) / BFI_MEM_NREQS_SEG(_rqsz))
32
33 /* Get dma req offset in a segment */
34 #define BFI_MEM_SEG_REQ_OFFSET(_tag, _sz)       \
35         ((_tag) - (BFI_MEM_SEG_FROM_TAG(_tag, _sz) * BFI_MEM_NREQS_SEG(_sz)))
36
37 /*
38  * BFI FW image type
39  */
40 #define BFI_FLASH_CHUNK_SZ                      256     /*  Flash chunk size */
41 #define BFI_FLASH_CHUNK_SZ_WORDS        (BFI_FLASH_CHUNK_SZ/sizeof(u32))
42 #define BFI_FLASH_IMAGE_SZ              0x100000
43
44 /*
45  * Msg header common to all msgs
46  */
47 struct bfi_mhdr_s {
48         u8              msg_class;      /*  @ref bfi_mclass_t               */
49         u8              msg_id;         /*  msg opcode with in the class   */
50         union {
51                 struct {
52                         u8      qid;
53                         u8      fn_lpu; /*  msg destination                 */
54                 } h2i;
55                 u16     i2htok; /*  token in msgs to host           */
56         } mtag;
57 };
58
59 #define bfi_fn_lpu(__fn, __lpu) ((__fn) << 1 | (__lpu))
60 #define bfi_mhdr_2_fn(_mh)      ((_mh)->mtag.h2i.fn_lpu >> 1)
61
62 #define bfi_h2i_set(_mh, _mc, _op, _fn_lpu) do {                \
63         (_mh).msg_class         = (_mc);      \
64         (_mh).msg_id            = (_op);      \
65         (_mh).mtag.h2i.fn_lpu   = (_fn_lpu);      \
66 } while (0)
67
68 #define bfi_i2h_set(_mh, _mc, _op, _i2htok) do {                \
69         (_mh).msg_class         = (_mc);      \
70         (_mh).msg_id            = (_op);      \
71         (_mh).mtag.i2htok       = (_i2htok);      \
72 } while (0)
73
74 /*
75  * Message opcodes: 0-127 to firmware, 128-255 to host
76  */
77 #define BFI_I2H_OPCODE_BASE     128
78 #define BFA_I2HM(_x)            ((_x) + BFI_I2H_OPCODE_BASE)
79
80 /*
81  ****************************************************************************
82  *
83  * Scatter Gather Element and Page definition
84  *
85  ****************************************************************************
86  */
87
88 #define BFI_SGE_INLINE  1
89 #define BFI_SGE_INLINE_MAX      (BFI_SGE_INLINE + 1)
90
91 /*
92  * SG Flags
93  */
94 enum {
95         BFI_SGE_DATA            = 0,    /*  data address, not last           */
96         BFI_SGE_DATA_CPL        = 1,    /*  data addr, last in current page */
97         BFI_SGE_DATA_LAST       = 3,    /*  data address, last               */
98         BFI_SGE_LINK            = 2,    /*  link address                     */
99         BFI_SGE_PGDLEN          = 2,    /*  cumulative data length for page */
100 };
101
102 /*
103  * DMA addresses
104  */
105 union bfi_addr_u {
106         struct {
107                 __be32  addr_lo;
108                 __be32  addr_hi;
109         } a32;
110 };
111
112 /*
113  * Scatter Gather Element used for fast-path IO requests
114  */
115 struct bfi_sge_s {
116 #ifdef __BIG_ENDIAN
117         u32     flags:2,
118                         rsvd:2,
119                         sg_len:28;
120 #else
121         u32     sg_len:28,
122                         rsvd:2,
123                         flags:2;
124 #endif
125         union bfi_addr_u sga;
126 };
127
128 /**
129  * Generic DMA addr-len pair.
130  */
131 struct bfi_alen_s {
132         union bfi_addr_u        al_addr;        /* DMA addr of buffer   */
133         u32                     al_len;         /* length of buffer     */
134 };
135
136 /*
137  * Scatter Gather Page
138  */
139 #define BFI_SGPG_DATA_SGES              7
140 #define BFI_SGPG_SGES_MAX               (BFI_SGPG_DATA_SGES + 1)
141 #define BFI_SGPG_RSVD_WD_LEN    8
142 struct bfi_sgpg_s {
143         struct bfi_sge_s sges[BFI_SGPG_SGES_MAX];
144         u32     rsvd[BFI_SGPG_RSVD_WD_LEN];
145 };
146
147 /* FCP module definitions */
148 #define BFI_IO_MAX      (2000)
149 #define BFI_IOIM_SNSLEN (256)
150 #define BFI_IOIM_SNSBUF_SEGS    \
151         BFI_MEM_DMA_NSEGS(BFI_IO_MAX, BFI_IOIM_SNSLEN)
152
153 /*
154  * Large Message structure - 128 Bytes size Msgs
155  */
156 #define BFI_LMSG_SZ             128
157 #define BFI_LMSG_PL_WSZ \
158                         ((BFI_LMSG_SZ - sizeof(struct bfi_mhdr_s)) / 4)
159
160 struct bfi_msg_s {
161         struct bfi_mhdr_s mhdr;
162         u32     pl[BFI_LMSG_PL_WSZ];
163 };
164
165 /*
166  * Mailbox message structure
167  */
168 #define BFI_MBMSG_SZ            7
169 struct bfi_mbmsg_s {
170         struct bfi_mhdr_s       mh;
171         u32             pl[BFI_MBMSG_SZ];
172 };
173
174 /*
175  * Supported PCI function class codes (personality)
176  */
177 enum bfi_pcifn_class {
178         BFI_PCIFN_CLASS_FC  = 0x0c04,
179         BFI_PCIFN_CLASS_ETH = 0x0200,
180 };
181
182 /*
183  * Message Classes
184  */
185 enum bfi_mclass {
186         BFI_MC_IOC              = 1,    /*  IO Controller (IOC)     */
187         BFI_MC_DIAG             = 2,    /*  Diagnostic Msgs            */
188         BFI_MC_FLASH            = 3,    /*  Flash message class */
189         BFI_MC_CEE              = 4,    /*  CEE */
190         BFI_MC_FCPORT           = 5,    /*  FC port                         */
191         BFI_MC_IOCFC            = 6,    /*  FC - IO Controller (IOC)        */
192         BFI_MC_ABLK             = 7,    /*  ASIC block configuration        */
193         BFI_MC_UF               = 8,    /*  Unsolicited frame receive       */
194         BFI_MC_FCXP             = 9,    /*  FC Transport                    */
195         BFI_MC_LPS              = 10,   /*  lport fc login services         */
196         BFI_MC_RPORT            = 11,   /*  Remote port             */
197         BFI_MC_ITN              = 12,   /*  I-T nexus (Initiator mode)      */
198         BFI_MC_IOIM_READ        = 13,   /*  read IO (Initiator mode)        */
199         BFI_MC_IOIM_WRITE       = 14,   /*  write IO (Initiator mode)       */
200         BFI_MC_IOIM_IO          = 15,   /*  IO (Initiator mode)     */
201         BFI_MC_IOIM             = 16,   /*  IO (Initiator mode)     */
202         BFI_MC_IOIM_IOCOM       = 17,   /*  good IO completion              */
203         BFI_MC_TSKIM            = 18,   /*  Initiator Task management       */
204         BFI_MC_PORT             = 21,   /*  Physical port                   */
205         BFI_MC_SFP              = 22,   /*  SFP module  */
206         BFI_MC_PHY              = 25,   /*  External PHY message class  */
207         BFI_MC_FRU              = 34,
208         BFI_MC_MAX              = 35
209 };
210
211 #define BFI_IOC_MAX_CQS         4
212 #define BFI_IOC_MAX_CQS_ASIC    8
213 #define BFI_IOC_MSGLEN_MAX      32      /* 32 bytes */
214
215 /*
216  *----------------------------------------------------------------------
217  *                              IOC
218  *----------------------------------------------------------------------
219  */
220
221 /*
222  * Different asic generations
223  */
224 enum bfi_asic_gen {
225         BFI_ASIC_GEN_CB         = 1,    /* crossbow 8G FC               */
226         BFI_ASIC_GEN_CT         = 2,    /* catapult 8G FC or 10G CNA    */
227         BFI_ASIC_GEN_CT2        = 3,    /* catapult-2 16G FC or 10G CNA */
228 };
229
230 enum bfi_asic_mode {
231         BFI_ASIC_MODE_FC        = 1,    /* FC upto 8G speed             */
232         BFI_ASIC_MODE_FC16      = 2,    /* FC upto 16G speed            */
233         BFI_ASIC_MODE_ETH       = 3,    /* Ethernet ports               */
234         BFI_ASIC_MODE_COMBO     = 4,    /* FC 16G and Ethernet 10G port */
235 };
236
237 enum bfi_ioc_h2i_msgs {
238         BFI_IOC_H2I_ENABLE_REQ          = 1,
239         BFI_IOC_H2I_DISABLE_REQ         = 2,
240         BFI_IOC_H2I_GETATTR_REQ         = 3,
241         BFI_IOC_H2I_DBG_SYNC            = 4,
242         BFI_IOC_H2I_DBG_DUMP            = 5,
243 };
244
245 enum bfi_ioc_i2h_msgs {
246         BFI_IOC_I2H_ENABLE_REPLY        = BFA_I2HM(1),
247         BFI_IOC_I2H_DISABLE_REPLY       = BFA_I2HM(2),
248         BFI_IOC_I2H_GETATTR_REPLY       = BFA_I2HM(3),
249         BFI_IOC_I2H_HBEAT               = BFA_I2HM(4),
250         BFI_IOC_I2H_ACQ_ADDR_REPLY      = BFA_I2HM(5),
251 };
252
253 /*
254  * BFI_IOC_H2I_GETATTR_REQ message
255  */
256 struct bfi_ioc_getattr_req_s {
257         struct bfi_mhdr_s       mh;
258         union bfi_addr_u        attr_addr;
259 };
260
261 #define BFI_IOC_ATTR_UUID_SZ    16
262 struct bfi_ioc_attr_s {
263         wwn_t           mfg_pwwn;       /*  Mfg port wwn           */
264         wwn_t           mfg_nwwn;       /*  Mfg node wwn           */
265         mac_t           mfg_mac;        /*  Mfg mac                */
266         u8              port_mode;      /* bfi_port_mode           */
267         u8              rsvd_a;
268         wwn_t           pwwn;
269         wwn_t           nwwn;
270         mac_t           mac;            /*  PBC or Mfg mac         */
271         u16     rsvd_b;
272         mac_t           fcoe_mac;
273         u16     rsvd_c;
274         char            brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)];
275         u8              pcie_gen;
276         u8              pcie_lanes_orig;
277         u8              pcie_lanes;
278         u8              rx_bbcredit;    /*  receive buffer credits */
279         u32     adapter_prop;   /*  adapter properties     */
280         u16     maxfrsize;      /*  max receive frame size */
281         char            asic_rev;
282         u8              rsvd_d;
283         char            fw_version[BFA_VERSION_LEN];
284         char            optrom_version[BFA_VERSION_LEN];
285         struct          bfa_mfg_vpd_s   vpd;
286         u32     card_type;      /*  card type                   */
287         u8      mfg_day;        /* manufacturing day */
288         u8      mfg_month;      /* manufacturing month */
289         u16     mfg_year;       /* manufacturing year */
290         u8      uuid[BFI_IOC_ATTR_UUID_SZ];     /*!< chinook uuid */
291 };
292
293 /*
294  * BFI_IOC_I2H_GETATTR_REPLY message
295  */
296 struct bfi_ioc_getattr_reply_s {
297         struct  bfi_mhdr_s      mh;     /*  Common msg header           */
298         u8                      status; /*  cfg reply status            */
299         u8                      rsvd[3];
300 };
301
302 /*
303  * Firmware memory page offsets
304  */
305 #define BFI_IOC_SMEM_PG0_CB     (0x40)
306 #define BFI_IOC_SMEM_PG0_CT     (0x180)
307
308 /*
309  * Firmware statistic offset
310  */
311 #define BFI_IOC_FWSTATS_OFF     (0x6B40)
312 #define BFI_IOC_FWSTATS_SZ      (4096)
313
314 /*
315  * Firmware trace offset
316  */
317 #define BFI_IOC_TRC_OFF         (0x4b00)
318 #define BFI_IOC_TRC_ENTS        256
319
320 #define BFI_IOC_FW_SIGNATURE    (0xbfadbfad)
321 #define BFA_IOC_FW_INV_SIGN     (0xdeaddead)
322 #define BFI_IOC_MD5SUM_SZ       4
323
324 struct bfi_ioc_fwver_s {
325 #ifdef __BIG_ENDIAN
326         uint8_t patch;
327         uint8_t maint;
328         uint8_t minor;
329         uint8_t major;
330         uint8_t rsvd[2];
331         uint8_t build;
332         uint8_t phase;
333 #else
334         uint8_t major;
335         uint8_t minor;
336         uint8_t maint;
337         uint8_t patch;
338         uint8_t phase;
339         uint8_t build;
340         uint8_t rsvd[2];
341 #endif
342 };
343
344 struct bfi_ioc_image_hdr_s {
345         u32     signature;      /* constant signature           */
346         u8      asic_gen;       /* asic generation              */
347         u8      asic_mode;
348         u8      port0_mode;     /* device mode for port 0       */
349         u8      port1_mode;     /* device mode for port 1       */
350         u32     exec;           /* exec vector                  */
351         u32     bootenv;        /* firmware boot env            */
352         u32     rsvd_b[2];
353         struct bfi_ioc_fwver_s  fwver;
354         u32     md5sum[BFI_IOC_MD5SUM_SZ];
355 };
356
357 enum bfi_ioc_img_ver_cmp_e {
358         BFI_IOC_IMG_VER_INCOMP,
359         BFI_IOC_IMG_VER_OLD,
360         BFI_IOC_IMG_VER_SAME,
361         BFI_IOC_IMG_VER_BETTER
362 };
363
364 #define BFI_FWBOOT_DEVMODE_OFF          4
365 #define BFI_FWBOOT_TYPE_OFF             8
366 #define BFI_FWBOOT_ENV_OFF              12
367 #define BFI_FWBOOT_DEVMODE(__asic_gen, __asic_mode, __p0_mode, __p1_mode) \
368         (((u32)(__asic_gen)) << 24 |            \
369          ((u32)(__asic_mode)) << 16 |           \
370          ((u32)(__p0_mode)) << 8 |              \
371          ((u32)(__p1_mode)))
372
373 enum bfi_fwboot_type {
374         BFI_FWBOOT_TYPE_NORMAL  = 0,
375         BFI_FWBOOT_TYPE_FLASH   = 1,
376         BFI_FWBOOT_TYPE_MEMTEST = 2,
377 };
378
379 #define BFI_FWBOOT_TYPE_NORMAL  0
380 #define BFI_FWBOOT_TYPE_MEMTEST 2
381 #define BFI_FWBOOT_ENV_OS       0
382
383 enum bfi_port_mode {
384         BFI_PORT_MODE_FC        = 1,
385         BFI_PORT_MODE_ETH       = 2,
386 };
387
388 struct bfi_ioc_hbeat_s {
389         struct bfi_mhdr_s  mh;          /*  common msg header           */
390         u32        hb_count;    /*  current heart beat count    */
391 };
392
393 /*
394  * IOC hardware/firmware state
395  */
396 enum bfi_ioc_state {
397         BFI_IOC_UNINIT          = 0,    /*  not initialized                  */
398         BFI_IOC_INITING         = 1,    /*  h/w is being initialized         */
399         BFI_IOC_HWINIT          = 2,    /*  h/w is initialized               */
400         BFI_IOC_CFG             = 3,    /*  IOC configuration in progress   */
401         BFI_IOC_OP              = 4,    /*  IOC is operational               */
402         BFI_IOC_DISABLING       = 5,    /*  IOC is being disabled            */
403         BFI_IOC_DISABLED        = 6,    /*  IOC is disabled                  */
404         BFI_IOC_CFG_DISABLED    = 7,    /*  IOC is being disabled;transient */
405         BFI_IOC_FAIL            = 8,    /*  IOC heart-beat failure           */
406         BFI_IOC_MEMTEST         = 9,    /*  IOC is doing memtest             */
407 };
408
409 #define BFA_IOC_CB_JOIN_SH      16
410 #define BFA_IOC_CB_FWSTATE_MASK 0x0000ffff
411 #define BFA_IOC_CB_JOIN_MASK    0xffff0000
412
413 #define BFI_IOC_ENDIAN_SIG  0x12345678
414
415 enum {
416         BFI_ADAPTER_TYPE_FC     = 0x01,         /*  FC adapters    */
417         BFI_ADAPTER_TYPE_MK     = 0x0f0000,     /*  adapter type mask     */
418         BFI_ADAPTER_TYPE_SH     = 16,           /*  adapter type shift    */
419         BFI_ADAPTER_NPORTS_MK   = 0xff00,       /*  number of ports mask  */
420         BFI_ADAPTER_NPORTS_SH   = 8,            /*  number of ports shift */
421         BFI_ADAPTER_SPEED_MK    = 0xff,         /*  adapter speed mask    */
422         BFI_ADAPTER_SPEED_SH    = 0,            /*  adapter speed shift   */
423         BFI_ADAPTER_PROTO       = 0x100000,     /*  prototype adapaters   */
424         BFI_ADAPTER_TTV         = 0x200000,     /*  TTV debug capable     */
425         BFI_ADAPTER_UNSUPP      = 0x400000,     /*  unknown adapter type  */
426 };
427
428 #define BFI_ADAPTER_GETP(__prop, __adap_prop)                   \
429         (((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >>     \
430                 BFI_ADAPTER_ ## __prop ## _SH)
431 #define BFI_ADAPTER_SETP(__prop, __val)                         \
432         ((__val) << BFI_ADAPTER_ ## __prop ## _SH)
433 #define BFI_ADAPTER_IS_PROTO(__adap_type)                       \
434         ((__adap_type) & BFI_ADAPTER_PROTO)
435 #define BFI_ADAPTER_IS_TTV(__adap_type)                         \
436         ((__adap_type) & BFI_ADAPTER_TTV)
437 #define BFI_ADAPTER_IS_UNSUPP(__adap_type)                      \
438         ((__adap_type) & BFI_ADAPTER_UNSUPP)
439 #define BFI_ADAPTER_IS_SPECIAL(__adap_type)                     \
440         ((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO | \
441                         BFI_ADAPTER_UNSUPP))
442
443 /*
444  * BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages
445  */
446 struct bfi_ioc_ctrl_req_s {
447         struct bfi_mhdr_s       mh;
448         u16                     clscode;
449         u16                     rsvd;
450         u32             tv_sec;
451 };
452 #define bfi_ioc_enable_req_t struct bfi_ioc_ctrl_req_s;
453 #define bfi_ioc_disable_req_t struct bfi_ioc_ctrl_req_s;
454
455 /*
456  * BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages
457  */
458 struct bfi_ioc_ctrl_reply_s {
459         struct bfi_mhdr_s       mh;             /*  Common msg header     */
460         u8                      status;         /*  enable/disable status */
461         u8                      port_mode;      /*  bfa_mode_s  */
462         u8                      cap_bm;         /*  capability bit mask */
463         u8                      rsvd;
464 };
465 #define bfi_ioc_enable_reply_t struct bfi_ioc_ctrl_reply_s;
466 #define bfi_ioc_disable_reply_t struct bfi_ioc_ctrl_reply_s;
467
468 #define BFI_IOC_MSGSZ   8
469 /*
470  * H2I Messages
471  */
472 union bfi_ioc_h2i_msg_u {
473         struct bfi_mhdr_s               mh;
474         struct bfi_ioc_ctrl_req_s       enable_req;
475         struct bfi_ioc_ctrl_req_s       disable_req;
476         struct bfi_ioc_getattr_req_s    getattr_req;
477         u32                     mboxmsg[BFI_IOC_MSGSZ];
478 };
479
480 /*
481  * I2H Messages
482  */
483 union bfi_ioc_i2h_msg_u {
484         struct bfi_mhdr_s               mh;
485         struct bfi_ioc_ctrl_reply_s     fw_event;
486         u32                     mboxmsg[BFI_IOC_MSGSZ];
487 };
488
489
490 /*
491  *----------------------------------------------------------------------
492  *                              PBC
493  *----------------------------------------------------------------------
494  */
495
496 #define BFI_PBC_MAX_BLUNS       8
497 #define BFI_PBC_MAX_VPORTS      16
498 #define BFI_PBC_PORT_DISABLED   2
499
500 /*
501  * PBC boot lun configuration
502  */
503 struct bfi_pbc_blun_s {
504         wwn_t           tgt_pwwn;
505         struct scsi_lun tgt_lun;
506 };
507
508 /*
509  * PBC virtual port configuration
510  */
511 struct bfi_pbc_vport_s {
512         wwn_t           vp_pwwn;
513         wwn_t           vp_nwwn;
514 };
515
516 /*
517  * BFI pre-boot configuration information
518  */
519 struct bfi_pbc_s {
520         u8              port_enabled;
521         u8              boot_enabled;
522         u8              nbluns;
523         u8              nvports;
524         u8              port_speed;
525         u8              rsvd_a;
526         u16     hss;
527         wwn_t           pbc_pwwn;
528         wwn_t           pbc_nwwn;
529         struct bfi_pbc_blun_s blun[BFI_PBC_MAX_BLUNS];
530         struct bfi_pbc_vport_s vport[BFI_PBC_MAX_VPORTS];
531 };
532
533 /*
534  *----------------------------------------------------------------------
535  *                              MSGQ
536  *----------------------------------------------------------------------
537  */
538 #define BFI_MSGQ_FULL(_q)       (((_q->pi + 1) % _q->q_depth) == _q->ci)
539 #define BFI_MSGQ_EMPTY(_q)      (_q->pi == _q->ci)
540 #define BFI_MSGQ_UPDATE_CI(_q)  (_q->ci = (_q->ci + 1) % _q->q_depth)
541 #define BFI_MSGQ_UPDATE_PI(_q)  (_q->pi = (_q->pi + 1) % _q->q_depth)
542
543 /* q_depth must be power of 2 */
544 #define BFI_MSGQ_FREE_CNT(_q)   ((_q->ci - _q->pi - 1) & (_q->q_depth - 1))
545
546 enum bfi_msgq_h2i_msgs_e {
547         BFI_MSGQ_H2I_INIT_REQ   = 1,
548         BFI_MSGQ_H2I_DOORBELL   = 2,
549         BFI_MSGQ_H2I_SHUTDOWN   = 3,
550 };
551
552 enum bfi_msgq_i2h_msgs_e {
553         BFI_MSGQ_I2H_INIT_RSP   = 1,
554         BFI_MSGQ_I2H_DOORBELL   = 2,
555 };
556
557
558 /* Messages(commands/responsed/AENS will have the following header */
559 struct bfi_msgq_mhdr_s {
560         u8              msg_class;
561         u8              msg_id;
562         u16     msg_token;
563         u16     num_entries;
564         u8              enet_id;
565         u8              rsvd[1];
566 };
567
568 #define bfi_msgq_mhdr_set(_mh, _mc, _mid, _tok, _enet_id) do {        \
569         (_mh).msg_class         = (_mc);      \
570         (_mh).msg_id            = (_mid);      \
571         (_mh).msg_token         = (_tok);      \
572         (_mh).enet_id           = (_enet_id);      \
573 } while (0)
574
575 /*
576  * Mailbox  for messaging interface
577  *
578 */
579 #define BFI_MSGQ_CMD_ENTRY_SIZE         (64)    /* TBD */
580 #define BFI_MSGQ_RSP_ENTRY_SIZE         (64)    /* TBD */
581 #define BFI_MSGQ_MSG_SIZE_MAX           (2048)  /* TBD */
582
583 struct bfi_msgq_s {
584         union bfi_addr_u addr;
585         u16 q_depth;     /* Total num of entries in the queue */
586         u8 rsvd[2];
587 };
588
589 /* BFI_ENET_MSGQ_CFG_REQ TBD init or cfg? */
590 struct bfi_msgq_cfg_req_s {
591         struct bfi_mhdr_s mh;
592         struct bfi_msgq_s cmdq;
593         struct bfi_msgq_s rspq;
594 };
595
596 /* BFI_ENET_MSGQ_CFG_RSP */
597 struct bfi_msgq_cfg_rsp_s {
598         struct bfi_mhdr_s mh;
599         u8 cmd_status;
600         u8 rsvd[3];
601 };
602
603
604 /* BFI_MSGQ_H2I_DOORBELL */
605 struct bfi_msgq_h2i_db_s {
606         struct bfi_mhdr_s mh;
607         u16 cmdq_pi;
608         u16 rspq_ci;
609 };
610
611 /* BFI_MSGQ_I2H_DOORBELL */
612 struct bfi_msgq_i2h_db_s {
613         struct bfi_mhdr_s mh;
614         u16 rspq_pi;
615         u16 cmdq_ci;
616 };
617
618 #pragma pack()
619
620 /* BFI port specific */
621 #pragma pack(1)
622
623 enum bfi_port_h2i {
624         BFI_PORT_H2I_ENABLE_REQ         = (1),
625         BFI_PORT_H2I_DISABLE_REQ        = (2),
626         BFI_PORT_H2I_GET_STATS_REQ      = (3),
627         BFI_PORT_H2I_CLEAR_STATS_REQ    = (4),
628 };
629
630 enum bfi_port_i2h {
631         BFI_PORT_I2H_ENABLE_RSP         = BFA_I2HM(1),
632         BFI_PORT_I2H_DISABLE_RSP        = BFA_I2HM(2),
633         BFI_PORT_I2H_GET_STATS_RSP      = BFA_I2HM(3),
634         BFI_PORT_I2H_CLEAR_STATS_RSP    = BFA_I2HM(4),
635 };
636
637 /*
638  * Generic REQ type
639  */
640 struct bfi_port_generic_req_s {
641         struct bfi_mhdr_s  mh;          /*  msg header          */
642         u32     msgtag;         /*  msgtag for reply                */
643         u32     rsvd;
644 };
645
646 /*
647  * Generic RSP type
648  */
649 struct bfi_port_generic_rsp_s {
650         struct bfi_mhdr_s  mh;          /*  common msg header               */
651         u8              status;         /*  port enable status              */
652         u8              rsvd[3];
653         u32     msgtag;         /*  msgtag for reply                */
654 };
655
656 /*
657  * BFI_PORT_H2I_GET_STATS_REQ
658  */
659 struct bfi_port_get_stats_req_s {
660         struct bfi_mhdr_s  mh;          /*  common msg header               */
661         union bfi_addr_u   dma_addr;
662 };
663
664 union bfi_port_h2i_msg_u {
665         struct bfi_mhdr_s               mh;
666         struct bfi_port_generic_req_s   enable_req;
667         struct bfi_port_generic_req_s   disable_req;
668         struct bfi_port_get_stats_req_s getstats_req;
669         struct bfi_port_generic_req_s   clearstats_req;
670 };
671
672 union bfi_port_i2h_msg_u {
673         struct bfi_mhdr_s               mh;
674         struct bfi_port_generic_rsp_s   enable_rsp;
675         struct bfi_port_generic_rsp_s   disable_rsp;
676         struct bfi_port_generic_rsp_s   getstats_rsp;
677         struct bfi_port_generic_rsp_s   clearstats_rsp;
678 };
679
680 /*
681  *----------------------------------------------------------------------
682  *                              ABLK
683  *----------------------------------------------------------------------
684  */
685 enum bfi_ablk_h2i_msgs_e {
686         BFI_ABLK_H2I_QUERY              = 1,
687         BFI_ABLK_H2I_ADPT_CONFIG        = 2,
688         BFI_ABLK_H2I_PORT_CONFIG        = 3,
689         BFI_ABLK_H2I_PF_CREATE          = 4,
690         BFI_ABLK_H2I_PF_DELETE          = 5,
691         BFI_ABLK_H2I_PF_UPDATE          = 6,
692         BFI_ABLK_H2I_OPTROM_ENABLE      = 7,
693         BFI_ABLK_H2I_OPTROM_DISABLE     = 8,
694 };
695
696 enum bfi_ablk_i2h_msgs_e {
697         BFI_ABLK_I2H_QUERY              = BFA_I2HM(BFI_ABLK_H2I_QUERY),
698         BFI_ABLK_I2H_ADPT_CONFIG        = BFA_I2HM(BFI_ABLK_H2I_ADPT_CONFIG),
699         BFI_ABLK_I2H_PORT_CONFIG        = BFA_I2HM(BFI_ABLK_H2I_PORT_CONFIG),
700         BFI_ABLK_I2H_PF_CREATE          = BFA_I2HM(BFI_ABLK_H2I_PF_CREATE),
701         BFI_ABLK_I2H_PF_DELETE          = BFA_I2HM(BFI_ABLK_H2I_PF_DELETE),
702         BFI_ABLK_I2H_PF_UPDATE          = BFA_I2HM(BFI_ABLK_H2I_PF_UPDATE),
703         BFI_ABLK_I2H_OPTROM_ENABLE      = BFA_I2HM(BFI_ABLK_H2I_OPTROM_ENABLE),
704         BFI_ABLK_I2H_OPTROM_DISABLE     = BFA_I2HM(BFI_ABLK_H2I_OPTROM_DISABLE),
705 };
706
707 /* BFI_ABLK_H2I_QUERY */
708 struct bfi_ablk_h2i_query_s {
709         struct bfi_mhdr_s       mh;
710         union bfi_addr_u        addr;
711 };
712
713 /* BFI_ABL_H2I_ADPT_CONFIG, BFI_ABLK_H2I_PORT_CONFIG */
714 struct bfi_ablk_h2i_cfg_req_s {
715         struct bfi_mhdr_s       mh;
716         u8                      mode;
717         u8                      port;
718         u8                      max_pf;
719         u8                      max_vf;
720 };
721
722 /*
723  * BFI_ABLK_H2I_PF_CREATE, BFI_ABLK_H2I_PF_DELETE,
724  */
725 struct bfi_ablk_h2i_pf_req_s {
726         struct bfi_mhdr_s       mh;
727         u8                      pcifn;
728         u8                      port;
729         u16                     pers;
730         u16                     bw_min; /* percent BW @ max speed */
731         u16                     bw_max; /* percent BW @ max speed */
732 };
733
734 /* BFI_ABLK_H2I_OPTROM_ENABLE, BFI_ABLK_H2I_OPTROM_DISABLE */
735 struct bfi_ablk_h2i_optrom_s {
736         struct bfi_mhdr_s       mh;
737 };
738
739 /*
740  * BFI_ABLK_I2H_QUERY
741  * BFI_ABLK_I2H_PORT_CONFIG
742  * BFI_ABLK_I2H_PF_CREATE
743  * BFI_ABLK_I2H_PF_DELETE
744  * BFI_ABLK_I2H_PF_UPDATE
745  * BFI_ABLK_I2H_OPTROM_ENABLE
746  * BFI_ABLK_I2H_OPTROM_DISABLE
747  */
748 struct bfi_ablk_i2h_rsp_s {
749         struct bfi_mhdr_s       mh;
750         u8                      status;
751         u8                      pcifn;
752         u8                      port_mode;
753 };
754
755
756 /*
757  *      CEE module specific messages
758  */
759
760 /* Mailbox commands from host to firmware */
761 enum bfi_cee_h2i_msgs_e {
762         BFI_CEE_H2I_GET_CFG_REQ = 1,
763         BFI_CEE_H2I_RESET_STATS = 2,
764         BFI_CEE_H2I_GET_STATS_REQ = 3,
765 };
766
767 enum bfi_cee_i2h_msgs_e {
768         BFI_CEE_I2H_GET_CFG_RSP = BFA_I2HM(1),
769         BFI_CEE_I2H_RESET_STATS_RSP = BFA_I2HM(2),
770         BFI_CEE_I2H_GET_STATS_RSP = BFA_I2HM(3),
771 };
772
773 /*
774  * H2I command structure for resetting the stats
775  */
776 struct bfi_cee_reset_stats_s {
777         struct bfi_mhdr_s  mh;
778 };
779
780 /*
781  * Get configuration  command from host
782  */
783 struct bfi_cee_get_req_s {
784         struct bfi_mhdr_s       mh;
785         union bfi_addr_u        dma_addr;
786 };
787
788 /*
789  * Reply message from firmware
790  */
791 struct bfi_cee_get_rsp_s {
792         struct bfi_mhdr_s       mh;
793         u8                      cmd_status;
794         u8                      rsvd[3];
795 };
796
797 /*
798  * Reply message from firmware
799  */
800 struct bfi_cee_stats_rsp_s {
801         struct bfi_mhdr_s       mh;
802         u8                      cmd_status;
803         u8                      rsvd[3];
804 };
805
806 /* Mailbox message structures from firmware to host     */
807 union bfi_cee_i2h_msg_u {
808         struct bfi_mhdr_s               mh;
809         struct bfi_cee_get_rsp_s        get_rsp;
810         struct bfi_cee_stats_rsp_s      stats_rsp;
811 };
812
813 /*
814  * SFP related
815  */
816
817 enum bfi_sfp_h2i_e {
818         BFI_SFP_H2I_SHOW        = 1,
819         BFI_SFP_H2I_SCN         = 2,
820 };
821
822 enum bfi_sfp_i2h_e {
823         BFI_SFP_I2H_SHOW = BFA_I2HM(BFI_SFP_H2I_SHOW),
824         BFI_SFP_I2H_SCN  = BFA_I2HM(BFI_SFP_H2I_SCN),
825 };
826
827 /*
828  *      SFP state change notification
829  */
830 struct bfi_sfp_scn_s {
831         struct bfi_mhdr_s mhr;  /* host msg header        */
832         u8      event;
833         u8      sfpid;
834         u8      pomlvl; /* pom level: normal/warning/alarm */
835         u8      is_elb; /* e-loopback */
836 };
837
838 /*
839  *      SFP state
840  */
841 enum bfa_sfp_stat_e {
842         BFA_SFP_STATE_INIT      = 0,    /* SFP state is uninit  */
843         BFA_SFP_STATE_REMOVED   = 1,    /* SFP is removed       */
844         BFA_SFP_STATE_INSERTED  = 2,    /* SFP is inserted      */
845         BFA_SFP_STATE_VALID     = 3,    /* SFP is valid         */
846         BFA_SFP_STATE_UNSUPPORT = 4,    /* SFP is unsupport     */
847         BFA_SFP_STATE_FAILED    = 5,    /* SFP i2c read fail    */
848 };
849
850 /*
851  *  SFP memory access type
852  */
853 enum bfi_sfp_mem_e {
854         BFI_SFP_MEM_ALL         = 0x1,  /* access all data field */
855         BFI_SFP_MEM_DIAGEXT     = 0x2,  /* access diag ext data field only */
856 };
857
858 struct bfi_sfp_req_s {
859         struct bfi_mhdr_s       mh;
860         u8                      memtype;
861         u8                      rsvd[3];
862         struct bfi_alen_s       alen;
863 };
864
865 struct bfi_sfp_rsp_s {
866         struct bfi_mhdr_s       mh;
867         u8                      status;
868         u8                      state;
869         u8                      rsvd[2];
870 };
871
872 /*
873  *      FLASH module specific
874  */
875 enum bfi_flash_h2i_msgs {
876         BFI_FLASH_H2I_QUERY_REQ = 1,
877         BFI_FLASH_H2I_ERASE_REQ = 2,
878         BFI_FLASH_H2I_WRITE_REQ = 3,
879         BFI_FLASH_H2I_READ_REQ = 4,
880         BFI_FLASH_H2I_BOOT_VER_REQ = 5,
881 };
882
883 enum bfi_flash_i2h_msgs {
884         BFI_FLASH_I2H_QUERY_RSP = BFA_I2HM(1),
885         BFI_FLASH_I2H_ERASE_RSP = BFA_I2HM(2),
886         BFI_FLASH_I2H_WRITE_RSP = BFA_I2HM(3),
887         BFI_FLASH_I2H_READ_RSP = BFA_I2HM(4),
888         BFI_FLASH_I2H_BOOT_VER_RSP = BFA_I2HM(5),
889         BFI_FLASH_I2H_EVENT = BFA_I2HM(127),
890 };
891
892 /*
893  * Flash query request
894  */
895 struct bfi_flash_query_req_s {
896         struct bfi_mhdr_s mh;   /* Common msg header */
897         struct bfi_alen_s alen;
898 };
899
900 /*
901  * Flash erase request
902  */
903 struct bfi_flash_erase_req_s {
904         struct bfi_mhdr_s       mh;     /* Common msg header */
905         u32     type;   /* partition type */
906         u8      instance; /* partition instance */
907         u8      rsv[3];
908 };
909
910 /*
911  * Flash write request
912  */
913 struct bfi_flash_write_req_s {
914         struct bfi_mhdr_s mh;   /* Common msg header */
915         struct bfi_alen_s alen;
916         u32     type;   /* partition type */
917         u8      instance; /* partition instance */
918         u8      last;
919         u8      rsv[2];
920         u32     offset;
921         u32     length;
922 };
923
924 /*
925  * Flash read request
926  */
927 struct bfi_flash_read_req_s {
928         struct bfi_mhdr_s mh;   /* Common msg header */
929         u32     type;           /* partition type */
930         u8      instance;       /* partition instance */
931         u8      rsv[3];
932         u32     offset;
933         u32     length;
934         struct bfi_alen_s alen;
935 };
936
937 /*
938  * Flash query response
939  */
940 struct bfi_flash_query_rsp_s {
941         struct bfi_mhdr_s mh;   /* Common msg header */
942         u32     status;
943 };
944
945 /*
946  * Flash read response
947  */
948 struct bfi_flash_read_rsp_s {
949         struct bfi_mhdr_s mh;   /* Common msg header */
950         u32     type;       /* partition type */
951         u8      instance;   /* partition instance */
952         u8      rsv[3];
953         u32     status;
954         u32     length;
955 };
956
957 /*
958  * Flash write response
959  */
960 struct bfi_flash_write_rsp_s {
961         struct bfi_mhdr_s mh;   /* Common msg header */
962         u32     type;       /* partition type */
963         u8      instance;   /* partition instance */
964         u8      rsv[3];
965         u32     status;
966         u32     length;
967 };
968
969 /*
970  * Flash erase response
971  */
972 struct bfi_flash_erase_rsp_s {
973         struct bfi_mhdr_s mh;   /* Common msg header */
974         u32     type;           /* partition type */
975         u8      instance;       /* partition instance */
976         u8      rsv[3];
977         u32     status;
978 };
979
980 /*
981  * Flash event notification
982  */
983 struct bfi_flash_event_s {
984         struct bfi_mhdr_s       mh;     /* Common msg header */
985         bfa_status_t            status;
986         u32                     param;
987 };
988
989 /*
990  *----------------------------------------------------------------------
991  *                              DIAG
992  *----------------------------------------------------------------------
993  */
994 enum bfi_diag_h2i {
995         BFI_DIAG_H2I_PORTBEACON = 1,
996         BFI_DIAG_H2I_LOOPBACK = 2,
997         BFI_DIAG_H2I_FWPING = 3,
998         BFI_DIAG_H2I_TEMPSENSOR = 4,
999         BFI_DIAG_H2I_LEDTEST = 5,
1000         BFI_DIAG_H2I_QTEST      = 6,
1001         BFI_DIAG_H2I_DPORT      = 7,
1002 };
1003
1004 enum bfi_diag_i2h {
1005         BFI_DIAG_I2H_PORTBEACON = BFA_I2HM(BFI_DIAG_H2I_PORTBEACON),
1006         BFI_DIAG_I2H_LOOPBACK = BFA_I2HM(BFI_DIAG_H2I_LOOPBACK),
1007         BFI_DIAG_I2H_FWPING = BFA_I2HM(BFI_DIAG_H2I_FWPING),
1008         BFI_DIAG_I2H_TEMPSENSOR = BFA_I2HM(BFI_DIAG_H2I_TEMPSENSOR),
1009         BFI_DIAG_I2H_LEDTEST = BFA_I2HM(BFI_DIAG_H2I_LEDTEST),
1010         BFI_DIAG_I2H_QTEST      = BFA_I2HM(BFI_DIAG_H2I_QTEST),
1011         BFI_DIAG_I2H_DPORT      = BFA_I2HM(BFI_DIAG_H2I_DPORT),
1012         BFI_DIAG_I2H_DPORT_SCN  = BFA_I2HM(8),
1013 };
1014
1015 #define BFI_DIAG_MAX_SGES       2
1016 #define BFI_DIAG_DMA_BUF_SZ     (2 * 1024)
1017 #define BFI_BOOT_MEMTEST_RES_ADDR 0x900
1018 #define BFI_BOOT_MEMTEST_RES_SIG  0xA0A1A2A3
1019
1020 struct bfi_diag_lb_req_s {
1021         struct bfi_mhdr_s mh;
1022         u32     loopcnt;
1023         u32     pattern;
1024         u8      lb_mode;        /*!< bfa_port_opmode_t */
1025         u8      speed;          /*!< bfa_port_speed_t */
1026         u8      rsvd[2];
1027 };
1028
1029 struct bfi_diag_lb_rsp_s {
1030         struct bfi_mhdr_s  mh;          /* 4 bytes */
1031         struct bfa_diag_loopback_result_s res; /* 16 bytes */
1032 };
1033
1034 struct bfi_diag_fwping_req_s {
1035         struct bfi_mhdr_s mh;   /* 4 bytes */
1036         struct bfi_alen_s alen; /* 12 bytes */
1037         u32     data;           /* user input data pattern */
1038         u32     count;          /* user input dma count */
1039         u8      qtag;           /* track CPE vc */
1040         u8      rsv[3];
1041 };
1042
1043 struct bfi_diag_fwping_rsp_s {
1044         struct bfi_mhdr_s  mh;          /* 4 bytes */
1045         u32     data;           /* user input data pattern    */
1046         u8      qtag;           /* track CPE vc               */
1047         u8      dma_status;     /* dma status                 */
1048         u8      rsv[2];
1049 };
1050
1051 /*
1052  * Temperature Sensor
1053  */
1054 struct bfi_diag_ts_req_s {
1055         struct bfi_mhdr_s mh;   /* 4 bytes */
1056         u16     temp;           /* 10-bit A/D value */
1057         u16     brd_temp;       /* 9-bit board temp */
1058         u8      status;
1059         u8      ts_junc;        /* show junction tempsensor   */
1060         u8      ts_brd;         /* show board tempsensor      */
1061         u8      rsv;
1062 };
1063 #define bfi_diag_ts_rsp_t struct bfi_diag_ts_req_s
1064
1065 struct bfi_diag_ledtest_req_s {
1066         struct bfi_mhdr_s  mh;  /* 4 bytes */
1067         u8      cmd;
1068         u8      color;
1069         u8      portid;
1070         u8      led;    /* bitmap of LEDs to be tested */
1071         u16     freq;   /* no. of blinks every 10 secs */
1072         u8      rsv[2];
1073 };
1074
1075 /* notify host led operation is done */
1076 struct bfi_diag_ledtest_rsp_s {
1077         struct bfi_mhdr_s  mh;  /* 4 bytes */
1078 };
1079
1080 struct bfi_diag_portbeacon_req_s {
1081         struct bfi_mhdr_s  mh;  /* 4 bytes */
1082         u32     period; /* beaconing period */
1083         u8      beacon; /* 1: beacon on */
1084         u8      rsvd[3];
1085 };
1086
1087 /* notify host the beacon is off */
1088 struct bfi_diag_portbeacon_rsp_s {
1089         struct bfi_mhdr_s  mh;  /* 4 bytes */
1090 };
1091
1092 struct bfi_diag_qtest_req_s {
1093         struct bfi_mhdr_s       mh;             /* 4 bytes */
1094         u32     data[BFI_LMSG_PL_WSZ]; /* fill up tcm prefetch area */
1095 };
1096 #define bfi_diag_qtest_rsp_t struct bfi_diag_qtest_req_s
1097
1098 /*
1099  *      D-port test
1100  */
1101 enum bfi_dport_req {
1102         BFI_DPORT_DISABLE       = 0,    /* disable dport request        */
1103         BFI_DPORT_ENABLE        = 1,    /* enable dport request         */
1104         BFI_DPORT_START         = 2,    /* start dport request  */
1105         BFI_DPORT_SHOW          = 3,    /* show dport request   */
1106         BFI_DPORT_DYN_DISABLE   = 4,    /* disable dynamic dport request */
1107 };
1108
1109 enum bfi_dport_scn {
1110         BFI_DPORT_SCN_TESTSTART         = 1,
1111         BFI_DPORT_SCN_TESTCOMP          = 2,
1112         BFI_DPORT_SCN_SFP_REMOVED       = 3,
1113         BFI_DPORT_SCN_DDPORT_ENABLE     = 4,
1114         BFI_DPORT_SCN_DDPORT_DISABLE    = 5,
1115         BFI_DPORT_SCN_FCPORT_DISABLE    = 6,
1116         BFI_DPORT_SCN_SUBTESTSTART      = 7,
1117         BFI_DPORT_SCN_TESTSKIP          = 8,
1118         BFI_DPORT_SCN_DDPORT_DISABLED   = 9,
1119 };
1120
1121 struct bfi_diag_dport_req_s {
1122         struct bfi_mhdr_s       mh;     /* 4 bytes                      */
1123         u8                      req;    /* request 1: enable 0: disable */
1124         u8                      rsvd[3];
1125         u32                     lpcnt;
1126         u32                     payload;
1127 };
1128
1129 struct bfi_diag_dport_rsp_s {
1130         struct bfi_mhdr_s       mh;     /* header 4 bytes               */
1131         bfa_status_t            status; /* reply status                 */
1132         wwn_t                   pwwn;   /* switch port wwn. 8 bytes     */
1133         wwn_t                   nwwn;   /* switch node wwn. 8 bytes     */
1134 };
1135
1136 struct bfi_diag_dport_scn_teststart_s {
1137         wwn_t   pwwn;   /* switch port wwn. 8 bytes */
1138         wwn_t   nwwn;   /* switch node wwn. 8 bytes */
1139         u8      type;   /* bfa_diag_dport_test_type_e */
1140         u8      mode;   /* bfa_diag_dport_test_opmode */
1141         u8      rsvd[2];
1142         u32     numfrm; /* from switch uint in 1M */
1143 };
1144
1145 struct bfi_diag_dport_scn_testcomp_s {
1146         u8      status; /* bfa_diag_dport_test_status_e */
1147         u8      speed;  /* bfa_port_speed_t  */
1148         u16     numbuffer; /* from switch  */
1149         u8      subtest_status[DPORT_TEST_MAX];  /* 4 bytes */
1150         u32     latency;   /* from switch  */
1151         u32     distance;  /* from swtich unit in meters  */
1152                         /* Buffers required to saturate the link */
1153         u16     frm_sz; /* from switch for buf_reqd */
1154         u8      rsvd[2];
1155 };
1156
1157 struct bfi_diag_dport_scn_s {           /* max size == RDS_RMESZ        */
1158         struct bfi_mhdr_s       mh;     /* header 4 bytes               */
1159         u8                      state;  /* new state                    */
1160         u8                      rsvd[3];
1161         union {
1162                 struct bfi_diag_dport_scn_teststart_s teststart;
1163                 struct bfi_diag_dport_scn_testcomp_s testcomp;
1164         } info;
1165 };
1166
1167 union bfi_diag_dport_msg_u {
1168         struct bfi_diag_dport_req_s     req;
1169         struct bfi_diag_dport_rsp_s     rsp;
1170         struct bfi_diag_dport_scn_s     scn;
1171 };
1172
1173 /*
1174  *      PHY module specific
1175  */
1176 enum bfi_phy_h2i_msgs_e {
1177         BFI_PHY_H2I_QUERY_REQ = 1,
1178         BFI_PHY_H2I_STATS_REQ = 2,
1179         BFI_PHY_H2I_WRITE_REQ = 3,
1180         BFI_PHY_H2I_READ_REQ = 4,
1181 };
1182
1183 enum bfi_phy_i2h_msgs_e {
1184         BFI_PHY_I2H_QUERY_RSP = BFA_I2HM(1),
1185         BFI_PHY_I2H_STATS_RSP = BFA_I2HM(2),
1186         BFI_PHY_I2H_WRITE_RSP = BFA_I2HM(3),
1187         BFI_PHY_I2H_READ_RSP = BFA_I2HM(4),
1188 };
1189
1190 /*
1191  * External PHY query request
1192  */
1193 struct bfi_phy_query_req_s {
1194         struct bfi_mhdr_s       mh;             /* Common msg header */
1195         u8                      instance;
1196         u8                      rsv[3];
1197         struct bfi_alen_s       alen;
1198 };
1199
1200 /*
1201  * External PHY stats request
1202  */
1203 struct bfi_phy_stats_req_s {
1204         struct bfi_mhdr_s       mh;             /* Common msg header */
1205         u8                      instance;
1206         u8                      rsv[3];
1207         struct bfi_alen_s       alen;
1208 };
1209
1210 /*
1211  * External PHY write request
1212  */
1213 struct bfi_phy_write_req_s {
1214         struct bfi_mhdr_s       mh;             /* Common msg header */
1215         u8              instance;
1216         u8              last;
1217         u8              rsv[2];
1218         u32             offset;
1219         u32             length;
1220         struct bfi_alen_s       alen;
1221 };
1222
1223 /*
1224  * External PHY read request
1225  */
1226 struct bfi_phy_read_req_s {
1227         struct bfi_mhdr_s       mh;     /* Common msg header */
1228         u8              instance;
1229         u8              rsv[3];
1230         u32             offset;
1231         u32             length;
1232         struct bfi_alen_s       alen;
1233 };
1234
1235 /*
1236  * External PHY query response
1237  */
1238 struct bfi_phy_query_rsp_s {
1239         struct bfi_mhdr_s       mh;     /* Common msg header */
1240         u32                     status;
1241 };
1242
1243 /*
1244  * External PHY stats response
1245  */
1246 struct bfi_phy_stats_rsp_s {
1247         struct bfi_mhdr_s       mh;     /* Common msg header */
1248         u32                     status;
1249 };
1250
1251 /*
1252  * External PHY read response
1253  */
1254 struct bfi_phy_read_rsp_s {
1255         struct bfi_mhdr_s       mh;     /* Common msg header */
1256         u32                     status;
1257         u32             length;
1258 };
1259
1260 /*
1261  * External PHY write response
1262  */
1263 struct bfi_phy_write_rsp_s {
1264         struct bfi_mhdr_s       mh;     /* Common msg header */
1265         u32                     status;
1266         u32                     length;
1267 };
1268
1269 enum bfi_fru_h2i_msgs {
1270         BFI_FRUVPD_H2I_WRITE_REQ = 1,
1271         BFI_FRUVPD_H2I_READ_REQ = 2,
1272         BFI_TFRU_H2I_WRITE_REQ = 3,
1273         BFI_TFRU_H2I_READ_REQ = 4,
1274 };
1275
1276 enum bfi_fru_i2h_msgs {
1277         BFI_FRUVPD_I2H_WRITE_RSP = BFA_I2HM(1),
1278         BFI_FRUVPD_I2H_READ_RSP = BFA_I2HM(2),
1279         BFI_TFRU_I2H_WRITE_RSP = BFA_I2HM(3),
1280         BFI_TFRU_I2H_READ_RSP = BFA_I2HM(4),
1281 };
1282
1283 /*
1284  * FRU write request
1285  */
1286 struct bfi_fru_write_req_s {
1287         struct bfi_mhdr_s       mh;     /* Common msg header */
1288         u8                      last;
1289         u8                      rsv_1[3];
1290         u8                      trfr_cmpl;
1291         u8                      rsv_2[3];
1292         u32                     offset;
1293         u32                     length;
1294         struct bfi_alen_s       alen;
1295 };
1296
1297 /*
1298  * FRU read request
1299  */
1300 struct bfi_fru_read_req_s {
1301         struct bfi_mhdr_s       mh;     /* Common msg header */
1302         u32                     offset;
1303         u32                     length;
1304         struct bfi_alen_s       alen;
1305 };
1306
1307 /*
1308  * FRU response
1309  */
1310 struct bfi_fru_rsp_s {
1311         struct bfi_mhdr_s       mh;     /* Common msg header */
1312         u32                     status;
1313         u32                     length;
1314 };
1315 #pragma pack()
1316
1317 #endif /* __BFI_H__ */