1f844a0eaSJeff Kirsher /*
2f844a0eaSJeff Kirsher  * Linux network driver for Brocade Converged Network Adapter.
3f844a0eaSJeff Kirsher  *
4f844a0eaSJeff Kirsher  * This program is free software; you can redistribute it and/or modify it
5f844a0eaSJeff Kirsher  * under the terms of the GNU General Public License (GPL) Version 2 as
6f844a0eaSJeff Kirsher  * published by the Free Software Foundation
7f844a0eaSJeff Kirsher  *
8f844a0eaSJeff Kirsher  * This program is distributed in the hope that it will be useful, but
9f844a0eaSJeff Kirsher  * WITHOUT ANY WARRANTY; without even the implied warranty of
10f844a0eaSJeff Kirsher  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11f844a0eaSJeff Kirsher  * General Public License for more details.
12f844a0eaSJeff Kirsher  */
13f844a0eaSJeff Kirsher /*
14f844a0eaSJeff Kirsher  * Copyright (c) 2005-2010 Brocade Communications Systems, Inc.
15f844a0eaSJeff Kirsher  * All rights reserved
16f844a0eaSJeff Kirsher  * www.brocade.com
17f844a0eaSJeff Kirsher  */
18f844a0eaSJeff Kirsher #ifndef __BFA_DEFS_MFG_COMM_H__
19f844a0eaSJeff Kirsher #define __BFA_DEFS_MFG_COMM_H__
20f844a0eaSJeff Kirsher 
21f844a0eaSJeff Kirsher #include "cna.h"
22f844a0eaSJeff Kirsher 
23f844a0eaSJeff Kirsher /**
24f844a0eaSJeff Kirsher  * Manufacturing block version
25f844a0eaSJeff Kirsher  */
26f844a0eaSJeff Kirsher #define BFA_MFG_VERSION				2
27f844a0eaSJeff Kirsher #define BFA_MFG_VERSION_UNINIT			0xFF
28f844a0eaSJeff Kirsher 
29f844a0eaSJeff Kirsher /**
30f844a0eaSJeff Kirsher  * Manufacturing block encrypted version
31f844a0eaSJeff Kirsher  */
32f844a0eaSJeff Kirsher #define BFA_MFG_ENC_VER				2
33f844a0eaSJeff Kirsher 
34f844a0eaSJeff Kirsher /**
35f844a0eaSJeff Kirsher  * Manufacturing block version 1 length
36f844a0eaSJeff Kirsher  */
37f844a0eaSJeff Kirsher #define BFA_MFG_VER1_LEN			128
38f844a0eaSJeff Kirsher 
39f844a0eaSJeff Kirsher /**
40f844a0eaSJeff Kirsher  * Manufacturing block header length
41f844a0eaSJeff Kirsher  */
42f844a0eaSJeff Kirsher #define BFA_MFG_HDR_LEN				4
43f844a0eaSJeff Kirsher 
44f844a0eaSJeff Kirsher #define BFA_MFG_SERIALNUM_SIZE			11
45f844a0eaSJeff Kirsher #define STRSZ(_n)				(((_n) + 4) & ~3)
46f844a0eaSJeff Kirsher 
47f844a0eaSJeff Kirsher /**
48f844a0eaSJeff Kirsher  * Manufacturing card type
49f844a0eaSJeff Kirsher  */
50f844a0eaSJeff Kirsher enum {
51f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_CB_MAX  = 825,      /*!< Crossbow card type max	*/
52f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_FC8P2   = 825,      /*!< 8G 2port FC card		*/
53f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_FC8P1   = 815,      /*!< 8G 1port FC card		*/
54f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_FC4P2   = 425,      /*!< 4G 2port FC card		*/
55f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_FC4P1   = 415,      /*!< 4G 1port FC card		*/
56f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_CNA10P2 = 1020,     /*!< 10G 2port CNA card	*/
57f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_CNA10P1 = 1010,     /*!< 10G 1port CNA card	*/
58f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_JAYHAWK = 804,	 /*!< Jayhawk mezz card		*/
59f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_WANCHESE = 1007,	 /*!< Wanchese mezz card	*/
60f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_ASTRA    = 807,	 /*!< Astra mezz card		*/
61f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_LIGHTNING_P0 = 902, /*!< Lightning mezz card - old	*/
62f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_LIGHTNING = 1741,	 /*!< Lightning mezz card	*/
63f844a0eaSJeff Kirsher 	BFA_MFG_TYPE_INVALID = 0,	 /*!< Invalid card type		*/
64f844a0eaSJeff Kirsher };
65f844a0eaSJeff Kirsher 
66f844a0eaSJeff Kirsher #pragma pack(1)
67f844a0eaSJeff Kirsher 
68f844a0eaSJeff Kirsher /**
69f844a0eaSJeff Kirsher  * Check if 1-port card
70f844a0eaSJeff Kirsher  */
71f844a0eaSJeff Kirsher #define bfa_mfg_is_1port(type) (( \
72f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_FC8P1 || \
73f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_FC4P1 || \
74f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_CNA10P1))
75f844a0eaSJeff Kirsher 
76f844a0eaSJeff Kirsher /**
77f844a0eaSJeff Kirsher  * Check if Mezz card
78f844a0eaSJeff Kirsher  */
79f844a0eaSJeff Kirsher #define bfa_mfg_is_mezz(type) (( \
80f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_JAYHAWK || \
81f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_WANCHESE || \
82f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_ASTRA || \
83f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_LIGHTNING_P0 || \
84f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_LIGHTNING))
85f844a0eaSJeff Kirsher 
86f844a0eaSJeff Kirsher /**
87f844a0eaSJeff Kirsher  * Check if card type valid
88f844a0eaSJeff Kirsher  */
89f844a0eaSJeff Kirsher #define bfa_mfg_is_card_type_valid(type) (( \
90f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_FC8P2 || \
91f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_FC8P1 || \
92f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_FC4P2 || \
93f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_FC4P1 || \
94f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_CNA10P2 || \
95f844a0eaSJeff Kirsher 	(type) == BFA_MFG_TYPE_CNA10P1 || \
96f844a0eaSJeff Kirsher 	bfa_mfg_is_mezz(type)))
97f844a0eaSJeff Kirsher 
98f844a0eaSJeff Kirsher #define bfa_mfg_adapter_prop_init_flash(card_type, prop)	\
99f844a0eaSJeff Kirsher do {								\
100f844a0eaSJeff Kirsher 	switch ((card_type)) {					\
101f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_FC8P2:				\
102f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_JAYHAWK:				\
103f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_ASTRA:				\
104f844a0eaSJeff Kirsher 		(prop) = BFI_ADAPTER_SETP(NPORTS, 2) |		\
105f844a0eaSJeff Kirsher 			BFI_ADAPTER_SETP(SPEED, 8);		\
106f844a0eaSJeff Kirsher 		break;						\
107f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_FC8P1:				\
108f844a0eaSJeff Kirsher 		(prop) = BFI_ADAPTER_SETP(NPORTS, 1) |		\
109f844a0eaSJeff Kirsher 			BFI_ADAPTER_SETP(SPEED, 8);		\
110f844a0eaSJeff Kirsher 		break;						\
111f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_FC4P2:				\
112f844a0eaSJeff Kirsher 		(prop) = BFI_ADAPTER_SETP(NPORTS, 2) |		\
113f844a0eaSJeff Kirsher 			BFI_ADAPTER_SETP(SPEED, 4);		\
114f844a0eaSJeff Kirsher 		break;						\
115f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_FC4P1:				\
116f844a0eaSJeff Kirsher 		(prop) = BFI_ADAPTER_SETP(NPORTS, 1) |		\
117f844a0eaSJeff Kirsher 			BFI_ADAPTER_SETP(SPEED, 4);		\
118f844a0eaSJeff Kirsher 		break;						\
119f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_CNA10P2:				\
120f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_WANCHESE:				\
121f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_LIGHTNING_P0:				\
122f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_LIGHTNING:				\
123f844a0eaSJeff Kirsher 		(prop) = BFI_ADAPTER_SETP(NPORTS, 2);		\
124f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(SPEED, 10);		\
125f844a0eaSJeff Kirsher 		break;						\
126f844a0eaSJeff Kirsher 	case BFA_MFG_TYPE_CNA10P1:				\
127f844a0eaSJeff Kirsher 		(prop) = BFI_ADAPTER_SETP(NPORTS, 1);		\
128f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(SPEED, 10);		\
129f844a0eaSJeff Kirsher 		break;						\
130f844a0eaSJeff Kirsher 	default:						\
131f844a0eaSJeff Kirsher 		(prop) = BFI_ADAPTER_UNSUPP;			\
132f844a0eaSJeff Kirsher 	}							\
133f844a0eaSJeff Kirsher } while (0)
134f844a0eaSJeff Kirsher 
135f844a0eaSJeff Kirsher enum {
136f844a0eaSJeff Kirsher 	CB_GPIO_TTV	= (1),		/*!< TTV debug capable cards	*/
137f844a0eaSJeff Kirsher 	CB_GPIO_FC8P2   = (2),		/*!< 8G 2port FC card		*/
138f844a0eaSJeff Kirsher 	CB_GPIO_FC8P1   = (3),		/*!< 8G 1port FC card		*/
139f844a0eaSJeff Kirsher 	CB_GPIO_FC4P2   = (4),		/*!< 4G 2port FC card		*/
140f844a0eaSJeff Kirsher 	CB_GPIO_FC4P1   = (5),		/*!< 4G 1port FC card		*/
141f844a0eaSJeff Kirsher 	CB_GPIO_DFLY    = (6),		/*!< 8G 2port FC mezzanine card	*/
142f844a0eaSJeff Kirsher 	CB_GPIO_PROTO   = (1 << 7)	/*!< 8G 2port FC prototypes	*/
143f844a0eaSJeff Kirsher };
144f844a0eaSJeff Kirsher 
145f844a0eaSJeff Kirsher #define bfa_mfg_adapter_prop_init_gpio(gpio, card_type, prop)	\
146f844a0eaSJeff Kirsher do {								\
147f844a0eaSJeff Kirsher 	if ((gpio) & CB_GPIO_PROTO) {				\
148f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_PROTO;			\
149f844a0eaSJeff Kirsher 		(gpio) &= ~CB_GPIO_PROTO;			\
150f844a0eaSJeff Kirsher 	}							\
151f844a0eaSJeff Kirsher 	switch ((gpio)) {					\
152f844a0eaSJeff Kirsher 	case CB_GPIO_TTV:					\
153f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_TTV;			\
154f844a0eaSJeff Kirsher 	case CB_GPIO_DFLY:					\
155f844a0eaSJeff Kirsher 	case CB_GPIO_FC8P2:					\
156f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(NPORTS, 2);		\
157f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(SPEED, 8);		\
158f844a0eaSJeff Kirsher 		(card_type) = BFA_MFG_TYPE_FC8P2;		\
159f844a0eaSJeff Kirsher 		break;						\
160f844a0eaSJeff Kirsher 	case CB_GPIO_FC8P1:					\
161f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(NPORTS, 1);		\
162f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(SPEED, 8);		\
163f844a0eaSJeff Kirsher 		(card_type) = BFA_MFG_TYPE_FC8P1;		\
164f844a0eaSJeff Kirsher 		break;						\
165f844a0eaSJeff Kirsher 	case CB_GPIO_FC4P2:					\
166f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(NPORTS, 2);		\
167f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(SPEED, 4);		\
168f844a0eaSJeff Kirsher 		(card_type) = BFA_MFG_TYPE_FC4P2;		\
169f844a0eaSJeff Kirsher 		break;						\
170f844a0eaSJeff Kirsher 	case CB_GPIO_FC4P1:					\
171f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(NPORTS, 1);		\
172f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_SETP(SPEED, 4);		\
173f844a0eaSJeff Kirsher 		(card_type) = BFA_MFG_TYPE_FC4P1;		\
174f844a0eaSJeff Kirsher 		break;						\
175f844a0eaSJeff Kirsher 	default:						\
176f844a0eaSJeff Kirsher 		(prop) |= BFI_ADAPTER_UNSUPP;			\
177f844a0eaSJeff Kirsher 		(card_type) = BFA_MFG_TYPE_INVALID;		\
178f844a0eaSJeff Kirsher 	}							\
179f844a0eaSJeff Kirsher } while (0)
180f844a0eaSJeff Kirsher 
181f844a0eaSJeff Kirsher /**
182f844a0eaSJeff Kirsher  * VPD data length
183f844a0eaSJeff Kirsher  */
184f844a0eaSJeff Kirsher #define BFA_MFG_VPD_LEN			512
185f844a0eaSJeff Kirsher #define BFA_MFG_VPD_LEN_INVALID		0
186f844a0eaSJeff Kirsher 
187f844a0eaSJeff Kirsher #define BFA_MFG_VPD_PCI_HDR_OFF		137
188f844a0eaSJeff Kirsher #define BFA_MFG_VPD_PCI_VER_MASK	0x07	/*!< version mask 3 bits */
189f844a0eaSJeff Kirsher #define BFA_MFG_VPD_PCI_VDR_MASK	0xf8	/*!< vendor mask 5 bits */
190f844a0eaSJeff Kirsher 
191f844a0eaSJeff Kirsher /**
192f844a0eaSJeff Kirsher  * VPD vendor tag
193f844a0eaSJeff Kirsher  */
194f844a0eaSJeff Kirsher enum {
195f844a0eaSJeff Kirsher 	BFA_MFG_VPD_UNKNOWN	= 0,     /*!< vendor unknown		*/
196f844a0eaSJeff Kirsher 	BFA_MFG_VPD_IBM		= 1,     /*!< vendor IBM		*/
197f844a0eaSJeff Kirsher 	BFA_MFG_VPD_HP		= 2,     /*!< vendor HP			*/
198f844a0eaSJeff Kirsher 	BFA_MFG_VPD_DELL	= 3,     /*!< vendor DELL		*/
199f844a0eaSJeff Kirsher 	BFA_MFG_VPD_PCI_IBM	= 0x08,  /*!< PCI VPD IBM		*/
200f844a0eaSJeff Kirsher 	BFA_MFG_VPD_PCI_HP	= 0x10,  /*!< PCI VPD HP		*/
201f844a0eaSJeff Kirsher 	BFA_MFG_VPD_PCI_DELL	= 0x20,  /*!< PCI VPD DELL		*/
202f844a0eaSJeff Kirsher 	BFA_MFG_VPD_PCI_BRCD	= 0xf8,  /*!< PCI VPD Brocade		*/
203f844a0eaSJeff Kirsher };
204f844a0eaSJeff Kirsher 
205f844a0eaSJeff Kirsher /**
206f844a0eaSJeff Kirsher  * @brief BFA adapter flash vpd data definition.
207f844a0eaSJeff Kirsher  *
208f844a0eaSJeff Kirsher  * All numerical fields are in big-endian format.
209f844a0eaSJeff Kirsher  */
210f844a0eaSJeff Kirsher struct bfa_mfg_vpd {
211f844a0eaSJeff Kirsher 	u8		version;	/*!< vpd data version */
212f844a0eaSJeff Kirsher 	u8		vpd_sig[3];	/*!< characters 'V', 'P', 'D' */
213f844a0eaSJeff Kirsher 	u8		chksum;		/*!< u8 checksum */
214f844a0eaSJeff Kirsher 	u8		vendor;		/*!< vendor */
215f844a0eaSJeff Kirsher 	u8	len;		/*!< vpd data length excluding header */
216f844a0eaSJeff Kirsher 	u8	rsv;
217f844a0eaSJeff Kirsher 	u8		data[BFA_MFG_VPD_LEN];	/*!< vpd data */
218f844a0eaSJeff Kirsher };
219f844a0eaSJeff Kirsher 
220f844a0eaSJeff Kirsher #pragma pack()
221f844a0eaSJeff Kirsher 
222f844a0eaSJeff Kirsher #endif /* __BFA_DEFS_MFG_H__ */
223