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