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