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