1 /* 2 * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* 7 * Copyright 2005-06 Adaptec, Inc. 8 * Copyright (c) 2005-06 Adaptec Inc., Achim Leubner 9 * Copyright (c) 2000 Michael Smith 10 * Copyright (c) 2001 Scott Long 11 * Copyright (c) 2000 BSDi 12 * All rights reserved. 13 * 14 * Redistribution and use in source and binary forms, with or without 15 * modification, are permitted provided that the following conditions 16 * are met: 17 * 1. Redistributions of source code must retain the above copyright 18 * notice, this list of conditions and the following disclaimer. 19 * 2. Redistributions in binary form must reproduce the above copyright 20 * notice, this list of conditions and the following disclaimer in the 21 * documentation and/or other materials provided with the distribution. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * $FreeBSD: src/sys/dev/aac/aacvar.h,v 1.47 2005/10/08 15:55:09 scottl Exp $ 36 */ 37 38 #ifndef _AAC_H_ 39 #define _AAC_H_ 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 #define AAC_ROUNDUP(x, y) (((x) + (y) - 1) / (y) * (y)) 46 47 #define AAC_TYPE_DEVO 1 48 #define AAC_TYPE_ALPHA 2 49 #define AAC_TYPE_BETA 3 50 #define AAC_TYPE_RELEASE 4 51 52 #ifndef AAC_DRIVER_BUILD 53 #define AAC_DRIVER_BUILD 1 54 #endif 55 56 #define AAC_DRIVER_MAJOR_VERSION 2 57 #define AAC_DRIVER_MINOR_VERSION 2 58 #define AAC_DRIVER_BUGFIX_LEVEL 9 59 #define AAC_DRIVER_TYPE AAC_TYPE_RELEASE 60 61 #define STR(s) # s 62 #define AAC_VERSION(a, b, c) STR(a.b.c) 63 #define AAC_DRIVER_VERSION AAC_VERSION(AAC_DRIVER_MAJOR_VERSION, \ 64 AAC_DRIVER_MINOR_VERSION, \ 65 AAC_DRIVER_BUGFIX_LEVEL) 66 67 #define AACOK 0 68 #define AACERR -1 69 70 #define AAC_MAX_ADAPTERS 64 71 72 /* Definitions for mode sense */ 73 #ifndef SD_MODE_SENSE_PAGE3_CODE 74 #define SD_MODE_SENSE_PAGE3_CODE 0x03 75 #endif 76 77 #ifndef SD_MODE_SENSE_PAGE4_CODE 78 #define SD_MODE_SENSE_PAGE4_CODE 0x04 79 #endif 80 81 #ifndef SCMD_SYNCHRONIZE_CACHE 82 #define SCMD_SYNCHRONIZE_CACHE 0x35 83 #endif 84 85 /* 86 * The controller reports status events in AIFs. We hang on to a number of 87 * these in order to pass them out to user-space management tools. 88 */ 89 #define AAC_AIFQ_LENGTH 64 90 91 #ifdef __x86 92 #define AAC_IMMEDIATE_TIMEOUT 30 /* seconds */ 93 #else 94 #define AAC_IMMEDIATE_TIMEOUT 60 /* seconds */ 95 #endif 96 #define AAC_FWUP_TIMEOUT 180 /* wait up to 3 minutes */ 97 #define AAC_IOCTL_TIMEOUT 900 /* wait up to 15 minutes */ 98 #define AAC_SYNC_TIMEOUT 900 /* wait up to 15 minutes */ 99 100 /* Adapter hardware interface types */ 101 #define AAC_HWIF_UNKNOWN 0 102 #define AAC_HWIF_I960RX 1 103 #define AAC_HWIF_RKT 2 104 105 #define AAC_TYPE_UNKNOWN 0 106 #define AAC_TYPE_SCSI 1 107 #define AAC_TYPE_SATA 2 108 #define AAC_TYPE_SAS 3 109 110 #define AAC_LS32(d) ((uint32_t)((d) & 0xffffffffull)) 111 #define AAC_MS32(d) ((uint32_t)((d) >> 32)) 112 #define AAC_LO32(p64) ((uint32_t *)(p64)) 113 #define AAC_HI32(p64) ((uint32_t *)(p64) + 1) 114 115 /* 116 * AAC_CMDQ_SYNC should be 0 and AAC_CMDQ_ASYNC be 1 for Sync FIB io 117 * to be served before async FIB io, see aac_start_waiting_io(). 118 * So that io requests sent by interactive userland commands get 119 * responded asap. 120 */ 121 enum aac_cmdq { 122 AAC_CMDQ_SYNC, /* sync FIB queue */ 123 AAC_CMDQ_ASYNC, /* async FIB queue */ 124 AAC_CMDQ_NUM 125 }; 126 127 /* 128 * IO command flags 129 */ 130 #define AAC_IOCMD_SYNC (1 << AAC_CMDQ_SYNC) 131 #define AAC_IOCMD_ASYNC (1 << AAC_CMDQ_ASYNC) 132 #define AAC_IOCMD_OUTSTANDING (1 << AAC_CMDQ_NUM) 133 #define AAC_IOCMD_ALL (AAC_IOCMD_SYNC | AAC_IOCMD_ASYNC | \ 134 AAC_IOCMD_OUTSTANDING) 135 136 struct aac_cmd_queue { 137 struct aac_cmd *q_head; /* also as the header of aac_cmd */ 138 struct aac_cmd *q_tail; 139 }; 140 141 struct aac_card_type { 142 uint16_t vendor; /* PCI Vendor ID */ 143 uint16_t device; /* PCI Device ID */ 144 uint16_t subvendor; /* PCI Subsystem Vendor ID */ 145 uint16_t subsys; /* PCI Subsystem ID */ 146 uint16_t hwif; /* card chip type: i960 or Rocket */ 147 uint16_t quirks; /* card odd limits */ 148 uint16_t type; /* hard drive type */ 149 char *vid; /* ASCII data for INQUIRY command vendor id */ 150 char *desc; /* ASCII data for INQUIRY command product id */ 151 }; 152 153 /* Device types */ 154 #define AAC_DEV_LD 0 /* logical device */ 155 #define AAC_DEV_PD 1 /* physical device */ 156 157 /* DR events */ 158 #define AAC_EVT_NONE 0 159 #define AAC_EVT_ONLINE 1 160 #define AAC_EVT_OFFLINE 2 161 162 /* Device flags */ 163 #define AAC_DFLAG_VALID (1 << 0) 164 #define AAC_DFLAG_CONFIGURING (1 << 1) 165 166 #define AAC_DEV_IS_VALID(dvp) ((dvp)->flags & AAC_DFLAG_VALID) 167 168 struct aac_device { 169 int flags; 170 171 uint8_t type; 172 dev_info_t *dip; 173 int ncmds[AAC_CMDQ_NUM]; /* outstanding cmds of the device */ 174 int throttle[AAC_CMDQ_NUM]; /* hold IO cmds for the device */ 175 }; 176 177 /* Array description */ 178 struct aac_container { 179 struct aac_device dev; 180 181 uint32_t cid; /* container id */ 182 uint32_t uid; /* container uid */ 183 uint64_t size; /* in block */ 184 uint8_t locked; 185 uint8_t deleted; 186 uint8_t reset; /* container is being reseted */ 187 }; 188 189 /* Non-DASD phys. device descrption, eg. CDROM or tape */ 190 struct aac_nondasd { 191 struct aac_device dev; 192 193 uint32_t bus; 194 uint32_t tid; 195 }; 196 197 /* 198 * The firmware can support a lot of outstanding commands. Each aac_slot 199 * is corresponding to one of such commands. It records the command and 200 * associated DMA resource for FIB command. 201 */ 202 struct aac_slot { 203 struct aac_slot *next; /* next slot in the free slot list */ 204 int index; /* index of this slot */ 205 ddi_acc_handle_t fib_acc_handle; 206 ddi_dma_handle_t fib_dma_handle; 207 uint64_t fib_phyaddr; /* physical address of FIB memory */ 208 struct aac_cmd *acp; /* command using this slot */ 209 struct aac_fib *fibp; /* virtual address of FIB memory */ 210 }; 211 212 /* 213 * Scatter-gather list structure defined by HBA hardware 214 */ 215 struct aac_sge { 216 uint32_t bcount; /* byte count */ 217 union { 218 uint32_t ad32; /* 32 bit address */ 219 struct { 220 uint32_t lo; 221 uint32_t hi; 222 } ad64; /* 64 bit address */ 223 } addr; 224 }; 225 226 /* aac_cmd flags */ 227 #define AAC_CMD_CONSISTENT (1 << 0) 228 #define AAC_CMD_DMA_PARTIAL (1 << 1) 229 #define AAC_CMD_DMA_VALID (1 << 2) 230 #define AAC_CMD_BUF_READ (1 << 3) 231 #define AAC_CMD_BUF_WRITE (1 << 4) 232 #define AAC_CMD_SYNC (1 << 5) /* use sync FIB */ 233 #define AAC_CMD_NO_INTR (1 << 6) /* poll IO, no intr */ 234 #define AAC_CMD_NO_CB (1 << 7) /* sync IO, no callback */ 235 #define AAC_CMD_NTAG (1 << 8) 236 #define AAC_CMD_CMPLT (1 << 9) /* cmd exec'ed by driver/fw */ 237 #define AAC_CMD_ABORT (1 << 10) 238 #define AAC_CMD_TIMEOUT (1 << 11) 239 #define AAC_CMD_ERR (1 << 12) 240 #define AAC_CMD_IN_SYNC_SLOT (1 << 13) 241 242 struct aac_softstate; 243 typedef void (*aac_cmd_fib_t)(struct aac_softstate *, struct aac_cmd *); 244 245 struct aac_cmd { 246 /* 247 * Note: should be the first member for aac_cmd_queue to work 248 * correctly. 249 */ 250 struct aac_cmd *next; 251 struct aac_cmd *prev; 252 253 struct scsi_pkt *pkt; 254 int cmdlen; 255 int flags; 256 uint32_t timeout; /* time when the cmd should have completed */ 257 struct buf *bp; 258 ddi_dma_handle_t buf_dma_handle; 259 260 /* For non-aligned buffer and SRB */ 261 caddr_t abp; 262 ddi_acc_handle_t abh; 263 264 /* Data transfer state */ 265 ddi_dma_cookie_t cookie; 266 uint_t left_cookien; 267 uint_t cur_win; 268 uint_t total_nwin; 269 size_t total_xfer; 270 uint64_t blkno; 271 uint32_t bcount; /* buffer size in byte */ 272 struct aac_sge *sgt; /* sg table */ 273 274 /* FIB construct function */ 275 aac_cmd_fib_t aac_cmd_fib; 276 /* Call back function for completed command */ 277 void (*ac_comp)(struct aac_softstate *, struct aac_cmd *); 278 279 struct aac_slot *slotp; /* slot used by this command */ 280 struct aac_device *dvp; /* target device */ 281 282 /* FIB for this IO command */ 283 int fib_size; /* size of the FIB xferred to/from the card */ 284 struct aac_fib *fibp; 285 286 #ifdef DEBUG 287 uint32_t fib_flags; 288 #endif 289 }; 290 291 /* Flags for attach tracking */ 292 #define AAC_ATTACH_SOFTSTATE_ALLOCED (1 << 0) 293 #define AAC_ATTACH_CARD_DETECTED (1 << 1) 294 #define AAC_ATTACH_PCI_MEM_MAPPED (1 << 2) 295 #define AAC_ATTACH_KMUTEX_INITED (1 << 3) 296 #define AAC_ATTACH_SCSI_TRAN_SETUP (1 << 4) 297 #define AAC_ATTACH_COMM_SPACE_SETUP (1 << 5) 298 #define AAC_ATTACH_CREATE_DEVCTL (1 << 6) 299 #define AAC_ATTACH_CREATE_SCSI (1 << 7) 300 301 /* Driver running states */ 302 #define AAC_STATE_STOPPED 0 303 #define AAC_STATE_RUN (1 << 0) 304 #define AAC_STATE_RESET (1 << 1) 305 #define AAC_STATE_QUIESCED (1 << 2) 306 #define AAC_STATE_DEAD (1 << 3) 307 #define AAC_STATE_INTR (1 << 4) 308 309 /* 310 * Flags for aac firmware 311 * Note: Quirks are only valid for the older cards. These cards only supported 312 * old comm. Thus they are not valid for any cards that support new comm. 313 */ 314 #define AAC_FLAGS_SG_64BIT (1 << 0) /* Use 64-bit S/G addresses */ 315 #define AAC_FLAGS_4GB_WINDOW (1 << 1) /* Can access host mem 2-4GB range */ 316 #define AAC_FLAGS_NO4GB (1 << 2) /* quirk: FIB addresses must reside */ 317 /* between 0x2000 & 0x7FFFFFFF */ 318 #define AAC_FLAGS_256FIBS (1 << 3) /* quirk: Can only do 256 commands */ 319 #define AAC_FLAGS_NEW_COMM (1 << 4) /* New comm. interface supported */ 320 #define AAC_FLAGS_RAW_IO (1 << 5) /* Raw I/O interface */ 321 #define AAC_FLAGS_ARRAY_64BIT (1 << 6) /* 64-bit array size */ 322 #define AAC_FLAGS_LBA_64BIT (1 << 7) /* 64-bit LBA supported */ 323 #define AAC_FLAGS_17SG (1 << 8) /* quirk: 17 scatter gather maximum */ 324 #define AAC_FLAGS_34SG (1 << 9) /* quirk: 34 scatter gather maximum */ 325 #define AAC_FLAGS_NONDASD (1 << 10) /* non-DASD device supported */ 326 #define AAC_FLAGS_BRKUP (1 << 11) /* pkt breakup support */ 327 328 struct aac_softstate; 329 struct aac_interface { 330 int (*aif_get_fwstatus)(struct aac_softstate *); 331 int (*aif_get_mailbox)(struct aac_softstate *, int); 332 void (*aif_set_mailbox)(struct aac_softstate *, uint32_t, 333 uint32_t, uint32_t, uint32_t, uint32_t); 334 }; 335 336 struct aac_fib_context { 337 uint32_t unique; 338 int ctx_idx; 339 int ctx_filled; /* aifq is full for this fib context */ 340 struct aac_fib_context *next, *prev; 341 }; 342 343 #define AAC_VENDOR_LEN 8 344 #define AAC_PRODUCT_LEN 16 345 346 struct aac_softstate { 347 int card; /* index to aac_cards */ 348 uint16_t hwif; /* card chip type: i960 or Rocket */ 349 uint16_t vendid; /* vendor id */ 350 uint16_t subvendid; /* sub vendor id */ 351 uint16_t devid; /* device id */ 352 uint16_t subsysid; /* sub system id */ 353 char vendor_name[AAC_VENDOR_LEN + 1]; 354 char product_name[AAC_PRODUCT_LEN + 1]; 355 uint32_t support_opt; /* firmware features */ 356 uint32_t support_opt2; 357 uint32_t feature_bits; 358 uint32_t atu_size; /* actual size of PCI mem space */ 359 uint32_t map_size; /* mapped PCI mem space size */ 360 uint32_t map_size_min; /* minimum size of PCI mem that must be */ 361 /* mapped to address the card */ 362 int flags; /* firmware features enabled */ 363 int instance; 364 dev_info_t *devinfo_p; 365 scsi_hba_tran_t *hba_tran; 366 int slen; 367 int legacy; /* legacy device naming */ 368 uint32_t dma_max; /* for buf breakup */ 369 370 /* DMA attributes */ 371 ddi_dma_attr_t buf_dma_attr; 372 ddi_dma_attr_t addr_dma_attr; 373 374 /* PCI spaces */ 375 ddi_device_acc_attr_t acc_attr; 376 ddi_device_acc_attr_t reg_attr; 377 ddi_acc_handle_t pci_mem_handle; 378 uint8_t *pci_mem_base_vaddr; 379 uint32_t pci_mem_base_paddr; 380 381 struct aac_interface aac_if; /* adapter hardware interface */ 382 383 struct aac_cmd sync_ac; /* sync FIB */ 384 385 /* Communication space */ 386 struct aac_comm_space *comm_space; 387 ddi_acc_handle_t comm_space_acc_handle; 388 ddi_dma_handle_t comm_space_dma_handle; 389 uint32_t comm_space_phyaddr; 390 391 /* Old Comm. interface: message queues */ 392 struct aac_queue_table *qtablep; 393 struct aac_queue_entry *qentries[AAC_QUEUE_COUNT]; 394 395 /* New Comm. interface */ 396 uint32_t aac_max_fibs; /* max. FIB count */ 397 uint32_t aac_max_fib_size; /* max. FIB size */ 398 uint32_t aac_sg_tablesize; /* max. sg count from host */ 399 uint32_t aac_max_sectors; /* max. I/O size from host (blocks) */ 400 401 aac_cmd_fib_t aac_cmd_fib; /* IO cmd FIB construct function */ 402 aac_cmd_fib_t aac_cmd_fib_scsi; /* SRB construct function */ 403 404 ddi_softintr_t softint_id; /* soft intr */ 405 406 kmutex_t io_lock; 407 int state; /* driver state */ 408 409 struct aac_container containers[AAC_MAX_LD]; 410 int container_count; /* max container id + 1 */ 411 struct aac_nondasd *nondasds; 412 uint32_t bus_max; /* max FW buses exposed */ 413 uint32_t tgt_max; /* max FW target per bus */ 414 415 /* 416 * Command queues 417 * Each aac command flows through wait(or wait_sync) queue, 418 * busy queue, and complete queue sequentially. 419 */ 420 struct aac_cmd_queue q_wait[AAC_CMDQ_NUM]; 421 struct aac_cmd_queue q_busy; /* outstanding cmd queue */ 422 kmutex_t q_comp_mutex; 423 struct aac_cmd_queue q_comp; /* completed io requests */ 424 425 /* I/O slots and FIBs */ 426 int total_slots; /* total slots allocated */ 427 int total_fibs; /* total FIBs allocated */ 428 struct aac_slot *io_slot; /* static list for allocated slots */ 429 struct aac_slot *free_io_slot_head; 430 431 timeout_id_t timeout_id; /* for timeout daemon */ 432 433 kcondvar_t event; /* for ioctl_send_fib() and sync IO */ 434 kcondvar_t sync_fib_cv; /* for sync_fib_slot_bind/release */ 435 436 int bus_ncmds[AAC_CMDQ_NUM]; /* total outstanding async cmds */ 437 int bus_throttle[AAC_CMDQ_NUM]; /* hold IO cmds for the bus */ 438 int ndrains; /* number of draining threads */ 439 timeout_id_t drain_timeid; /* for outstanding cmd drain */ 440 kcondvar_t drain_cv; /* for quiesce drain */ 441 442 /* AIF */ 443 kmutex_t aifq_mutex; /* for AIF queue aifq */ 444 kcondvar_t aifv; 445 union aac_fib_align aifq[AAC_AIFQ_LENGTH]; 446 int aifq_idx; /* slot for next new AIF */ 447 int aifq_wrap; /* AIF queue has ever been wrapped */ 448 struct aac_fib_context *fibctx; 449 int devcfg_wait_on; /* AIF event waited for rescan */ 450 451 int fm_capabilities; 452 ddi_taskq_t *taskq; 453 454 /* MSI specific fields */ 455 ddi_intr_handle_t *htable; /* For array of interrupts */ 456 int intr_type; /* What type of interrupt */ 457 int intr_cnt; /* # of intrs count returned */ 458 int intr_size; 459 uint_t intr_pri; /* Interrupt priority */ 460 int intr_cap; /* Interrupt capabilities */ 461 462 #ifdef DEBUG 463 /* UART trace printf variables */ 464 uint32_t debug_flags; /* debug print flags bitmap */ 465 uint32_t debug_fib_flags; /* debug FIB print flags bitmap */ 466 uint32_t debug_fw_flags; /* FW debug flags */ 467 uint32_t debug_buf_offset; /* offset from DPMEM start */ 468 uint32_t debug_buf_size; /* FW debug buffer size in bytes */ 469 uint32_t debug_header_size; /* size of debug header */ 470 #endif 471 }; 472 473 /* 474 * The following data are kept stable because they are only written at driver 475 * initialization, and we do not allow them changed otherwise even at driver 476 * re-initialization. 477 */ 478 _NOTE(SCHEME_PROTECTS_DATA("stable data", aac_softstate::{flags slen \ 479 buf_dma_attr pci_mem_handle pci_mem_base_vaddr \ 480 comm_space_acc_handle comm_space_dma_handle aac_max_fib_size \ 481 aac_sg_tablesize aac_cmd_fib aac_cmd_fib_scsi debug_flags bus_max tgt_max})) 482 483 #ifdef DEBUG 484 485 #define AACDB_FLAGS_MASK 0x0000ffff 486 #define AACDB_FLAGS_KERNEL_PRINT 0x00000001 487 #define AACDB_FLAGS_FW_PRINT 0x00000002 488 #define AACDB_FLAGS_NO_HEADERS 0x00000004 489 490 #define AACDB_FLAGS_MISC 0x00000010 491 #define AACDB_FLAGS_FUNC1 0x00000020 492 #define AACDB_FLAGS_FUNC2 0x00000040 493 #define AACDB_FLAGS_SCMD 0x00000080 494 #define AACDB_FLAGS_AIF 0x00000100 495 #define AACDB_FLAGS_FIB 0x00000200 496 #define AACDB_FLAGS_IOCTL 0x00000400 497 498 /* 499 * Flags for FIB print 500 */ 501 /* FIB sources */ 502 #define AACDB_FLAGS_FIB_SCMD 0x00000001 503 #define AACDB_FLAGS_FIB_IOCTL 0x00000002 504 #define AACDB_FLAGS_FIB_SRB 0x00000004 505 #define AACDB_FLAGS_FIB_SYNC 0x00000008 506 /* FIB components */ 507 #define AACDB_FLAGS_FIB_HEADER 0x00000010 508 /* FIB states */ 509 #define AACDB_FLAGS_FIB_TIMEOUT 0x00000100 510 511 extern uint32_t aac_debug_flags; 512 extern int aac_dbflag_on(struct aac_softstate *, int); 513 extern void aac_printf(struct aac_softstate *, uint_t, const char *, ...); 514 extern void aac_print_fib(struct aac_softstate *, struct aac_slot *); 515 516 #define AACDB_PRINT(s, lev, ...) { \ 517 if (aac_dbflag_on((s), AACDB_FLAGS_MISC)) \ 518 aac_printf((s), (lev), __VA_ARGS__); } 519 520 #define AACDB_PRINT_IOCTL(s, ...) { \ 521 if (aac_dbflag_on((s), AACDB_FLAGS_IOCTL)) \ 522 aac_printf((s), CE_NOTE, __VA_ARGS__); } 523 524 #define AACDB_PRINT_TRAN(s, ...) { \ 525 if (aac_dbflag_on((s), AACDB_FLAGS_SCMD)) \ 526 aac_printf((s), CE_NOTE, __VA_ARGS__); } 527 528 #define DBCALLED(s, n) { \ 529 if (aac_dbflag_on((s), AACDB_FLAGS_FUNC ## n)) \ 530 aac_printf((s), CE_NOTE, "--- %s() called ---", __func__); } 531 532 #define AACDB_PRINT_SCMD(s, x) { \ 533 if (aac_dbflag_on((s), AACDB_FLAGS_SCMD)) aac_print_scmd((s), (x)); } 534 535 #define AACDB_PRINT_AIF(s, x) { \ 536 if (aac_dbflag_on((s), AACDB_FLAGS_AIF)) aac_print_aif((s), (x)); } 537 538 #define AACDB_PRINT_FIB(s, x) { \ 539 if (aac_dbflag_on((s), AACDB_FLAGS_FIB)) aac_print_fib((s), (x)); } 540 541 #else /* DEBUG */ 542 543 #define AACDB_PRINT(s, lev, ...) 544 #define AACDB_PRINT_IOCTL(s, ...) 545 #define AACDB_PRINT_TRAN(s, ...) 546 #define AACDB_PRINT_FIB(s, x) 547 #define AACDB_PRINT_SCMD(s, x) 548 #define AACDB_PRINT_AIF(s, x) 549 #define DBCALLED(s, n) 550 551 #endif /* DEBUG */ 552 553 #ifdef __cplusplus 554 } 555 #endif 556 557 #endif /* _AAC_H_ */ 558