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