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