xref: /freebsd/sys/dev/qlxgbe/ql_dbg.c (revision cfd6422a5217410fbd66f7a7a8a64d9d85e61229)
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 }
262