1/*
2 * Linux network driver for QLogic BR-series Converged Network Adapter.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License (GPL) Version 2 as
6 * published by the Free Software Foundation
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 * General Public License for more details.
12 */
13/*
14 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
15 * Copyright (c) 2014-2015 QLogic Corporation
16 * All rights reserved
17 * www.qlogic.com
18 */
19#ifndef __BFA_DEFS_MFG_COMM_H__
20#define __BFA_DEFS_MFG_COMM_H__
21
22#include "bfa_defs.h"
23
24/* Manufacturing block version */
25#define BFA_MFG_VERSION				3
26#define BFA_MFG_VERSION_UNINIT			0xFF
27
28/* Manufacturing block encrypted version */
29#define BFA_MFG_ENC_VER				2
30
31/* Manufacturing block version 1 length */
32#define BFA_MFG_VER1_LEN			128
33
34/* Manufacturing block header length */
35#define BFA_MFG_HDR_LEN				4
36
37#define BFA_MFG_SERIALNUM_SIZE			11
38#define STRSZ(_n)				(((_n) + 4) & ~3)
39
40/* Manufacturing card type */
41enum {
42	BFA_MFG_TYPE_CB_MAX  = 825,      /*!< Crossbow card type max	*/
43	BFA_MFG_TYPE_FC8P2   = 825,      /*!< 8G 2port FC card		*/
44	BFA_MFG_TYPE_FC8P1   = 815,      /*!< 8G 1port FC card		*/
45	BFA_MFG_TYPE_FC4P2   = 425,      /*!< 4G 2port FC card		*/
46	BFA_MFG_TYPE_FC4P1   = 415,      /*!< 4G 1port FC card		*/
47	BFA_MFG_TYPE_CNA10P2 = 1020,     /*!< 10G 2port CNA card	*/
48	BFA_MFG_TYPE_CNA10P1 = 1010,     /*!< 10G 1port CNA card	*/
49	BFA_MFG_TYPE_JAYHAWK = 804,	 /*!< Jayhawk mezz card		*/
50	BFA_MFG_TYPE_WANCHESE = 1007,	 /*!< Wanchese mezz card	*/
51	BFA_MFG_TYPE_ASTRA    = 807,	 /*!< Astra mezz card		*/
52	BFA_MFG_TYPE_LIGHTNING_P0 = 902, /*!< Lightning mezz card - old	*/
53	BFA_MFG_TYPE_LIGHTNING = 1741,	 /*!< Lightning mezz card	*/
54	BFA_MFG_TYPE_PROWLER_F = 1560,	 /*!< Prowler FC only cards	*/
55	BFA_MFG_TYPE_PROWLER_N = 1410,	 /*!< Prowler NIC only cards	*/
56	BFA_MFG_TYPE_PROWLER_C = 1710,	 /*!< Prowler CNA only cards	*/
57	BFA_MFG_TYPE_PROWLER_D = 1860,	 /*!< Prowler Dual cards	*/
58	BFA_MFG_TYPE_CHINOOK   = 1867,	 /*!< Chinook cards		*/
59	BFA_MFG_TYPE_INVALID = 0,	 /*!< Invalid card type		*/
60};
61
62#pragma pack(1)
63
64/* Check if Mezz card */
65#define bfa_mfg_is_mezz(type) (( \
66	(type) == BFA_MFG_TYPE_JAYHAWK || \
67	(type) == BFA_MFG_TYPE_WANCHESE || \
68	(type) == BFA_MFG_TYPE_ASTRA || \
69	(type) == BFA_MFG_TYPE_LIGHTNING_P0 || \
70	(type) == BFA_MFG_TYPE_LIGHTNING || \
71	(type) == BFA_MFG_TYPE_CHINOOK))
72
73enum {
74	CB_GPIO_TTV	= (1),		/*!< TTV debug capable cards	*/
75	CB_GPIO_FC8P2   = (2),		/*!< 8G 2port FC card		*/
76	CB_GPIO_FC8P1   = (3),		/*!< 8G 1port FC card		*/
77	CB_GPIO_FC4P2   = (4),		/*!< 4G 2port FC card		*/
78	CB_GPIO_FC4P1   = (5),		/*!< 4G 1port FC card		*/
79	CB_GPIO_DFLY    = (6),		/*!< 8G 2port FC mezzanine card	*/
80	CB_GPIO_PROTO   = (1 << 7)	/*!< 8G 2port FC prototypes	*/
81};
82
83#define bfa_mfg_adapter_prop_init_gpio(gpio, card_type, prop)	\
84do {								\
85	if ((gpio) & CB_GPIO_PROTO) {				\
86		(prop) |= BFI_ADAPTER_PROTO;			\
87		(gpio) &= ~CB_GPIO_PROTO;			\
88	}							\
89	switch ((gpio)) {					\
90	case CB_GPIO_TTV:					\
91		(prop) |= BFI_ADAPTER_TTV;			\
92	case CB_GPIO_DFLY:					\
93	case CB_GPIO_FC8P2:					\
94		(prop) |= BFI_ADAPTER_SETP(NPORTS, 2);		\
95		(prop) |= BFI_ADAPTER_SETP(SPEED, 8);		\
96		(card_type) = BFA_MFG_TYPE_FC8P2;		\
97		break;						\
98	case CB_GPIO_FC8P1:					\
99		(prop) |= BFI_ADAPTER_SETP(NPORTS, 1);		\
100		(prop) |= BFI_ADAPTER_SETP(SPEED, 8);		\
101		(card_type) = BFA_MFG_TYPE_FC8P1;		\
102		break;						\
103	case CB_GPIO_FC4P2:					\
104		(prop) |= BFI_ADAPTER_SETP(NPORTS, 2);		\
105		(prop) |= BFI_ADAPTER_SETP(SPEED, 4);		\
106		(card_type) = BFA_MFG_TYPE_FC4P2;		\
107		break;						\
108	case CB_GPIO_FC4P1:					\
109		(prop) |= BFI_ADAPTER_SETP(NPORTS, 1);		\
110		(prop) |= BFI_ADAPTER_SETP(SPEED, 4);		\
111		(card_type) = BFA_MFG_TYPE_FC4P1;		\
112		break;						\
113	default:						\
114		(prop) |= BFI_ADAPTER_UNSUPP;			\
115		(card_type) = BFA_MFG_TYPE_INVALID;		\
116	}							\
117} while (0)
118
119/* VPD data length */
120#define BFA_MFG_VPD_LEN			512
121#define BFA_MFG_VPD_LEN_INVALID		0
122
123#define BFA_MFG_VPD_PCI_HDR_OFF		137
124#define BFA_MFG_VPD_PCI_VER_MASK	0x07	/*!< version mask 3 bits */
125#define BFA_MFG_VPD_PCI_VDR_MASK	0xf8	/*!< vendor mask 5 bits */
126
127/* VPD vendor tag */
128enum {
129	BFA_MFG_VPD_UNKNOWN	= 0,     /*!< vendor unknown		*/
130	BFA_MFG_VPD_IBM		= 1,     /*!< vendor IBM		*/
131	BFA_MFG_VPD_HP		= 2,     /*!< vendor HP			*/
132	BFA_MFG_VPD_DELL	= 3,     /*!< vendor DELL		*/
133	BFA_MFG_VPD_PCI_IBM	= 0x08,  /*!< PCI VPD IBM		*/
134	BFA_MFG_VPD_PCI_HP	= 0x10,  /*!< PCI VPD HP		*/
135	BFA_MFG_VPD_PCI_DELL	= 0x20,  /*!< PCI VPD DELL		*/
136	BFA_MFG_VPD_PCI_BRCD	= 0xf8,  /*!< PCI VPD Brocade		*/
137};
138
139/* BFA adapter flash vpd data definition.
140 *
141 * All numerical fields are in big-endian format.
142 */
143struct bfa_mfg_vpd {
144	u8		version;	/*!< vpd data version */
145	u8		vpd_sig[3];	/*!< characters 'V', 'P', 'D' */
146	u8		chksum;		/*!< u8 checksum */
147	u8		vendor;		/*!< vendor */
148	u8	len;		/*!< vpd data length excluding header */
149	u8	rsv;
150	u8		data[BFA_MFG_VPD_LEN];	/*!< vpd data */
151};
152
153#pragma pack()
154
155#endif /* __BFA_DEFS_MFG_H__ */
156