]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/qlxgbe/ql_dbg.c
Merge libc++ trunk r366426, resolve conflicts, and add FREEBSD-Xlist.
[FreeBSD/FreeBSD.git] / sys / dev / qlxgbe / ql_dbg.c
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