1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * QLogic iSCSI HBA Driver
4  * Copyright (c)  2003-2013 QLogic Corporation
5  */
6 
7 #ifndef _QL4XNVRM_H_
8 #define _QL4XNVRM_H_
9 
10 /**
11  * AM29LV Flash definitions
12  **/
13 #define FM93C56A_SIZE_8	 0x100
14 #define FM93C56A_SIZE_16 0x80
15 #define FM93C66A_SIZE_8	 0x200
16 #define FM93C66A_SIZE_16 0x100/* 4010 */
17 #define FM93C86A_SIZE_16 0x400/* 4022 */
18 
19 #define	 FM93C56A_START	      0x1
20 
21 /* Commands */
22 #define	 FM93C56A_READ	      0x2
23 #define	 FM93C56A_WEN	      0x0
24 #define	 FM93C56A_WRITE	      0x1
25 #define	 FM93C56A_WRITE_ALL   0x0
26 #define	 FM93C56A_WDS	      0x0
27 #define	 FM93C56A_ERASE	      0x3
28 #define	 FM93C56A_ERASE_ALL   0x0
29 
30 /* Command Extensions */
31 #define	 FM93C56A_WEN_EXT	 0x3
32 #define	 FM93C56A_WRITE_ALL_EXT	 0x1
33 #define	 FM93C56A_WDS_EXT	 0x0
34 #define	 FM93C56A_ERASE_ALL_EXT	 0x2
35 
36 /* Address Bits */
37 #define	 FM93C56A_NO_ADDR_BITS_16   8	/* 4010 */
38 #define	 FM93C56A_NO_ADDR_BITS_8    9	/* 4010 */
39 #define	 FM93C86A_NO_ADDR_BITS_16   10	/* 4022 */
40 
41 /* Data Bits */
42 #define	 FM93C56A_DATA_BITS_16	 16
43 #define	 FM93C56A_DATA_BITS_8	 8
44 
45 /* Special Bits */
46 #define	 FM93C56A_READ_DUMMY_BITS   1
47 #define	 FM93C56A_READY		    0
48 #define	 FM93C56A_BUSY		    1
49 #define	 FM93C56A_CMD_BITS	    2
50 
51 /* Auburn Bits */
52 #define	 AUBURN_EEPROM_DI	    0x8
53 #define	 AUBURN_EEPROM_DI_0	    0x0
54 #define	 AUBURN_EEPROM_DI_1	    0x8
55 #define	 AUBURN_EEPROM_DO	    0x4
56 #define	 AUBURN_EEPROM_DO_0	    0x0
57 #define	 AUBURN_EEPROM_DO_1	    0x4
58 #define	 AUBURN_EEPROM_CS	    0x2
59 #define	 AUBURN_EEPROM_CS_0	    0x0
60 #define	 AUBURN_EEPROM_CS_1	    0x2
61 #define	 AUBURN_EEPROM_CLK_RISE	    0x1
62 #define	 AUBURN_EEPROM_CLK_FALL	    0x0
63 
64 /**/
65 /* EEPROM format */
66 /**/
67 struct bios_params {
68 	uint16_t SpinUpDelay:1;
69 	uint16_t BIOSDisable:1;
70 	uint16_t MMAPEnable:1;
71 	uint16_t BootEnable:1;
72 	uint16_t Reserved0:12;
73 	uint8_t bootID0:7;
74 	uint8_t bootID0Valid:1;
75 	uint8_t bootLUN0[8];
76 	uint8_t bootID1:7;
77 	uint8_t bootID1Valid:1;
78 	uint8_t bootLUN1[8];
79 	uint16_t MaxLunsPerTarget;
80 	uint8_t Reserved1[10];
81 };
82 
83 struct eeprom_port_cfg {
84 
85 	/* MTU MAC 0 */
86 	u16 etherMtu_mac;
87 
88 	/* Flow Control MAC 0 */
89 	u16 pauseThreshold_mac;
90 	u16 resumeThreshold_mac;
91 	u16 reserved[13];
92 };
93 
94 struct eeprom_function_cfg {
95 	u8 reserved[30];
96 
97 	/* MAC ADDR */
98 	u8 macAddress[6];
99 	u8 macAddressSecondary[6];
100 	u16 subsysVendorId;
101 	u16 subsysDeviceId;
102 };
103 
104 struct eeprom_data {
105 	union {
106 		struct {	/* isp4010 */
107 			u8 asic_id[4]; /* x00 */
108 			u8 version;	/* x04 */
109 			u8 reserved;	/* x05 */
110 			u16 board_id;	/* x06 */
111 #define	  EEPROM_BOARDID_ELDORADO    1
112 #define	  EEPROM_BOARDID_PLACER	     2
113 
114 #define EEPROM_SERIAL_NUM_SIZE	     16
115 			u8 serial_number[EEPROM_SERIAL_NUM_SIZE]; /* x08 */
116 
117 			/* ExtHwConfig: */
118 			/* Offset = 24bytes
119 			 *
120 			 * | SSRAM Size|     |ST|PD|SDRAM SZ| W| B| SP	|  |
121 			 * |15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
122 			 * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
123 			 */
124 			u16 ext_hw_conf; /* x18 */
125 			u8 mac0[6];	/* x1A */
126 			u8 mac1[6];	/* x20 */
127 			u8 mac2[6];	/* x26 */
128 			u8 mac3[6];	/* x2C */
129 			u16 etherMtu;	/* x32 */
130 			u16 macConfig;	/* x34 */
131 #define	 MAC_CONFIG_ENABLE_ANEG	    0x0001
132 #define	 MAC_CONFIG_ENABLE_PAUSE    0x0002
133 			u16 phyConfig;	/* x36 */
134 #define	 PHY_CONFIG_PHY_ADDR_MASK	      0x1f
135 #define	 PHY_CONFIG_ENABLE_FW_MANAGEMENT_MASK 0x20
136 			u16 reserved_56;	/* x38 */
137 
138 #define EEPROM_UNUSED_1_SIZE   2
139 			u8 unused_1[EEPROM_UNUSED_1_SIZE]; /* x3A */
140 			u16 bufletSize;	/* x3C */
141 			u16 bufletCount;	/* x3E */
142 			u16 bufletPauseThreshold; /* x40 */
143 			u16 tcpWindowThreshold50; /* x42 */
144 			u16 tcpWindowThreshold25; /* x44 */
145 			u16 tcpWindowThreshold0; /* x46 */
146 			u16 ipHashTableBaseHi;	/* x48 */
147 			u16 ipHashTableBaseLo;	/* x4A */
148 			u16 ipHashTableSize;	/* x4C */
149 			u16 tcpHashTableBaseHi;	/* x4E */
150 			u16 tcpHashTableBaseLo;	/* x50 */
151 			u16 tcpHashTableSize;	/* x52 */
152 			u16 ncbTableBaseHi;	/* x54 */
153 			u16 ncbTableBaseLo;	/* x56 */
154 			u16 ncbTableSize;	/* x58 */
155 			u16 drbTableBaseHi;	/* x5A */
156 			u16 drbTableBaseLo;	/* x5C */
157 			u16 drbTableSize;	/* x5E */
158 
159 #define EEPROM_UNUSED_2_SIZE   4
160 			u8 unused_2[EEPROM_UNUSED_2_SIZE]; /* x60 */
161 			u16 ipReassemblyTimeout; /* x64 */
162 			u16 tcpMaxWindowSizeHi;	/* x66 */
163 			u16 tcpMaxWindowSizeLo;	/* x68 */
164 			u32 net_ip_addr0;	/* x6A Added for TOE
165 						 * functionality. */
166 			u32 net_ip_addr1;	/* x6E */
167 			u32 scsi_ip_addr0;	/* x72 */
168 			u32 scsi_ip_addr1;	/* x76 */
169 #define EEPROM_UNUSED_3_SIZE   128	/* changed from 144 to account
170 					 * for ip addresses */
171 			u8 unused_3[EEPROM_UNUSED_3_SIZE]; /* x7A */
172 			u16 subsysVendorId_f0;	/* xFA */
173 			u16 subsysDeviceId_f0;	/* xFC */
174 
175 			/* Address = 0x7F */
176 #define FM93C56A_SIGNATURE  0x9356
177 #define FM93C66A_SIGNATURE  0x9366
178 			u16 signature;	/* xFE */
179 
180 #define EEPROM_UNUSED_4_SIZE   250
181 			u8 unused_4[EEPROM_UNUSED_4_SIZE]; /* x100 */
182 			u16 subsysVendorId_f1;	/* x1FA */
183 			u16 subsysDeviceId_f1;	/* x1FC */
184 			u16 checksum;	/* x1FE */
185 		} __attribute__ ((packed)) isp4010;
186 		struct {	/* isp4022 */
187 			u8 asicId[4];	/* x00 */
188 			u8 version;	/* x04 */
189 			u8 reserved_5;	/* x05 */
190 			u16 boardId;	/* x06 */
191 			u8 boardIdStr[16];	/* x08 */
192 			u8 serialNumber[16];	/* x18 */
193 
194 			/* External Hardware Configuration */
195 			u16 ext_hw_conf;	/* x28 */
196 
197 			/* MAC 0 CONFIGURATION */
198 			struct eeprom_port_cfg macCfg_port0; /* x2A */
199 
200 			/* MAC 1 CONFIGURATION */
201 			struct eeprom_port_cfg macCfg_port1; /* x4A */
202 
203 			/* DDR SDRAM Configuration */
204 			u16 bufletSize;	/* x6A */
205 			u16 bufletCount;	/* x6C */
206 			u16 tcpWindowThreshold50; /* x6E */
207 			u16 tcpWindowThreshold25; /* x70 */
208 			u16 tcpWindowThreshold0; /* x72 */
209 			u16 ipHashTableBaseHi;	/* x74 */
210 			u16 ipHashTableBaseLo;	/* x76 */
211 			u16 ipHashTableSize;	/* x78 */
212 			u16 tcpHashTableBaseHi;	/* x7A */
213 			u16 tcpHashTableBaseLo;	/* x7C */
214 			u16 tcpHashTableSize;	/* x7E */
215 			u16 ncbTableBaseHi;	/* x80 */
216 			u16 ncbTableBaseLo;	/* x82 */
217 			u16 ncbTableSize;	/* x84 */
218 			u16 drbTableBaseHi;	/* x86 */
219 			u16 drbTableBaseLo;	/* x88 */
220 			u16 drbTableSize;	/* x8A */
221 			u16 reserved_142[4];	/* x8C */
222 
223 			/* TCP/IP Parameters */
224 			u16 ipReassemblyTimeout; /* x94 */
225 			u16 tcpMaxWindowSize;	/* x96 */
226 			u16 ipSecurity;	/* x98 */
227 			u8 reserved_156[294]; /* x9A */
228 			u16 qDebug[8];	/* QLOGIC USE ONLY   x1C0 */
229 			struct eeprom_function_cfg funcCfg_fn0;	/* x1D0 */
230 			u16 reserved_510; /* x1FE */
231 
232 			/* Address = 512 */
233 			u8 oemSpace[432]; /* x200 */
234 			struct bios_params sBIOSParams_fn1; /* x3B0 */
235 			struct eeprom_function_cfg funcCfg_fn1;	/* x3D0 */
236 			u16 reserved_1022; /* x3FE */
237 
238 			/* Address = 1024 */
239 			u8 reserved_1024[464];	/* x400 */
240 			struct eeprom_function_cfg funcCfg_fn2;	/* x5D0 */
241 			u16 reserved_1534; /* x5FE */
242 
243 			/* Address = 1536 */
244 			u8 reserved_1536[432];	/* x600 */
245 			struct bios_params sBIOSParams_fn3; /* x7B0 */
246 			struct eeprom_function_cfg funcCfg_fn3;	/* x7D0 */
247 			u16 checksum;	/* x7FE */
248 		} __attribute__ ((packed)) isp4022;
249 	};
250 };
251 
252 
253 #endif	/* _QL4XNVRM_H_ */
254