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