Deleted Added
full compact
aac_debug.c (97215) aac_debug.c (109088)
1/*-
2 * Copyright (c) 2000 Michael Smith
3 * Copyright (c) 2001 Scott Long
4 * Copyright (c) 2000 BSDi
5 * Copyright (c) 2001 Adaptec, Inc.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
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 AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * 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 AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
1/*-
2 * Copyright (c) 2000 Michael Smith
3 * Copyright (c) 2001 Scott Long
4 * Copyright (c) 2000 BSDi
5 * Copyright (c) 2001 Adaptec, Inc.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
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 AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * 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 AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 * $FreeBSD: head/sys/dev/aac/aac_debug.c 97215 2002-05-24 05:58:13Z peter $
29 * $FreeBSD: head/sys/dev/aac/aac_debug.c 109088 2003-01-11 01:59:21Z scottl $
30 */
31
32/*
33 * Debugging support.
34 */
35#include "opt_aac.h"
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/kernel.h>
40
41#include <dev/aac/aac_compat.h>
42#include <sys/bus.h>
43#include <sys/devicestat.h>
44#include <sys/disk.h>
45
46#include <machine/resource.h>
47#include <machine/bus.h>
48
49#include <dev/aac/aacreg.h>
50#include <dev/aac/aac_ioctl.h>
51#include <dev/aac/aacvar.h>
52
53#ifdef AAC_DEBUG
54void aac_printstate0(void);
55void aac_intr0(void);
56
57/*
58 * Dump the command queue indices
59 */
60void
61aac_print_queues(struct aac_softc *sc)
62{
63 device_printf(sc->aac_dev, "FIB queue header at %p queues at %p\n",
64 &sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][0],
65 &sc->aac_queues->qt_HostNormCmdQueue[0]);
66 device_printf(sc->aac_dev, "HOST_NORM_CMD %d/%d (%d)\n",
67 sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][
68 AAC_PRODUCER_INDEX],
69 sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][
70 AAC_CONSUMER_INDEX],
71 AAC_HOST_NORM_CMD_ENTRIES);
72 device_printf(sc->aac_dev, "HOST_HIGH_CMD %d/%d (%d)\n",
73 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_CMD_QUEUE][
74 AAC_PRODUCER_INDEX],
75 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_CMD_QUEUE][
76 AAC_CONSUMER_INDEX],
77 AAC_HOST_HIGH_CMD_ENTRIES);
78 device_printf(sc->aac_dev, "ADAP_NORM_CMD %d/%d (%d)\n",
79 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_CMD_QUEUE][
80 AAC_PRODUCER_INDEX],
81 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_CMD_QUEUE][
82 AAC_CONSUMER_INDEX],
83 AAC_ADAP_NORM_CMD_ENTRIES);
84 device_printf(sc->aac_dev, "ADAP_HIGH_CMD %d/%d (%d)\n",
85 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_CMD_QUEUE][
86 AAC_PRODUCER_INDEX],
87 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_CMD_QUEUE][
88 AAC_CONSUMER_INDEX],
89 AAC_ADAP_HIGH_CMD_ENTRIES);
90 device_printf(sc->aac_dev, "HOST_NORM_RESP %d/%d (%d)\n",
91 sc->aac_queues->qt_qindex[AAC_HOST_NORM_RESP_QUEUE][
92 AAC_PRODUCER_INDEX],
93 sc->aac_queues->qt_qindex[AAC_HOST_NORM_RESP_QUEUE][
94 AAC_CONSUMER_INDEX],
95 AAC_HOST_NORM_RESP_ENTRIES);
96 device_printf(sc->aac_dev, "HOST_HIGH_RESP %d/%d (%d)\n",
97 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_RESP_QUEUE][
98 AAC_PRODUCER_INDEX],
99 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_RESP_QUEUE][
100 AAC_CONSUMER_INDEX],
101 AAC_HOST_HIGH_RESP_ENTRIES);
102 device_printf(sc->aac_dev, "ADAP_NORM_RESP %d/%d (%d)\n",
103 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_RESP_QUEUE][
104 AAC_PRODUCER_INDEX],
105 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_RESP_QUEUE][
106 AAC_CONSUMER_INDEX],
107 AAC_ADAP_NORM_RESP_ENTRIES);
108 device_printf(sc->aac_dev, "ADAP_HIGH_RESP %d/%d (%d)\n",
109 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_RESP_QUEUE][
110 AAC_PRODUCER_INDEX],
111 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_RESP_QUEUE][
112 AAC_CONSUMER_INDEX],
113 AAC_ADAP_HIGH_RESP_ENTRIES);
114 device_printf(sc->aac_dev, "AACQ_FREE %d/%d\n",
115 sc->aac_qstat[AACQ_FREE].q_length, sc->aac_qstat[AACQ_FREE].q_max);
116 device_printf(sc->aac_dev, "AACQ_BIO %d/%d\n",
117 sc->aac_qstat[AACQ_BIO].q_length, sc->aac_qstat[AACQ_BIO].q_max);
118 device_printf(sc->aac_dev, "AACQ_READY %d/%d\n",
119 sc->aac_qstat[AACQ_READY].q_length,
120 sc->aac_qstat[AACQ_READY].q_max);
121 device_printf(sc->aac_dev, "AACQ_BUSY %d/%d\n",
122 sc->aac_qstat[AACQ_BUSY].q_length, sc->aac_qstat[AACQ_BUSY].q_max);
123 device_printf(sc->aac_dev, "AACQ_COMPLETE %d/%d\n",
124 sc->aac_qstat[AACQ_COMPLETE].q_length,
125 sc->aac_qstat[AACQ_COMPLETE].q_max);
126}
127
128/*
129 * Print the command queue states for controller 0 (callable from DDB)
130 */
131void
132aac_printstate0(void)
133{
134 struct aac_softc *sc;
135
136 sc = devclass_get_softc(devclass_find("aac"), 0);
137
138 aac_print_queues(sc);
139 switch (sc->aac_hwif) {
140 case AAC_HWIF_I960RX:
141 device_printf(sc->aac_dev, "IDBR 0x%08x IIMR 0x%08x "
142 "IISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_IDBR),
143 AAC_GETREG4(sc, AAC_RX_IIMR), AAC_GETREG4(sc, AAC_RX_IISR));
144 device_printf(sc->aac_dev, "ODBR 0x%08x OIMR 0x%08x "
145 "OISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_ODBR),
146 AAC_GETREG4(sc, AAC_RX_OIMR), AAC_GETREG4(sc, AAC_RX_OISR));
147 AAC_SETREG4(sc, AAC_RX_OIMR, 0/*~(AAC_DB_COMMAND_READY |
148 AAC_DB_RESPONSE_READY | AAC_DB_PRINTF)*/);
149 device_printf(sc->aac_dev, "ODBR 0x%08x OIMR 0x%08x "
150 "OISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_ODBR),
151 AAC_GETREG4(sc, AAC_RX_OIMR), AAC_GETREG4(sc, AAC_RX_OISR));
152 break;
153 case AAC_HWIF_STRONGARM:
154 /* XXX implement */
155 break;
156 }
157}
158
159/*
160 * simulate an interrupt for controller 0
161 */
162void
163aac_intr0(void)
164{
165 struct aac_softc *sc;
166
167 sc = devclass_get_softc(devclass_find("aac"), 0);
168
169 aac_intr(sc);
170}
171
172/*
173 * Panic in a slightly informative fashion
174 */
175void
176aac_panic(struct aac_softc *sc, char *reason)
177{
178 aac_print_queues(sc);
179 panic(reason);
180}
181
182/*
183 * Print a FIB
184 */
185void
186aac_print_fib(struct aac_softc *sc, struct aac_fib *fib, const char *caller)
187{
30 */
31
32/*
33 * Debugging support.
34 */
35#include "opt_aac.h"
36
37#include <sys/param.h>
38#include <sys/systm.h>
39#include <sys/kernel.h>
40
41#include <dev/aac/aac_compat.h>
42#include <sys/bus.h>
43#include <sys/devicestat.h>
44#include <sys/disk.h>
45
46#include <machine/resource.h>
47#include <machine/bus.h>
48
49#include <dev/aac/aacreg.h>
50#include <dev/aac/aac_ioctl.h>
51#include <dev/aac/aacvar.h>
52
53#ifdef AAC_DEBUG
54void aac_printstate0(void);
55void aac_intr0(void);
56
57/*
58 * Dump the command queue indices
59 */
60void
61aac_print_queues(struct aac_softc *sc)
62{
63 device_printf(sc->aac_dev, "FIB queue header at %p queues at %p\n",
64 &sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][0],
65 &sc->aac_queues->qt_HostNormCmdQueue[0]);
66 device_printf(sc->aac_dev, "HOST_NORM_CMD %d/%d (%d)\n",
67 sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][
68 AAC_PRODUCER_INDEX],
69 sc->aac_queues->qt_qindex[AAC_HOST_NORM_CMD_QUEUE][
70 AAC_CONSUMER_INDEX],
71 AAC_HOST_NORM_CMD_ENTRIES);
72 device_printf(sc->aac_dev, "HOST_HIGH_CMD %d/%d (%d)\n",
73 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_CMD_QUEUE][
74 AAC_PRODUCER_INDEX],
75 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_CMD_QUEUE][
76 AAC_CONSUMER_INDEX],
77 AAC_HOST_HIGH_CMD_ENTRIES);
78 device_printf(sc->aac_dev, "ADAP_NORM_CMD %d/%d (%d)\n",
79 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_CMD_QUEUE][
80 AAC_PRODUCER_INDEX],
81 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_CMD_QUEUE][
82 AAC_CONSUMER_INDEX],
83 AAC_ADAP_NORM_CMD_ENTRIES);
84 device_printf(sc->aac_dev, "ADAP_HIGH_CMD %d/%d (%d)\n",
85 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_CMD_QUEUE][
86 AAC_PRODUCER_INDEX],
87 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_CMD_QUEUE][
88 AAC_CONSUMER_INDEX],
89 AAC_ADAP_HIGH_CMD_ENTRIES);
90 device_printf(sc->aac_dev, "HOST_NORM_RESP %d/%d (%d)\n",
91 sc->aac_queues->qt_qindex[AAC_HOST_NORM_RESP_QUEUE][
92 AAC_PRODUCER_INDEX],
93 sc->aac_queues->qt_qindex[AAC_HOST_NORM_RESP_QUEUE][
94 AAC_CONSUMER_INDEX],
95 AAC_HOST_NORM_RESP_ENTRIES);
96 device_printf(sc->aac_dev, "HOST_HIGH_RESP %d/%d (%d)\n",
97 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_RESP_QUEUE][
98 AAC_PRODUCER_INDEX],
99 sc->aac_queues->qt_qindex[AAC_HOST_HIGH_RESP_QUEUE][
100 AAC_CONSUMER_INDEX],
101 AAC_HOST_HIGH_RESP_ENTRIES);
102 device_printf(sc->aac_dev, "ADAP_NORM_RESP %d/%d (%d)\n",
103 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_RESP_QUEUE][
104 AAC_PRODUCER_INDEX],
105 sc->aac_queues->qt_qindex[AAC_ADAP_NORM_RESP_QUEUE][
106 AAC_CONSUMER_INDEX],
107 AAC_ADAP_NORM_RESP_ENTRIES);
108 device_printf(sc->aac_dev, "ADAP_HIGH_RESP %d/%d (%d)\n",
109 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_RESP_QUEUE][
110 AAC_PRODUCER_INDEX],
111 sc->aac_queues->qt_qindex[AAC_ADAP_HIGH_RESP_QUEUE][
112 AAC_CONSUMER_INDEX],
113 AAC_ADAP_HIGH_RESP_ENTRIES);
114 device_printf(sc->aac_dev, "AACQ_FREE %d/%d\n",
115 sc->aac_qstat[AACQ_FREE].q_length, sc->aac_qstat[AACQ_FREE].q_max);
116 device_printf(sc->aac_dev, "AACQ_BIO %d/%d\n",
117 sc->aac_qstat[AACQ_BIO].q_length, sc->aac_qstat[AACQ_BIO].q_max);
118 device_printf(sc->aac_dev, "AACQ_READY %d/%d\n",
119 sc->aac_qstat[AACQ_READY].q_length,
120 sc->aac_qstat[AACQ_READY].q_max);
121 device_printf(sc->aac_dev, "AACQ_BUSY %d/%d\n",
122 sc->aac_qstat[AACQ_BUSY].q_length, sc->aac_qstat[AACQ_BUSY].q_max);
123 device_printf(sc->aac_dev, "AACQ_COMPLETE %d/%d\n",
124 sc->aac_qstat[AACQ_COMPLETE].q_length,
125 sc->aac_qstat[AACQ_COMPLETE].q_max);
126}
127
128/*
129 * Print the command queue states for controller 0 (callable from DDB)
130 */
131void
132aac_printstate0(void)
133{
134 struct aac_softc *sc;
135
136 sc = devclass_get_softc(devclass_find("aac"), 0);
137
138 aac_print_queues(sc);
139 switch (sc->aac_hwif) {
140 case AAC_HWIF_I960RX:
141 device_printf(sc->aac_dev, "IDBR 0x%08x IIMR 0x%08x "
142 "IISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_IDBR),
143 AAC_GETREG4(sc, AAC_RX_IIMR), AAC_GETREG4(sc, AAC_RX_IISR));
144 device_printf(sc->aac_dev, "ODBR 0x%08x OIMR 0x%08x "
145 "OISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_ODBR),
146 AAC_GETREG4(sc, AAC_RX_OIMR), AAC_GETREG4(sc, AAC_RX_OISR));
147 AAC_SETREG4(sc, AAC_RX_OIMR, 0/*~(AAC_DB_COMMAND_READY |
148 AAC_DB_RESPONSE_READY | AAC_DB_PRINTF)*/);
149 device_printf(sc->aac_dev, "ODBR 0x%08x OIMR 0x%08x "
150 "OISR 0x%08x\n", AAC_GETREG4(sc, AAC_RX_ODBR),
151 AAC_GETREG4(sc, AAC_RX_OIMR), AAC_GETREG4(sc, AAC_RX_OISR));
152 break;
153 case AAC_HWIF_STRONGARM:
154 /* XXX implement */
155 break;
156 }
157}
158
159/*
160 * simulate an interrupt for controller 0
161 */
162void
163aac_intr0(void)
164{
165 struct aac_softc *sc;
166
167 sc = devclass_get_softc(devclass_find("aac"), 0);
168
169 aac_intr(sc);
170}
171
172/*
173 * Panic in a slightly informative fashion
174 */
175void
176aac_panic(struct aac_softc *sc, char *reason)
177{
178 aac_print_queues(sc);
179 panic(reason);
180}
181
182/*
183 * Print a FIB
184 */
185void
186aac_print_fib(struct aac_softc *sc, struct aac_fib *fib, const char *caller)
187{
188 if (fib == NULL) {
189 device_printf(sc->aac_dev,
190 "aac_print_fib called with NULL fib\n");
191 return;
192 }
188 device_printf(sc->aac_dev, "%s: FIB @ %p\n", caller, fib);
189 device_printf(sc->aac_dev, " XferState %b\n", fib->Header.XferState,
190 "\20"
191 "\1HOSTOWNED"
192 "\2ADAPTEROWNED"
193 "\3INITIALISED"
194 "\4EMPTY"
195 "\5FROMPOOL"
196 "\6FROMHOST"
197 "\7FROMADAP"
198 "\10REXPECTED"
199 "\11RNOTEXPECTED"
200 "\12DONEADAP"
201 "\13DONEHOST"
202 "\14HIGH"
203 "\15NORM"
204 "\16ASYNC"
205 "\17PAGEFILEIO"
206 "\20SHUTDOWN"
207 "\21LAZYWRITE"
208 "\22ADAPMICROFIB"
209 "\23BIOSFIB"
210 "\24FAST_RESPONSE"
211 "\25APIFIB\n");
212 device_printf(sc->aac_dev, " Command %d\n", fib->Header.Command);
213 device_printf(sc->aac_dev, " StructType %d\n",
214 fib->Header.StructType);
215 device_printf(sc->aac_dev, " Flags 0x%x\n", fib->Header.Flags);
216 device_printf(sc->aac_dev, " Size %d\n", fib->Header.Size);
217 device_printf(sc->aac_dev, " SenderSize %d\n",
218 fib->Header.SenderSize);
219 device_printf(sc->aac_dev, " SenderAddress 0x%x\n",
220 fib->Header.SenderFibAddress);
221 device_printf(sc->aac_dev, " RcvrAddress 0x%x\n",
222 fib->Header.ReceiverFibAddress);
223 device_printf(sc->aac_dev, " SenderData 0x%x\n",
224 fib->Header.SenderData);
225 switch(fib->Header.Command) {
226 case ContainerCommand:
227 {
228 struct aac_blockread *br;
229 struct aac_blockwrite *bw;
230 struct aac_sg_table *sg;
231 int i;
232
233 br = (struct aac_blockread*)fib->data;
234 bw = (struct aac_blockwrite*)fib->data;
235 sg = NULL;
236
237 if (br->Command == VM_CtBlockRead) {
238 device_printf(sc->aac_dev,
239 " BlockRead: container %d 0x%x/%d\n",
240 br->ContainerId, br->BlockNumber,
241 br->ByteCount);
242 sg = &br->SgMap;
243 }
244 if (bw->Command == VM_CtBlockWrite) {
245 device_printf(sc->aac_dev,
246 " BlockWrite: container %d 0x%x/%d "
247 "(%s)\n", bw->ContainerId,
248 bw->BlockNumber, bw->ByteCount,
249 bw->Stable == CSTABLE ? "stable" :
250 "unstable");
251 sg = &bw->SgMap;
252 }
253 if (sg != NULL) {
254 device_printf(sc->aac_dev,
255 " %d s/g entries\n", sg->SgCount);
256 for (i = 0; i < sg->SgCount; i++)
257 device_printf(sc->aac_dev, " 0x%08x/%d\n",
258 sg->SgEntry[i].SgAddress,
259 sg->SgEntry[i].SgByteCount);
260 }
261 break;
262 }
263 default:
264 device_printf(sc->aac_dev, " %16D\n", fib->data, " ");
265 device_printf(sc->aac_dev, " %16D\n", fib->data + 16, " ");
266 break;
267 }
268}
269
270/*
271 * Describe an AIF we have received.
272 */
273void
274aac_print_aif(struct aac_softc *sc, struct aac_aif_command *aif)
275{
276 switch(aif->command) {
277 case AifCmdEventNotify:
278 device_printf(sc->aac_dev, "EventNotify(%d)\n", aif->seqNumber);
279 switch(aif->data.EN.type) {
280 case AifEnGeneric: /* Generic notification */
281 device_printf(sc->aac_dev, "(Generic) %.*s\n",
282 (int)sizeof(aif->data.EN.data.EG),
283 aif->data.EN.data.EG.text);
284 break;
285 case AifEnTaskComplete: /* Task has completed */
286 device_printf(sc->aac_dev, "(TaskComplete)\n");
287 break;
288 case AifEnConfigChange: /* Adapter configuration change
289 * occurred */
290 device_printf(sc->aac_dev, "(ConfigChange)\n");
291 break;
292 case AifEnContainerChange: /* Adapter specific container
293 * configuration change */
294 device_printf(sc->aac_dev, "(ContainerChange) "
295 "container %d,%d\n",
296 aif->data.EN.data.ECC.container[0],
297 aif->data.EN.data.ECC.container[1]);
298 break;
299 case AifEnDeviceFailure: /* SCSI device failed */
300 device_printf(sc->aac_dev, "(DeviceFailure) "
301 "handle %d\n",
302 aif->data.EN.data.EDF.deviceHandle);
303 break;
304 case AifEnMirrorFailover: /* Mirror failover started */
305 device_printf(sc->aac_dev, "(MirrorFailover) "
306 "container %d failed, "
307 "migrating from slice %d to %d\n",
308 aif->data.EN.data.EMF.container,
309 aif->data.EN.data.EMF.failedSlice,
310 aif->data.EN.data.EMF.creatingSlice);
311 break;
312 case AifEnContainerEvent: /* Significant container
313 * event */
314 device_printf(sc->aac_dev, "(ContainerEvent) "
315 "container %d event "
316 "%d\n", aif->data.EN.data.ECE.container,
317 aif->data.EN.data.ECE.eventType);
318 break;
319 case AifEnFileSystemChange: /* File system changed */
320 device_printf(sc->aac_dev, "(FileSystemChange)\n");
321 break;
322 case AifEnConfigPause: /* Container pause event */
323 device_printf(sc->aac_dev, "(ConfigPause)\n");
324 break;
325 case AifEnConfigResume: /* Container resume event */
326 device_printf(sc->aac_dev, "(ConfigResume)\n");
327 break;
328 case AifEnFailoverChange: /* Failover space assignment
329 * changed */
330 device_printf(sc->aac_dev, "(FailoverChange)\n");
331 break;
332 case AifEnRAID5RebuildDone: /* RAID5 rebuild finished */
333 device_printf(sc->aac_dev, "(RAID5RebuildDone)\n");
334 break;
335 case AifEnEnclosureManagement: /* Enclosure management event */
336 device_printf(sc->aac_dev, "(EnclosureManagement) "
337 "EMPID %d unit %d "
338 "event %d\n", aif->data.EN.data.EEE.empID,
339 aif->data.EN.data.EEE.unitID,
340 aif->data.EN.data.EEE.eventType);
341 break;
342 case AifEnBatteryEvent: /* Significant NV battery
343 * event */
344 device_printf(sc->aac_dev, "(BatteryEvent) %d "
345 "(state was %d, is %d\n",
346 aif->data.EN.data.EBE.transition_type,
347 aif->data.EN.data.EBE.current_state,
348 aif->data.EN.data.EBE.prior_state);
349 break;
350 case AifEnAddContainer: /* A new container was
351 * created. */
352 device_printf(sc->aac_dev, "(AddContainer)\n");
353 break;
354 case AifEnDeleteContainer: /* A container was deleted. */
355 device_printf(sc->aac_dev, "(DeleteContainer)\n");
356 break;
357 case AifEnBatteryNeedsRecond: /* The battery needs
358 * reconditioning */
359 device_printf(sc->aac_dev, "(BatteryNeedsRecond)\n");
360 break;
361 case AifEnClusterEvent: /* Some cluster event */
362 device_printf(sc->aac_dev, "(ClusterEvent) event %d\n",
363 aif->data.EN.data.ECLE.eventType);
364 break;
365 case AifEnDiskSetEvent: /* A disk set event occured. */
366 device_printf(sc->aac_dev, "(DiskSetEvent) event %d "
367 "diskset %lld creator %lld\n",
368 aif->data.EN.data.EDS.eventType,
369 aif->data.EN.data.EDS.DsNum,
370 aif->data.EN.data.EDS.CreatorId);
371 break;
372 case AifDenMorphComplete: /* A morph operation
373 * completed */
374 device_printf(sc->aac_dev, "(MorphComplete)\n");
375 break;
376 case AifDenVolumeExtendComplete: /* A volume expand operation
377 * completed */
378 device_printf(sc->aac_dev, "(VolumeExtendComplete)\n");
379 break;
380 default:
381 device_printf(sc->aac_dev, "(%d)\n", aif->data.EN.type);
382 break;
383 }
384 break;
385 case AifCmdJobProgress:
386 {
387 char *status;
388 switch(aif->data.PR[0].status) {
389 case AifJobStsSuccess:
390 status = "success"; break;
391 case AifJobStsFinished:
392 status = "finished"; break;
393 case AifJobStsAborted:
394 status = "aborted"; break;
395 case AifJobStsFailed:
396 status = "failed"; break;
397 case AifJobStsSuspended:
398 status = "suspended"; break;
399 case AifJobStsRunning:
400 status = "running"; break;
401 default:
402 status = "unknown status"; break;
403 }
404
405 device_printf(sc->aac_dev, "JobProgress (%d) - %s (%d, %d)\n",
406 aif->seqNumber, status,
407 aif->data.PR[0].currentTick,
408 aif->data.PR[0].finalTick);
409 switch(aif->data.PR[0].jd.type) {
410 case AifJobScsiZero: /* SCSI dev clear operation */
411 device_printf(sc->aac_dev, "(ScsiZero) handle %d\n",
412 aif->data.PR[0].jd.client.scsi_dh);
413 break;
414 case AifJobScsiVerify: /* SCSI device Verify operation
415 * NO REPAIR */
416 device_printf(sc->aac_dev, "(ScsiVerify) handle %d\n",
417 aif->data.PR[0].jd.client.scsi_dh);
418 break;
419 case AifJobScsiExercise: /* SCSI device Exercise
420 * operation */
421 device_printf(sc->aac_dev, "(ScsiExercise) handle %d\n",
422 aif->data.PR[0].jd.client.scsi_dh);
423 break;
424 case AifJobScsiVerifyRepair: /* SCSI device Verify operation
425 * WITH repair */
426 device_printf(sc->aac_dev,
427 "(ScsiVerifyRepair) handle %d\n",
428 aif->data.PR[0].jd.client.scsi_dh);
429 break;
430 case AifJobCtrZero: /* Container clear operation */
431 device_printf(sc->aac_dev,
432 "(ConatainerZero) container %d\n",
433 aif->data.PR[0].jd.client.container.src);
434 break;
435 case AifJobCtrCopy: /* Container copy operation */
436 device_printf(sc->aac_dev,
437 "(ConatainerCopy) container %d to %d\n",
438 aif->data.PR[0].jd.client.container.src,
439 aif->data.PR[0].jd.client.container.dst);
440 break;
441 case AifJobCtrCreateMirror: /* Container Create Mirror
442 * operation */
443 device_printf(sc->aac_dev,
444 "(ConatainerCreateMirror) container %d\n",
445 aif->data.PR[0].jd.client.container.src);
446 /* XXX two containers? */
447 break;
448 case AifJobCtrMergeMirror: /* Container Merge Mirror
449 * operation */
450 device_printf(sc->aac_dev,
451 "(ConatainerMergeMirror) container %d\n",
452 aif->data.PR[0].jd.client.container.src);
453 /* XXX two containers? */
454 break;
455 case AifJobCtrScrubMirror: /* Container Scrub Mirror
456 * operation */
457 device_printf(sc->aac_dev,
458 "(ConatainerScrubMirror) container %d\n",
459 aif->data.PR[0].jd.client.container.src);
460 break;
461 case AifJobCtrRebuildRaid5: /* Container Rebuild Raid5
462 * operation */
463 device_printf(sc->aac_dev,
464 "(ConatainerRebuildRaid5) container %d\n",
465 aif->data.PR[0].jd.client.container.src);
466 break;
467 case AifJobCtrScrubRaid5: /* Container Scrub Raid5
468 * operation */
469 device_printf(sc->aac_dev,
470 "(ConatainerScrubRaid5) container %d\n",
471 aif->data.PR[0].jd.client.container.src);
472 break;
473 case AifJobCtrMorph: /* Container morph operation */
474 device_printf(sc->aac_dev,
475 "(ConatainerMorph) container %d\n",
476 aif->data.PR[0].jd.client.container.src);
477 /* XXX two containers? */
478 break;
479 case AifJobCtrPartCopy: /* Container Partition copy
480 * operation */
481 device_printf(sc->aac_dev,
482 "(ConatainerPartCopy) container %d to "
483 "%d\n",
484 aif->data.PR[0].jd.client.container.src,
485 aif->data.PR[0].jd.client.container.dst);
486 break;
487 case AifJobCtrRebuildMirror: /* Container Rebuild Mirror
488 * operation */
489 device_printf(sc->aac_dev,
490 "(ConatainerRebuildMirror) container "
491 "%d\n",
492 aif->data.PR[0].jd.client.container.src);
493 break;
494 case AifJobCtrCrazyCache: /* crazy cache */
495 device_printf(sc->aac_dev,
496 "(ConatainerCrazyCache) container %d\n",
497 aif->data.PR[0].jd.client.container.src);
498 /* XXX two containers? */
499 break;
500 case AifJobFsCreate: /* File System Create
501 * operation */
502 device_printf(sc->aac_dev, "(FsCreate)\n");
503 break;
504 case AifJobFsVerify: /* File System Verify
505 * operation */
506 device_printf(sc->aac_dev, "(FsVerivy)\n");
507 break;
508 case AifJobFsExtend: /* File System Extend
509 * operation */
510 device_printf(sc->aac_dev, "(FsExtend)\n");
511 break;
512 case AifJobApiFormatNTFS: /* Format a drive to NTFS */
513 device_printf(sc->aac_dev, "(FormatNTFS)\n");
514 break;
515 case AifJobApiFormatFAT: /* Format a drive to FAT */
516 device_printf(sc->aac_dev, "(FormatFAT)\n");
517 break;
518 case AifJobApiUpdateSnapshot: /* update the read/write half
519 * of a snapshot */
520 device_printf(sc->aac_dev, "(UpdateSnapshot)\n");
521 break;
522 case AifJobApiFormatFAT32: /* Format a drive to FAT32 */
523 device_printf(sc->aac_dev, "(FormatFAT32)\n");
524 break;
525 case AifJobCtlContinuousCtrVerify: /* Adapter operation */
526 device_printf(sc->aac_dev, "(ContinuousCtrVerify)\n");
527 break;
528 default:
529 device_printf(sc->aac_dev, "(%d)\n",
530 aif->data.PR[0].jd.type);
531 break;
532 }
533 break;
534 }
535 case AifCmdAPIReport:
536 device_printf(sc->aac_dev, "APIReport (%d)\n", aif->seqNumber);
537 break;
538 case AifCmdDriverNotify:
539 device_printf(sc->aac_dev, "DriverNotify (%d)\n",
540 aif->seqNumber);
541 break;
542 default:
543 device_printf(sc->aac_dev, "AIF %d (%d)\n", aif->command,
544 aif->seqNumber);
545 break;
546 }
547}
548#endif /* AAC_DEBUG */
193 device_printf(sc->aac_dev, "%s: FIB @ %p\n", caller, fib);
194 device_printf(sc->aac_dev, " XferState %b\n", fib->Header.XferState,
195 "\20"
196 "\1HOSTOWNED"
197 "\2ADAPTEROWNED"
198 "\3INITIALISED"
199 "\4EMPTY"
200 "\5FROMPOOL"
201 "\6FROMHOST"
202 "\7FROMADAP"
203 "\10REXPECTED"
204 "\11RNOTEXPECTED"
205 "\12DONEADAP"
206 "\13DONEHOST"
207 "\14HIGH"
208 "\15NORM"
209 "\16ASYNC"
210 "\17PAGEFILEIO"
211 "\20SHUTDOWN"
212 "\21LAZYWRITE"
213 "\22ADAPMICROFIB"
214 "\23BIOSFIB"
215 "\24FAST_RESPONSE"
216 "\25APIFIB\n");
217 device_printf(sc->aac_dev, " Command %d\n", fib->Header.Command);
218 device_printf(sc->aac_dev, " StructType %d\n",
219 fib->Header.StructType);
220 device_printf(sc->aac_dev, " Flags 0x%x\n", fib->Header.Flags);
221 device_printf(sc->aac_dev, " Size %d\n", fib->Header.Size);
222 device_printf(sc->aac_dev, " SenderSize %d\n",
223 fib->Header.SenderSize);
224 device_printf(sc->aac_dev, " SenderAddress 0x%x\n",
225 fib->Header.SenderFibAddress);
226 device_printf(sc->aac_dev, " RcvrAddress 0x%x\n",
227 fib->Header.ReceiverFibAddress);
228 device_printf(sc->aac_dev, " SenderData 0x%x\n",
229 fib->Header.SenderData);
230 switch(fib->Header.Command) {
231 case ContainerCommand:
232 {
233 struct aac_blockread *br;
234 struct aac_blockwrite *bw;
235 struct aac_sg_table *sg;
236 int i;
237
238 br = (struct aac_blockread*)fib->data;
239 bw = (struct aac_blockwrite*)fib->data;
240 sg = NULL;
241
242 if (br->Command == VM_CtBlockRead) {
243 device_printf(sc->aac_dev,
244 " BlockRead: container %d 0x%x/%d\n",
245 br->ContainerId, br->BlockNumber,
246 br->ByteCount);
247 sg = &br->SgMap;
248 }
249 if (bw->Command == VM_CtBlockWrite) {
250 device_printf(sc->aac_dev,
251 " BlockWrite: container %d 0x%x/%d "
252 "(%s)\n", bw->ContainerId,
253 bw->BlockNumber, bw->ByteCount,
254 bw->Stable == CSTABLE ? "stable" :
255 "unstable");
256 sg = &bw->SgMap;
257 }
258 if (sg != NULL) {
259 device_printf(sc->aac_dev,
260 " %d s/g entries\n", sg->SgCount);
261 for (i = 0; i < sg->SgCount; i++)
262 device_printf(sc->aac_dev, " 0x%08x/%d\n",
263 sg->SgEntry[i].SgAddress,
264 sg->SgEntry[i].SgByteCount);
265 }
266 break;
267 }
268 default:
269 device_printf(sc->aac_dev, " %16D\n", fib->data, " ");
270 device_printf(sc->aac_dev, " %16D\n", fib->data + 16, " ");
271 break;
272 }
273}
274
275/*
276 * Describe an AIF we have received.
277 */
278void
279aac_print_aif(struct aac_softc *sc, struct aac_aif_command *aif)
280{
281 switch(aif->command) {
282 case AifCmdEventNotify:
283 device_printf(sc->aac_dev, "EventNotify(%d)\n", aif->seqNumber);
284 switch(aif->data.EN.type) {
285 case AifEnGeneric: /* Generic notification */
286 device_printf(sc->aac_dev, "(Generic) %.*s\n",
287 (int)sizeof(aif->data.EN.data.EG),
288 aif->data.EN.data.EG.text);
289 break;
290 case AifEnTaskComplete: /* Task has completed */
291 device_printf(sc->aac_dev, "(TaskComplete)\n");
292 break;
293 case AifEnConfigChange: /* Adapter configuration change
294 * occurred */
295 device_printf(sc->aac_dev, "(ConfigChange)\n");
296 break;
297 case AifEnContainerChange: /* Adapter specific container
298 * configuration change */
299 device_printf(sc->aac_dev, "(ContainerChange) "
300 "container %d,%d\n",
301 aif->data.EN.data.ECC.container[0],
302 aif->data.EN.data.ECC.container[1]);
303 break;
304 case AifEnDeviceFailure: /* SCSI device failed */
305 device_printf(sc->aac_dev, "(DeviceFailure) "
306 "handle %d\n",
307 aif->data.EN.data.EDF.deviceHandle);
308 break;
309 case AifEnMirrorFailover: /* Mirror failover started */
310 device_printf(sc->aac_dev, "(MirrorFailover) "
311 "container %d failed, "
312 "migrating from slice %d to %d\n",
313 aif->data.EN.data.EMF.container,
314 aif->data.EN.data.EMF.failedSlice,
315 aif->data.EN.data.EMF.creatingSlice);
316 break;
317 case AifEnContainerEvent: /* Significant container
318 * event */
319 device_printf(sc->aac_dev, "(ContainerEvent) "
320 "container %d event "
321 "%d\n", aif->data.EN.data.ECE.container,
322 aif->data.EN.data.ECE.eventType);
323 break;
324 case AifEnFileSystemChange: /* File system changed */
325 device_printf(sc->aac_dev, "(FileSystemChange)\n");
326 break;
327 case AifEnConfigPause: /* Container pause event */
328 device_printf(sc->aac_dev, "(ConfigPause)\n");
329 break;
330 case AifEnConfigResume: /* Container resume event */
331 device_printf(sc->aac_dev, "(ConfigResume)\n");
332 break;
333 case AifEnFailoverChange: /* Failover space assignment
334 * changed */
335 device_printf(sc->aac_dev, "(FailoverChange)\n");
336 break;
337 case AifEnRAID5RebuildDone: /* RAID5 rebuild finished */
338 device_printf(sc->aac_dev, "(RAID5RebuildDone)\n");
339 break;
340 case AifEnEnclosureManagement: /* Enclosure management event */
341 device_printf(sc->aac_dev, "(EnclosureManagement) "
342 "EMPID %d unit %d "
343 "event %d\n", aif->data.EN.data.EEE.empID,
344 aif->data.EN.data.EEE.unitID,
345 aif->data.EN.data.EEE.eventType);
346 break;
347 case AifEnBatteryEvent: /* Significant NV battery
348 * event */
349 device_printf(sc->aac_dev, "(BatteryEvent) %d "
350 "(state was %d, is %d\n",
351 aif->data.EN.data.EBE.transition_type,
352 aif->data.EN.data.EBE.current_state,
353 aif->data.EN.data.EBE.prior_state);
354 break;
355 case AifEnAddContainer: /* A new container was
356 * created. */
357 device_printf(sc->aac_dev, "(AddContainer)\n");
358 break;
359 case AifEnDeleteContainer: /* A container was deleted. */
360 device_printf(sc->aac_dev, "(DeleteContainer)\n");
361 break;
362 case AifEnBatteryNeedsRecond: /* The battery needs
363 * reconditioning */
364 device_printf(sc->aac_dev, "(BatteryNeedsRecond)\n");
365 break;
366 case AifEnClusterEvent: /* Some cluster event */
367 device_printf(sc->aac_dev, "(ClusterEvent) event %d\n",
368 aif->data.EN.data.ECLE.eventType);
369 break;
370 case AifEnDiskSetEvent: /* A disk set event occured. */
371 device_printf(sc->aac_dev, "(DiskSetEvent) event %d "
372 "diskset %lld creator %lld\n",
373 aif->data.EN.data.EDS.eventType,
374 aif->data.EN.data.EDS.DsNum,
375 aif->data.EN.data.EDS.CreatorId);
376 break;
377 case AifDenMorphComplete: /* A morph operation
378 * completed */
379 device_printf(sc->aac_dev, "(MorphComplete)\n");
380 break;
381 case AifDenVolumeExtendComplete: /* A volume expand operation
382 * completed */
383 device_printf(sc->aac_dev, "(VolumeExtendComplete)\n");
384 break;
385 default:
386 device_printf(sc->aac_dev, "(%d)\n", aif->data.EN.type);
387 break;
388 }
389 break;
390 case AifCmdJobProgress:
391 {
392 char *status;
393 switch(aif->data.PR[0].status) {
394 case AifJobStsSuccess:
395 status = "success"; break;
396 case AifJobStsFinished:
397 status = "finished"; break;
398 case AifJobStsAborted:
399 status = "aborted"; break;
400 case AifJobStsFailed:
401 status = "failed"; break;
402 case AifJobStsSuspended:
403 status = "suspended"; break;
404 case AifJobStsRunning:
405 status = "running"; break;
406 default:
407 status = "unknown status"; break;
408 }
409
410 device_printf(sc->aac_dev, "JobProgress (%d) - %s (%d, %d)\n",
411 aif->seqNumber, status,
412 aif->data.PR[0].currentTick,
413 aif->data.PR[0].finalTick);
414 switch(aif->data.PR[0].jd.type) {
415 case AifJobScsiZero: /* SCSI dev clear operation */
416 device_printf(sc->aac_dev, "(ScsiZero) handle %d\n",
417 aif->data.PR[0].jd.client.scsi_dh);
418 break;
419 case AifJobScsiVerify: /* SCSI device Verify operation
420 * NO REPAIR */
421 device_printf(sc->aac_dev, "(ScsiVerify) handle %d\n",
422 aif->data.PR[0].jd.client.scsi_dh);
423 break;
424 case AifJobScsiExercise: /* SCSI device Exercise
425 * operation */
426 device_printf(sc->aac_dev, "(ScsiExercise) handle %d\n",
427 aif->data.PR[0].jd.client.scsi_dh);
428 break;
429 case AifJobScsiVerifyRepair: /* SCSI device Verify operation
430 * WITH repair */
431 device_printf(sc->aac_dev,
432 "(ScsiVerifyRepair) handle %d\n",
433 aif->data.PR[0].jd.client.scsi_dh);
434 break;
435 case AifJobCtrZero: /* Container clear operation */
436 device_printf(sc->aac_dev,
437 "(ConatainerZero) container %d\n",
438 aif->data.PR[0].jd.client.container.src);
439 break;
440 case AifJobCtrCopy: /* Container copy operation */
441 device_printf(sc->aac_dev,
442 "(ConatainerCopy) container %d to %d\n",
443 aif->data.PR[0].jd.client.container.src,
444 aif->data.PR[0].jd.client.container.dst);
445 break;
446 case AifJobCtrCreateMirror: /* Container Create Mirror
447 * operation */
448 device_printf(sc->aac_dev,
449 "(ConatainerCreateMirror) container %d\n",
450 aif->data.PR[0].jd.client.container.src);
451 /* XXX two containers? */
452 break;
453 case AifJobCtrMergeMirror: /* Container Merge Mirror
454 * operation */
455 device_printf(sc->aac_dev,
456 "(ConatainerMergeMirror) container %d\n",
457 aif->data.PR[0].jd.client.container.src);
458 /* XXX two containers? */
459 break;
460 case AifJobCtrScrubMirror: /* Container Scrub Mirror
461 * operation */
462 device_printf(sc->aac_dev,
463 "(ConatainerScrubMirror) container %d\n",
464 aif->data.PR[0].jd.client.container.src);
465 break;
466 case AifJobCtrRebuildRaid5: /* Container Rebuild Raid5
467 * operation */
468 device_printf(sc->aac_dev,
469 "(ConatainerRebuildRaid5) container %d\n",
470 aif->data.PR[0].jd.client.container.src);
471 break;
472 case AifJobCtrScrubRaid5: /* Container Scrub Raid5
473 * operation */
474 device_printf(sc->aac_dev,
475 "(ConatainerScrubRaid5) container %d\n",
476 aif->data.PR[0].jd.client.container.src);
477 break;
478 case AifJobCtrMorph: /* Container morph operation */
479 device_printf(sc->aac_dev,
480 "(ConatainerMorph) container %d\n",
481 aif->data.PR[0].jd.client.container.src);
482 /* XXX two containers? */
483 break;
484 case AifJobCtrPartCopy: /* Container Partition copy
485 * operation */
486 device_printf(sc->aac_dev,
487 "(ConatainerPartCopy) container %d to "
488 "%d\n",
489 aif->data.PR[0].jd.client.container.src,
490 aif->data.PR[0].jd.client.container.dst);
491 break;
492 case AifJobCtrRebuildMirror: /* Container Rebuild Mirror
493 * operation */
494 device_printf(sc->aac_dev,
495 "(ConatainerRebuildMirror) container "
496 "%d\n",
497 aif->data.PR[0].jd.client.container.src);
498 break;
499 case AifJobCtrCrazyCache: /* crazy cache */
500 device_printf(sc->aac_dev,
501 "(ConatainerCrazyCache) container %d\n",
502 aif->data.PR[0].jd.client.container.src);
503 /* XXX two containers? */
504 break;
505 case AifJobFsCreate: /* File System Create
506 * operation */
507 device_printf(sc->aac_dev, "(FsCreate)\n");
508 break;
509 case AifJobFsVerify: /* File System Verify
510 * operation */
511 device_printf(sc->aac_dev, "(FsVerivy)\n");
512 break;
513 case AifJobFsExtend: /* File System Extend
514 * operation */
515 device_printf(sc->aac_dev, "(FsExtend)\n");
516 break;
517 case AifJobApiFormatNTFS: /* Format a drive to NTFS */
518 device_printf(sc->aac_dev, "(FormatNTFS)\n");
519 break;
520 case AifJobApiFormatFAT: /* Format a drive to FAT */
521 device_printf(sc->aac_dev, "(FormatFAT)\n");
522 break;
523 case AifJobApiUpdateSnapshot: /* update the read/write half
524 * of a snapshot */
525 device_printf(sc->aac_dev, "(UpdateSnapshot)\n");
526 break;
527 case AifJobApiFormatFAT32: /* Format a drive to FAT32 */
528 device_printf(sc->aac_dev, "(FormatFAT32)\n");
529 break;
530 case AifJobCtlContinuousCtrVerify: /* Adapter operation */
531 device_printf(sc->aac_dev, "(ContinuousCtrVerify)\n");
532 break;
533 default:
534 device_printf(sc->aac_dev, "(%d)\n",
535 aif->data.PR[0].jd.type);
536 break;
537 }
538 break;
539 }
540 case AifCmdAPIReport:
541 device_printf(sc->aac_dev, "APIReport (%d)\n", aif->seqNumber);
542 break;
543 case AifCmdDriverNotify:
544 device_printf(sc->aac_dev, "DriverNotify (%d)\n",
545 aif->seqNumber);
546 break;
547 default:
548 device_printf(sc->aac_dev, "AIF %d (%d)\n", aif->command,
549 aif->seqNumber);
550 break;
551 }
552}
553#endif /* AAC_DEBUG */