xref: /openbmc/linux/drivers/net/ethernet/brocade/bna/bfi.h (revision f844a0ead401c3ce0f01a8bb4d6cea2f0f6ad863)
1*f844a0eaSJeff Kirsher /*
2*f844a0eaSJeff Kirsher  * Linux network driver for Brocade Converged Network Adapter.
3*f844a0eaSJeff Kirsher  *
4*f844a0eaSJeff Kirsher  * This program is free software; you can redistribute it and/or modify it
5*f844a0eaSJeff Kirsher  * under the terms of the GNU General Public License (GPL) Version 2 as
6*f844a0eaSJeff Kirsher  * published by the Free Software Foundation
7*f844a0eaSJeff Kirsher  *
8*f844a0eaSJeff Kirsher  * This program is distributed in the hope that it will be useful, but
9*f844a0eaSJeff Kirsher  * WITHOUT ANY WARRANTY; without even the implied warranty of
10*f844a0eaSJeff Kirsher  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11*f844a0eaSJeff Kirsher  * General Public License for more details.
12*f844a0eaSJeff Kirsher  */
13*f844a0eaSJeff Kirsher /*
14*f844a0eaSJeff Kirsher  * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
15*f844a0eaSJeff Kirsher  * All rights reserved
16*f844a0eaSJeff Kirsher  * www.brocade.com
17*f844a0eaSJeff Kirsher  */
18*f844a0eaSJeff Kirsher 
19*f844a0eaSJeff Kirsher #ifndef __BFI_H__
20*f844a0eaSJeff Kirsher #define __BFI_H__
21*f844a0eaSJeff Kirsher 
22*f844a0eaSJeff Kirsher #include "bfa_defs.h"
23*f844a0eaSJeff Kirsher 
24*f844a0eaSJeff Kirsher #pragma pack(1)
25*f844a0eaSJeff Kirsher 
26*f844a0eaSJeff Kirsher /**
27*f844a0eaSJeff Kirsher  * BFI FW image type
28*f844a0eaSJeff Kirsher  */
29*f844a0eaSJeff Kirsher #define	BFI_FLASH_CHUNK_SZ			256	/*!< Flash chunk size */
30*f844a0eaSJeff Kirsher #define	BFI_FLASH_CHUNK_SZ_WORDS	(BFI_FLASH_CHUNK_SZ/sizeof(u32))
31*f844a0eaSJeff Kirsher enum {
32*f844a0eaSJeff Kirsher 	BFI_IMAGE_CB_FC,
33*f844a0eaSJeff Kirsher 	BFI_IMAGE_CT_FC,
34*f844a0eaSJeff Kirsher 	BFI_IMAGE_CT_CNA,
35*f844a0eaSJeff Kirsher 	BFI_IMAGE_MAX,
36*f844a0eaSJeff Kirsher };
37*f844a0eaSJeff Kirsher 
38*f844a0eaSJeff Kirsher /**
39*f844a0eaSJeff Kirsher  * Msg header common to all msgs
40*f844a0eaSJeff Kirsher  */
41*f844a0eaSJeff Kirsher struct bfi_mhdr {
42*f844a0eaSJeff Kirsher 	u8		msg_class;	/*!< @ref enum bfi_mclass	    */
43*f844a0eaSJeff Kirsher 	u8		msg_id;		/*!< msg opcode with in the class   */
44*f844a0eaSJeff Kirsher 	union {
45*f844a0eaSJeff Kirsher 		struct {
46*f844a0eaSJeff Kirsher 			u8	rsvd;
47*f844a0eaSJeff Kirsher 			u8	lpu_id;	/*!< msg destination		    */
48*f844a0eaSJeff Kirsher 		} h2i;
49*f844a0eaSJeff Kirsher 		u16	i2htok;	/*!< token in msgs to host	    */
50*f844a0eaSJeff Kirsher 	} mtag;
51*f844a0eaSJeff Kirsher };
52*f844a0eaSJeff Kirsher 
53*f844a0eaSJeff Kirsher #define bfi_h2i_set(_mh, _mc, _op, _lpuid) do {		\
54*f844a0eaSJeff Kirsher 	(_mh).msg_class			= (_mc);		\
55*f844a0eaSJeff Kirsher 	(_mh).msg_id			= (_op);		\
56*f844a0eaSJeff Kirsher 	(_mh).mtag.h2i.lpu_id	= (_lpuid);			\
57*f844a0eaSJeff Kirsher } while (0)
58*f844a0eaSJeff Kirsher 
59*f844a0eaSJeff Kirsher #define bfi_i2h_set(_mh, _mc, _op, _i2htok) do {		\
60*f844a0eaSJeff Kirsher 	(_mh).msg_class			= (_mc);		\
61*f844a0eaSJeff Kirsher 	(_mh).msg_id			= (_op);		\
62*f844a0eaSJeff Kirsher 	(_mh).mtag.i2htok		= (_i2htok);		\
63*f844a0eaSJeff Kirsher } while (0)
64*f844a0eaSJeff Kirsher 
65*f844a0eaSJeff Kirsher /*
66*f844a0eaSJeff Kirsher  * Message opcodes: 0-127 to firmware, 128-255 to host
67*f844a0eaSJeff Kirsher  */
68*f844a0eaSJeff Kirsher #define BFI_I2H_OPCODE_BASE	128
69*f844a0eaSJeff Kirsher #define BFA_I2HM(_x)			((_x) + BFI_I2H_OPCODE_BASE)
70*f844a0eaSJeff Kirsher 
71*f844a0eaSJeff Kirsher /**
72*f844a0eaSJeff Kirsher  ****************************************************************************
73*f844a0eaSJeff Kirsher  *
74*f844a0eaSJeff Kirsher  * Scatter Gather Element and Page definition
75*f844a0eaSJeff Kirsher  *
76*f844a0eaSJeff Kirsher  ****************************************************************************
77*f844a0eaSJeff Kirsher  */
78*f844a0eaSJeff Kirsher 
79*f844a0eaSJeff Kirsher #define BFI_SGE_INLINE	1
80*f844a0eaSJeff Kirsher #define BFI_SGE_INLINE_MAX	(BFI_SGE_INLINE + 1)
81*f844a0eaSJeff Kirsher 
82*f844a0eaSJeff Kirsher /**
83*f844a0eaSJeff Kirsher  * SG Flags
84*f844a0eaSJeff Kirsher  */
85*f844a0eaSJeff Kirsher enum {
86*f844a0eaSJeff Kirsher 	BFI_SGE_DATA		= 0,	/*!< data address, not last	     */
87*f844a0eaSJeff Kirsher 	BFI_SGE_DATA_CPL	= 1,	/*!< data addr, last in current page */
88*f844a0eaSJeff Kirsher 	BFI_SGE_DATA_LAST	= 3,	/*!< data address, last		     */
89*f844a0eaSJeff Kirsher 	BFI_SGE_LINK		= 2,	/*!< link address		     */
90*f844a0eaSJeff Kirsher 	BFI_SGE_PGDLEN		= 2,	/*!< cumulative data length for page */
91*f844a0eaSJeff Kirsher };
92*f844a0eaSJeff Kirsher 
93*f844a0eaSJeff Kirsher /**
94*f844a0eaSJeff Kirsher  * DMA addresses
95*f844a0eaSJeff Kirsher  */
96*f844a0eaSJeff Kirsher union bfi_addr_u {
97*f844a0eaSJeff Kirsher 	struct {
98*f844a0eaSJeff Kirsher 		u32	addr_lo;
99*f844a0eaSJeff Kirsher 		u32	addr_hi;
100*f844a0eaSJeff Kirsher 	} a32;
101*f844a0eaSJeff Kirsher };
102*f844a0eaSJeff Kirsher 
103*f844a0eaSJeff Kirsher /**
104*f844a0eaSJeff Kirsher  * Scatter Gather Element
105*f844a0eaSJeff Kirsher  */
106*f844a0eaSJeff Kirsher struct bfi_sge {
107*f844a0eaSJeff Kirsher #ifdef __BIGENDIAN
108*f844a0eaSJeff Kirsher 	u32	flags:2,
109*f844a0eaSJeff Kirsher 			rsvd:2,
110*f844a0eaSJeff Kirsher 			sg_len:28;
111*f844a0eaSJeff Kirsher #else
112*f844a0eaSJeff Kirsher 	u32	sg_len:28,
113*f844a0eaSJeff Kirsher 			rsvd:2,
114*f844a0eaSJeff Kirsher 			flags:2;
115*f844a0eaSJeff Kirsher #endif
116*f844a0eaSJeff Kirsher 	union bfi_addr_u sga;
117*f844a0eaSJeff Kirsher };
118*f844a0eaSJeff Kirsher 
119*f844a0eaSJeff Kirsher /**
120*f844a0eaSJeff Kirsher  * Scatter Gather Page
121*f844a0eaSJeff Kirsher  */
122*f844a0eaSJeff Kirsher #define BFI_SGPG_DATA_SGES		7
123*f844a0eaSJeff Kirsher #define BFI_SGPG_SGES_MAX		(BFI_SGPG_DATA_SGES + 1)
124*f844a0eaSJeff Kirsher #define BFI_SGPG_RSVD_WD_LEN	8
125*f844a0eaSJeff Kirsher struct bfi_sgpg {
126*f844a0eaSJeff Kirsher 	struct bfi_sge sges[BFI_SGPG_SGES_MAX];
127*f844a0eaSJeff Kirsher 	u32	rsvd[BFI_SGPG_RSVD_WD_LEN];
128*f844a0eaSJeff Kirsher };
129*f844a0eaSJeff Kirsher 
130*f844a0eaSJeff Kirsher /*
131*f844a0eaSJeff Kirsher  * Large Message structure - 128 Bytes size Msgs
132*f844a0eaSJeff Kirsher  */
133*f844a0eaSJeff Kirsher #define BFI_LMSG_SZ		128
134*f844a0eaSJeff Kirsher #define BFI_LMSG_PL_WSZ	\
135*f844a0eaSJeff Kirsher 			((BFI_LMSG_SZ - sizeof(struct bfi_mhdr)) / 4)
136*f844a0eaSJeff Kirsher 
137*f844a0eaSJeff Kirsher struct bfi_msg {
138*f844a0eaSJeff Kirsher 	struct bfi_mhdr mhdr;
139*f844a0eaSJeff Kirsher 	u32	pl[BFI_LMSG_PL_WSZ];
140*f844a0eaSJeff Kirsher };
141*f844a0eaSJeff Kirsher 
142*f844a0eaSJeff Kirsher /**
143*f844a0eaSJeff Kirsher  * Mailbox message structure
144*f844a0eaSJeff Kirsher  */
145*f844a0eaSJeff Kirsher #define BFI_MBMSG_SZ		7
146*f844a0eaSJeff Kirsher struct bfi_mbmsg {
147*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;
148*f844a0eaSJeff Kirsher 	u32		pl[BFI_MBMSG_SZ];
149*f844a0eaSJeff Kirsher };
150*f844a0eaSJeff Kirsher 
151*f844a0eaSJeff Kirsher /**
152*f844a0eaSJeff Kirsher  * Message Classes
153*f844a0eaSJeff Kirsher  */
154*f844a0eaSJeff Kirsher enum bfi_mclass {
155*f844a0eaSJeff Kirsher 	BFI_MC_IOC		= 1,	/*!< IO Controller (IOC)	    */
156*f844a0eaSJeff Kirsher 	BFI_MC_DIAG		= 2,	/*!< Diagnostic Msgs		    */
157*f844a0eaSJeff Kirsher 	BFI_MC_FLASH		= 3,	/*!< Flash message class	    */
158*f844a0eaSJeff Kirsher 	BFI_MC_CEE		= 4,	/*!< CEE			    */
159*f844a0eaSJeff Kirsher 	BFI_MC_FCPORT		= 5,	/*!< FC port			    */
160*f844a0eaSJeff Kirsher 	BFI_MC_IOCFC		= 6,	/*!< FC - IO Controller (IOC)	    */
161*f844a0eaSJeff Kirsher 	BFI_MC_LL		= 7,	/*!< Link Layer			    */
162*f844a0eaSJeff Kirsher 	BFI_MC_UF		= 8,	/*!< Unsolicited frame receive	    */
163*f844a0eaSJeff Kirsher 	BFI_MC_FCXP		= 9,	/*!< FC Transport		    */
164*f844a0eaSJeff Kirsher 	BFI_MC_LPS		= 10,	/*!< lport fc login services	    */
165*f844a0eaSJeff Kirsher 	BFI_MC_RPORT		= 11,	/*!< Remote port		    */
166*f844a0eaSJeff Kirsher 	BFI_MC_ITNIM		= 12,	/*!< I-T nexus (Initiator mode)	    */
167*f844a0eaSJeff Kirsher 	BFI_MC_IOIM_READ	= 13,	/*!< read IO (Initiator mode)	    */
168*f844a0eaSJeff Kirsher 	BFI_MC_IOIM_WRITE	= 14,	/*!< write IO (Initiator mode)	    */
169*f844a0eaSJeff Kirsher 	BFI_MC_IOIM_IO		= 15,	/*!< IO (Initiator mode)	    */
170*f844a0eaSJeff Kirsher 	BFI_MC_IOIM		= 16,	/*!< IO (Initiator mode)	    */
171*f844a0eaSJeff Kirsher 	BFI_MC_IOIM_IOCOM	= 17,	/*!< good IO completion		    */
172*f844a0eaSJeff Kirsher 	BFI_MC_TSKIM		= 18,	/*!< Initiator Task management	    */
173*f844a0eaSJeff Kirsher 	BFI_MC_SBOOT		= 19,	/*!< SAN boot services		    */
174*f844a0eaSJeff Kirsher 	BFI_MC_IPFC		= 20,	/*!< IP over FC Msgs		    */
175*f844a0eaSJeff Kirsher 	BFI_MC_PORT		= 21,	/*!< Physical port		    */
176*f844a0eaSJeff Kirsher 	BFI_MC_SFP		= 22,	/*!< SFP module			    */
177*f844a0eaSJeff Kirsher 	BFI_MC_MSGQ		= 23,	/*!< MSGQ			    */
178*f844a0eaSJeff Kirsher 	BFI_MC_ENET		= 24,	/*!< ENET commands/responses	    */
179*f844a0eaSJeff Kirsher 	BFI_MC_MAX		= 32
180*f844a0eaSJeff Kirsher };
181*f844a0eaSJeff Kirsher 
182*f844a0eaSJeff Kirsher #define BFI_IOC_MAX_CQS		4
183*f844a0eaSJeff Kirsher #define BFI_IOC_MAX_CQS_ASIC	8
184*f844a0eaSJeff Kirsher #define BFI_IOC_MSGLEN_MAX	32	/* 32 bytes */
185*f844a0eaSJeff Kirsher 
186*f844a0eaSJeff Kirsher #define BFI_BOOT_TYPE_OFF		8
187*f844a0eaSJeff Kirsher #define BFI_BOOT_LOADER_OFF		12
188*f844a0eaSJeff Kirsher 
189*f844a0eaSJeff Kirsher #define BFI_BOOT_TYPE_NORMAL		0
190*f844a0eaSJeff Kirsher #define	BFI_BOOT_TYPE_FLASH		1
191*f844a0eaSJeff Kirsher #define	BFI_BOOT_TYPE_MEMTEST		2
192*f844a0eaSJeff Kirsher 
193*f844a0eaSJeff Kirsher #define BFI_BOOT_LOADER_OS		0
194*f844a0eaSJeff Kirsher 
195*f844a0eaSJeff Kirsher #define BFI_BOOT_MEMTEST_RES_ADDR   0x900
196*f844a0eaSJeff Kirsher #define BFI_BOOT_MEMTEST_RES_SIG    0xA0A1A2A3
197*f844a0eaSJeff Kirsher 
198*f844a0eaSJeff Kirsher /**
199*f844a0eaSJeff Kirsher  *----------------------------------------------------------------------
200*f844a0eaSJeff Kirsher  *				IOC
201*f844a0eaSJeff Kirsher  *----------------------------------------------------------------------
202*f844a0eaSJeff Kirsher  */
203*f844a0eaSJeff Kirsher 
204*f844a0eaSJeff Kirsher enum bfi_ioc_h2i_msgs {
205*f844a0eaSJeff Kirsher 	BFI_IOC_H2I_ENABLE_REQ		= 1,
206*f844a0eaSJeff Kirsher 	BFI_IOC_H2I_DISABLE_REQ		= 2,
207*f844a0eaSJeff Kirsher 	BFI_IOC_H2I_GETATTR_REQ		= 3,
208*f844a0eaSJeff Kirsher 	BFI_IOC_H2I_DBG_SYNC		= 4,
209*f844a0eaSJeff Kirsher 	BFI_IOC_H2I_DBG_DUMP		= 5,
210*f844a0eaSJeff Kirsher };
211*f844a0eaSJeff Kirsher 
212*f844a0eaSJeff Kirsher enum bfi_ioc_i2h_msgs {
213*f844a0eaSJeff Kirsher 	BFI_IOC_I2H_ENABLE_REPLY	= BFA_I2HM(1),
214*f844a0eaSJeff Kirsher 	BFI_IOC_I2H_DISABLE_REPLY	= BFA_I2HM(2),
215*f844a0eaSJeff Kirsher 	BFI_IOC_I2H_GETATTR_REPLY	= BFA_I2HM(3),
216*f844a0eaSJeff Kirsher 	BFI_IOC_I2H_READY_EVENT		= BFA_I2HM(4),
217*f844a0eaSJeff Kirsher 	BFI_IOC_I2H_HBEAT		= BFA_I2HM(5),
218*f844a0eaSJeff Kirsher };
219*f844a0eaSJeff Kirsher 
220*f844a0eaSJeff Kirsher /**
221*f844a0eaSJeff Kirsher  * BFI_IOC_H2I_GETATTR_REQ message
222*f844a0eaSJeff Kirsher  */
223*f844a0eaSJeff Kirsher struct bfi_ioc_getattr_req {
224*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;
225*f844a0eaSJeff Kirsher 	union bfi_addr_u	attr_addr;
226*f844a0eaSJeff Kirsher };
227*f844a0eaSJeff Kirsher 
228*f844a0eaSJeff Kirsher struct bfi_ioc_attr {
229*f844a0eaSJeff Kirsher 	u64		mfg_pwwn;	/*!< Mfg port wwn	   */
230*f844a0eaSJeff Kirsher 	u64		mfg_nwwn;	/*!< Mfg node wwn	   */
231*f844a0eaSJeff Kirsher 	mac_t		mfg_mac;	/*!< Mfg mac		   */
232*f844a0eaSJeff Kirsher 	u16	rsvd_a;
233*f844a0eaSJeff Kirsher 	u64		pwwn;
234*f844a0eaSJeff Kirsher 	u64		nwwn;
235*f844a0eaSJeff Kirsher 	mac_t		mac;		/*!< PBC or Mfg mac	   */
236*f844a0eaSJeff Kirsher 	u16	rsvd_b;
237*f844a0eaSJeff Kirsher 	mac_t		fcoe_mac;
238*f844a0eaSJeff Kirsher 	u16	rsvd_c;
239*f844a0eaSJeff Kirsher 	char		brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)];
240*f844a0eaSJeff Kirsher 	u8		pcie_gen;
241*f844a0eaSJeff Kirsher 	u8		pcie_lanes_orig;
242*f844a0eaSJeff Kirsher 	u8		pcie_lanes;
243*f844a0eaSJeff Kirsher 	u8		rx_bbcredit;	/*!< receive buffer credits */
244*f844a0eaSJeff Kirsher 	u32	adapter_prop;	/*!< adapter properties     */
245*f844a0eaSJeff Kirsher 	u16	maxfrsize;	/*!< max receive frame size */
246*f844a0eaSJeff Kirsher 	char		asic_rev;
247*f844a0eaSJeff Kirsher 	u8		rsvd_d;
248*f844a0eaSJeff Kirsher 	char		fw_version[BFA_VERSION_LEN];
249*f844a0eaSJeff Kirsher 	char		optrom_version[BFA_VERSION_LEN];
250*f844a0eaSJeff Kirsher 	struct bfa_mfg_vpd vpd;
251*f844a0eaSJeff Kirsher 	u32	card_type;	/*!< card type			*/
252*f844a0eaSJeff Kirsher };
253*f844a0eaSJeff Kirsher 
254*f844a0eaSJeff Kirsher /**
255*f844a0eaSJeff Kirsher  * BFI_IOC_I2H_GETATTR_REPLY message
256*f844a0eaSJeff Kirsher  */
257*f844a0eaSJeff Kirsher struct bfi_ioc_getattr_reply {
258*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;	/*!< Common msg header		*/
259*f844a0eaSJeff Kirsher 	u8			status;	/*!< cfg reply status		*/
260*f844a0eaSJeff Kirsher 	u8			rsvd[3];
261*f844a0eaSJeff Kirsher };
262*f844a0eaSJeff Kirsher 
263*f844a0eaSJeff Kirsher /**
264*f844a0eaSJeff Kirsher  * Firmware memory page offsets
265*f844a0eaSJeff Kirsher  */
266*f844a0eaSJeff Kirsher #define BFI_IOC_SMEM_PG0_CB	(0x40)
267*f844a0eaSJeff Kirsher #define BFI_IOC_SMEM_PG0_CT	(0x180)
268*f844a0eaSJeff Kirsher 
269*f844a0eaSJeff Kirsher /**
270*f844a0eaSJeff Kirsher  * Firmware statistic offset
271*f844a0eaSJeff Kirsher  */
272*f844a0eaSJeff Kirsher #define BFI_IOC_FWSTATS_OFF	(0x6B40)
273*f844a0eaSJeff Kirsher #define BFI_IOC_FWSTATS_SZ	(4096)
274*f844a0eaSJeff Kirsher 
275*f844a0eaSJeff Kirsher /**
276*f844a0eaSJeff Kirsher  * Firmware trace offset
277*f844a0eaSJeff Kirsher  */
278*f844a0eaSJeff Kirsher #define BFI_IOC_TRC_OFF		(0x4b00)
279*f844a0eaSJeff Kirsher #define BFI_IOC_TRC_ENTS	256
280*f844a0eaSJeff Kirsher 
281*f844a0eaSJeff Kirsher #define BFI_IOC_FW_SIGNATURE	(0xbfadbfad)
282*f844a0eaSJeff Kirsher #define BFI_IOC_MD5SUM_SZ	4
283*f844a0eaSJeff Kirsher struct bfi_ioc_image_hdr {
284*f844a0eaSJeff Kirsher 	u32	signature;	/*!< constant signature */
285*f844a0eaSJeff Kirsher 	u32	rsvd_a;
286*f844a0eaSJeff Kirsher 	u32	exec;		/*!< exec vector	*/
287*f844a0eaSJeff Kirsher 	u32	param;		/*!< parameters		*/
288*f844a0eaSJeff Kirsher 	u32	rsvd_b[4];
289*f844a0eaSJeff Kirsher 	u32	md5sum[BFI_IOC_MD5SUM_SZ];
290*f844a0eaSJeff Kirsher };
291*f844a0eaSJeff Kirsher 
292*f844a0eaSJeff Kirsher enum bfi_fwboot_type {
293*f844a0eaSJeff Kirsher 	BFI_FWBOOT_TYPE_NORMAL	= 0,
294*f844a0eaSJeff Kirsher 	BFI_FWBOOT_TYPE_FLASH	= 1,
295*f844a0eaSJeff Kirsher 	BFI_FWBOOT_TYPE_MEMTEST	= 2,
296*f844a0eaSJeff Kirsher };
297*f844a0eaSJeff Kirsher 
298*f844a0eaSJeff Kirsher /**
299*f844a0eaSJeff Kirsher  *  BFI_IOC_I2H_READY_EVENT message
300*f844a0eaSJeff Kirsher  */
301*f844a0eaSJeff Kirsher struct bfi_ioc_rdy_event {
302*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;		/*!< common msg header */
303*f844a0eaSJeff Kirsher 	u8			init_status;	/*!< init event status */
304*f844a0eaSJeff Kirsher 	u8			rsvd[3];
305*f844a0eaSJeff Kirsher };
306*f844a0eaSJeff Kirsher 
307*f844a0eaSJeff Kirsher struct bfi_ioc_hbeat {
308*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;		/*!< common msg header		*/
309*f844a0eaSJeff Kirsher 	u32	   hb_count;	/*!< current heart beat count	*/
310*f844a0eaSJeff Kirsher };
311*f844a0eaSJeff Kirsher 
312*f844a0eaSJeff Kirsher /**
313*f844a0eaSJeff Kirsher  * IOC hardware/firmware state
314*f844a0eaSJeff Kirsher  */
315*f844a0eaSJeff Kirsher enum bfi_ioc_state {
316*f844a0eaSJeff Kirsher 	BFI_IOC_UNINIT		= 0,	/*!< not initialized		     */
317*f844a0eaSJeff Kirsher 	BFI_IOC_INITING		= 1,	/*!< h/w is being initialized	     */
318*f844a0eaSJeff Kirsher 	BFI_IOC_HWINIT		= 2,	/*!< h/w is initialized		     */
319*f844a0eaSJeff Kirsher 	BFI_IOC_CFG		= 3,	/*!< IOC configuration in progress   */
320*f844a0eaSJeff Kirsher 	BFI_IOC_OP		= 4,	/*!< IOC is operational		     */
321*f844a0eaSJeff Kirsher 	BFI_IOC_DISABLING	= 5,	/*!< IOC is being disabled	     */
322*f844a0eaSJeff Kirsher 	BFI_IOC_DISABLED	= 6,	/*!< IOC is disabled		     */
323*f844a0eaSJeff Kirsher 	BFI_IOC_CFG_DISABLED	= 7,	/*!< IOC is being disabled;transient */
324*f844a0eaSJeff Kirsher 	BFI_IOC_FAIL		= 8,	/*!< IOC heart-beat failure	     */
325*f844a0eaSJeff Kirsher 	BFI_IOC_MEMTEST		= 9,	/*!< IOC is doing memtest	     */
326*f844a0eaSJeff Kirsher };
327*f844a0eaSJeff Kirsher 
328*f844a0eaSJeff Kirsher #define BFI_IOC_ENDIAN_SIG  0x12345678
329*f844a0eaSJeff Kirsher 
330*f844a0eaSJeff Kirsher enum {
331*f844a0eaSJeff Kirsher 	BFI_ADAPTER_TYPE_FC	= 0x01,		/*!< FC adapters	   */
332*f844a0eaSJeff Kirsher 	BFI_ADAPTER_TYPE_MK	= 0x0f0000,	/*!< adapter type mask     */
333*f844a0eaSJeff Kirsher 	BFI_ADAPTER_TYPE_SH	= 16,	        /*!< adapter type shift    */
334*f844a0eaSJeff Kirsher 	BFI_ADAPTER_NPORTS_MK	= 0xff00,	/*!< number of ports mask  */
335*f844a0eaSJeff Kirsher 	BFI_ADAPTER_NPORTS_SH	= 8,	        /*!< number of ports shift */
336*f844a0eaSJeff Kirsher 	BFI_ADAPTER_SPEED_MK	= 0xff,		/*!< adapter speed mask    */
337*f844a0eaSJeff Kirsher 	BFI_ADAPTER_SPEED_SH	= 0,	        /*!< adapter speed shift   */
338*f844a0eaSJeff Kirsher 	BFI_ADAPTER_PROTO	= 0x100000,	/*!< prototype adapaters   */
339*f844a0eaSJeff Kirsher 	BFI_ADAPTER_TTV		= 0x200000,	/*!< TTV debug capable     */
340*f844a0eaSJeff Kirsher 	BFI_ADAPTER_UNSUPP	= 0x400000,	/*!< unknown adapter type  */
341*f844a0eaSJeff Kirsher };
342*f844a0eaSJeff Kirsher 
343*f844a0eaSJeff Kirsher #define BFI_ADAPTER_GETP(__prop, __adap_prop)			\
344*f844a0eaSJeff Kirsher 	(((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >>	\
345*f844a0eaSJeff Kirsher 		BFI_ADAPTER_ ## __prop ## _SH)
346*f844a0eaSJeff Kirsher #define BFI_ADAPTER_SETP(__prop, __val)				\
347*f844a0eaSJeff Kirsher 	((__val) << BFI_ADAPTER_ ## __prop ## _SH)
348*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_PROTO(__adap_type)			\
349*f844a0eaSJeff Kirsher 	((__adap_type) & BFI_ADAPTER_PROTO)
350*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_TTV(__adap_type)				\
351*f844a0eaSJeff Kirsher 	((__adap_type) & BFI_ADAPTER_TTV)
352*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_UNSUPP(__adap_type)			\
353*f844a0eaSJeff Kirsher 	((__adap_type) & BFI_ADAPTER_UNSUPP)
354*f844a0eaSJeff Kirsher #define BFI_ADAPTER_IS_SPECIAL(__adap_type)			\
355*f844a0eaSJeff Kirsher 	((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO |	\
356*f844a0eaSJeff Kirsher 			BFI_ADAPTER_UNSUPP))
357*f844a0eaSJeff Kirsher 
358*f844a0eaSJeff Kirsher /**
359*f844a0eaSJeff Kirsher  * BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages
360*f844a0eaSJeff Kirsher  */
361*f844a0eaSJeff Kirsher struct bfi_ioc_ctrl_req {
362*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;
363*f844a0eaSJeff Kirsher 	u8			ioc_class;
364*f844a0eaSJeff Kirsher 	u8			rsvd[3];
365*f844a0eaSJeff Kirsher 	u32		tv_sec;
366*f844a0eaSJeff Kirsher };
367*f844a0eaSJeff Kirsher 
368*f844a0eaSJeff Kirsher /**
369*f844a0eaSJeff Kirsher  * BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages
370*f844a0eaSJeff Kirsher  */
371*f844a0eaSJeff Kirsher struct bfi_ioc_ctrl_reply {
372*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;		/*!< Common msg header     */
373*f844a0eaSJeff Kirsher 	u8			status;		/*!< enable/disable status */
374*f844a0eaSJeff Kirsher 	u8			rsvd[3];
375*f844a0eaSJeff Kirsher };
376*f844a0eaSJeff Kirsher 
377*f844a0eaSJeff Kirsher #define BFI_IOC_MSGSZ   8
378*f844a0eaSJeff Kirsher /**
379*f844a0eaSJeff Kirsher  * H2I Messages
380*f844a0eaSJeff Kirsher  */
381*f844a0eaSJeff Kirsher union bfi_ioc_h2i_msg_u {
382*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;
383*f844a0eaSJeff Kirsher 	struct bfi_ioc_ctrl_req enable_req;
384*f844a0eaSJeff Kirsher 	struct bfi_ioc_ctrl_req disable_req;
385*f844a0eaSJeff Kirsher 	struct bfi_ioc_getattr_req getattr_req;
386*f844a0eaSJeff Kirsher 	u32			mboxmsg[BFI_IOC_MSGSZ];
387*f844a0eaSJeff Kirsher };
388*f844a0eaSJeff Kirsher 
389*f844a0eaSJeff Kirsher /**
390*f844a0eaSJeff Kirsher  * I2H Messages
391*f844a0eaSJeff Kirsher  */
392*f844a0eaSJeff Kirsher union bfi_ioc_i2h_msg_u {
393*f844a0eaSJeff Kirsher 	struct bfi_mhdr mh;
394*f844a0eaSJeff Kirsher 	struct bfi_ioc_rdy_event rdy_event;
395*f844a0eaSJeff Kirsher 	u32			mboxmsg[BFI_IOC_MSGSZ];
396*f844a0eaSJeff Kirsher };
397*f844a0eaSJeff Kirsher 
398*f844a0eaSJeff Kirsher #pragma pack()
399*f844a0eaSJeff Kirsher 
400*f844a0eaSJeff Kirsher #endif /* __BFI_H__ */
401