1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2013-2016 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 : ql_dbg.c
31 * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656.
32 */
33 #include <sys/cdefs.h>
34 __FBSDID("$FreeBSD$");
35
36 #include "ql_os.h"
37 #include "ql_hw.h"
38 #include "ql_def.h"
39 #include "ql_inline.h"
40 #include "ql_ver.h"
41 #include "ql_glbl.h"
42 #include "ql_dbg.h"
43
44 /*
45 * Name: ql_dump_buf32
46 * Function: dumps a buffer as 32 bit words
47 */
48 void ql_dump_buf32(qla_host_t *ha, const char *msg, void *dbuf32, uint32_t len32)
49 {
50 device_t dev;
51 uint32_t i = 0;
52 uint32_t *buf;
53
54 dev = ha->pci_dev;
55 buf = dbuf32;
56
57 device_printf(dev, "%s: %s dump start\n", __func__, msg);
58
59 while (len32 >= 4) {
60 device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
61 i, buf[0], buf[1], buf[2], buf[3]);
62 i += 4 * 4;
63 len32 -= 4;
64 buf += 4;
65 }
66 switch (len32) {
67 case 1:
68 device_printf(dev,"0x%08x: 0x%08x\n", i, buf[0]);
69 break;
70 case 2:
71 device_printf(dev,"0x%08x: 0x%08x 0x%08x\n", i, buf[0], buf[1]);
72 break;
73 case 3:
74 device_printf(dev,"0x%08x: 0x%08x 0x%08x 0x%08x\n",
75 i, buf[0], buf[1], buf[2]);
76 break;
77 default:
78 break;
79 }
80 device_printf(dev, "%s: %s dump end\n", __func__, msg);
81 }
82
83 /*
84 * Name: ql_dump_buf16
85 * Function: dumps a buffer as 16 bit words
86 */
87 void ql_dump_buf16(qla_host_t *ha, const char *msg, void *dbuf16, uint32_t len16)
88 {
89 device_t dev;
90 uint32_t i = 0;
91 uint16_t *buf;
92
93 dev = ha->pci_dev;
94 buf = dbuf16;
95
96 device_printf(dev, "%s: %s dump start\n", __func__, msg);
97
98 while (len16 >= 8) {
99 device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x"
100 " 0x%04x 0x%04x 0x%04x 0x%04x\n", i, buf[0],
101 buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
102 i += 16;
103 len16 -= 8;
104 buf += 8;
105 }
106 switch (len16) {
107 case 1:
108 device_printf(dev,"0x%08x: 0x%04x\n", i, buf[0]);
109 break;
110 case 2:
111 device_printf(dev,"0x%08x: 0x%04x 0x%04x\n", i, buf[0], buf[1]);
112 break;
113 case 3:
114 device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x\n",
115 i, buf[0], buf[1], buf[2]);
116 break;
117 case 4:
118 device_printf(dev,"0x%08x: 0x%04x 0x%04x 0x%04x 0x%04x\n", i,
119 buf[0], buf[1], buf[2], buf[3]);
120 break;
121 case 5:
122 device_printf(dev,"0x%08x:"
123 " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i,
124 buf[0], buf[1], buf[2], buf[3], buf[4]);
125 break;
126 case 6:
127 device_printf(dev,"0x%08x:"
128 " 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x 0x%04x\n", i,
129 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
130 break;
131 case 7:
132 device_printf(dev,"0x%04x: 0x%04x 0x%04x 0x%04x 0x%04x"
133 " 0x%04x 0x%04x 0x%04x\n", i, buf[0], buf[1],
134 buf[2], buf[3], buf[4], buf[5], buf[6]);
135 break;
136 default:
137 break;
138 }
139 device_printf(dev, "%s: %s dump end\n", __func__, msg);
140 }
141
142 /*
143 * Name: ql_dump_buf8
144 * Function: dumps a buffer as bytes
145 */
146 void ql_dump_buf8(qla_host_t *ha, const char *msg, void *dbuf, uint32_t len)
147 {
148 device_t dev;
149 uint32_t i = 0;
150 uint8_t *buf;
151
152 dev = ha->pci_dev;
153 buf = dbuf;
154
155 device_printf(dev, "%s: %s 0x%x dump start\n", __func__, msg, len);
156
157 while (len >= 16) {
158 device_printf(dev,"0x%08x:"
159 " %02x %02x %02x %02x %02x %02x %02x %02x"
160 " %02x %02x %02x %02x %02x %02x %02x %02x\n", i,
161 buf[0], buf[1], buf[2], buf[3],
162 buf[4], buf[5], buf[6], buf[7],
163 buf[8], buf[9], buf[10], buf[11],
164 buf[12], buf[13], buf[14], buf[15]);
165 i += 16;
166 len -= 16;
167 buf += 16;
168 }
169 switch (len) {
170 case 1:
171 device_printf(dev,"0x%08x: %02x\n", i, buf[0]);
172 break;
173 case 2:
174 device_printf(dev,"0x%08x: %02x %02x\n", i, buf[0], buf[1]);
175 break;
176 case 3:
177 device_printf(dev,"0x%08x: %02x %02x %02x\n",
178 i, buf[0], buf[1], buf[2]);
179 break;
180 case 4:
181 device_printf(dev,"0x%08x: %02x %02x %02x %02x\n", i,
182 buf[0], buf[1], buf[2], buf[3]);
183 break;
184 case 5:
185 device_printf(dev,"0x%08x:"
186 " %02x %02x %02x %02x %02x\n", i,
187 buf[0], buf[1], buf[2], buf[3], buf[4]);
188 break;
189 case 6:
190 device_printf(dev,"0x%08x:"
191 " %02x %02x %02x %02x %02x %02x\n", i,
192 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5]);
193 break;
194 case 7:
195 device_printf(dev,"0x%08x:"
196 " %02x %02x %02x %02x %02x %02x %02x\n", i,
197 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]);
198 break;
199 case 8:
200 device_printf(dev,"0x%08x:"
201 " %02x %02x %02x %02x %02x %02x %02x %02x\n", i,
202 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
203 buf[7]);
204 break;
205 case 9:
206 device_printf(dev,"0x%08x:"
207 " %02x %02x %02x %02x %02x %02x %02x %02x"
208 " %02x\n", i,
209 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
210 buf[7], buf[8]);
211 break;
212 case 10:
213 device_printf(dev,"0x%08x:"
214 " %02x %02x %02x %02x %02x %02x %02x %02x"
215 " %02x %02x\n", i,
216 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
217 buf[7], buf[8], buf[9]);
218 break;
219 case 11:
220 device_printf(dev,"0x%08x:"
221 " %02x %02x %02x %02x %02x %02x %02x %02x"
222 " %02x %02x %02x\n", i,
223 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
224 buf[7], buf[8], buf[9], buf[10]);
225 break;
226 case 12:
227 device_printf(dev,"0x%08x:"
228 " %02x %02x %02x %02x %02x %02x %02x %02x"
229 " %02x %02x %02x %02x\n", i,
230 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
231 buf[7], buf[8], buf[9], buf[10], buf[11]);
232 break;
233 case 13:
234 device_printf(dev,"0x%08x:"
235 " %02x %02x %02x %02x %02x %02x %02x %02x"
236 " %02x %02x %02x %02x %02x\n", i,
237 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
238 buf[7], buf[8], buf[9], buf[10], buf[11], buf[12]);
239 break;
240 case 14:
241 device_printf(dev,"0x%08x:"
242 " %02x %02x %02x %02x %02x %02x %02x %02x"
243 " %02x %02x %02x %02x %02x %02x\n", i,
244 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
245 buf[7], buf[8], buf[9], buf[10], buf[11], buf[12],
246 buf[13]);
247 break;
248 case 15:
249 device_printf(dev,"0x%08x:"
250 " %02x %02x %02x %02x %02x %02x %02x %02x"
251 " %02x %02x %02x %02x %02x %02x %02x\n", i,
252 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6],
253 buf[7], buf[8], buf[9], buf[10], buf[11], buf[12],
254 buf[13], buf[14]);
255 break;
256 default:
257 break;
258 }
259
260 device_printf(dev, "%s: %s dump end\n", __func__, msg);
261 }
Cache object: 81f000abd850c72fb2d5c72244a41206
|