This source file includes following definitions.
- asd_dump_cseq_state
- asd_print_lseq_cio_reg
- asd_dump_lseq_state
- asd_dump_target_ddb
- asd_dump_ddb_0
- asd_dump_scb_site
- asd_dump_scb_sites
- asd_dump_seq_state
- asd_dump_frame_rcvd
- asd_dump_scb
- asd_dump_scb_list
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <linux/pci.h>
15 #include "aic94xx.h"
16 #include "aic94xx_reg.h"
17 #include "aic94xx_reg_def.h"
18 #include "aic94xx_sas.h"
19
20 #include "aic94xx_dump.h"
21
22 #ifdef ASD_DEBUG
23
24 #define MD(x) (1 << (x))
25 #define MODE_COMMON (1 << 31)
26 #define MODE_0_7 (0xFF)
27
28 static const struct lseq_cio_regs {
29 char *name;
30 u32 offs;
31 u8 width;
32 u32 mode;
33 } LSEQmCIOREGS[] = {
34 {"LmMnSCBPTR", 0x20, 16, MD(0)|MD(1)|MD(2)|MD(3)|MD(4) },
35 {"LmMnDDBPTR", 0x22, 16, MD(0)|MD(1)|MD(2)|MD(3)|MD(4) },
36 {"LmREQMBX", 0x30, 32, MODE_COMMON },
37 {"LmRSPMBX", 0x34, 32, MODE_COMMON },
38 {"LmMnINT", 0x38, 32, MODE_0_7 },
39 {"LmMnINTEN", 0x3C, 32, MODE_0_7 },
40 {"LmXMTPRIMD", 0x40, 32, MODE_COMMON },
41 {"LmXMTPRIMCS", 0x44, 8, MODE_COMMON },
42 {"LmCONSTAT", 0x45, 8, MODE_COMMON },
43 {"LmMnDMAERRS", 0x46, 8, MD(0)|MD(1) },
44 {"LmMnSGDMAERRS", 0x47, 8, MD(0)|MD(1) },
45 {"LmMnEXPHDRP", 0x48, 8, MD(0) },
46 {"LmMnSASAALIGN", 0x48, 8, MD(1) },
47 {"LmMnMSKHDRP", 0x49, 8, MD(0) },
48 {"LmMnSTPALIGN", 0x49, 8, MD(1) },
49 {"LmMnRCVHDRP", 0x4A, 8, MD(0) },
50 {"LmMnXMTHDRP", 0x4A, 8, MD(1) },
51 {"LmALIGNMODE", 0x4B, 8, MD(1) },
52 {"LmMnEXPRCVCNT", 0x4C, 32, MD(0) },
53 {"LmMnXMTCNT", 0x4C, 32, MD(1) },
54 {"LmMnCURRTAG", 0x54, 16, MD(0) },
55 {"LmMnPREVTAG", 0x56, 16, MD(0) },
56 {"LmMnACKOFS", 0x58, 8, MD(1) },
57 {"LmMnXFRLVL", 0x59, 8, MD(0)|MD(1) },
58 {"LmMnSGDMACTL", 0x5A, 8, MD(0)|MD(1) },
59 {"LmMnSGDMASTAT", 0x5B, 8, MD(0)|MD(1) },
60 {"LmMnDDMACTL", 0x5C, 8, MD(0)|MD(1) },
61 {"LmMnDDMASTAT", 0x5D, 8, MD(0)|MD(1) },
62 {"LmMnDDMAMODE", 0x5E, 16, MD(0)|MD(1) },
63 {"LmMnPIPECTL", 0x61, 8, MD(0)|MD(1) },
64 {"LmMnACTSCB", 0x62, 16, MD(0)|MD(1) },
65 {"LmMnSGBHADR", 0x64, 8, MD(0)|MD(1) },
66 {"LmMnSGBADR", 0x65, 8, MD(0)|MD(1) },
67 {"LmMnSGDCNT", 0x66, 8, MD(0)|MD(1) },
68 {"LmMnSGDMADR", 0x68, 32, MD(0)|MD(1) },
69 {"LmMnSGDMADR", 0x6C, 32, MD(0)|MD(1) },
70 {"LmMnXFRCNT", 0x70, 32, MD(0)|MD(1) },
71 {"LmMnXMTCRC", 0x74, 32, MD(1) },
72 {"LmCURRTAG", 0x74, 16, MD(0) },
73 {"LmPREVTAG", 0x76, 16, MD(0) },
74 {"LmMnDPSEL", 0x7B, 8, MD(0)|MD(1) },
75 {"LmDPTHSTAT", 0x7C, 8, MODE_COMMON },
76 {"LmMnHOLDLVL", 0x7D, 8, MD(0) },
77 {"LmMnSATAFS", 0x7E, 8, MD(1) },
78 {"LmMnCMPLTSTAT", 0x7F, 8, MD(0)|MD(1) },
79 {"LmPRMSTAT0", 0x80, 32, MODE_COMMON },
80 {"LmPRMSTAT1", 0x84, 32, MODE_COMMON },
81 {"LmGPRMINT", 0x88, 8, MODE_COMMON },
82 {"LmMnCURRSCB", 0x8A, 16, MD(0) },
83 {"LmPRMICODE", 0x8C, 32, MODE_COMMON },
84 {"LmMnRCVCNT", 0x90, 16, MD(0) },
85 {"LmMnBUFSTAT", 0x92, 16, MD(0) },
86 {"LmMnXMTHDRSIZE",0x92, 8, MD(1) },
87 {"LmMnXMTSIZE", 0x93, 8, MD(1) },
88 {"LmMnTGTXFRCNT", 0x94, 32, MD(0) },
89 {"LmMnEXPROFS", 0x98, 32, MD(0) },
90 {"LmMnXMTROFS", 0x98, 32, MD(1) },
91 {"LmMnRCVROFS", 0x9C, 32, MD(0) },
92 {"LmCONCTL", 0xA0, 16, MODE_COMMON },
93 {"LmBITLTIMER", 0xA2, 16, MODE_COMMON },
94 {"LmWWNLOW", 0xA8, 32, MODE_COMMON },
95 {"LmWWNHIGH", 0xAC, 32, MODE_COMMON },
96 {"LmMnFRMERR", 0xB0, 32, MD(0) },
97 {"LmMnFRMERREN", 0xB4, 32, MD(0) },
98 {"LmAWTIMER", 0xB8, 16, MODE_COMMON },
99 {"LmAWTCTL", 0xBA, 8, MODE_COMMON },
100 {"LmMnHDRCMPS", 0xC0, 32, MD(0) },
101 {"LmMnXMTSTAT", 0xC4, 8, MD(1) },
102 {"LmHWTSTATEN", 0xC5, 8, MODE_COMMON },
103 {"LmMnRRDYRC", 0xC6, 8, MD(0) },
104 {"LmMnRRDYTC", 0xC6, 8, MD(1) },
105 {"LmHWTSTAT", 0xC7, 8, MODE_COMMON },
106 {"LmMnDATABUFADR",0xC8, 16, MD(0)|MD(1) },
107 {"LmDWSSTATUS", 0xCB, 8, MODE_COMMON },
108 {"LmMnACTSTAT", 0xCE, 16, MD(0)|MD(1) },
109 {"LmMnREQSCB", 0xD2, 16, MD(0)|MD(1) },
110 {"LmXXXPRIM", 0xD4, 32, MODE_COMMON },
111 {"LmRCVASTAT", 0xD9, 8, MODE_COMMON },
112 {"LmINTDIS1", 0xDA, 8, MODE_COMMON },
113 {"LmPSTORESEL", 0xDB, 8, MODE_COMMON },
114 {"LmPSTORE", 0xDC, 32, MODE_COMMON },
115 {"LmPRIMSTAT0EN", 0xE0, 32, MODE_COMMON },
116 {"LmPRIMSTAT1EN", 0xE4, 32, MODE_COMMON },
117 {"LmDONETCTL", 0xF2, 16, MODE_COMMON },
118 {NULL, 0, 0, 0 }
119 };
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197 #define STR_8BIT " %30s[0x%04x]:0x%02x\n"
198 #define STR_16BIT " %30s[0x%04x]:0x%04x\n"
199 #define STR_32BIT " %30s[0x%04x]:0x%08x\n"
200 #define STR_64BIT " %30s[0x%04x]:0x%llx\n"
201
202 #define PRINT_REG_8bit(_ha, _n, _r) asd_printk(STR_8BIT, #_n, _n, \
203 asd_read_reg_byte(_ha, _r))
204 #define PRINT_REG_16bit(_ha, _n, _r) asd_printk(STR_16BIT, #_n, _n, \
205 asd_read_reg_word(_ha, _r))
206 #define PRINT_REG_32bit(_ha, _n, _r) asd_printk(STR_32BIT, #_n, _n, \
207 asd_read_reg_dword(_ha, _r))
208
209 #define PRINT_CREG_8bit(_ha, _n) asd_printk(STR_8BIT, #_n, _n, \
210 asd_read_reg_byte(_ha, C##_n))
211 #define PRINT_CREG_16bit(_ha, _n) asd_printk(STR_16BIT, #_n, _n, \
212 asd_read_reg_word(_ha, C##_n))
213 #define PRINT_CREG_32bit(_ha, _n) asd_printk(STR_32BIT, #_n, _n, \
214 asd_read_reg_dword(_ha, C##_n))
215
216 #define MSTR_8BIT " Mode:%02d %30s[0x%04x]:0x%02x\n"
217 #define MSTR_16BIT " Mode:%02d %30s[0x%04x]:0x%04x\n"
218 #define MSTR_32BIT " Mode:%02d %30s[0x%04x]:0x%08x\n"
219
220 #define PRINT_MREG_8bit(_ha, _m, _n, _r) asd_printk(MSTR_8BIT, _m, #_n, _n, \
221 asd_read_reg_byte(_ha, _r))
222 #define PRINT_MREG_16bit(_ha, _m, _n, _r) asd_printk(MSTR_16BIT, _m, #_n, _n, \
223 asd_read_reg_word(_ha, _r))
224 #define PRINT_MREG_32bit(_ha, _m, _n, _r) asd_printk(MSTR_32BIT, _m, #_n, _n, \
225 asd_read_reg_dword(_ha, _r))
226
227
228 #define PRINT_MIS_byte(_ha, _n) asd_printk(STR_8BIT, #_n,CSEQ_##_n-CMAPPEDSCR,\
229 asd_read_reg_byte(_ha, CSEQ_##_n))
230 #define PRINT_MIS_word(_ha, _n) asd_printk(STR_16BIT,#_n,CSEQ_##_n-CMAPPEDSCR,\
231 asd_read_reg_word(_ha, CSEQ_##_n))
232 #define PRINT_MIS_dword(_ha, _n) \
233 asd_printk(STR_32BIT,#_n,CSEQ_##_n-CMAPPEDSCR,\
234 asd_read_reg_dword(_ha, CSEQ_##_n))
235 #define PRINT_MIS_qword(_ha, _n) \
236 asd_printk(STR_64BIT, #_n,CSEQ_##_n-CMAPPEDSCR, \
237 (unsigned long long)(((u64)asd_read_reg_dword(_ha, CSEQ_##_n)) \
238 | (((u64)asd_read_reg_dword(_ha, (CSEQ_##_n)+4))<<32)))
239
240 #define CMDP_REG(_n, _m) (_m*(CSEQ_PAGE_SIZE*2)+CSEQ_##_n)
241 #define PRINT_CMDP_word(_ha, _n) \
242 asd_printk("%20s 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", \
243 #_n, \
244 asd_read_reg_word(_ha, CMDP_REG(_n, 0)), \
245 asd_read_reg_word(_ha, CMDP_REG(_n, 1)), \
246 asd_read_reg_word(_ha, CMDP_REG(_n, 2)), \
247 asd_read_reg_word(_ha, CMDP_REG(_n, 3)), \
248 asd_read_reg_word(_ha, CMDP_REG(_n, 4)), \
249 asd_read_reg_word(_ha, CMDP_REG(_n, 5)), \
250 asd_read_reg_word(_ha, CMDP_REG(_n, 6)), \
251 asd_read_reg_word(_ha, CMDP_REG(_n, 7)))
252
253 #define PRINT_CMDP_byte(_ha, _n) \
254 asd_printk("%20s 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", \
255 #_n, \
256 asd_read_reg_byte(_ha, CMDP_REG(_n, 0)), \
257 asd_read_reg_byte(_ha, CMDP_REG(_n, 1)), \
258 asd_read_reg_byte(_ha, CMDP_REG(_n, 2)), \
259 asd_read_reg_byte(_ha, CMDP_REG(_n, 3)), \
260 asd_read_reg_byte(_ha, CMDP_REG(_n, 4)), \
261 asd_read_reg_byte(_ha, CMDP_REG(_n, 5)), \
262 asd_read_reg_byte(_ha, CMDP_REG(_n, 6)), \
263 asd_read_reg_byte(_ha, CMDP_REG(_n, 7)))
264
265 static void asd_dump_cseq_state(struct asd_ha_struct *asd_ha)
266 {
267 int mode;
268
269 asd_printk("CSEQ STATE\n");
270
271 asd_printk("ARP2 REGISTERS\n");
272
273 PRINT_CREG_32bit(asd_ha, ARP2CTL);
274 PRINT_CREG_32bit(asd_ha, ARP2INT);
275 PRINT_CREG_32bit(asd_ha, ARP2INTEN);
276 PRINT_CREG_8bit(asd_ha, MODEPTR);
277 PRINT_CREG_8bit(asd_ha, ALTMODE);
278 PRINT_CREG_8bit(asd_ha, FLAG);
279 PRINT_CREG_8bit(asd_ha, ARP2INTCTL);
280 PRINT_CREG_16bit(asd_ha, STACK);
281 PRINT_CREG_16bit(asd_ha, PRGMCNT);
282 PRINT_CREG_16bit(asd_ha, ACCUM);
283 PRINT_CREG_16bit(asd_ha, SINDEX);
284 PRINT_CREG_16bit(asd_ha, DINDEX);
285 PRINT_CREG_8bit(asd_ha, SINDIR);
286 PRINT_CREG_8bit(asd_ha, DINDIR);
287 PRINT_CREG_8bit(asd_ha, JUMLDIR);
288 PRINT_CREG_8bit(asd_ha, ARP2HALTCODE);
289 PRINT_CREG_16bit(asd_ha, CURRADDR);
290 PRINT_CREG_16bit(asd_ha, LASTADDR);
291 PRINT_CREG_16bit(asd_ha, NXTLADDR);
292
293 asd_printk("IOP REGISTERS\n");
294
295 PRINT_REG_32bit(asd_ha, BISTCTL1, CBISTCTL);
296 PRINT_CREG_32bit(asd_ha, MAPPEDSCR);
297
298 asd_printk("CIO REGISTERS\n");
299
300 for (mode = 0; mode < 9; mode++)
301 PRINT_MREG_16bit(asd_ha, mode, MnSCBPTR, CMnSCBPTR(mode));
302 PRINT_MREG_16bit(asd_ha, 15, MnSCBPTR, CMnSCBPTR(15));
303
304 for (mode = 0; mode < 9; mode++)
305 PRINT_MREG_16bit(asd_ha, mode, MnDDBPTR, CMnDDBPTR(mode));
306 PRINT_MREG_16bit(asd_ha, 15, MnDDBPTR, CMnDDBPTR(15));
307
308 for (mode = 0; mode < 8; mode++)
309 PRINT_MREG_32bit(asd_ha, mode, MnREQMBX, CMnREQMBX(mode));
310 for (mode = 0; mode < 8; mode++)
311 PRINT_MREG_32bit(asd_ha, mode, MnRSPMBX, CMnRSPMBX(mode));
312 for (mode = 0; mode < 8; mode++)
313 PRINT_MREG_32bit(asd_ha, mode, MnINT, CMnINT(mode));
314 for (mode = 0; mode < 8; mode++)
315 PRINT_MREG_32bit(asd_ha, mode, MnINTEN, CMnINTEN(mode));
316
317 PRINT_CREG_8bit(asd_ha, SCRATCHPAGE);
318 for (mode = 0; mode < 8; mode++)
319 PRINT_MREG_8bit(asd_ha, mode, MnSCRATCHPAGE,
320 CMnSCRATCHPAGE(mode));
321
322 PRINT_REG_32bit(asd_ha, CLINKCON, CLINKCON);
323 PRINT_REG_8bit(asd_ha, CCONMSK, CCONMSK);
324 PRINT_REG_8bit(asd_ha, CCONEXIST, CCONEXIST);
325 PRINT_REG_16bit(asd_ha, CCONMODE, CCONMODE);
326 PRINT_REG_32bit(asd_ha, CTIMERCALC, CTIMERCALC);
327 PRINT_REG_8bit(asd_ha, CINTDIS, CINTDIS);
328
329 asd_printk("SCRATCH MEMORY\n");
330
331 asd_printk("MIP 4 >>>>>\n");
332 PRINT_MIS_word(asd_ha, Q_EXE_HEAD);
333 PRINT_MIS_word(asd_ha, Q_EXE_TAIL);
334 PRINT_MIS_word(asd_ha, Q_DONE_HEAD);
335 PRINT_MIS_word(asd_ha, Q_DONE_TAIL);
336 PRINT_MIS_word(asd_ha, Q_SEND_HEAD);
337 PRINT_MIS_word(asd_ha, Q_SEND_TAIL);
338 PRINT_MIS_word(asd_ha, Q_DMA2CHIM_HEAD);
339 PRINT_MIS_word(asd_ha, Q_DMA2CHIM_TAIL);
340 PRINT_MIS_word(asd_ha, Q_COPY_HEAD);
341 PRINT_MIS_word(asd_ha, Q_COPY_TAIL);
342 PRINT_MIS_word(asd_ha, REG0);
343 PRINT_MIS_word(asd_ha, REG1);
344 PRINT_MIS_dword(asd_ha, REG2);
345 PRINT_MIS_byte(asd_ha, LINK_CTL_Q_MAP);
346 PRINT_MIS_byte(asd_ha, MAX_CSEQ_MODE);
347 PRINT_MIS_byte(asd_ha, FREE_LIST_HACK_COUNT);
348
349 asd_printk("MIP 5 >>>>\n");
350 PRINT_MIS_qword(asd_ha, EST_NEXUS_REQ_QUEUE);
351 PRINT_MIS_qword(asd_ha, EST_NEXUS_REQ_COUNT);
352 PRINT_MIS_word(asd_ha, Q_EST_NEXUS_HEAD);
353 PRINT_MIS_word(asd_ha, Q_EST_NEXUS_TAIL);
354 PRINT_MIS_word(asd_ha, NEED_EST_NEXUS_SCB);
355 PRINT_MIS_byte(asd_ha, EST_NEXUS_REQ_HEAD);
356 PRINT_MIS_byte(asd_ha, EST_NEXUS_REQ_TAIL);
357 PRINT_MIS_byte(asd_ha, EST_NEXUS_SCB_OFFSET);
358
359 asd_printk("MIP 6 >>>>\n");
360 PRINT_MIS_word(asd_ha, INT_ROUT_RET_ADDR0);
361 PRINT_MIS_word(asd_ha, INT_ROUT_RET_ADDR1);
362 PRINT_MIS_word(asd_ha, INT_ROUT_SCBPTR);
363 PRINT_MIS_byte(asd_ha, INT_ROUT_MODE);
364 PRINT_MIS_byte(asd_ha, ISR_SCRATCH_FLAGS);
365 PRINT_MIS_word(asd_ha, ISR_SAVE_SINDEX);
366 PRINT_MIS_word(asd_ha, ISR_SAVE_DINDEX);
367 PRINT_MIS_word(asd_ha, Q_MONIRTT_HEAD);
368 PRINT_MIS_word(asd_ha, Q_MONIRTT_TAIL);
369 PRINT_MIS_byte(asd_ha, FREE_SCB_MASK);
370 PRINT_MIS_word(asd_ha, BUILTIN_FREE_SCB_HEAD);
371 PRINT_MIS_word(asd_ha, BUILTIN_FREE_SCB_TAIL);
372 PRINT_MIS_word(asd_ha, EXTENDED_FREE_SCB_HEAD);
373 PRINT_MIS_word(asd_ha, EXTENDED_FREE_SCB_TAIL);
374
375 asd_printk("MIP 7 >>>>\n");
376 PRINT_MIS_qword(asd_ha, EMPTY_REQ_QUEUE);
377 PRINT_MIS_qword(asd_ha, EMPTY_REQ_COUNT);
378 PRINT_MIS_word(asd_ha, Q_EMPTY_HEAD);
379 PRINT_MIS_word(asd_ha, Q_EMPTY_TAIL);
380 PRINT_MIS_word(asd_ha, NEED_EMPTY_SCB);
381 PRINT_MIS_byte(asd_ha, EMPTY_REQ_HEAD);
382 PRINT_MIS_byte(asd_ha, EMPTY_REQ_TAIL);
383 PRINT_MIS_byte(asd_ha, EMPTY_SCB_OFFSET);
384 PRINT_MIS_word(asd_ha, PRIMITIVE_DATA);
385 PRINT_MIS_dword(asd_ha, TIMEOUT_CONST);
386
387 asd_printk("MDP 0 >>>>\n");
388 asd_printk("%-20s %6s %6s %6s %6s %6s %6s %6s %6s\n",
389 "Mode: ", "0", "1", "2", "3", "4", "5", "6", "7");
390 PRINT_CMDP_word(asd_ha, LRM_SAVE_SINDEX);
391 PRINT_CMDP_word(asd_ha, LRM_SAVE_SCBPTR);
392 PRINT_CMDP_word(asd_ha, Q_LINK_HEAD);
393 PRINT_CMDP_word(asd_ha, Q_LINK_TAIL);
394 PRINT_CMDP_byte(asd_ha, LRM_SAVE_SCRPAGE);
395
396 asd_printk("MDP 0 Mode 8 >>>>\n");
397 PRINT_MIS_word(asd_ha, RET_ADDR);
398 PRINT_MIS_word(asd_ha, RET_SCBPTR);
399 PRINT_MIS_word(asd_ha, SAVE_SCBPTR);
400 PRINT_MIS_word(asd_ha, EMPTY_TRANS_CTX);
401 PRINT_MIS_word(asd_ha, RESP_LEN);
402 PRINT_MIS_word(asd_ha, TMF_SCBPTR);
403 PRINT_MIS_word(asd_ha, GLOBAL_PREV_SCB);
404 PRINT_MIS_word(asd_ha, GLOBAL_HEAD);
405 PRINT_MIS_word(asd_ha, CLEAR_LU_HEAD);
406 PRINT_MIS_byte(asd_ha, TMF_OPCODE);
407 PRINT_MIS_byte(asd_ha, SCRATCH_FLAGS);
408 PRINT_MIS_word(asd_ha, HSB_SITE);
409 PRINT_MIS_word(asd_ha, FIRST_INV_SCB_SITE);
410 PRINT_MIS_word(asd_ha, FIRST_INV_DDB_SITE);
411
412 asd_printk("MDP 1 Mode 8 >>>>\n");
413 PRINT_MIS_qword(asd_ha, LUN_TO_CLEAR);
414 PRINT_MIS_qword(asd_ha, LUN_TO_CHECK);
415
416 asd_printk("MDP 2 Mode 8 >>>>\n");
417 PRINT_MIS_qword(asd_ha, HQ_NEW_POINTER);
418 PRINT_MIS_qword(asd_ha, HQ_DONE_BASE);
419 PRINT_MIS_dword(asd_ha, HQ_DONE_POINTER);
420 PRINT_MIS_byte(asd_ha, HQ_DONE_PASS);
421 }
422
423 #define PRINT_LREG_8bit(_h, _lseq, _n) \
424 asd_printk(STR_8BIT, #_n, _n, asd_read_reg_byte(_h, Lm##_n(_lseq)))
425 #define PRINT_LREG_16bit(_h, _lseq, _n) \
426 asd_printk(STR_16BIT, #_n, _n, asd_read_reg_word(_h, Lm##_n(_lseq)))
427 #define PRINT_LREG_32bit(_h, _lseq, _n) \
428 asd_printk(STR_32BIT, #_n, _n, asd_read_reg_dword(_h, Lm##_n(_lseq)))
429
430 #define PRINT_LMIP_byte(_h, _lseq, _n) \
431 asd_printk(STR_8BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
432 asd_read_reg_byte(_h, LmSEQ_##_n(_lseq)))
433 #define PRINT_LMIP_word(_h, _lseq, _n) \
434 asd_printk(STR_16BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
435 asd_read_reg_word(_h, LmSEQ_##_n(_lseq)))
436 #define PRINT_LMIP_dword(_h, _lseq, _n) \
437 asd_printk(STR_32BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
438 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq)))
439 #define PRINT_LMIP_qword(_h, _lseq, _n) \
440 asd_printk(STR_64BIT, #_n, LmSEQ_##_n(_lseq)-LmSCRATCH(_lseq), \
441 (unsigned long long)(((unsigned long long) \
442 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq))) \
443 | (((unsigned long long) \
444 asd_read_reg_dword(_h, LmSEQ_##_n(_lseq)+4))<<32)))
445
446 static void asd_print_lseq_cio_reg(struct asd_ha_struct *asd_ha,
447 u32 lseq_cio_addr, int i)
448 {
449 switch (LSEQmCIOREGS[i].width) {
450 case 8:
451 asd_printk("%20s[0x%x]: 0x%02x\n", LSEQmCIOREGS[i].name,
452 LSEQmCIOREGS[i].offs,
453 asd_read_reg_byte(asd_ha, lseq_cio_addr +
454 LSEQmCIOREGS[i].offs));
455
456 break;
457 case 16:
458 asd_printk("%20s[0x%x]: 0x%04x\n", LSEQmCIOREGS[i].name,
459 LSEQmCIOREGS[i].offs,
460 asd_read_reg_word(asd_ha, lseq_cio_addr +
461 LSEQmCIOREGS[i].offs));
462
463 break;
464 case 32:
465 asd_printk("%20s[0x%x]: 0x%08x\n", LSEQmCIOREGS[i].name,
466 LSEQmCIOREGS[i].offs,
467 asd_read_reg_dword(asd_ha, lseq_cio_addr +
468 LSEQmCIOREGS[i].offs));
469 break;
470 }
471 }
472
473 static void asd_dump_lseq_state(struct asd_ha_struct *asd_ha, int lseq)
474 {
475 u32 moffs;
476 int mode;
477
478 asd_printk("LSEQ %d STATE\n", lseq);
479
480 asd_printk("LSEQ%d: ARP2 REGISTERS\n", lseq);
481 PRINT_LREG_32bit(asd_ha, lseq, ARP2CTL);
482 PRINT_LREG_32bit(asd_ha, lseq, ARP2INT);
483 PRINT_LREG_32bit(asd_ha, lseq, ARP2INTEN);
484 PRINT_LREG_8bit(asd_ha, lseq, MODEPTR);
485 PRINT_LREG_8bit(asd_ha, lseq, ALTMODE);
486 PRINT_LREG_8bit(asd_ha, lseq, FLAG);
487 PRINT_LREG_8bit(asd_ha, lseq, ARP2INTCTL);
488 PRINT_LREG_16bit(asd_ha, lseq, STACK);
489 PRINT_LREG_16bit(asd_ha, lseq, PRGMCNT);
490 PRINT_LREG_16bit(asd_ha, lseq, ACCUM);
491 PRINT_LREG_16bit(asd_ha, lseq, SINDEX);
492 PRINT_LREG_16bit(asd_ha, lseq, DINDEX);
493 PRINT_LREG_8bit(asd_ha, lseq, SINDIR);
494 PRINT_LREG_8bit(asd_ha, lseq, DINDIR);
495 PRINT_LREG_8bit(asd_ha, lseq, JUMLDIR);
496 PRINT_LREG_8bit(asd_ha, lseq, ARP2HALTCODE);
497 PRINT_LREG_16bit(asd_ha, lseq, CURRADDR);
498 PRINT_LREG_16bit(asd_ha, lseq, LASTADDR);
499 PRINT_LREG_16bit(asd_ha, lseq, NXTLADDR);
500
501 asd_printk("LSEQ%d: IOP REGISTERS\n", lseq);
502
503 PRINT_LREG_32bit(asd_ha, lseq, MODECTL);
504 PRINT_LREG_32bit(asd_ha, lseq, DBGMODE);
505 PRINT_LREG_32bit(asd_ha, lseq, CONTROL);
506 PRINT_REG_32bit(asd_ha, BISTCTL0, LmBISTCTL0(lseq));
507 PRINT_REG_32bit(asd_ha, BISTCTL1, LmBISTCTL1(lseq));
508
509 asd_printk("LSEQ%d: CIO REGISTERS\n", lseq);
510 asd_printk("Mode common:\n");
511
512 for (mode = 0; mode < 8; mode++) {
513 u32 lseq_cio_addr = LmSEQ_PHY_BASE(mode, lseq);
514 int i;
515
516 for (i = 0; LSEQmCIOREGS[i].name; i++)
517 if (LSEQmCIOREGS[i].mode == MODE_COMMON)
518 asd_print_lseq_cio_reg(asd_ha,lseq_cio_addr,i);
519 }
520
521 asd_printk("Mode unique:\n");
522 for (mode = 0; mode < 8; mode++) {
523 u32 lseq_cio_addr = LmSEQ_PHY_BASE(mode, lseq);
524 int i;
525
526 asd_printk("Mode %d\n", mode);
527 for (i = 0; LSEQmCIOREGS[i].name; i++) {
528 if (!(LSEQmCIOREGS[i].mode & (1 << mode)))
529 continue;
530 asd_print_lseq_cio_reg(asd_ha, lseq_cio_addr, i);
531 }
532 }
533
534 asd_printk("SCRATCH MEMORY\n");
535
536 asd_printk("LSEQ%d MIP 0 >>>>\n", lseq);
537 PRINT_LMIP_word(asd_ha, lseq, Q_TGTXFR_HEAD);
538 PRINT_LMIP_word(asd_ha, lseq, Q_TGTXFR_TAIL);
539 PRINT_LMIP_byte(asd_ha, lseq, LINK_NUMBER);
540 PRINT_LMIP_byte(asd_ha, lseq, SCRATCH_FLAGS);
541 PRINT_LMIP_dword(asd_ha, lseq, CONNECTION_STATE);
542 PRINT_LMIP_word(asd_ha, lseq, CONCTL);
543 PRINT_LMIP_byte(asd_ha, lseq, CONSTAT);
544 PRINT_LMIP_byte(asd_ha, lseq, CONNECTION_MODES);
545 PRINT_LMIP_word(asd_ha, lseq, REG1_ISR);
546 PRINT_LMIP_word(asd_ha, lseq, REG2_ISR);
547 PRINT_LMIP_word(asd_ha, lseq, REG3_ISR);
548 PRINT_LMIP_qword(asd_ha, lseq,REG0_ISR);
549
550 asd_printk("LSEQ%d MIP 1 >>>>\n", lseq);
551 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR0);
552 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR1);
553 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR2);
554 PRINT_LMIP_word(asd_ha, lseq, EST_NEXUS_SCBPTR3);
555 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE0);
556 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE1);
557 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE2);
558 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_OPCODE3);
559 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_HEAD);
560 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_SCB_TAIL);
561 PRINT_LMIP_byte(asd_ha, lseq, EST_NEXUS_BUF_AVAIL);
562 PRINT_LMIP_dword(asd_ha, lseq, TIMEOUT_CONST);
563 PRINT_LMIP_word(asd_ha, lseq, ISR_SAVE_SINDEX);
564 PRINT_LMIP_word(asd_ha, lseq, ISR_SAVE_DINDEX);
565
566 asd_printk("LSEQ%d MIP 2 >>>>\n", lseq);
567 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR0);
568 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR1);
569 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR2);
570 PRINT_LMIP_word(asd_ha, lseq, EMPTY_SCB_PTR3);
571 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD0);
572 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD1);
573 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD2);
574 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_OPCD3);
575 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_HEAD);
576 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_SCB_TAIL);
577 PRINT_LMIP_byte(asd_ha, lseq, EMPTY_BUFS_AVAIL);
578
579 asd_printk("LSEQ%d MIP 3 >>>>\n", lseq);
580 PRINT_LMIP_dword(asd_ha, lseq, DEV_PRES_TMR_TOUT_CONST);
581 PRINT_LMIP_dword(asd_ha, lseq, SATA_INTERLOCK_TIMEOUT);
582 PRINT_LMIP_dword(asd_ha, lseq, SRST_ASSERT_TIMEOUT);
583 PRINT_LMIP_dword(asd_ha, lseq, RCV_FIS_TIMEOUT);
584 PRINT_LMIP_dword(asd_ha, lseq, ONE_MILLISEC_TIMEOUT);
585 PRINT_LMIP_dword(asd_ha, lseq, TEN_MS_COMINIT_TIMEOUT);
586 PRINT_LMIP_dword(asd_ha, lseq, SMP_RCV_TIMEOUT);
587
588 for (mode = 0; mode < 3; mode++) {
589 asd_printk("LSEQ%d MDP 0 MODE %d >>>>\n", lseq, mode);
590 moffs = mode * LSEQ_MODE_SCRATCH_SIZE;
591
592 asd_printk(STR_16BIT, "RET_ADDR", 0,
593 asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR(lseq)
594 + moffs));
595 asd_printk(STR_16BIT, "REG0_MODE", 2,
596 asd_read_reg_word(asd_ha, LmSEQ_REG0_MODE(lseq)
597 + moffs));
598 asd_printk(STR_16BIT, "MODE_FLAGS", 4,
599 asd_read_reg_word(asd_ha, LmSEQ_MODE_FLAGS(lseq)
600 + moffs));
601 asd_printk(STR_16BIT, "RET_ADDR2", 0x6,
602 asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR2(lseq)
603 + moffs));
604 asd_printk(STR_16BIT, "RET_ADDR1", 0x8,
605 asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR1(lseq)
606 + moffs));
607 asd_printk(STR_8BIT, "OPCODE_TO_CSEQ", 0xB,
608 asd_read_reg_byte(asd_ha, LmSEQ_OPCODE_TO_CSEQ(lseq)
609 + moffs));
610 asd_printk(STR_16BIT, "DATA_TO_CSEQ", 0xC,
611 asd_read_reg_word(asd_ha, LmSEQ_DATA_TO_CSEQ(lseq)
612 + moffs));
613 }
614
615 asd_printk("LSEQ%d MDP 0 MODE 5 >>>>\n", lseq);
616 moffs = LSEQ_MODE5_PAGE0_OFFSET;
617 asd_printk(STR_16BIT, "RET_ADDR", 0,
618 asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR(lseq) + moffs));
619 asd_printk(STR_16BIT, "REG0_MODE", 2,
620 asd_read_reg_word(asd_ha, LmSEQ_REG0_MODE(lseq) + moffs));
621 asd_printk(STR_16BIT, "MODE_FLAGS", 4,
622 asd_read_reg_word(asd_ha, LmSEQ_MODE_FLAGS(lseq) + moffs));
623 asd_printk(STR_16BIT, "RET_ADDR2", 0x6,
624 asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR2(lseq) + moffs));
625 asd_printk(STR_16BIT, "RET_ADDR1", 0x8,
626 asd_read_reg_word(asd_ha, LmSEQ_RET_ADDR1(lseq) + moffs));
627 asd_printk(STR_8BIT, "OPCODE_TO_CSEQ", 0xB,
628 asd_read_reg_byte(asd_ha, LmSEQ_OPCODE_TO_CSEQ(lseq) + moffs));
629 asd_printk(STR_16BIT, "DATA_TO_CSEQ", 0xC,
630 asd_read_reg_word(asd_ha, LmSEQ_DATA_TO_CSEQ(lseq) + moffs));
631
632 asd_printk("LSEQ%d MDP 0 MODE 0 >>>>\n", lseq);
633 PRINT_LMIP_word(asd_ha, lseq, FIRST_INV_DDB_SITE);
634 PRINT_LMIP_word(asd_ha, lseq, EMPTY_TRANS_CTX);
635 PRINT_LMIP_word(asd_ha, lseq, RESP_LEN);
636 PRINT_LMIP_word(asd_ha, lseq, FIRST_INV_SCB_SITE);
637 PRINT_LMIP_dword(asd_ha, lseq, INTEN_SAVE);
638 PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_FRM_LEN);
639 PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_PROTOCOL);
640 PRINT_LMIP_byte(asd_ha, lseq, RESP_STATUS);
641 PRINT_LMIP_byte(asd_ha, lseq, LAST_LOADED_SGE);
642 PRINT_LMIP_byte(asd_ha, lseq, SAVE_SCBPTR);
643
644 asd_printk("LSEQ%d MDP 0 MODE 1 >>>>\n", lseq);
645 PRINT_LMIP_word(asd_ha, lseq, Q_XMIT_HEAD);
646 PRINT_LMIP_word(asd_ha, lseq, M1_EMPTY_TRANS_CTX);
647 PRINT_LMIP_word(asd_ha, lseq, INI_CONN_TAG);
648 PRINT_LMIP_byte(asd_ha, lseq, FAILED_OPEN_STATUS);
649 PRINT_LMIP_byte(asd_ha, lseq, XMIT_REQUEST_TYPE);
650 PRINT_LMIP_byte(asd_ha, lseq, M1_RESP_STATUS);
651 PRINT_LMIP_byte(asd_ha, lseq, M1_LAST_LOADED_SGE);
652 PRINT_LMIP_word(asd_ha, lseq, M1_SAVE_SCBPTR);
653
654 asd_printk("LSEQ%d MDP 0 MODE 2 >>>>\n", lseq);
655 PRINT_LMIP_word(asd_ha, lseq, PORT_COUNTER);
656 PRINT_LMIP_word(asd_ha, lseq, PM_TABLE_PTR);
657 PRINT_LMIP_word(asd_ha, lseq, SATA_INTERLOCK_TMR_SAVE);
658 PRINT_LMIP_word(asd_ha, lseq, IP_BITL);
659 PRINT_LMIP_word(asd_ha, lseq, COPY_SMP_CONN_TAG);
660 PRINT_LMIP_byte(asd_ha, lseq, P0M2_OFFS1AH);
661
662 asd_printk("LSEQ%d MDP 0 MODE 4/5 >>>>\n", lseq);
663 PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_STATUS);
664 PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_MODE);
665 PRINT_LMIP_word(asd_ha, lseq, Q_LINK_HEAD);
666 PRINT_LMIP_byte(asd_ha, lseq, LINK_RST_ERR);
667 PRINT_LMIP_byte(asd_ha, lseq, SAVED_OOB_SIGNALS);
668 PRINT_LMIP_byte(asd_ha, lseq, SAS_RESET_MODE);
669 PRINT_LMIP_byte(asd_ha, lseq, LINK_RESET_RETRY_COUNT);
670 PRINT_LMIP_byte(asd_ha, lseq, NUM_LINK_RESET_RETRIES);
671 PRINT_LMIP_word(asd_ha, lseq, OOB_INT_ENABLES);
672 PRINT_LMIP_word(asd_ha, lseq, NOTIFY_TIMER_TIMEOUT);
673 PRINT_LMIP_word(asd_ha, lseq, NOTIFY_TIMER_DOWN_COUNT);
674
675 asd_printk("LSEQ%d MDP 1 MODE 0 >>>>\n", lseq);
676 PRINT_LMIP_qword(asd_ha, lseq, SG_LIST_PTR_ADDR0);
677 PRINT_LMIP_qword(asd_ha, lseq, SG_LIST_PTR_ADDR1);
678
679 asd_printk("LSEQ%d MDP 1 MODE 1 >>>>\n", lseq);
680 PRINT_LMIP_qword(asd_ha, lseq, M1_SG_LIST_PTR_ADDR0);
681 PRINT_LMIP_qword(asd_ha, lseq, M1_SG_LIST_PTR_ADDR1);
682
683 asd_printk("LSEQ%d MDP 1 MODE 2 >>>>\n", lseq);
684 PRINT_LMIP_dword(asd_ha, lseq, INVALID_DWORD_COUNT);
685 PRINT_LMIP_dword(asd_ha, lseq, DISPARITY_ERROR_COUNT);
686 PRINT_LMIP_dword(asd_ha, lseq, LOSS_OF_SYNC_COUNT);
687
688 asd_printk("LSEQ%d MDP 1 MODE 4/5 >>>>\n", lseq);
689 PRINT_LMIP_dword(asd_ha, lseq, FRAME_TYPE_MASK);
690 PRINT_LMIP_dword(asd_ha, lseq, HASHED_SRC_ADDR_MASK_PRINT);
691 PRINT_LMIP_byte(asd_ha, lseq, NUM_FILL_BYTES_MASK);
692 PRINT_LMIP_word(asd_ha, lseq, TAG_MASK);
693 PRINT_LMIP_word(asd_ha, lseq, TARGET_PORT_XFER_TAG);
694 PRINT_LMIP_dword(asd_ha, lseq, DATA_OFFSET);
695
696 asd_printk("LSEQ%d MDP 2 MODE 0 >>>>\n", lseq);
697 PRINT_LMIP_dword(asd_ha, lseq, SMP_RCV_TIMER_TERM_TS);
698 PRINT_LMIP_byte(asd_ha, lseq, DEVICE_BITS);
699 PRINT_LMIP_word(asd_ha, lseq, SDB_DDB);
700 PRINT_LMIP_word(asd_ha, lseq, SDB_NUM_TAGS);
701 PRINT_LMIP_word(asd_ha, lseq, SDB_CURR_TAG);
702
703 asd_printk("LSEQ%d MDP 2 MODE 1 >>>>\n", lseq);
704 PRINT_LMIP_qword(asd_ha, lseq, TX_ID_ADDR_FRAME);
705 PRINT_LMIP_dword(asd_ha, lseq, OPEN_TIMER_TERM_TS);
706 PRINT_LMIP_dword(asd_ha, lseq, SRST_AS_TIMER_TERM_TS);
707 PRINT_LMIP_dword(asd_ha, lseq, LAST_LOADED_SG_EL);
708
709 asd_printk("LSEQ%d MDP 2 MODE 2 >>>>\n", lseq);
710 PRINT_LMIP_dword(asd_ha, lseq, CLOSE_TIMER_TERM_TS);
711 PRINT_LMIP_dword(asd_ha, lseq, BREAK_TIMER_TERM_TS);
712 PRINT_LMIP_dword(asd_ha, lseq, DWS_RESET_TIMER_TERM_TS);
713 PRINT_LMIP_dword(asd_ha, lseq, SATA_INTERLOCK_TIMER_TERM_TS);
714 PRINT_LMIP_dword(asd_ha, lseq, MCTL_TIMER_TERM_TS);
715
716 asd_printk("LSEQ%d MDP 2 MODE 4/5 >>>>\n", lseq);
717 PRINT_LMIP_dword(asd_ha, lseq, COMINIT_TIMER_TERM_TS);
718 PRINT_LMIP_dword(asd_ha, lseq, RCV_ID_TIMER_TERM_TS);
719 PRINT_LMIP_dword(asd_ha, lseq, RCV_FIS_TIMER_TERM_TS);
720 PRINT_LMIP_dword(asd_ha, lseq, DEV_PRES_TIMER_TERM_TS);
721 }
722
723 #if 0
724
725
726
727
728
729
730 void asd_dump_target_ddb(struct asd_ha_struct *asd_ha, u16 site_no)
731 {
732 if (site_no >= asd_ha->hw_prof.max_ddbs)
733 return;
734
735 #define DDB_FIELDB(__name) \
736 asd_ddbsite_read_byte(asd_ha, site_no, \
737 offsetof(struct asd_ddb_ssp_smp_target_port, __name))
738 #define DDB2_FIELDB(__name) \
739 asd_ddbsite_read_byte(asd_ha, site_no, \
740 offsetof(struct asd_ddb_stp_sata_target_port, __name))
741 #define DDB_FIELDW(__name) \
742 asd_ddbsite_read_word(asd_ha, site_no, \
743 offsetof(struct asd_ddb_ssp_smp_target_port, __name))
744
745 #define DDB_FIELDD(__name) \
746 asd_ddbsite_read_dword(asd_ha, site_no, \
747 offsetof(struct asd_ddb_ssp_smp_target_port, __name))
748
749 asd_printk("DDB: 0x%02x\n", site_no);
750 asd_printk("conn_type: 0x%02x\n", DDB_FIELDB(conn_type));
751 asd_printk("conn_rate: 0x%02x\n", DDB_FIELDB(conn_rate));
752 asd_printk("init_conn_tag: 0x%04x\n", be16_to_cpu(DDB_FIELDW(init_conn_tag)));
753 asd_printk("send_queue_head: 0x%04x\n", be16_to_cpu(DDB_FIELDW(send_queue_head)));
754 asd_printk("sq_suspended: 0x%02x\n", DDB_FIELDB(sq_suspended));
755 asd_printk("DDB Type: 0x%02x\n", DDB_FIELDB(ddb_type));
756 asd_printk("AWT Default: 0x%04x\n", DDB_FIELDW(awt_def));
757 asd_printk("compat_features: 0x%02x\n", DDB_FIELDB(compat_features));
758 asd_printk("Pathway Blocked Count: 0x%02x\n",
759 DDB_FIELDB(pathway_blocked_count));
760 asd_printk("arb_wait_time: 0x%04x\n", DDB_FIELDW(arb_wait_time));
761 asd_printk("more_compat_features: 0x%08x\n",
762 DDB_FIELDD(more_compat_features));
763 asd_printk("Conn Mask: 0x%02x\n", DDB_FIELDB(conn_mask));
764 asd_printk("flags: 0x%02x\n", DDB_FIELDB(flags));
765 asd_printk("flags2: 0x%02x\n", DDB2_FIELDB(flags2));
766 asd_printk("ExecQ Tail: 0x%04x\n",DDB_FIELDW(exec_queue_tail));
767 asd_printk("SendQ Tail: 0x%04x\n",DDB_FIELDW(send_queue_tail));
768 asd_printk("Active Task Count: 0x%04x\n",
769 DDB_FIELDW(active_task_count));
770 asd_printk("ITNL Reason: 0x%02x\n", DDB_FIELDB(itnl_reason));
771 asd_printk("ITNL Timeout Const: 0x%04x\n", DDB_FIELDW(itnl_timeout));
772 asd_printk("ITNL timestamp: 0x%08x\n", DDB_FIELDD(itnl_timestamp));
773 }
774
775 void asd_dump_ddb_0(struct asd_ha_struct *asd_ha)
776 {
777 #define DDB0_FIELDB(__name) \
778 asd_ddbsite_read_byte(asd_ha, 0, \
779 offsetof(struct asd_ddb_seq_shared, __name))
780 #define DDB0_FIELDW(__name) \
781 asd_ddbsite_read_word(asd_ha, 0, \
782 offsetof(struct asd_ddb_seq_shared, __name))
783
784 #define DDB0_FIELDD(__name) \
785 asd_ddbsite_read_dword(asd_ha,0 , \
786 offsetof(struct asd_ddb_seq_shared, __name))
787
788 #define DDB0_FIELDA(__name, _o) \
789 asd_ddbsite_read_byte(asd_ha, 0, \
790 offsetof(struct asd_ddb_seq_shared, __name)+_o)
791
792
793 asd_printk("DDB: 0\n");
794 asd_printk("q_free_ddb_head:%04x\n", DDB0_FIELDW(q_free_ddb_head));
795 asd_printk("q_free_ddb_tail:%04x\n", DDB0_FIELDW(q_free_ddb_tail));
796 asd_printk("q_free_ddb_cnt:%04x\n", DDB0_FIELDW(q_free_ddb_cnt));
797 asd_printk("q_used_ddb_head:%04x\n", DDB0_FIELDW(q_used_ddb_head));
798 asd_printk("q_used_ddb_tail:%04x\n", DDB0_FIELDW(q_used_ddb_tail));
799 asd_printk("shared_mem_lock:%04x\n", DDB0_FIELDW(shared_mem_lock));
800 asd_printk("smp_conn_tag:%04x\n", DDB0_FIELDW(smp_conn_tag));
801 asd_printk("est_nexus_buf_cnt:%04x\n", DDB0_FIELDW(est_nexus_buf_cnt));
802 asd_printk("est_nexus_buf_thresh:%04x\n",
803 DDB0_FIELDW(est_nexus_buf_thresh));
804 asd_printk("conn_not_active:%02x\n", DDB0_FIELDB(conn_not_active));
805 asd_printk("phy_is_up:%02x\n", DDB0_FIELDB(phy_is_up));
806 asd_printk("port_map_by_links:%02x %02x %02x %02x "
807 "%02x %02x %02x %02x\n",
808 DDB0_FIELDA(port_map_by_links, 0),
809 DDB0_FIELDA(port_map_by_links, 1),
810 DDB0_FIELDA(port_map_by_links, 2),
811 DDB0_FIELDA(port_map_by_links, 3),
812 DDB0_FIELDA(port_map_by_links, 4),
813 DDB0_FIELDA(port_map_by_links, 5),
814 DDB0_FIELDA(port_map_by_links, 6),
815 DDB0_FIELDA(port_map_by_links, 7));
816 }
817
818 static void asd_dump_scb_site(struct asd_ha_struct *asd_ha, u16 site_no)
819 {
820
821 #define SCB_FIELDB(__name) \
822 asd_scbsite_read_byte(asd_ha, site_no, sizeof(struct scb_header) \
823 + offsetof(struct initiate_ssp_task, __name))
824 #define SCB_FIELDW(__name) \
825 asd_scbsite_read_word(asd_ha, site_no, sizeof(struct scb_header) \
826 + offsetof(struct initiate_ssp_task, __name))
827 #define SCB_FIELDD(__name) \
828 asd_scbsite_read_dword(asd_ha, site_no, sizeof(struct scb_header) \
829 + offsetof(struct initiate_ssp_task, __name))
830
831 asd_printk("Total Xfer Len: 0x%08x.\n", SCB_FIELDD(total_xfer_len));
832 asd_printk("Frame Type: 0x%02x.\n", SCB_FIELDB(ssp_frame.frame_type));
833 asd_printk("Tag: 0x%04x.\n", SCB_FIELDW(ssp_frame.tag));
834 asd_printk("Target Port Xfer Tag: 0x%04x.\n",
835 SCB_FIELDW(ssp_frame.tptt));
836 asd_printk("Data Offset: 0x%08x.\n", SCB_FIELDW(ssp_frame.data_offs));
837 asd_printk("Retry Count: 0x%02x.\n", SCB_FIELDB(retry_count));
838 }
839
840
841
842
843
844 void asd_dump_scb_sites(struct asd_ha_struct *asd_ha)
845 {
846 u16 site_no;
847
848 for (site_no = 0; site_no < asd_ha->hw_prof.max_scbs; site_no++) {
849 u8 opcode;
850
851 if (!SCB_SITE_VALID(site_no))
852 continue;
853
854
855
856 opcode = asd_scbsite_read_byte(asd_ha, site_no,
857 offsetof(struct scb_header,
858 opcode));
859 if (opcode == 0xFF)
860 continue;
861
862 asd_printk("\nSCB: 0x%x\n", site_no);
863 asd_dump_scb_site(asd_ha, site_no);
864 }
865 }
866
867 #endif
868
869
870
871
872
873
874 void asd_dump_seq_state(struct asd_ha_struct *asd_ha, u8 lseq_mask)
875 {
876 int lseq;
877
878 asd_dump_cseq_state(asd_ha);
879
880 if (lseq_mask != 0)
881 for_each_sequencer(lseq_mask, lseq_mask, lseq)
882 asd_dump_lseq_state(asd_ha, lseq);
883 }
884
885 void asd_dump_frame_rcvd(struct asd_phy *phy,
886 struct done_list_struct *dl)
887 {
888 unsigned long flags;
889 int i;
890
891 switch ((dl->status_block[1] & 0x70) >> 3) {
892 case SAS_PROTOCOL_STP:
893 ASD_DPRINTK("STP proto device-to-host FIS:\n");
894 break;
895 default:
896 case SAS_PROTOCOL_SSP:
897 ASD_DPRINTK("SAS proto IDENTIFY:\n");
898 break;
899 }
900 spin_lock_irqsave(&phy->sas_phy.frame_rcvd_lock, flags);
901 for (i = 0; i < phy->sas_phy.frame_rcvd_size; i+=4)
902 ASD_DPRINTK("%02x: %02x %02x %02x %02x\n",
903 i,
904 phy->frame_rcvd[i],
905 phy->frame_rcvd[i+1],
906 phy->frame_rcvd[i+2],
907 phy->frame_rcvd[i+3]);
908 spin_unlock_irqrestore(&phy->sas_phy.frame_rcvd_lock, flags);
909 }
910
911 #if 0
912
913 static void asd_dump_scb(struct asd_ascb *ascb, int ind)
914 {
915 asd_printk("scb%d: vaddr: 0x%p, dma_handle: 0x%llx, next: 0x%llx, "
916 "index:%d, opcode:0x%02x\n",
917 ind, ascb->dma_scb.vaddr,
918 (unsigned long long)ascb->dma_scb.dma_handle,
919 (unsigned long long)
920 le64_to_cpu(ascb->scb->header.next_scb),
921 le16_to_cpu(ascb->scb->header.index),
922 ascb->scb->header.opcode);
923 }
924
925 void asd_dump_scb_list(struct asd_ascb *ascb, int num)
926 {
927 int i = 0;
928
929 asd_printk("dumping %d scbs:\n", num);
930
931 asd_dump_scb(ascb, i++);
932 --num;
933
934 if (num > 0 && !list_empty(&ascb->list)) {
935 struct list_head *el;
936
937 list_for_each(el, &ascb->list) {
938 struct asd_ascb *s = list_entry(el, struct asd_ascb,
939 list);
940 asd_dump_scb(s, i++);
941 if (--num <= 0)
942 break;
943 }
944 }
945 }
946
947 #endif
948
949 #endif