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