File Index
Files and directories
Sign in
FILE

bfi.h

File preview with syntax highlighting.

linux-6.19.14/drivers/scsi/bfa/bfi.h C
   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 switch 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__ */
~/ Read-only file preview.