linux/drivers/scsi/bfa/bfi.h
<<
>>
Prefs
   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 */
  47struct 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 */
  94enum {
  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 */
 105union 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 */
 115struct 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 */
 131struct 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
 142struct 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
 160struct 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
 169struct 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 */
 177enum bfi_pcifn_class {
 178        BFI_PCIFN_CLASS_FC  = 0x0c04,
 179        BFI_PCIFN_CLASS_ETH = 0x0200,
 180};
 181
 182/*
 183 * Message Classes
 184 */
 185enum 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 */
 224enum 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
 230enum 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
 237enum 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
 245enum 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 */
 256struct 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
 262struct 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 */
 296struct 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
 324struct 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
 344struct 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
 357enum 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
 373enum 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
 383enum bfi_port_mode {
 384        BFI_PORT_MODE_FC        = 1,
 385        BFI_PORT_MODE_ETH       = 2,
 386};
 387
 388struct 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 */
 396enum 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
 415enum {
 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 */
 446struct 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 */
 458struct 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 */
 472union 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 */
 483union 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 */
 503struct bfi_pbc_blun_s {
 504        wwn_t           tgt_pwwn;
 505        struct scsi_lun tgt_lun;
 506};
 507
 508/*
 509 * PBC virtual port configuration
 510 */
 511struct bfi_pbc_vport_s {
 512        wwn_t           vp_pwwn;
 513        wwn_t           vp_nwwn;
 514};
 515
 516/*
 517 * BFI pre-boot configuration information
 518 */
 519struct 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
 546enum 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
 552enum 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 */
 559struct 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
 583struct 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? */
 590struct 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 */
 597struct 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 */
 605struct 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 */
 612struct 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
 623enum 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
 630enum 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 */
 640struct 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 */
 649struct 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 */
 659struct bfi_port_get_stats_req_s {
 660        struct bfi_mhdr_s  mh;          /*  common msg header               */
 661        union bfi_addr_u   dma_addr;
 662};
 663
 664union 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
 672union 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 */
 685enum 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
 696enum 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 */
 708struct 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 */
 714struct 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 */
 725struct 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 */
 735struct 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 */
 748struct 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 */
 761enum 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
 767enum 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 */
 776struct bfi_cee_reset_stats_s {
 777        struct bfi_mhdr_s  mh;
 778};
 779
 780/*
 781 * Get configuration  command from host
 782 */
 783struct 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 */
 791struct 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 */
 800struct 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     */
 807union 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
 817enum bfi_sfp_h2i_e {
 818        BFI_SFP_H2I_SHOW        = 1,
 819        BFI_SFP_H2I_SCN         = 2,
 820};
 821
 822enum 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 */
 830struct 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 */
 841enum 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 */
 853enum 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
 858struct 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
 865struct 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 */
 875enum 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
 883enum 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 */
 895struct 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 */
 903struct 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 */
 913struct 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 */
 927struct 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 */
 940struct 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 */
 948struct 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 */
 960struct 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 */
 972struct 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 */
 983struct 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 */
 994enum 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
1004enum 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
1020struct 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
1029struct 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
1034struct 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
1043struct 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 */
1054struct 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
1065struct 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 */
1076struct bfi_diag_ledtest_rsp_s {
1077        struct bfi_mhdr_s  mh;  /* 4 bytes */
1078};
1079
1080struct 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 */
1088struct bfi_diag_portbeacon_rsp_s {
1089        struct bfi_mhdr_s  mh;  /* 4 bytes */
1090};
1091
1092struct 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 */
1101enum 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
1109enum 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
1121struct 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
1129struct 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
1136struct 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
1145struct 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
1157struct 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
1167union 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 */
1176enum 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
1183enum 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 */
1193struct 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 */
1203struct 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 */
1213struct 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 */
1226struct 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 */
1238struct 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 */
1246struct 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 */
1254struct 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 */
1263struct bfi_phy_write_rsp_s {
1264        struct bfi_mhdr_s       mh;     /* Common msg header */
1265        u32                     status;
1266        u32                     length;
1267};
1268
1269enum 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
1276enum 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 */
1286struct 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 */
1300struct 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 */
1310struct 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__ */
1318