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