xref: /linux/drivers/scsi/bfa/bfa_defs.h (revision a36c61f9)
1*a36c61f9SKrishna Gudipati /*
2*a36c61f9SKrishna Gudipati  * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
3*a36c61f9SKrishna Gudipati  * All rights reserved
4*a36c61f9SKrishna Gudipati  * www.brocade.com
5*a36c61f9SKrishna Gudipati  *
6*a36c61f9SKrishna Gudipati  * Linux driver for Brocade Fibre Channel Host Bus Adapter.
7*a36c61f9SKrishna Gudipati  *
8*a36c61f9SKrishna Gudipati  * This program is free software; you can redistribute it and/or modify it
9*a36c61f9SKrishna Gudipati  * under the terms of the GNU General Public License (GPL) Version 2 as
10*a36c61f9SKrishna Gudipati  * published by the Free Software Foundation
11*a36c61f9SKrishna Gudipati  *
12*a36c61f9SKrishna Gudipati  * This program is distributed in the hope that it will be useful, but
13*a36c61f9SKrishna Gudipati  * WITHOUT ANY WARRANTY; without even the implied warranty of
14*a36c61f9SKrishna Gudipati  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15*a36c61f9SKrishna Gudipati  * General Public License for more details.
16*a36c61f9SKrishna Gudipati  */
17*a36c61f9SKrishna Gudipati 
18*a36c61f9SKrishna Gudipati #ifndef __BFA_DEFS_H__
19*a36c61f9SKrishna Gudipati #define __BFA_DEFS_H__
20*a36c61f9SKrishna Gudipati 
21*a36c61f9SKrishna Gudipati #include "bfa_fc.h"
22*a36c61f9SKrishna Gudipati #include "bfa_os_inc.h"
23*a36c61f9SKrishna Gudipati 
24*a36c61f9SKrishna Gudipati #define BFA_MFG_SERIALNUM_SIZE                  11
25*a36c61f9SKrishna Gudipati #define STRSZ(_n)                               (((_n) + 4) & ~3)
26*a36c61f9SKrishna Gudipati 
27*a36c61f9SKrishna Gudipati /**
28*a36c61f9SKrishna Gudipati  * Manufacturing card type
29*a36c61f9SKrishna Gudipati  */
30*a36c61f9SKrishna Gudipati enum {
31*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_CB_MAX  = 825,      /*  Crossbow card type max     */
32*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_FC8P2   = 825,      /*  8G 2port FC card           */
33*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_FC8P1   = 815,      /*  8G 1port FC card           */
34*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_FC4P2   = 425,      /*  4G 2port FC card           */
35*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_FC4P1   = 415,      /*  4G 1port FC card           */
36*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_CNA10P2 = 1020,     /*  10G 2port CNA card */
37*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_CNA10P1 = 1010,     /*  10G 1port CNA card */
38*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_JAYHAWK = 804,      /*  Jayhawk mezz card          */
39*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_WANCHESE = 1007,    /*  Wanchese mezz card */
40*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_ASTRA    = 807,     /*  Astra mezz card            */
41*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_LIGHTNING_P0 = 902, /*  Lightning mezz card - old  */
42*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_LIGHTNING = 1741,   /*  Lightning mezz card        */
43*a36c61f9SKrishna Gudipati 	BFA_MFG_TYPE_INVALID = 0,        /*  Invalid card type          */
44*a36c61f9SKrishna Gudipati };
45*a36c61f9SKrishna Gudipati 
46*a36c61f9SKrishna Gudipati #pragma pack(1)
47*a36c61f9SKrishna Gudipati 
48*a36c61f9SKrishna Gudipati /**
49*a36c61f9SKrishna Gudipati  * Check if Mezz card
50*a36c61f9SKrishna Gudipati  */
51*a36c61f9SKrishna Gudipati #define bfa_mfg_is_mezz(type) (( \
52*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_JAYHAWK || \
53*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_WANCHESE || \
54*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_ASTRA || \
55*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_LIGHTNING_P0 || \
56*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_LIGHTNING))
57*a36c61f9SKrishna Gudipati 
58*a36c61f9SKrishna Gudipati /**
59*a36c61f9SKrishna Gudipati  * Check if the card having old wwn/mac handling
60*a36c61f9SKrishna Gudipati  */
61*a36c61f9SKrishna Gudipati #define bfa_mfg_is_old_wwn_mac_model(type) (( \
62*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_FC8P2 || \
63*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_FC8P1 || \
64*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_FC4P2 || \
65*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_FC4P1 || \
66*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_CNA10P2 || \
67*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_CNA10P1 || \
68*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_JAYHAWK || \
69*a36c61f9SKrishna Gudipati 	(type) == BFA_MFG_TYPE_WANCHESE))
70*a36c61f9SKrishna Gudipati 
71*a36c61f9SKrishna Gudipati #define bfa_mfg_increment_wwn_mac(m, i)                         \
72*a36c61f9SKrishna Gudipati do {                                                            \
73*a36c61f9SKrishna Gudipati 	u32 t = ((u32)(m)[0] << 16) | ((u32)(m)[1] << 8) | \
74*a36c61f9SKrishna Gudipati 		(u32)(m)[2];  \
75*a36c61f9SKrishna Gudipati 	t += (i);      \
76*a36c61f9SKrishna Gudipati 	(m)[0] = (t >> 16) & 0xFF;                              \
77*a36c61f9SKrishna Gudipati 	(m)[1] = (t >> 8) & 0xFF;                               \
78*a36c61f9SKrishna Gudipati 	(m)[2] = t & 0xFF;                                      \
79*a36c61f9SKrishna Gudipati } while (0)
80*a36c61f9SKrishna Gudipati 
81*a36c61f9SKrishna Gudipati /**
82*a36c61f9SKrishna Gudipati  * VPD data length
83*a36c61f9SKrishna Gudipati  */
84*a36c61f9SKrishna Gudipati #define BFA_MFG_VPD_LEN                 512
85*a36c61f9SKrishna Gudipati 
86*a36c61f9SKrishna Gudipati /**
87*a36c61f9SKrishna Gudipati  * VPD vendor tag
88*a36c61f9SKrishna Gudipati  */
89*a36c61f9SKrishna Gudipati enum {
90*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_UNKNOWN     = 0,     /*  vendor unknown             */
91*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_IBM         = 1,     /*  vendor IBM                 */
92*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_HP          = 2,     /*  vendor HP                  */
93*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_DELL        = 3,     /*  vendor DELL                */
94*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_PCI_IBM     = 0x08,  /*  PCI VPD IBM                */
95*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_PCI_HP      = 0x10,  /*  PCI VPD HP         */
96*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_PCI_DELL    = 0x20,  /*  PCI VPD DELL               */
97*a36c61f9SKrishna Gudipati 	BFA_MFG_VPD_PCI_BRCD    = 0xf8,  /*  PCI VPD Brocade            */
98*a36c61f9SKrishna Gudipati };
99*a36c61f9SKrishna Gudipati 
100*a36c61f9SKrishna Gudipati /**
101*a36c61f9SKrishna Gudipati  * All numerical fields are in big-endian format.
102*a36c61f9SKrishna Gudipati  */
103*a36c61f9SKrishna Gudipati struct bfa_mfg_vpd_s {
104*a36c61f9SKrishna Gudipati 	u8              version;        /*  vpd data version */
105*a36c61f9SKrishna Gudipati 	u8              vpd_sig[3];     /*  characters 'V', 'P', 'D' */
106*a36c61f9SKrishna Gudipati 	u8              chksum;         /*  u8 checksum */
107*a36c61f9SKrishna Gudipati 	u8              vendor;         /*  vendor */
108*a36c61f9SKrishna Gudipati 	u8      len;            /*  vpd data length excluding header */
109*a36c61f9SKrishna Gudipati 	u8      rsv;
110*a36c61f9SKrishna Gudipati 	u8              data[BFA_MFG_VPD_LEN];  /*  vpd data */
111*a36c61f9SKrishna Gudipati };
112*a36c61f9SKrishna Gudipati 
113*a36c61f9SKrishna Gudipati #pragma pack()
114*a36c61f9SKrishna Gudipati 
115*a36c61f9SKrishna Gudipati /**
116*a36c61f9SKrishna Gudipati  * Status return values
117*a36c61f9SKrishna Gudipati  */
118*a36c61f9SKrishna Gudipati enum bfa_status {
119*a36c61f9SKrishna Gudipati 	BFA_STATUS_OK		= 0,	/*  Success */
120*a36c61f9SKrishna Gudipati 	BFA_STATUS_FAILED	= 1,	/*  Operation failed */
121*a36c61f9SKrishna Gudipati 	BFA_STATUS_EINVAL	= 2,	/*  Invalid params Check input
122*a36c61f9SKrishna Gudipati 					 *  parameters */
123*a36c61f9SKrishna Gudipati 	BFA_STATUS_ENOMEM	= 3,	/*  Out of resources */
124*a36c61f9SKrishna Gudipati 	BFA_STATUS_ETIMER	= 5,	/*  Timer expired - Retry, if persists,
125*a36c61f9SKrishna Gudipati 					 *  contact support */
126*a36c61f9SKrishna Gudipati 	BFA_STATUS_EPROTOCOL	= 6,	/*  Protocol error */
127*a36c61f9SKrishna Gudipati 	BFA_STATUS_DEVBUSY	= 13,	/*  Device busy - Retry operation */
128*a36c61f9SKrishna Gudipati 	BFA_STATUS_UNKNOWN_LWWN = 18,	/*  LPORT PWWN not found */
129*a36c61f9SKrishna Gudipati 	BFA_STATUS_UNKNOWN_RWWN = 19,	/*  RPORT PWWN not found */
130*a36c61f9SKrishna Gudipati 	BFA_STATUS_VPORT_EXISTS = 21,	/*  VPORT already exists */
131*a36c61f9SKrishna Gudipati 	BFA_STATUS_VPORT_MAX	= 22,	/*  Reached max VPORT supported limit */
132*a36c61f9SKrishna Gudipati 	BFA_STATUS_UNSUPP_SPEED	= 23,	/*  Invalid Speed Check speed setting */
133*a36c61f9SKrishna Gudipati 	BFA_STATUS_INVLD_DFSZ	= 24,	/*  Invalid Max data field size */
134*a36c61f9SKrishna Gudipati 	BFA_STATUS_FABRIC_RJT	= 29,	/*  Reject from attached fabric */
135*a36c61f9SKrishna Gudipati 	BFA_STATUS_VPORT_WWN_BP	= 46,	/*  WWN is same as base port's WWN */
136*a36c61f9SKrishna Gudipati 	BFA_STATUS_NO_FCPIM_NEXUS = 52,	/* No FCP Nexus exists with the rport */
137*a36c61f9SKrishna Gudipati 	BFA_STATUS_IOC_FAILURE	= 56,	/* IOC failure - Retry, if persists
138*a36c61f9SKrishna Gudipati 					 * contact support */
139*a36c61f9SKrishna Gudipati 	BFA_STATUS_INVALID_WWN	= 57,	/*  Invalid WWN */
140*a36c61f9SKrishna Gudipati 	BFA_STATUS_DIAG_BUSY	= 71,	/*  diag busy */
141*a36c61f9SKrishna Gudipati 	BFA_STATUS_ENOFSAVE	= 78,	/*  No saved firmware trace */
142*a36c61f9SKrishna Gudipati 	BFA_STATUS_IOC_DISABLED = 82,   /* IOC is already disabled */
143*a36c61f9SKrishna Gudipati 	BFA_STATUS_INVALID_MAC  = 134, /*  Invalid MAC address */
144*a36c61f9SKrishna Gudipati 	BFA_STATUS_PBC		= 154, /*  Operation not allowed for pre-boot
145*a36c61f9SKrishna Gudipati 					*  configuration */
146*a36c61f9SKrishna Gudipati 	BFA_STATUS_TRUNK_ENABLED = 164, /* Trunk is already enabled on
147*a36c61f9SKrishna Gudipati 					 * this adapter */
148*a36c61f9SKrishna Gudipati 	BFA_STATUS_TRUNK_DISABLED  = 165, /* Trunking is disabled on
149*a36c61f9SKrishna Gudipati 					   * the adapter */
150*a36c61f9SKrishna Gudipati 	BFA_STATUS_IOPROFILE_OFF = 175, /* IO profile OFF */
151*a36c61f9SKrishna Gudipati 	BFA_STATUS_MAX_VAL		/* Unknown error code */
152*a36c61f9SKrishna Gudipati };
153*a36c61f9SKrishna Gudipati #define bfa_status_t enum bfa_status
154*a36c61f9SKrishna Gudipati 
155*a36c61f9SKrishna Gudipati enum bfa_eproto_status {
156*a36c61f9SKrishna Gudipati 	BFA_EPROTO_BAD_ACCEPT = 0,
157*a36c61f9SKrishna Gudipati 	BFA_EPROTO_UNKNOWN_RSP = 1
158*a36c61f9SKrishna Gudipati };
159*a36c61f9SKrishna Gudipati #define bfa_eproto_status_t enum bfa_eproto_status
160*a36c61f9SKrishna Gudipati 
161*a36c61f9SKrishna Gudipati enum bfa_boolean {
162*a36c61f9SKrishna Gudipati 	BFA_FALSE = 0,
163*a36c61f9SKrishna Gudipati 	BFA_TRUE  = 1
164*a36c61f9SKrishna Gudipati };
165*a36c61f9SKrishna Gudipati #define bfa_boolean_t enum bfa_boolean
166*a36c61f9SKrishna Gudipati 
167*a36c61f9SKrishna Gudipati #define BFA_STRING_32	32
168*a36c61f9SKrishna Gudipati #define BFA_VERSION_LEN 64
169*a36c61f9SKrishna Gudipati 
170*a36c61f9SKrishna Gudipati /**
171*a36c61f9SKrishna Gudipati  * ---------------------- adapter definitions ------------
172*a36c61f9SKrishna Gudipati  */
173*a36c61f9SKrishna Gudipati 
174*a36c61f9SKrishna Gudipati /**
175*a36c61f9SKrishna Gudipati  * BFA adapter level attributes.
176*a36c61f9SKrishna Gudipati  */
177*a36c61f9SKrishna Gudipati enum {
178*a36c61f9SKrishna Gudipati 	BFA_ADAPTER_SERIAL_NUM_LEN = STRSZ(BFA_MFG_SERIALNUM_SIZE),
179*a36c61f9SKrishna Gudipati 					/*
180*a36c61f9SKrishna Gudipati 					 *!< adapter serial num length
181*a36c61f9SKrishna Gudipati 					 */
182*a36c61f9SKrishna Gudipati 	BFA_ADAPTER_MODEL_NAME_LEN  = 16,  /*  model name length */
183*a36c61f9SKrishna Gudipati 	BFA_ADAPTER_MODEL_DESCR_LEN = 128, /*  model description length */
184*a36c61f9SKrishna Gudipati 	BFA_ADAPTER_MFG_NAME_LEN    = 8,   /*  manufacturer name length */
185*a36c61f9SKrishna Gudipati 	BFA_ADAPTER_SYM_NAME_LEN    = 64,  /*  adapter symbolic name length */
186*a36c61f9SKrishna Gudipati 	BFA_ADAPTER_OS_TYPE_LEN	    = 64,  /*  adapter os type length */
187*a36c61f9SKrishna Gudipati };
188*a36c61f9SKrishna Gudipati 
189*a36c61f9SKrishna Gudipati struct bfa_adapter_attr_s {
190*a36c61f9SKrishna Gudipati 	char		manufacturer[BFA_ADAPTER_MFG_NAME_LEN];
191*a36c61f9SKrishna Gudipati 	char		serial_num[BFA_ADAPTER_SERIAL_NUM_LEN];
192*a36c61f9SKrishna Gudipati 	u32	card_type;
193*a36c61f9SKrishna Gudipati 	char		model[BFA_ADAPTER_MODEL_NAME_LEN];
194*a36c61f9SKrishna Gudipati 	char		model_descr[BFA_ADAPTER_MODEL_DESCR_LEN];
195*a36c61f9SKrishna Gudipati 	wwn_t		pwwn;
196*a36c61f9SKrishna Gudipati 	char		node_symname[FC_SYMNAME_MAX];
197*a36c61f9SKrishna Gudipati 	char		hw_ver[BFA_VERSION_LEN];
198*a36c61f9SKrishna Gudipati 	char		fw_ver[BFA_VERSION_LEN];
199*a36c61f9SKrishna Gudipati 	char		optrom_ver[BFA_VERSION_LEN];
200*a36c61f9SKrishna Gudipati 	char		os_type[BFA_ADAPTER_OS_TYPE_LEN];
201*a36c61f9SKrishna Gudipati 	struct bfa_mfg_vpd_s	vpd;
202*a36c61f9SKrishna Gudipati 	struct mac_s	mac;
203*a36c61f9SKrishna Gudipati 
204*a36c61f9SKrishna Gudipati 	u8		nports;
205*a36c61f9SKrishna Gudipati 	u8		max_speed;
206*a36c61f9SKrishna Gudipati 	u8		prototype;
207*a36c61f9SKrishna Gudipati 	char	        asic_rev;
208*a36c61f9SKrishna Gudipati 
209*a36c61f9SKrishna Gudipati 	u8		pcie_gen;
210*a36c61f9SKrishna Gudipati 	u8		pcie_lanes_orig;
211*a36c61f9SKrishna Gudipati 	u8		pcie_lanes;
212*a36c61f9SKrishna Gudipati 	u8	        cna_capable;
213*a36c61f9SKrishna Gudipati 
214*a36c61f9SKrishna Gudipati 	u8		is_mezz;
215*a36c61f9SKrishna Gudipati 	u8		trunk_capable;
216*a36c61f9SKrishna Gudipati };
217*a36c61f9SKrishna Gudipati 
218*a36c61f9SKrishna Gudipati /**
219*a36c61f9SKrishna Gudipati  * ---------------------- IOC definitions ------------
220*a36c61f9SKrishna Gudipati  */
221*a36c61f9SKrishna Gudipati 
222*a36c61f9SKrishna Gudipati enum {
223*a36c61f9SKrishna Gudipati 	BFA_IOC_DRIVER_LEN	= 16,
224*a36c61f9SKrishna Gudipati 	BFA_IOC_CHIP_REV_LEN	= 8,
225*a36c61f9SKrishna Gudipati };
226*a36c61f9SKrishna Gudipati 
227*a36c61f9SKrishna Gudipati /**
228*a36c61f9SKrishna Gudipati  * Driver and firmware versions.
229*a36c61f9SKrishna Gudipati  */
230*a36c61f9SKrishna Gudipati struct bfa_ioc_driver_attr_s {
231*a36c61f9SKrishna Gudipati 	char		driver[BFA_IOC_DRIVER_LEN];	/*  driver name */
232*a36c61f9SKrishna Gudipati 	char		driver_ver[BFA_VERSION_LEN];	/*  driver version */
233*a36c61f9SKrishna Gudipati 	char		fw_ver[BFA_VERSION_LEN];	/*  firmware version */
234*a36c61f9SKrishna Gudipati 	char		bios_ver[BFA_VERSION_LEN];	/*  bios version */
235*a36c61f9SKrishna Gudipati 	char		efi_ver[BFA_VERSION_LEN];	/*  EFI version */
236*a36c61f9SKrishna Gudipati 	char		ob_ver[BFA_VERSION_LEN];	/*  openboot version */
237*a36c61f9SKrishna Gudipati };
238*a36c61f9SKrishna Gudipati 
239*a36c61f9SKrishna Gudipati /**
240*a36c61f9SKrishna Gudipati  * IOC PCI device attributes
241*a36c61f9SKrishna Gudipati  */
242*a36c61f9SKrishna Gudipati struct bfa_ioc_pci_attr_s {
243*a36c61f9SKrishna Gudipati 	u16	vendor_id;	/*  PCI vendor ID */
244*a36c61f9SKrishna Gudipati 	u16	device_id;	/*  PCI device ID */
245*a36c61f9SKrishna Gudipati 	u16	ssid;		/*  subsystem ID */
246*a36c61f9SKrishna Gudipati 	u16	ssvid;		/*  subsystem vendor ID */
247*a36c61f9SKrishna Gudipati 	u32	pcifn;		/*  PCI device function */
248*a36c61f9SKrishna Gudipati 	u32	rsvd;		/* padding */
249*a36c61f9SKrishna Gudipati 	char		chip_rev[BFA_IOC_CHIP_REV_LEN];	 /*  chip revision */
250*a36c61f9SKrishna Gudipati };
251*a36c61f9SKrishna Gudipati 
252*a36c61f9SKrishna Gudipati /**
253*a36c61f9SKrishna Gudipati  * IOC states
254*a36c61f9SKrishna Gudipati  */
255*a36c61f9SKrishna Gudipati enum bfa_ioc_state {
256*a36c61f9SKrishna Gudipati 	BFA_IOC_UNINIT		= 1,	/*  IOC is in uninit state */
257*a36c61f9SKrishna Gudipati 	BFA_IOC_RESET		= 2,	/*  IOC is in reset state */
258*a36c61f9SKrishna Gudipati 	BFA_IOC_SEMWAIT		= 3,	/*  Waiting for IOC h/w semaphore */
259*a36c61f9SKrishna Gudipati 	BFA_IOC_HWINIT		= 4,	/*  IOC h/w is being initialized */
260*a36c61f9SKrishna Gudipati 	BFA_IOC_GETATTR		= 5,	/*  IOC is being configured */
261*a36c61f9SKrishna Gudipati 	BFA_IOC_OPERATIONAL	= 6,	/*  IOC is operational */
262*a36c61f9SKrishna Gudipati 	BFA_IOC_INITFAIL	= 7,	/*  IOC hardware failure */
263*a36c61f9SKrishna Gudipati 	BFA_IOC_FAIL		= 8,	/*  IOC heart-beat failure */
264*a36c61f9SKrishna Gudipati 	BFA_IOC_DISABLING	= 9,	/*  IOC is being disabled */
265*a36c61f9SKrishna Gudipati 	BFA_IOC_DISABLED	= 10,	/*  IOC is disabled */
266*a36c61f9SKrishna Gudipati 	BFA_IOC_FWMISMATCH	= 11,	/*  IOC f/w different from drivers */
267*a36c61f9SKrishna Gudipati 	BFA_IOC_ENABLING	= 12,	/*  IOC is being enabled */
268*a36c61f9SKrishna Gudipati };
269*a36c61f9SKrishna Gudipati 
270*a36c61f9SKrishna Gudipati /**
271*a36c61f9SKrishna Gudipati  * IOC firmware stats
272*a36c61f9SKrishna Gudipati  */
273*a36c61f9SKrishna Gudipati struct bfa_fw_ioc_stats_s {
274*a36c61f9SKrishna Gudipati 	u32	enable_reqs;
275*a36c61f9SKrishna Gudipati 	u32	disable_reqs;
276*a36c61f9SKrishna Gudipati 	u32	get_attr_reqs;
277*a36c61f9SKrishna Gudipati 	u32	dbg_sync;
278*a36c61f9SKrishna Gudipati 	u32	dbg_dump;
279*a36c61f9SKrishna Gudipati 	u32	unknown_reqs;
280*a36c61f9SKrishna Gudipati };
281*a36c61f9SKrishna Gudipati 
282*a36c61f9SKrishna Gudipati /**
283*a36c61f9SKrishna Gudipati  * IOC driver stats
284*a36c61f9SKrishna Gudipati  */
285*a36c61f9SKrishna Gudipati struct bfa_ioc_drv_stats_s {
286*a36c61f9SKrishna Gudipati 	u32	ioc_isrs;
287*a36c61f9SKrishna Gudipati 	u32	ioc_enables;
288*a36c61f9SKrishna Gudipati 	u32	ioc_disables;
289*a36c61f9SKrishna Gudipati 	u32	ioc_hbfails;
290*a36c61f9SKrishna Gudipati 	u32	ioc_boots;
291*a36c61f9SKrishna Gudipati 	u32	stats_tmos;
292*a36c61f9SKrishna Gudipati 	u32	hb_count;
293*a36c61f9SKrishna Gudipati 	u32	disable_reqs;
294*a36c61f9SKrishna Gudipati 	u32	enable_reqs;
295*a36c61f9SKrishna Gudipati 	u32	disable_replies;
296*a36c61f9SKrishna Gudipati 	u32	enable_replies;
297*a36c61f9SKrishna Gudipati };
298*a36c61f9SKrishna Gudipati 
299*a36c61f9SKrishna Gudipati /**
300*a36c61f9SKrishna Gudipati  * IOC statistics
301*a36c61f9SKrishna Gudipati  */
302*a36c61f9SKrishna Gudipati struct bfa_ioc_stats_s {
303*a36c61f9SKrishna Gudipati 	struct bfa_ioc_drv_stats_s	drv_stats; /*  driver IOC stats */
304*a36c61f9SKrishna Gudipati 	struct bfa_fw_ioc_stats_s	fw_stats;  /*  firmware IOC stats */
305*a36c61f9SKrishna Gudipati };
306*a36c61f9SKrishna Gudipati 
307*a36c61f9SKrishna Gudipati enum bfa_ioc_type_e {
308*a36c61f9SKrishna Gudipati 	BFA_IOC_TYPE_FC		= 1,
309*a36c61f9SKrishna Gudipati 	BFA_IOC_TYPE_FCoE	= 2,
310*a36c61f9SKrishna Gudipati 	BFA_IOC_TYPE_LL		= 3,
311*a36c61f9SKrishna Gudipati };
312*a36c61f9SKrishna Gudipati 
313*a36c61f9SKrishna Gudipati /**
314*a36c61f9SKrishna Gudipati  * IOC attributes returned in queries
315*a36c61f9SKrishna Gudipati  */
316*a36c61f9SKrishna Gudipati struct bfa_ioc_attr_s {
317*a36c61f9SKrishna Gudipati 	enum bfa_ioc_type_e		ioc_type;
318*a36c61f9SKrishna Gudipati 	enum bfa_ioc_state		state;		/*  IOC state      */
319*a36c61f9SKrishna Gudipati 	struct bfa_adapter_attr_s	adapter_attr;	/*  HBA attributes */
320*a36c61f9SKrishna Gudipati 	struct bfa_ioc_driver_attr_s	driver_attr;	/*  driver attr    */
321*a36c61f9SKrishna Gudipati 	struct bfa_ioc_pci_attr_s	pci_attr;
322*a36c61f9SKrishna Gudipati 	u8				port_id;	/*  port number    */
323*a36c61f9SKrishna Gudipati 	u8				rsvd[7];	/*  64bit align    */
324*a36c61f9SKrishna Gudipati };
325*a36c61f9SKrishna Gudipati 
326*a36c61f9SKrishna Gudipati /**
327*a36c61f9SKrishna Gudipati  * ---------------------- mfg definitions ------------
328*a36c61f9SKrishna Gudipati  */
329*a36c61f9SKrishna Gudipati 
330*a36c61f9SKrishna Gudipati /**
331*a36c61f9SKrishna Gudipati  * Checksum size
332*a36c61f9SKrishna Gudipati  */
333*a36c61f9SKrishna Gudipati #define BFA_MFG_CHKSUM_SIZE			16
334*a36c61f9SKrishna Gudipati 
335*a36c61f9SKrishna Gudipati #define BFA_MFG_PARTNUM_SIZE			14
336*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_ID_SIZE		10
337*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_PARTNUM_SIZE		20
338*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_SERIALNUM_SIZE		20
339*a36c61f9SKrishna Gudipati #define BFA_MFG_SUPPLIER_REVISION_SIZE		4
340*a36c61f9SKrishna Gudipati 
341*a36c61f9SKrishna Gudipati #pragma pack(1)
342*a36c61f9SKrishna Gudipati 
343*a36c61f9SKrishna Gudipati /**
344*a36c61f9SKrishna Gudipati  * All numerical fields are in big-endian format.
345*a36c61f9SKrishna Gudipati  */
346*a36c61f9SKrishna Gudipati struct bfa_mfg_block_s {
347*a36c61f9SKrishna Gudipati 	u8		version;	/*  manufacturing block version */
348*a36c61f9SKrishna Gudipati 	u8		mfg_sig[3];	/*  characters 'M', 'F', 'G' */
349*a36c61f9SKrishna Gudipati 	u16	mfgsize;	/*  mfg block size */
350*a36c61f9SKrishna Gudipati 	u16	u16_chksum;	/*  old u16 checksum */
351*a36c61f9SKrishna Gudipati 	char		brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)];
352*a36c61f9SKrishna Gudipati 	char		brcd_partnum[STRSZ(BFA_MFG_PARTNUM_SIZE)];
353*a36c61f9SKrishna Gudipati 	u8		mfg_day;	/*  manufacturing day */
354*a36c61f9SKrishna Gudipati 	u8		mfg_month;	/*  manufacturing month */
355*a36c61f9SKrishna Gudipati 	u16	mfg_year;	/*  manufacturing year */
356*a36c61f9SKrishna Gudipati 	wwn_t		mfg_wwn;	/*  wwn base for this adapter */
357*a36c61f9SKrishna Gudipati 	u8		num_wwn;	/*  number of wwns assigned */
358*a36c61f9SKrishna Gudipati 	u8		mfg_speeds;	/*  speeds allowed for this adapter */
359*a36c61f9SKrishna Gudipati 	u8		rsv[2];
360*a36c61f9SKrishna Gudipati 	char		supplier_id[STRSZ(BFA_MFG_SUPPLIER_ID_SIZE)];
361*a36c61f9SKrishna Gudipati 	char		supplier_partnum[STRSZ(BFA_MFG_SUPPLIER_PARTNUM_SIZE)];
362*a36c61f9SKrishna Gudipati 	char
363*a36c61f9SKrishna Gudipati 		supplier_serialnum[STRSZ(BFA_MFG_SUPPLIER_SERIALNUM_SIZE)];
364*a36c61f9SKrishna Gudipati 	char
365*a36c61f9SKrishna Gudipati 		supplier_revision[STRSZ(BFA_MFG_SUPPLIER_REVISION_SIZE)];
366*a36c61f9SKrishna Gudipati 	mac_t		mfg_mac;	/*  mac address */
367*a36c61f9SKrishna Gudipati 	u8		num_mac;	/*  number of mac addresses */
368*a36c61f9SKrishna Gudipati 	u8		rsv2;
369*a36c61f9SKrishna Gudipati 	u32	mfg_type;	/*  card type */
370*a36c61f9SKrishna Gudipati 	u8		rsv3[108];
371*a36c61f9SKrishna Gudipati 	u8		md5_chksum[BFA_MFG_CHKSUM_SIZE]; /*  md5 checksum */
372*a36c61f9SKrishna Gudipati };
373*a36c61f9SKrishna Gudipati 
374*a36c61f9SKrishna Gudipati #pragma pack()
375*a36c61f9SKrishna Gudipati 
376*a36c61f9SKrishna Gudipati /**
377*a36c61f9SKrishna Gudipati  * ---------------------- pci definitions ------------
378*a36c61f9SKrishna Gudipati  */
379*a36c61f9SKrishna Gudipati 
380*a36c61f9SKrishna Gudipati /**
381*a36c61f9SKrishna Gudipati  * PCI device and vendor ID information
382*a36c61f9SKrishna Gudipati  */
383*a36c61f9SKrishna Gudipati enum {
384*a36c61f9SKrishna Gudipati 	BFA_PCI_VENDOR_ID_BROCADE	= 0x1657,
385*a36c61f9SKrishna Gudipati 	BFA_PCI_DEVICE_ID_FC_8G2P	= 0x13,
386*a36c61f9SKrishna Gudipati 	BFA_PCI_DEVICE_ID_FC_8G1P	= 0x17,
387*a36c61f9SKrishna Gudipati 	BFA_PCI_DEVICE_ID_CT		= 0x14,
388*a36c61f9SKrishna Gudipati 	BFA_PCI_DEVICE_ID_CT_FC		= 0x21,
389*a36c61f9SKrishna Gudipati };
390*a36c61f9SKrishna Gudipati 
391*a36c61f9SKrishna Gudipati #define bfa_asic_id_ct(devid)			\
392*a36c61f9SKrishna Gudipati 	((devid) == BFA_PCI_DEVICE_ID_CT ||	\
393*a36c61f9SKrishna Gudipati 	 (devid) == BFA_PCI_DEVICE_ID_CT_FC)
394*a36c61f9SKrishna Gudipati 
395*a36c61f9SKrishna Gudipati /**
396*a36c61f9SKrishna Gudipati  * PCI sub-system device and vendor ID information
397*a36c61f9SKrishna Gudipati  */
398*a36c61f9SKrishna Gudipati enum {
399*a36c61f9SKrishna Gudipati 	BFA_PCI_FCOE_SSDEVICE_ID	= 0x14,
400*a36c61f9SKrishna Gudipati };
401*a36c61f9SKrishna Gudipati 
402*a36c61f9SKrishna Gudipati /**
403*a36c61f9SKrishna Gudipati  * Maximum number of device address ranges mapped through different BAR(s)
404*a36c61f9SKrishna Gudipati  */
405*a36c61f9SKrishna Gudipati #define BFA_PCI_ACCESS_RANGES 1
406*a36c61f9SKrishna Gudipati 
407*a36c61f9SKrishna Gudipati /*
408*a36c61f9SKrishna Gudipati  *	Port speed settings. Each specific speed is a bit field. Use multiple
409*a36c61f9SKrishna Gudipati  *	bits to specify speeds to be selected for auto-negotiation.
410*a36c61f9SKrishna Gudipati  */
411*a36c61f9SKrishna Gudipati enum bfa_port_speed {
412*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_UNKNOWN = 0,
413*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_1GBPS	= 1,
414*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_2GBPS	= 2,
415*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_4GBPS	= 4,
416*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_8GBPS	= 8,
417*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_10GBPS	= 10,
418*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_16GBPS	= 16,
419*a36c61f9SKrishna Gudipati 	BFA_PORT_SPEED_AUTO =
420*a36c61f9SKrishna Gudipati 		(BFA_PORT_SPEED_1GBPS | BFA_PORT_SPEED_2GBPS |
421*a36c61f9SKrishna Gudipati 		 BFA_PORT_SPEED_4GBPS | BFA_PORT_SPEED_8GBPS),
422*a36c61f9SKrishna Gudipati };
423*a36c61f9SKrishna Gudipati #define bfa_port_speed_t enum bfa_port_speed
424*a36c61f9SKrishna Gudipati 
425*a36c61f9SKrishna Gudipati enum {
426*a36c61f9SKrishna Gudipati 	BFA_BOOT_BOOTLUN_MAX = 4,       /*  maximum boot lun per IOC */
427*a36c61f9SKrishna Gudipati 	BFA_PREBOOT_BOOTLUN_MAX = 8,    /*  maximum preboot lun per IOC */
428*a36c61f9SKrishna Gudipati };
429*a36c61f9SKrishna Gudipati 
430*a36c61f9SKrishna Gudipati #define BOOT_CFG_REV1   1
431*a36c61f9SKrishna Gudipati #define BOOT_CFG_VLAN   1
432*a36c61f9SKrishna Gudipati 
433*a36c61f9SKrishna Gudipati /**
434*a36c61f9SKrishna Gudipati  *      Boot options setting. Boot options setting determines from where
435*a36c61f9SKrishna Gudipati  *      to get the boot lun information
436*a36c61f9SKrishna Gudipati  */
437*a36c61f9SKrishna Gudipati enum bfa_boot_bootopt {
438*a36c61f9SKrishna Gudipati 	BFA_BOOT_AUTO_DISCOVER  = 0, /*  Boot from blun provided by fabric */
439*a36c61f9SKrishna Gudipati 	BFA_BOOT_STORED_BLUN = 1, /*  Boot from bluns stored in flash */
440*a36c61f9SKrishna Gudipati 	BFA_BOOT_FIRST_LUN      = 2, /*  Boot from first discovered blun */
441*a36c61f9SKrishna Gudipati 	BFA_BOOT_PBC    = 3, /*  Boot from pbc configured blun  */
442*a36c61f9SKrishna Gudipati };
443*a36c61f9SKrishna Gudipati 
444*a36c61f9SKrishna Gudipati #pragma pack(1)
445*a36c61f9SKrishna Gudipati /**
446*a36c61f9SKrishna Gudipati  * Boot lun information.
447*a36c61f9SKrishna Gudipati  */
448*a36c61f9SKrishna Gudipati struct bfa_boot_bootlun_s {
449*a36c61f9SKrishna Gudipati 	wwn_t   pwwn;   /*  port wwn of target */
450*a36c61f9SKrishna Gudipati 	lun_t   lun;    /*  64-bit lun */
451*a36c61f9SKrishna Gudipati };
452*a36c61f9SKrishna Gudipati #pragma pack()
453*a36c61f9SKrishna Gudipati 
454*a36c61f9SKrishna Gudipati /**
455*a36c61f9SKrishna Gudipati  * BOOT boot configuraton
456*a36c61f9SKrishna Gudipati  */
457*a36c61f9SKrishna Gudipati struct bfa_boot_pbc_s {
458*a36c61f9SKrishna Gudipati 	u8              enable;         /*  enable/disable SAN boot */
459*a36c61f9SKrishna Gudipati 	u8              speed;          /*  boot speed settings */
460*a36c61f9SKrishna Gudipati 	u8              topology;       /*  boot topology setting */
461*a36c61f9SKrishna Gudipati 	u8              rsvd1;
462*a36c61f9SKrishna Gudipati 	u32     nbluns;         /*  number of boot luns */
463*a36c61f9SKrishna Gudipati 	struct bfa_boot_bootlun_s pblun[BFA_PREBOOT_BOOTLUN_MAX];
464*a36c61f9SKrishna Gudipati };
465*a36c61f9SKrishna Gudipati 
466*a36c61f9SKrishna Gudipati #endif /* __BFA_DEFS_H__ */
467