Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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__ */