Linux 6.9-rc5
[sfrench/cifs-2.6.git] / drivers / scsi / qla4xxx / ql4_nvram.h
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_ */