xref: /OK3568_Linux_fs/kernel/drivers/scsi/qla2xxx/qla_tmpl.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * QLogic Fibre Channel HBA Driver
4*4882a593Smuzhiyun  * Copyright (c)  2003-2014 QLogic Corporation
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef __QLA_DMP27_H__
8*4882a593Smuzhiyun #define	__QLA_DMP27_H__
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #define IOBASE_ADDR	offsetof(struct device_reg_24xx, iobase_addr)
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun struct __packed qla27xx_fwdt_template {
13*4882a593Smuzhiyun 	__le32 template_type;
14*4882a593Smuzhiyun 	__le32 entry_offset;
15*4882a593Smuzhiyun 	__le32 template_size;
16*4882a593Smuzhiyun 	uint32_t count;		/* borrow field for running/residual count */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun 	__le32 entry_count;
19*4882a593Smuzhiyun 	uint32_t template_version;
20*4882a593Smuzhiyun 	__le32 capture_timestamp;
21*4882a593Smuzhiyun 	uint32_t template_checksum;
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun 	uint32_t reserved_2;
24*4882a593Smuzhiyun 	__le32 driver_info[3];
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun 	uint32_t saved_state[16];
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	uint32_t reserved_3[8];
29*4882a593Smuzhiyun 	__le32 firmware_version[5];
30*4882a593Smuzhiyun };
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #define TEMPLATE_TYPE_FWDUMP		99
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #define ENTRY_TYPE_NOP			0
35*4882a593Smuzhiyun #define ENTRY_TYPE_TMP_END		255
36*4882a593Smuzhiyun #define ENTRY_TYPE_RD_IOB_T1		256
37*4882a593Smuzhiyun #define ENTRY_TYPE_WR_IOB_T1		257
38*4882a593Smuzhiyun #define ENTRY_TYPE_RD_IOB_T2		258
39*4882a593Smuzhiyun #define ENTRY_TYPE_WR_IOB_T2		259
40*4882a593Smuzhiyun #define ENTRY_TYPE_RD_PCI		260
41*4882a593Smuzhiyun #define ENTRY_TYPE_WR_PCI		261
42*4882a593Smuzhiyun #define ENTRY_TYPE_RD_RAM		262
43*4882a593Smuzhiyun #define ENTRY_TYPE_GET_QUEUE		263
44*4882a593Smuzhiyun #define ENTRY_TYPE_GET_FCE		264
45*4882a593Smuzhiyun #define ENTRY_TYPE_PSE_RISC		265
46*4882a593Smuzhiyun #define ENTRY_TYPE_RST_RISC		266
47*4882a593Smuzhiyun #define ENTRY_TYPE_DIS_INTR		267
48*4882a593Smuzhiyun #define ENTRY_TYPE_GET_HBUF		268
49*4882a593Smuzhiyun #define ENTRY_TYPE_SCRATCH		269
50*4882a593Smuzhiyun #define ENTRY_TYPE_RDREMREG		270
51*4882a593Smuzhiyun #define ENTRY_TYPE_WRREMREG		271
52*4882a593Smuzhiyun #define ENTRY_TYPE_RDREMRAM		272
53*4882a593Smuzhiyun #define ENTRY_TYPE_PCICFG		273
54*4882a593Smuzhiyun #define ENTRY_TYPE_GET_SHADOW		274
55*4882a593Smuzhiyun #define ENTRY_TYPE_WRITE_BUF		275
56*4882a593Smuzhiyun #define ENTRY_TYPE_CONDITIONAL		276
57*4882a593Smuzhiyun #define ENTRY_TYPE_RDPEPREG		277
58*4882a593Smuzhiyun #define ENTRY_TYPE_WRPEPREG		278
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #define CAPTURE_FLAG_PHYS_ONLY		BIT_0
61*4882a593Smuzhiyun #define CAPTURE_FLAG_PHYS_VIRT		BIT_1
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun #define DRIVER_FLAG_SKIP_ENTRY		BIT_7
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun struct __packed qla27xx_fwdt_entry {
66*4882a593Smuzhiyun 	struct __packed {
67*4882a593Smuzhiyun 		__le32 type;
68*4882a593Smuzhiyun 		__le32 size;
69*4882a593Smuzhiyun 		uint32_t reserved_1;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 		uint8_t  capture_flags;
72*4882a593Smuzhiyun 		uint8_t  reserved_2[2];
73*4882a593Smuzhiyun 		uint8_t  driver_flags;
74*4882a593Smuzhiyun 	} hdr;
75*4882a593Smuzhiyun 	union __packed {
76*4882a593Smuzhiyun 		struct __packed {
77*4882a593Smuzhiyun 		} t0;
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun 		struct __packed {
80*4882a593Smuzhiyun 		} t255;
81*4882a593Smuzhiyun 
82*4882a593Smuzhiyun 		struct __packed {
83*4882a593Smuzhiyun 			__le32 base_addr;
84*4882a593Smuzhiyun 			uint8_t  reg_width;
85*4882a593Smuzhiyun 			__le16 reg_count;
86*4882a593Smuzhiyun 			uint8_t  pci_offset;
87*4882a593Smuzhiyun 		} t256;
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun 		struct __packed {
90*4882a593Smuzhiyun 			__le32 base_addr;
91*4882a593Smuzhiyun 			__le32 write_data;
92*4882a593Smuzhiyun 			uint8_t  pci_offset;
93*4882a593Smuzhiyun 			uint8_t  reserved[3];
94*4882a593Smuzhiyun 		} t257;
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun 		struct __packed {
97*4882a593Smuzhiyun 			__le32 base_addr;
98*4882a593Smuzhiyun 			uint8_t  reg_width;
99*4882a593Smuzhiyun 			__le16 reg_count;
100*4882a593Smuzhiyun 			uint8_t  pci_offset;
101*4882a593Smuzhiyun 			uint8_t  banksel_offset;
102*4882a593Smuzhiyun 			uint8_t  reserved[3];
103*4882a593Smuzhiyun 			__le32 bank;
104*4882a593Smuzhiyun 		} t258;
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun 		struct __packed {
107*4882a593Smuzhiyun 			__le32 base_addr;
108*4882a593Smuzhiyun 			__le32 write_data;
109*4882a593Smuzhiyun 			uint8_t  reserved[2];
110*4882a593Smuzhiyun 			uint8_t  pci_offset;
111*4882a593Smuzhiyun 			uint8_t  banksel_offset;
112*4882a593Smuzhiyun 			__le32 bank;
113*4882a593Smuzhiyun 		} t259;
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun 		struct __packed {
116*4882a593Smuzhiyun 			uint8_t pci_offset;
117*4882a593Smuzhiyun 			uint8_t reserved[3];
118*4882a593Smuzhiyun 		} t260;
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun 		struct __packed {
121*4882a593Smuzhiyun 			uint8_t pci_offset;
122*4882a593Smuzhiyun 			uint8_t reserved[3];
123*4882a593Smuzhiyun 			__le32 write_data;
124*4882a593Smuzhiyun 		} t261;
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun 		struct __packed {
127*4882a593Smuzhiyun 			uint8_t  ram_area;
128*4882a593Smuzhiyun 			uint8_t  reserved[3];
129*4882a593Smuzhiyun 			__le32 start_addr;
130*4882a593Smuzhiyun 			__le32 end_addr;
131*4882a593Smuzhiyun 		} t262;
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun 		struct __packed {
134*4882a593Smuzhiyun 			uint32_t num_queues;
135*4882a593Smuzhiyun 			uint8_t  queue_type;
136*4882a593Smuzhiyun 			uint8_t  reserved[3];
137*4882a593Smuzhiyun 		} t263;
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun 		struct __packed {
140*4882a593Smuzhiyun 			uint32_t fce_trace_size;
141*4882a593Smuzhiyun 			uint64_t write_pointer;
142*4882a593Smuzhiyun 			uint64_t base_pointer;
143*4882a593Smuzhiyun 			uint32_t fce_enable_mb0;
144*4882a593Smuzhiyun 			uint32_t fce_enable_mb2;
145*4882a593Smuzhiyun 			uint32_t fce_enable_mb3;
146*4882a593Smuzhiyun 			uint32_t fce_enable_mb4;
147*4882a593Smuzhiyun 			uint32_t fce_enable_mb5;
148*4882a593Smuzhiyun 			uint32_t fce_enable_mb6;
149*4882a593Smuzhiyun 		} t264;
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun 		struct __packed {
152*4882a593Smuzhiyun 		} t265;
153*4882a593Smuzhiyun 
154*4882a593Smuzhiyun 		struct __packed {
155*4882a593Smuzhiyun 		} t266;
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun 		struct __packed {
158*4882a593Smuzhiyun 			uint8_t  pci_offset;
159*4882a593Smuzhiyun 			uint8_t  reserved[3];
160*4882a593Smuzhiyun 			__le32 data;
161*4882a593Smuzhiyun 		} t267;
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun 		struct __packed {
164*4882a593Smuzhiyun 			uint8_t  buf_type;
165*4882a593Smuzhiyun 			uint8_t  reserved[3];
166*4882a593Smuzhiyun 			uint32_t buf_size;
167*4882a593Smuzhiyun 			uint64_t start_addr;
168*4882a593Smuzhiyun 		} t268;
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun 		struct __packed {
171*4882a593Smuzhiyun 			uint32_t scratch_size;
172*4882a593Smuzhiyun 		} t269;
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun 		struct __packed {
175*4882a593Smuzhiyun 			__le32 addr;
176*4882a593Smuzhiyun 			__le32 count;
177*4882a593Smuzhiyun 		} t270;
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun 		struct __packed {
180*4882a593Smuzhiyun 			__le32 addr;
181*4882a593Smuzhiyun 			__le32 data;
182*4882a593Smuzhiyun 		} t271;
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun 		struct __packed {
185*4882a593Smuzhiyun 			__le32 addr;
186*4882a593Smuzhiyun 			__le32 count;
187*4882a593Smuzhiyun 		} t272;
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun 		struct __packed {
190*4882a593Smuzhiyun 			__le32 addr;
191*4882a593Smuzhiyun 			__le32 count;
192*4882a593Smuzhiyun 		} t273;
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun 		struct __packed {
195*4882a593Smuzhiyun 			uint32_t num_queues;
196*4882a593Smuzhiyun 			uint8_t  queue_type;
197*4882a593Smuzhiyun 			uint8_t  reserved[3];
198*4882a593Smuzhiyun 		} t274;
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun 		struct __packed {
201*4882a593Smuzhiyun 			__le32 length;
202*4882a593Smuzhiyun 			uint8_t  buffer[];
203*4882a593Smuzhiyun 		} t275;
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun 		struct __packed {
206*4882a593Smuzhiyun 			__le32 cond1;
207*4882a593Smuzhiyun 			__le32 cond2;
208*4882a593Smuzhiyun 		} t276;
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 		struct __packed {
211*4882a593Smuzhiyun 			__le32 cmd_addr;
212*4882a593Smuzhiyun 			__le32 wr_cmd_data;
213*4882a593Smuzhiyun 			__le32 data_addr;
214*4882a593Smuzhiyun 		} t277;
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun 		struct __packed {
217*4882a593Smuzhiyun 			__le32 cmd_addr;
218*4882a593Smuzhiyun 			__le32 wr_cmd_data;
219*4882a593Smuzhiyun 			__le32 data_addr;
220*4882a593Smuzhiyun 			__le32 wr_data;
221*4882a593Smuzhiyun 		} t278;
222*4882a593Smuzhiyun 	};
223*4882a593Smuzhiyun };
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun #define T262_RAM_AREA_CRITICAL_RAM	1
226*4882a593Smuzhiyun #define T262_RAM_AREA_EXTERNAL_RAM	2
227*4882a593Smuzhiyun #define T262_RAM_AREA_SHARED_RAM	3
228*4882a593Smuzhiyun #define T262_RAM_AREA_DDR_RAM		4
229*4882a593Smuzhiyun #define T262_RAM_AREA_MISC		5
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun #define T263_QUEUE_TYPE_REQ		1
232*4882a593Smuzhiyun #define T263_QUEUE_TYPE_RSP		2
233*4882a593Smuzhiyun #define T263_QUEUE_TYPE_ATIO		3
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun #define T268_BUF_TYPE_EXTD_TRACE	1
236*4882a593Smuzhiyun #define T268_BUF_TYPE_EXCH_BUFOFF	2
237*4882a593Smuzhiyun #define T268_BUF_TYPE_EXTD_LOGIN	3
238*4882a593Smuzhiyun #define T268_BUF_TYPE_REQ_MIRROR	4
239*4882a593Smuzhiyun #define T268_BUF_TYPE_RSP_MIRROR	5
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun #define T274_QUEUE_TYPE_REQ_SHAD	1
242*4882a593Smuzhiyun #define T274_QUEUE_TYPE_RSP_SHAD	2
243*4882a593Smuzhiyun #define T274_QUEUE_TYPE_ATIO_SHAD	3
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun #endif
246