]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - sys/dev/qlxgbe/ql_minidump.h
MFC r320175
[FreeBSD/stable/9.git] / sys / dev / qlxgbe / ql_minidump.h
1 /*
2  * Copyright (c) 2013-2016 Qlogic Corporation
3  * All rights reserved.
4  *
5  *  Redistribution and use in source and binary forms, with or without
6  *  modification, are permitted provided that the following conditions
7  *  are met:
8  *
9  *  1. Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  *  2. Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  *  POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 /*
29  * File: ql_minidump.h
30  *
31  * $FreeBSD$
32  */
33 #ifndef _QL_MINIDUMP_H_
34 #define _QL_MINIDUMP_H_
35
36 #define QL_DBG_STATE_ARRAY_LEN          16
37 #define QL_DBG_CAP_SIZE_ARRAY_LEN       8
38 #define QL_NO_OF_OCM_WINDOWS            16
39
40
41 typedef struct ql_mdump_tmplt_hdr {
42         uint32_t  entry_type ;
43         uint32_t  first_entry_offset ;
44         uint32_t  size_of_template ;
45         uint32_t  recommended_capture_mask;
46
47         uint32_t  num_of_entries ;
48         uint32_t  version ;
49         uint32_t  driver_timestamp ;
50         uint32_t  checksum ;
51
52         uint32_t  driver_capture_mask ;
53         uint32_t  driver_info_word2 ;
54         uint32_t  driver_info_word3 ;
55         uint32_t  driver_info_word4 ;
56
57         uint32_t  saved_state_array[QL_DBG_STATE_ARRAY_LEN] ;
58         uint32_t  capture_size_array[QL_DBG_CAP_SIZE_ARRAY_LEN] ;
59
60         uint32_t ocm_window_array[QL_NO_OF_OCM_WINDOWS] ;
61 } ql_minidump_template_hdr_t ;
62
63 /*
64  * MIU AGENT ADDRESSES.
65  */
66
67 #define MD_TA_CTL_ENABLE                0x2
68 #define MD_TA_CTL_START                 0x1
69 #define MD_TA_CTL_BUSY                  0x8
70 #define MD_TA_CTL_CHECK                 1000
71
72 #define MD_MIU_TEST_AGT_CTRL            0x41000090
73 #define MD_MIU_TEST_AGT_ADDR_LO         0x41000094
74 #define MD_MIU_TEST_AGT_ADDR_HI         0x41000098
75
76 #define MD_MIU_TEST_AGT_RDDATA_0_31     0x410000A8
77 #define MD_MIU_TEST_AGT_RDDATA_32_63    0x410000AC
78 #define MD_MIU_TEST_AGT_RDDATA_64_95    0x410000B8
79 #define MD_MIU_TEST_AGT_RDDATA_96_127   0x410000BC
80
81 #define MD_MIU_TEST_AGT_WRDATA_0_31     0x410000A0
82 #define MD_MIU_TEST_AGT_WRDATA_32_63    0x410000A4
83 #define MD_MIU_TEST_AGT_WRDATA_64_95    0x410000B0
84 #define MD_MIU_TEST_AGT_WRDATA_96_127   0x410000B4
85
86 /*
87  * ROM Read Address
88  */
89
90 #define MD_DIRECT_ROM_WINDOW            0x42110030
91 #define MD_DIRECT_ROM_READ_BASE         0x42150000
92
93 /*
94  * Entry Type Defines
95  */
96
97 #define RDNOP                   0
98 #define RDCRB                   1
99 #define RDMUX                   2
100 #define QUEUE                   3
101 #define BOARD                   4
102 #define RDOCM                   6
103 #define L1DAT                   11
104 #define L1INS                   12
105 #define L2DTG                   21
106 #define L2ITG                   22
107 #define L2DAT                   23
108 #define L2INS                   24
109 #define POLLRD                  35
110 #define RDMUX2                  36
111 #define POLLRDMWR               37
112 #define RDROM                   71
113 #define RDMEM                   72
114 #define CNTRL                   98
115 #define TLHDR                   99
116 #define RDEND                   255
117
118 /*
119  * Index of State Table.  The Template header maintains
120  * an array of 8 (0..7) words that is used to store some
121  * "State Information" from the board.
122  */
123
124 #define QL_PCIE_FUNC_INDX       0
125 #define QL_CLK_STATE_INDX       1
126 #define QL_SRE_STATE_INDX       2
127 #define QL_OCM0_ADDR_INDX       3
128
129 #define QL_REVID_STATE_INDX     4
130 #define QL_MAJVER_STATE_INDX    5
131 #define QL_MINVER_STATE_INDX    6
132 #define QL_SUBVER_STATE_INDX    7
133
134 /*
135  * Opcodes for Control Entries.
136  * These Flags are bit fields.
137  */
138
139 #define QL_DBG_OPCODE_WR        0x01
140 #define QL_DBG_OPCODE_RW        0x02
141 #define QL_DBG_OPCODE_AND       0x04
142 #define QL_DBG_OPCODE_OR        0x08
143 #define QL_DBG_OPCODE_POLL      0x10
144 #define QL_DBG_OPCODE_RDSTATE   0x20
145 #define QL_DBG_OPCODE_WRSTATE   0x40
146 #define QL_DBG_OPCODE_MDSTATE   0x80
147
148 typedef struct ql_minidump_entry_hdr_s {
149         uint32_t      entry_type ;
150         uint32_t      entry_size ;
151         uint32_t      entry_capture_size ;
152         union {
153                 struct {
154                         uint8_t   entry_capture_mask ;
155                         uint8_t   entry_code ;
156                         uint8_t   driver_code ;
157                         uint8_t   driver_flags ;
158                 };
159                 uint32_t entry_ctrl_word ;
160         };
161 } ql_minidump_entry_hdr_t ;
162
163 /*
164  * Driver Flags
165  */
166 #define QL_DBG_SKIPPED_FLAG     0x80 /*  driver skipped this entry  */
167 #define QL_DBG_SIZE_ERR_FLAG    0x40 /*  entry size vs capture size mismatch*/
168
169 /*
170  * Generic Entry Including Header
171  */
172
173 typedef struct ql_minidump_entry_s {
174         ql_minidump_entry_hdr_t hdr ;
175
176     uint32_t entry_data00 ;
177     uint32_t entry_data01 ;
178     uint32_t entry_data02 ;
179     uint32_t entry_data03 ;
180
181     uint32_t entry_data04 ;
182     uint32_t entry_data05 ;
183     uint32_t entry_data06 ;
184     uint32_t entry_data07 ;
185 } ql_minidump_entry_t;
186
187 /*
188  *  Read CRB Entry Header
189  */
190
191 typedef struct ql_minidump_entry_rdcrb_s {
192         ql_minidump_entry_hdr_t h;
193
194         uint32_t addr ;
195     union {
196         struct {
197             uint8_t  addr_stride ;
198             uint8_t  rsvd_0;
199             uint16_t rsvd_1 ;
200         } ;
201             uint32_t addr_cntrl  ;
202     } ;
203
204         uint32_t data_size ;
205         uint32_t op_count;
206
207     uint32_t    rsvd_2 ;
208     uint32_t    rsvd_3 ;
209     uint32_t    rsvd_4 ;
210     uint32_t    rsvd_5 ;
211
212 } ql_minidump_entry_rdcrb_t ;
213
214 /*
215  * Cache Entry Header
216  */
217
218 typedef struct ql_minidump_entry_cache_s {
219         ql_minidump_entry_hdr_t h;
220
221         uint32_t tag_reg_addr ;
222         union {
223                 struct {
224                         uint16_t   tag_value_stride ;
225                         uint16_t  init_tag_value ;
226                 } ;
227                 uint32_t select_addr_cntrl  ;
228         } ;
229
230         uint32_t data_size ;
231         uint32_t op_count;
232
233         uint32_t control_addr ;
234         union {
235                 struct {
236                         uint16_t  write_value ;
237                         uint8_t   poll_mask ;
238                         uint8_t   poll_wait ;
239                 };
240                 uint32_t control_value ;
241         } ;
242
243         uint32_t read_addr ;
244         union {
245                 struct {
246                         uint8_t   read_addr_stride ;
247                         uint8_t   read_addr_cnt ;
248                         uint16_t  rsvd_1 ;
249                 } ;
250                 uint32_t read_addr_cntrl  ;
251         } ;
252 } ql_minidump_entry_cache_t ;
253
254
255 /*
256  * Read OCM Entry Header
257  */
258
259 typedef struct ql_minidump_entry_rdocm_s {
260         ql_minidump_entry_hdr_t h;
261
262         uint32_t rsvd_0 ;
263         uint32_t rsvd_1 ;
264
265         uint32_t data_size ;
266         uint32_t op_count;
267
268     uint32_t rsvd_2 ;
269     uint32_t rsvd_3 ;
270
271     uint32_t read_addr ;
272     uint32_t read_addr_stride ;
273
274 } ql_minidump_entry_rdocm_t ;
275
276 /*
277  * Read MEM Entry Header
278  */
279
280 typedef struct ql_minidump_entry_rdmem_s {
281         ql_minidump_entry_hdr_t h;
282
283     uint32_t rsvd_0[6] ;
284
285     uint32_t read_addr ;
286     uint32_t read_data_size ;
287
288 } ql_minidump_entry_rdmem_t ;
289
290 /*
291  * Read ROM Entry Header
292  */
293
294 typedef struct ql_minidump_entry_rdrom_s {
295         ql_minidump_entry_hdr_t h;
296
297     uint32_t rsvd_0[6] ;
298
299     uint32_t read_addr ;
300     uint32_t read_data_size ;
301
302 } ql_minidump_entry_rdrom_t ;
303
304 /*
305  * Read MUX Entry Header
306  */
307
308 typedef struct ql_minidump_entry_mux_s {
309         ql_minidump_entry_hdr_t h;
310
311         uint32_t select_addr ;
312     union {
313         struct {
314             uint32_t rsvd_0 ;
315         } ;
316             uint32_t select_addr_cntrl  ;
317     } ;
318
319         uint32_t data_size ;
320         uint32_t op_count;
321
322     uint32_t select_value ;
323     uint32_t select_value_stride ;
324
325     uint32_t read_addr ;
326     uint32_t rsvd_1 ;
327
328 } ql_minidump_entry_mux_t ;
329
330 /*
331  * Read MUX2 Entry Header
332  */
333
334 typedef struct ql_minidump_entry_mux2_s {
335         ql_minidump_entry_hdr_t h;
336
337         uint32_t select_addr_1;
338         uint32_t select_addr_2;
339         uint32_t select_value_1;
340         uint32_t select_value_2;
341         uint32_t select_value_count;
342         uint32_t select_value_mask;
343         uint32_t read_addr;
344         union {
345                 struct {
346                         uint8_t select_value_stride;
347                         uint8_t data_size;
348                         uint8_t reserved_0;
349                         uint8_t reserved_1;
350                 };
351                 uint32_t select_addr_value_cntrl;
352         };
353
354 } ql_minidump_entry_mux2_t;
355
356 /*
357  * Read QUEUE Entry Header
358  */
359
360 typedef struct ql_minidump_entry_queue_s {
361         ql_minidump_entry_hdr_t h;
362
363         uint32_t select_addr ;
364     union {
365         struct {
366             uint16_t  queue_id_stride ;
367             uint16_t  rsvd_0 ;
368         } ;
369             uint32_t select_addr_cntrl  ;
370     } ;
371
372         uint32_t data_size ;
373         uint32_t op_count ;
374
375     uint32_t rsvd_1 ;
376     uint32_t rsvd_2 ;
377
378     uint32_t read_addr ;
379     union {
380         struct {
381             uint8_t   read_addr_stride ;
382             uint8_t   read_addr_cnt ;
383             uint16_t  rsvd_3 ;
384         } ;
385             uint32_t read_addr_cntrl  ;
386     } ;
387
388 } ql_minidump_entry_queue_t ;
389
390 /*
391  * Control Entry Header
392  */
393
394 typedef struct ql_minidump_entry_cntrl_s {
395         ql_minidump_entry_hdr_t h;
396
397         uint32_t addr ;
398     union {
399         struct {
400             uint8_t  addr_stride ;
401             uint8_t  state_index_a ;
402             uint16_t poll_timeout ;
403         } ;
404             uint32_t addr_cntrl  ;
405     } ;
406
407         uint32_t data_size ;
408         uint32_t op_count;
409
410     union {
411         struct {
412             uint8_t opcode ;
413             uint8_t state_index_v ;
414             uint8_t shl ;
415             uint8_t shr ;
416         } ;
417         uint32_t control_value ;
418     } ;
419
420     uint32_t value_1 ;
421     uint32_t value_2 ;
422     uint32_t value_3 ;
423 } ql_minidump_entry_cntrl_t ;
424
425 /*
426  * Read with poll.
427  */
428
429 typedef struct ql_minidump_entry_rdcrb_with_poll_s {
430         ql_minidump_entry_hdr_t h;
431
432         uint32_t select_addr;
433         uint32_t read_addr;
434         uint32_t select_value;
435         union {
436                 struct {
437                         uint16_t select_value_stride;
438                         uint16_t op_count;
439                 };
440                 uint32_t select_value_cntrl;
441         };
442
443         uint32_t poll;
444         uint32_t mask;
445
446         uint32_t data_size;
447         uint32_t rsvd_0;
448
449 } ql_minidump_entry_pollrd_t;
450
451 /*
452  * Read_Modify_Write with poll.
453  */
454
455 typedef struct ql_minidump_entry_rd_modify_wr_with_poll_s {
456         ql_minidump_entry_hdr_t h;
457
458         uint32_t addr_1;
459         uint32_t addr_2;
460         uint32_t value_1;
461         uint32_t value_2;
462         uint32_t poll;
463         uint32_t mask;
464         uint32_t modify_mask;
465         uint32_t data_size;
466
467 } ql_minidump_entry_rd_modify_wr_with_poll_t;
468
469 #endif /* #ifndef _QL_MINIDUMP_H_ */
470