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