Merge branch 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6
[pandora-kernel.git] / drivers / net / bna / bfa_defs_mfg_comm.h
1 /*
2  * Linux network driver for Brocade 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-2010 Brocade Communications Systems, Inc.
15  * All rights reserved
16  * www.brocade.com
17  */
18 #ifndef __BFA_DEFS_MFG_COMM_H__
19 #define __BFA_DEFS_MFG_COMM_H__
20
21 #include "cna.h"
22
23 /**
24  * Manufacturing block version
25  */
26 #define BFA_MFG_VERSION                         2
27 #define BFA_MFG_VERSION_UNINIT                  0xFF
28
29 /**
30  * Manufacturing block encrypted version
31  */
32 #define BFA_MFG_ENC_VER                         2
33
34 /**
35  * Manufacturing block version 1 length
36  */
37 #define BFA_MFG_VER1_LEN                        128
38
39 /**
40  * Manufacturing block header length
41  */
42 #define BFA_MFG_HDR_LEN                         4
43
44 #define BFA_MFG_SERIALNUM_SIZE                  11
45 #define STRSZ(_n)                               (((_n) + 4) & ~3)
46
47 /**
48  * Manufacturing card type
49  */
50 enum {
51         BFA_MFG_TYPE_CB_MAX  = 825,      /*!< Crossbow card type max    */
52         BFA_MFG_TYPE_FC8P2   = 825,      /*!< 8G 2port FC card          */
53         BFA_MFG_TYPE_FC8P1   = 815,      /*!< 8G 1port FC card          */
54         BFA_MFG_TYPE_FC4P2   = 425,      /*!< 4G 2port FC card          */
55         BFA_MFG_TYPE_FC4P1   = 415,      /*!< 4G 1port FC card          */
56         BFA_MFG_TYPE_CNA10P2 = 1020,     /*!< 10G 2port CNA card        */
57         BFA_MFG_TYPE_CNA10P1 = 1010,     /*!< 10G 1port CNA card        */
58         BFA_MFG_TYPE_JAYHAWK = 804,      /*!< Jayhawk mezz card         */
59         BFA_MFG_TYPE_WANCHESE = 1007,    /*!< Wanchese mezz card        */
60         BFA_MFG_TYPE_ASTRA    = 807,     /*!< Astra mezz card           */
61         BFA_MFG_TYPE_LIGHTNING_P0 = 902, /*!< Lightning mezz card - old */
62         BFA_MFG_TYPE_LIGHTNING = 1741,   /*!< Lightning mezz card       */
63         BFA_MFG_TYPE_INVALID = 0,        /*!< Invalid card type         */
64 };
65
66 #pragma pack(1)
67
68 /**
69  * Check if 1-port card
70  */
71 #define bfa_mfg_is_1port(type) (( \
72         (type) == BFA_MFG_TYPE_FC8P1 || \
73         (type) == BFA_MFG_TYPE_FC4P1 || \
74         (type) == BFA_MFG_TYPE_CNA10P1))
75
76 /**
77  * Check if Mezz card
78  */
79 #define bfa_mfg_is_mezz(type) (( \
80         (type) == BFA_MFG_TYPE_JAYHAWK || \
81         (type) == BFA_MFG_TYPE_WANCHESE || \
82         (type) == BFA_MFG_TYPE_ASTRA || \
83         (type) == BFA_MFG_TYPE_LIGHTNING_P0 || \
84         (type) == BFA_MFG_TYPE_LIGHTNING))
85
86 /**
87  * Check if card type valid
88  */
89 #define bfa_mfg_is_card_type_valid(type) (( \
90         (type) == BFA_MFG_TYPE_FC8P2 || \
91         (type) == BFA_MFG_TYPE_FC8P1 || \
92         (type) == BFA_MFG_TYPE_FC4P2 || \
93         (type) == BFA_MFG_TYPE_FC4P1 || \
94         (type) == BFA_MFG_TYPE_CNA10P2 || \
95         (type) == BFA_MFG_TYPE_CNA10P1 || \
96         bfa_mfg_is_mezz(type)))
97
98 /**
99  * Check if the card having old wwn/mac handling
100  */
101 #define bfa_mfg_is_old_wwn_mac_model(type) (( \
102         (type) == BFA_MFG_TYPE_FC8P2 || \
103         (type) == BFA_MFG_TYPE_FC8P1 || \
104         (type) == BFA_MFG_TYPE_FC4P2 || \
105         (type) == BFA_MFG_TYPE_FC4P1 || \
106         (type) == BFA_MFG_TYPE_CNA10P2 || \
107         (type) == BFA_MFG_TYPE_CNA10P1 || \
108         (type) == BFA_MFG_TYPE_JAYHAWK || \
109         (type) == BFA_MFG_TYPE_WANCHESE))
110
111 #define bfa_mfg_increment_wwn_mac(m, i)                         \
112 do {                                                            \
113         u32 t = ((m)[0] << 16) | ((m)[1] << 8) | (m)[2];        \
114         t += (i);                                               \
115         (m)[0] = (t >> 16) & 0xFF;                              \
116         (m)[1] = (t >> 8) & 0xFF;                               \
117         (m)[2] = t & 0xFF;                                      \
118 } while (0)
119
120 #define bfa_mfg_adapter_prop_init_flash(card_type, prop)        \
121 do {                                                            \
122         switch ((card_type)) {                                  \
123         case BFA_MFG_TYPE_FC8P2:                                \
124         case BFA_MFG_TYPE_JAYHAWK:                              \
125         case BFA_MFG_TYPE_ASTRA:                                \
126                 (prop) = BFI_ADAPTER_SETP(NPORTS, 2) |          \
127                         BFI_ADAPTER_SETP(SPEED, 8);             \
128                 break;                                          \
129         case BFA_MFG_TYPE_FC8P1:                                \
130                 (prop) = BFI_ADAPTER_SETP(NPORTS, 1) |          \
131                         BFI_ADAPTER_SETP(SPEED, 8);             \
132                 break;                                          \
133         case BFA_MFG_TYPE_FC4P2:                                \
134                 (prop) = BFI_ADAPTER_SETP(NPORTS, 2) |          \
135                         BFI_ADAPTER_SETP(SPEED, 4);             \
136                 break;                                          \
137         case BFA_MFG_TYPE_FC4P1:                                \
138                 (prop) = BFI_ADAPTER_SETP(NPORTS, 1) |          \
139                         BFI_ADAPTER_SETP(SPEED, 4);             \
140                 break;                                          \
141         case BFA_MFG_TYPE_CNA10P2:                              \
142         case BFA_MFG_TYPE_WANCHESE:                             \
143         case BFA_MFG_TYPE_LIGHTNING_P0:                         \
144         case BFA_MFG_TYPE_LIGHTNING:                            \
145                 (prop) = BFI_ADAPTER_SETP(NPORTS, 2);           \
146                 (prop) |= BFI_ADAPTER_SETP(SPEED, 10);          \
147                 break;                                          \
148         case BFA_MFG_TYPE_CNA10P1:                              \
149                 (prop) = BFI_ADAPTER_SETP(NPORTS, 1);           \
150                 (prop) |= BFI_ADAPTER_SETP(SPEED, 10);          \
151                 break;                                          \
152         default:                                                \
153                 (prop) = BFI_ADAPTER_UNSUPP;                    \
154         }                                                       \
155 } while (0)
156
157 enum {
158         CB_GPIO_TTV     = (1),          /*!< TTV debug capable cards    */
159         CB_GPIO_FC8P2   = (2),          /*!< 8G 2port FC card           */
160         CB_GPIO_FC8P1   = (3),          /*!< 8G 1port FC card           */
161         CB_GPIO_FC4P2   = (4),          /*!< 4G 2port FC card           */
162         CB_GPIO_FC4P1   = (5),          /*!< 4G 1port FC card           */
163         CB_GPIO_DFLY    = (6),          /*!< 8G 2port FC mezzanine card */
164         CB_GPIO_PROTO   = (1 << 7)      /*!< 8G 2port FC prototypes     */
165 };
166
167 #define bfa_mfg_adapter_prop_init_gpio(gpio, card_type, prop)   \
168 do {                                                            \
169         if ((gpio) & CB_GPIO_PROTO) {                           \
170                 (prop) |= BFI_ADAPTER_PROTO;                    \
171                 (gpio) &= ~CB_GPIO_PROTO;                       \
172         }                                                       \
173         switch ((gpio)) {                                       \
174         case CB_GPIO_TTV:                                       \
175                 (prop) |= BFI_ADAPTER_TTV;                      \
176         case CB_GPIO_DFLY:                                      \
177         case CB_GPIO_FC8P2:                                     \
178                 (prop) |= BFI_ADAPTER_SETP(NPORTS, 2);          \
179                 (prop) |= BFI_ADAPTER_SETP(SPEED, 8);           \
180                 (card_type) = BFA_MFG_TYPE_FC8P2;               \
181                 break;                                          \
182         case CB_GPIO_FC8P1:                                     \
183                 (prop) |= BFI_ADAPTER_SETP(NPORTS, 1);          \
184                 (prop) |= BFI_ADAPTER_SETP(SPEED, 8);           \
185                 (card_type) = BFA_MFG_TYPE_FC8P1;               \
186                 break;                                          \
187         case CB_GPIO_FC4P2:                                     \
188                 (prop) |= BFI_ADAPTER_SETP(NPORTS, 2);          \
189                 (prop) |= BFI_ADAPTER_SETP(SPEED, 4);           \
190                 (card_type) = BFA_MFG_TYPE_FC4P2;               \
191                 break;                                          \
192         case CB_GPIO_FC4P1:                                     \
193                 (prop) |= BFI_ADAPTER_SETP(NPORTS, 1);          \
194                 (prop) |= BFI_ADAPTER_SETP(SPEED, 4);           \
195                 (card_type) = BFA_MFG_TYPE_FC4P1;               \
196                 break;                                          \
197         default:                                                \
198                 (prop) |= BFI_ADAPTER_UNSUPP;                   \
199                 (card_type) = BFA_MFG_TYPE_INVALID;             \
200         }                                                       \
201 } while (0)
202
203 /**
204  * VPD data length
205  */
206 #define BFA_MFG_VPD_LEN                 512
207 #define BFA_MFG_VPD_LEN_INVALID         0
208
209 #define BFA_MFG_VPD_PCI_HDR_OFF         137
210 #define BFA_MFG_VPD_PCI_VER_MASK        0x07    /*!< version mask 3 bits */
211 #define BFA_MFG_VPD_PCI_VDR_MASK        0xf8    /*!< vendor mask 5 bits */
212
213 /**
214  * VPD vendor tag
215  */
216 enum {
217         BFA_MFG_VPD_UNKNOWN     = 0,     /*!< vendor unknown            */
218         BFA_MFG_VPD_IBM         = 1,     /*!< vendor IBM                */
219         BFA_MFG_VPD_HP          = 2,     /*!< vendor HP                 */
220         BFA_MFG_VPD_DELL        = 3,     /*!< vendor DELL               */
221         BFA_MFG_VPD_PCI_IBM     = 0x08,  /*!< PCI VPD IBM               */
222         BFA_MFG_VPD_PCI_HP      = 0x10,  /*!< PCI VPD HP                */
223         BFA_MFG_VPD_PCI_DELL    = 0x20,  /*!< PCI VPD DELL              */
224         BFA_MFG_VPD_PCI_BRCD    = 0xf8,  /*!< PCI VPD Brocade           */
225 };
226
227 /**
228  * @brief BFA adapter flash vpd data definition.
229  *
230  * All numerical fields are in big-endian format.
231  */
232 struct bfa_mfg_vpd {
233         u8              version;        /*!< vpd data version */
234         u8              vpd_sig[3];     /*!< characters 'V', 'P', 'D' */
235         u8              chksum;         /*!< u8 checksum */
236         u8              vendor;         /*!< vendor */
237         u8      len;            /*!< vpd data length excluding header */
238         u8      rsv;
239         u8              data[BFA_MFG_VPD_LEN];  /*!< vpd data */
240 };
241
242 #pragma pack()
243
244 #endif /* __BFA_DEFS_MFG_H__ */