cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

bfi.h (31070B)


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