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: src/sys/dev/aac/aac_debug.c,v 1.26 2010/04/13 00:33:07 emaste Exp $ 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 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 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 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 166 aac_print_fib(struct aac_softc *sc, struct aac_fib *fib, const char *caller) 167 { 168 if (fib == NULL) { 169 device_printf(sc->aac_dev, 170 "aac_print_fib called with NULL fib\n"); 171 return; 172 } 173 device_printf(sc->aac_dev, "%s: FIB @ %p\n", caller, fib); 174 device_printf(sc->aac_dev, " XferState %b\n", fib->Header.XferState, 175 "\20" 176 "\1HOSTOWNED" 177 "\2ADAPTEROWNED" 178 "\3INITIALISED" 179 "\4EMPTY" 180 "\5FROMPOOL" 181 "\6FROMHOST" 182 "\7FROMADAP" 183 "\10REXPECTED" 184 "\11RNOTEXPECTED" 185 "\12DONEADAP" 186 "\13DONEHOST" 187 "\14HIGH" 188 "\15NORM" 189 "\16ASYNC" 190 "\17PAGEFILEIO" 191 "\20SHUTDOWN" 192 "\21LAZYWRITE" 193 "\22ADAPMICROFIB" 194 "\23BIOSFIB" 195 "\24FAST_RESPONSE" 196 "\25APIFIB\n"); 197 device_printf(sc->aac_dev, " Command %d\n", fib->Header.Command); 198 device_printf(sc->aac_dev, " StructType %d\n", 199 fib->Header.StructType); 200 device_printf(sc->aac_dev, " Flags 0x%x\n", fib->Header.Flags); 201 device_printf(sc->aac_dev, " Size %d\n", fib->Header.Size); 202 device_printf(sc->aac_dev, " SenderSize %d\n", 203 fib->Header.SenderSize); 204 device_printf(sc->aac_dev, " SenderAddress 0x%x\n", 205 fib->Header.SenderFibAddress); 206 device_printf(sc->aac_dev, " RcvrAddress 0x%x\n", 207 fib->Header.ReceiverFibAddress); 208 device_printf(sc->aac_dev, " SenderData 0x%x\n", 209 fib->Header.SenderData); 210 switch(fib->Header.Command) { 211 case ContainerCommand: 212 { 213 struct aac_blockread *br; 214 struct aac_blockwrite *bw; 215 struct aac_sg_table *sg; 216 int i; 217 218 br = (struct aac_blockread*)fib->data; 219 bw = (struct aac_blockwrite*)fib->data; 220 sg = NULL; 221 222 if (br->Command == VM_CtBlockRead) { 223 device_printf(sc->aac_dev, 224 " BlockRead: container %d 0x%x/%d\n", 225 br->ContainerId, br->BlockNumber, 226 br->ByteCount); 227 sg = &br->SgMap; 228 } 229 if (bw->Command == VM_CtBlockWrite) { 230 device_printf(sc->aac_dev, 231 " BlockWrite: container %d 0x%x/%d " 232 "(%s)\n", bw->ContainerId, 233 bw->BlockNumber, bw->ByteCount, 234 bw->Stable == CSTABLE ? "stable" : 235 "unstable"); 236 sg = &bw->SgMap; 237 } 238 if (sg != NULL) { 239 device_printf(sc->aac_dev, 240 " %d s/g entries\n", sg->SgCount); 241 for (i = 0; i < sg->SgCount; i++) 242 device_printf(sc->aac_dev, " 0x%08x/%d\n", 243 sg->SgEntry[i].SgAddress, 244 sg->SgEntry[i].SgByteCount); 245 } 246 break; 247 } 248 default: 249 device_printf(sc->aac_dev, " %16D\n", fib->data, " "); 250 device_printf(sc->aac_dev, " %16D\n", fib->data + 16, " "); 251 break; 252 } 253 } 254 255 /* 256 * Describe an AIF we have received. 257 */ 258 void 259 aac_print_aif(struct aac_softc *sc, struct aac_aif_command *aif) 260 { 261 switch(aif->command) { 262 case AifCmdEventNotify: 263 device_printf(sc->aac_dev, "EventNotify(%d)\n", aif->seqNumber); 264 switch(aif->data.EN.type) { 265 case AifEnGeneric: /* Generic notification */ 266 device_printf(sc->aac_dev, "(Generic) %.*s\n", 267 (int)sizeof(aif->data.EN.data.EG), 268 aif->data.EN.data.EG.text); 269 break; 270 case AifEnTaskComplete: /* Task has completed */ 271 device_printf(sc->aac_dev, "(TaskComplete)\n"); 272 break; 273 case AifEnConfigChange: /* Adapter configuration change 274 * occurred */ 275 device_printf(sc->aac_dev, "(ConfigChange)\n"); 276 break; 277 case AifEnContainerChange: /* Adapter specific container 278 * configuration change */ 279 device_printf(sc->aac_dev, "(ContainerChange) " 280 "container %d,%d\n", 281 aif->data.EN.data.ECC.container[0], 282 aif->data.EN.data.ECC.container[1]); 283 break; 284 case AifEnDeviceFailure: /* SCSI device failed */ 285 device_printf(sc->aac_dev, "(DeviceFailure) " 286 "handle %d\n", 287 aif->data.EN.data.EDF.deviceHandle); 288 break; 289 case AifEnMirrorFailover: /* Mirror failover started */ 290 device_printf(sc->aac_dev, "(MirrorFailover) " 291 "container %d failed, " 292 "migrating from slice %d to %d\n", 293 aif->data.EN.data.EMF.container, 294 aif->data.EN.data.EMF.failedSlice, 295 aif->data.EN.data.EMF.creatingSlice); 296 break; 297 case AifEnContainerEvent: /* Significant container 298 * event */ 299 device_printf(sc->aac_dev, "(ContainerEvent) " 300 "container %d event " 301 "%d\n", aif->data.EN.data.ECE.container, 302 aif->data.EN.data.ECE.eventType); 303 break; 304 case AifEnFileSystemChange: /* File system changed */ 305 device_printf(sc->aac_dev, "(FileSystemChange)\n"); 306 break; 307 case AifEnConfigPause: /* Container pause event */ 308 device_printf(sc->aac_dev, "(ConfigPause)\n"); 309 break; 310 case AifEnConfigResume: /* Container resume event */ 311 device_printf(sc->aac_dev, "(ConfigResume)\n"); 312 break; 313 case AifEnFailoverChange: /* Failover space assignment 314 * changed */ 315 device_printf(sc->aac_dev, "(FailoverChange)\n"); 316 break; 317 case AifEnRAID5RebuildDone: /* RAID5 rebuild finished */ 318 device_printf(sc->aac_dev, "(RAID5RebuildDone)\n"); 319 break; 320 case AifEnEnclosureManagement: /* Enclosure management event */ 321 device_printf(sc->aac_dev, "(EnclosureManagement) " 322 "EMPID %d unit %d " 323 "event %d\n", aif->data.EN.data.EEE.empID, 324 aif->data.EN.data.EEE.unitID, 325 aif->data.EN.data.EEE.eventType); 326 break; 327 case AifEnBatteryEvent: /* Significant NV battery 328 * event */ 329 device_printf(sc->aac_dev, "(BatteryEvent) %d " 330 "(state was %d, is %d\n", 331 aif->data.EN.data.EBE.transition_type, 332 aif->data.EN.data.EBE.current_state, 333 aif->data.EN.data.EBE.prior_state); 334 break; 335 case AifEnAddContainer: /* A new container was 336 * created. */ 337 device_printf(sc->aac_dev, "(AddContainer)\n"); 338 break; 339 case AifEnDeleteContainer: /* A container was deleted. */ 340 device_printf(sc->aac_dev, "(DeleteContainer)\n"); 341 break; 342 case AifEnBatteryNeedsRecond: /* The battery needs 343 * reconditioning */ 344 device_printf(sc->aac_dev, "(BatteryNeedsRecond)\n"); 345 break; 346 case AifEnClusterEvent: /* Some cluster event */ 347 device_printf(sc->aac_dev, "(ClusterEvent) event %d\n", 348 aif->data.EN.data.ECLE.eventType); 349 break; 350 case AifEnDiskSetEvent: /* A disk set event occured. */ 351 device_printf(sc->aac_dev, "(DiskSetEvent) event %d " 352 "diskset %jd creator %jd\n", 353 aif->data.EN.data.EDS.eventType, 354 (intmax_t)aif->data.EN.data.EDS.DsNum, 355 (intmax_t)aif->data.EN.data.EDS.CreatorId); 356 break; 357 case AifDenMorphComplete: /* A morph operation 358 * completed */ 359 device_printf(sc->aac_dev, "(MorphComplete)\n"); 360 break; 361 case AifDenVolumeExtendComplete: /* A volume expand operation 362 * completed */ 363 device_printf(sc->aac_dev, "(VolumeExtendComplete)\n"); 364 break; 365 default: 366 device_printf(sc->aac_dev, "(%d)\n", aif->data.EN.type); 367 break; 368 } 369 break; 370 case AifCmdJobProgress: 371 { 372 char *status; 373 switch(aif->data.PR[0].status) { 374 case AifJobStsSuccess: 375 status = "success"; break; 376 case AifJobStsFinished: 377 status = "finished"; break; 378 case AifJobStsAborted: 379 status = "aborted"; break; 380 case AifJobStsFailed: 381 status = "failed"; break; 382 case AifJobStsSuspended: 383 status = "suspended"; break; 384 case AifJobStsRunning: 385 status = "running"; break; 386 default: 387 status = "unknown status"; break; 388 } 389 390 device_printf(sc->aac_dev, "JobProgress (%d) - %s (%d, %d)\n", 391 aif->seqNumber, status, 392 aif->data.PR[0].currentTick, 393 aif->data.PR[0].finalTick); 394 switch(aif->data.PR[0].jd.type) { 395 case AifJobScsiZero: /* SCSI dev clear operation */ 396 device_printf(sc->aac_dev, "(ScsiZero) handle %d\n", 397 aif->data.PR[0].jd.client.scsi_dh); 398 break; 399 case AifJobScsiVerify: /* SCSI device Verify operation 400 * NO REPAIR */ 401 device_printf(sc->aac_dev, "(ScsiVerify) handle %d\n", 402 aif->data.PR[0].jd.client.scsi_dh); 403 break; 404 case AifJobScsiExercise: /* SCSI device Exercise 405 * operation */ 406 device_printf(sc->aac_dev, "(ScsiExercise) handle %d\n", 407 aif->data.PR[0].jd.client.scsi_dh); 408 break; 409 case AifJobScsiVerifyRepair: /* SCSI device Verify operation 410 * WITH repair */ 411 device_printf(sc->aac_dev, 412 "(ScsiVerifyRepair) handle %d\n", 413 aif->data.PR[0].jd.client.scsi_dh); 414 break; 415 case AifJobCtrZero: /* Container clear operation */ 416 device_printf(sc->aac_dev, 417 "(ContainerZero) container %d\n", 418 aif->data.PR[0].jd.client.container.src); 419 break; 420 case AifJobCtrCopy: /* Container copy operation */ 421 device_printf(sc->aac_dev, 422 "(ContainerCopy) container %d to %d\n", 423 aif->data.PR[0].jd.client.container.src, 424 aif->data.PR[0].jd.client.container.dst); 425 break; 426 case AifJobCtrCreateMirror: /* Container Create Mirror 427 * operation */ 428 device_printf(sc->aac_dev, 429 "(ContainerCreateMirror) container %d\n", 430 aif->data.PR[0].jd.client.container.src); 431 /* XXX two containers? */ 432 break; 433 case AifJobCtrMergeMirror: /* Container Merge Mirror 434 * operation */ 435 device_printf(sc->aac_dev, 436 "(ContainerMergeMirror) container %d\n", 437 aif->data.PR[0].jd.client.container.src); 438 /* XXX two containers? */ 439 break; 440 case AifJobCtrScrubMirror: /* Container Scrub Mirror 441 * operation */ 442 device_printf(sc->aac_dev, 443 "(ContainerScrubMirror) container %d\n", 444 aif->data.PR[0].jd.client.container.src); 445 break; 446 case AifJobCtrRebuildRaid5: /* Container Rebuild Raid5 447 * operation */ 448 device_printf(sc->aac_dev, 449 "(ContainerRebuildRaid5) container %d\n", 450 aif->data.PR[0].jd.client.container.src); 451 break; 452 case AifJobCtrScrubRaid5: /* Container Scrub Raid5 453 * operation */ 454 device_printf(sc->aac_dev, 455 "(ContainerScrubRaid5) container %d\n", 456 aif->data.PR[0].jd.client.container.src); 457 break; 458 case AifJobCtrMorph: /* Container morph operation */ 459 device_printf(sc->aac_dev, 460 "(ContainerMorph) container %d\n", 461 aif->data.PR[0].jd.client.container.src); 462 /* XXX two containers? */ 463 break; 464 case AifJobCtrPartCopy: /* Container Partition copy 465 * operation */ 466 device_printf(sc->aac_dev, 467 "(ContainerPartCopy) container %d to " 468 "%d\n", 469 aif->data.PR[0].jd.client.container.src, 470 aif->data.PR[0].jd.client.container.dst); 471 break; 472 case AifJobCtrRebuildMirror: /* Container Rebuild Mirror 473 * operation */ 474 device_printf(sc->aac_dev, 475 "(ContainerRebuildMirror) container " 476 "%d\n", 477 aif->data.PR[0].jd.client.container.src); 478 break; 479 case AifJobCtrCrazyCache: /* crazy cache */ 480 device_printf(sc->aac_dev, 481 "(ContainerCrazyCache) container %d\n", 482 aif->data.PR[0].jd.client.container.src); 483 /* XXX two containers? */ 484 break; 485 case AifJobFsCreate: /* File System Create 486 * operation */ 487 device_printf(sc->aac_dev, "(FsCreate)\n"); 488 break; 489 case AifJobFsVerify: /* File System Verify 490 * operation */ 491 device_printf(sc->aac_dev, "(FsVerivy)\n"); 492 break; 493 case AifJobFsExtend: /* File System Extend 494 * operation */ 495 device_printf(sc->aac_dev, "(FsExtend)\n"); 496 break; 497 case AifJobApiFormatNTFS: /* Format a drive to NTFS */ 498 device_printf(sc->aac_dev, "(FormatNTFS)\n"); 499 break; 500 case AifJobApiFormatFAT: /* Format a drive to FAT */ 501 device_printf(sc->aac_dev, "(FormatFAT)\n"); 502 break; 503 case AifJobApiUpdateSnapshot: /* update the read/write half 504 * of a snapshot */ 505 device_printf(sc->aac_dev, "(UpdateSnapshot)\n"); 506 break; 507 case AifJobApiFormatFAT32: /* Format a drive to FAT32 */ 508 device_printf(sc->aac_dev, "(FormatFAT32)\n"); 509 break; 510 case AifJobCtlContinuousCtrVerify: /* Adapter operation */ 511 device_printf(sc->aac_dev, "(ContinuousCtrVerify)\n"); 512 break; 513 default: 514 device_printf(sc->aac_dev, "(%d)\n", 515 aif->data.PR[0].jd.type); 516 break; 517 } 518 break; 519 } 520 case AifCmdAPIReport: 521 device_printf(sc->aac_dev, "APIReport (%d)\n", aif->seqNumber); 522 break; 523 case AifCmdDriverNotify: 524 device_printf(sc->aac_dev, "DriverNotify (%d)\n", 525 aif->seqNumber); 526 break; 527 default: 528 device_printf(sc->aac_dev, "AIF %d (%d)\n", aif->command, 529 aif->seqNumber); 530 break; 531 } 532 } 533 #endif /* AAC_DEBUG */ 534