1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2011-2013 Qlogic Corporation
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 */
29 /*
30 * File : qla_dbg.c
31 * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656.
32 */
33
34 #include <sys/cdefs.h>
35 #include "qla_os.h"
36 #include "qla_reg.h"
37 #include "qla_hw.h"
38 #include "qla_def.h"
39 #include "qla_inline.h"
40 #include "qla_ver.h"
41 #include "qla_glbl.h"
42 #include "qla_dbg.h"
43
44 uint32_t dbg_level = 0 ;
45 /*
46 * Name: qla_dump_buf32
47 * Function: dumps a buffer as 32 bit words
48 */
qla_dump_buf32(qla_host_t * ha,char * msg,void * dbuf32,uint32_t len32)49 void qla_dump_buf32(qla_host_t *ha, char *msg, void *dbuf32, uint32_t len32)
50 {
51 device_t dev;
52 uint32_t i = 0;
53 uint32_t *buf;
54
55 dev = ha->pci_dev;
56 buf = dbuf32;
57
58 device_printf(dev, "%s: %s dump start\n", __func__, msg);
59
60 while (len32 >= 4) {
61 device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
62 i, buf[0], buf[1], buf[2], buf[3]);
63 i += 4 * 4;
64 len32 -= 4;
65 buf += 4;
66 }
67 switch (len32) {
68 case 1:
69 device_printf(dev,"0x%08x: 0x%08x\n", i, buf[0]);
70 break;
71 case 2:
72 device_printf(dev,"0x%08x: 0x%08x 0x%08x\n", i, buf[0], buf[1]);
73 break;
74 case 3:
75 device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x\n",
76 i, buf[0], buf[1], buf[2]);
77 break;
78 default:
79 break;
80 }
81 device_printf(dev, "%s: %s dump end\n", __func__, msg);
82 }
83
84 /*
85 * Name: qla_dump_buf16
86 * Function: dumps a buffer as 16 bit words
87 */
qla_dump_buf16(qla_host_t * ha,char * msg,void * dbuf16,uint32_t len16)88 void qla_dump_buf16(qla_host_t *ha, char *msg, void *dbuf16, uint32_t len16)
89 {
90 device_t dev;
91 uint32_t i = 0;
92 uint16_t *buf;
93
94 dev = ha->pci_dev;
95 buf = dbuf16;
96
97 device_printf(dev, "%s: %s dump start\n", __func__, msg);
98
99 while (len16 >= 8) {
100 device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x"
101 " 0x%04x 0x%04x 0x%04x 0x%04x\n", i, buf[0],
102 buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
103 i += 16;
104 len16 -= 8;
105 buf += 8;
106 }
107 switch (len16) {
108 case 1:
109 device_printf(dev,"0x%08x: 0x%04x\n", i, buf[0]);
110 break;
111 case 2:
112 device_printf(dev,"0x%08x: 0x%04x 0x%04x\n", i, buf[0], buf[1]);
113 break;
114 case 3:
115 device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x\n",
116 i, buf[0], buf[1], buf[2]);
117 break;
118 case 4:
119 device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x\n", i,
120 buf[0], buf[1], buf[2], buf[3]);
121 break;
122 case 5:
123 device_printf(dev,"0x%08x:"
124 " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i,
125 buf[0], buf[1], buf[2], buf[3], buf[4]);
126 break;
127 case 6:
128 device_printf(dev,"0x%08x:"
129 " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i,
130 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
131 break;
132 case 7:
133 device_printf(dev,"0x%04x: 0x%04x 0x%04x 0x%04x 0x%04x"
134 " 0x%04x 0x%04x 0x%04x\n", i, buf[0], buf[1],
135 buf[2], buf[3], buf[4], buf[5], buf[6]);
136 break;
137 default:
138 break;
139 }
140 device_printf(dev, "%s: %s dump end\n", __func__, msg);
141 }
142
143 /*
144 * Name: qla_dump_buf8
145 * Function: dumps a buffer as bytes
146 */
qla_dump_buf8(qla_host_t * ha,char * msg,void * dbuf,uint32_t len)147 void qla_dump_buf8(qla_host_t *ha, char *msg, void *dbuf, uint32_t len)
148 {
149 device_t dev;
150 uint32_t i = 0;
151 uint8_t *buf;
152
153 dev = ha->pci_dev;
154 buf = dbuf;
155
156 device_printf(dev, "%s: %s 0x%x dump start\n", __func__, msg, len);
157
158 while (len >= 16) {
159 device_printf(dev,"0x%08x:"
160 " %02x %02x %02x %02x %02x %02x %02x %02x"
161 " %02x %02x %02x %02x %02x %02x %02x %02x\n", i,
162 buf[0], buf[1], buf[2], buf[3],
163 buf[4], buf[5], buf[6], buf[7],
164 buf[8], buf[9], buf[10], buf[11],
165 buf[12], buf[13], buf[14], buf[15]);
166 i += 16;
167 len -= 16;
168 buf += 16;
169 }
170 switch (len) {
171 case 1:
172 device_printf(dev,"0x%08x: %02x\n", i, buf[0]);
173 break;
174 case 2:
175 device_printf(dev,"0x%08x: %02x %02x\n", i, buf[0], buf[1]);
176 break;
177 case 3:
178 device_printf(dev,"0x%08x: %02x %02x %02x\n",
179 i, buf[0], buf[1], buf[2]);
180 break;
181 case 4:
182 device_printf(dev,"0x%08x: %02x %02x %02x %02x\n", i,
183 buf[0], buf[1], buf[2], buf[3]);
184 break;
185 case 5:
186 device_printf(dev,"0x%08x:"
187 " %02x %02x %02x %02x %02x\n", i,
188 buf[0], buf[1], buf[2], buf[3], buf[4]);
189 break;
190 case 6:
191 device_printf(dev,"0x%08x:"
192 " %02x %02x %02x %02x %02x %02x\n", i,
193 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
194 break;
195 case 7:
196 device_printf(dev,"0x%08x:"
197 " %02x %02x %02x %02x %02x %02x %02x\n", i,
198 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
199 break;
200 case 8:
201 device_printf(dev,"0x%08x:"
202 " %02x %02x %02x %02x %02x %02x %02x %02x\n", i,
203 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
204 buf[7]);
205 break;
206 case 9:
207 device_printf(dev,"0x%08x:"
208 " %02x %02x %02x %02x %02x %02x %02x %02x"
209 " %02x\n", i,
210 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
211 buf[7], buf[8]);
212 break;
213 case 10:
214 device_printf(dev,"0x%08x:"
215 " %02x %02x %02x %02x %02x %02x %02x %02x"
216 " %02x %02x\n", i,
217 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
218 buf[7], buf[8], buf[9]);
219 break;
220 case 11:
221 device_printf(dev,"0x%08x:"
222 " %02x %02x %02x %02x %02x %02x %02x %02x"
223 " %02x %02x %02x\n", i,
224 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
225 buf[7], buf[8], buf[9], buf[10]);
226 break;
227 case 12:
228 device_printf(dev,"0x%08x:"
229 " %02x %02x %02x %02x %02x %02x %02x %02x"
230 " %02x %02x %02x %02x\n", i,
231 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
232 buf[7], buf[8], buf[9], buf[10], buf[11]);
233 break;
234 case 13:
235 device_printf(dev,"0x%08x:"
236 " %02x %02x %02x %02x %02x %02x %02x %02x"
237 " %02x %02x %02x %02x %02x\n", i,
238 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
239 buf[7], buf[8], buf[9], buf[10], buf[11], buf[12]);
240 break;
241 case 14:
242 device_printf(dev,"0x%08x:"
243 " %02x %02x %02x %02x %02x %02x %02x %02x"
244 " %02x %02x %02x %02x %02x %02x\n", i,
245 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
246 buf[7], buf[8], buf[9], buf[10], buf[11], buf[12],
247 buf[13]);
248 break;
249 case 15:
250 device_printf(dev,"0x%08x:"
251 " %02x %02x %02x %02x %02x %02x %02x %02x"
252 " %02x %02x %02x %02x %02x %02x %02x\n", i,
253 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
254 buf[7], buf[8], buf[9], buf[10], buf[11], buf[12],
255 buf[13], buf[14]);
256 break;
257 default:
258 break;
259 }
260
261 device_printf(dev, "%s: %s dump end\n", __func__, msg);
262 }
263