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