Print this page
*** NO COMMENTS ***

@@ -1,12 +1,13 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
  */
 
 /*
- * Copyright 2005-06 Adaptec, Inc.
- * Copyright (c) 2005-06 Adaptec Inc., Achim Leubner
+ * Copyright (c) 2010-12 PMC-Sierra, Inc.
+ * Copyright (c) 2005-10 Adaptec Inc., Achim Leubner
  * Copyright (c) 2000 Michael Smith
  * Copyright (c) 2001 Scott Long
  * Copyright (c) 2000 BSDi
  * All rights reserved.
  *

@@ -28,21 +29,26 @@
  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
- *
- *    $FreeBSD: src/sys/dev/aac/aacvar.h,v 1.47 2005/10/08 15:55:09 scottl Exp $
  */
 
 #ifndef _AAC_H_
 #define _AAC_H_
 
+#pragma ident   "@(#)aac.h      1.16    08/01/29 SMI"
+
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+#ifdef AAC_DEBUG_ALL
+#define AAC_DEBUG
+#define DEBUG                   /* activate assertions */
+#endif
+
 #define AAC_ROUNDUP(x, y)               (((x) + (y) - 1) / (y) * (y))
 
 #define AAC_TYPE_DEVO                   1
 #define AAC_TYPE_ALPHA                  2
 #define AAC_TYPE_BETA                   3

@@ -51,21 +57,22 @@
 #ifndef AAC_DRIVER_BUILD
 #define AAC_DRIVER_BUILD                1
 #endif
 
 #define AAC_DRIVER_MAJOR_VERSION        2
-#define AAC_DRIVER_MINOR_VERSION        2
-#define AAC_DRIVER_BUGFIX_LEVEL         11
+#define AAC_DRIVER_MINOR_VERSION        7
+#define AAC_DRIVER_BUGFIX_LEVEL         1
 #define AAC_DRIVER_TYPE                 AAC_TYPE_RELEASE
 
 #define STR(s)                          # s
 #define AAC_VERSION(a, b, c)            STR(a.b.c)
 #define AAC_DRIVER_VERSION              AAC_VERSION(AAC_DRIVER_MAJOR_VERSION, \
                                         AAC_DRIVER_MINOR_VERSION, \
                                         AAC_DRIVER_BUGFIX_LEVEL)
 
 #define AACOK                           0
+#define AACOK2                          1
 #define AACERR                          -1
 
 #define AAC_MAX_ADAPTERS                64
 
 /* Definitions for mode sense */

@@ -92,16 +99,19 @@
 #else
 #define AAC_IMMEDIATE_TIMEOUT           60      /* seconds */
 #endif
 #define AAC_FWUP_TIMEOUT                180     /* wait up to 3 minutes */
 #define AAC_IOCTL_TIMEOUT               900     /* wait up to 15 minutes */
-#define AAC_SYNC_TIMEOUT                900     /* wait up to 15 minutes */
+#define AAC_AIF_TIMEOUT         180 /* up to 3 minutes */
 
 /* Adapter hardware interface types */
 #define AAC_HWIF_UNKNOWN                0
 #define AAC_HWIF_I960RX                 1
 #define AAC_HWIF_RKT                    2
+#define AAC_HWIF_NARK                   3
+#define AAC_HWIF_SRC                    4
+#define AAC_HWIF_SRCV                   5
 
 #define AAC_TYPE_UNKNOWN                0
 #define AAC_TYPE_SCSI                   1
 #define AAC_TYPE_SATA                   2
 #define AAC_TYPE_SAS                    3

@@ -110,17 +120,10 @@
 #define AAC_MS32(d)                     ((uint32_t)((d) >> 32))
 #define AAC_LO32(p64)                   ((uint32_t *)(p64))
 #define AAC_HI32(p64)                   ((uint32_t *)(p64) + 1)
 
 /*
- * Internal events that will be handled serially by aac_event_thread()
- */
-#define AAC_EVENT_AIF                   (1 << 0)
-#define AAC_EVENT_TIMEOUT               (1 << 1)
-#define AAC_EVENT_SYNCTICK              (1 << 2)
-
-/*
  * AAC_CMDQ_SYNC should be 0 and AAC_CMDQ_ASYNC be 1 for Sync FIB io
  * to be served before async FIB io, see aac_start_waiting_io().
  * So that io requests sent by interactive userland commands get
  * responded asap.
  */

@@ -154,36 +157,18 @@
         uint16_t type;          /* hard drive type */
         char *vid;              /* ASCII data for INQUIRY command vendor id */
         char *desc;             /* ASCII data for INQUIRY command product id */
 };
 
-/* Device types */
 #define AAC_DEV_LD              0       /* logical device */
 #define AAC_DEV_PD              1       /* physical device */
 
-/* Device flags */
-#define AAC_DFLAG_VALID         (1 << 0)
-#define AAC_DFLAG_CONFIGURING   (1 << 1)
-
-#define AAC_DEV_IS_VALID(dvp)   ((dvp)->flags & AAC_DFLAG_VALID)
-#define AAC_P2VTGT(softs, bus, tgt) \
-                ((softs)->tgt_max * (bus) + (tgt) + AAC_MAX_LD)
-
-/*
- * Device config change events
- */
-enum aac_cfg_event {
-        AAC_CFG_NULL_NOEXIST = 0,       /* No change with no device */
-        AAC_CFG_NULL_EXIST,             /* No change but have device */
-        AAC_CFG_ADD,                    /* Device added */
-        AAC_CFG_DELETE,                 /* Device deleted */
-        AAC_CFG_CHANGE                  /* Device changed */
-};
-
+#define AAC_DEV_NONE    0
+#define AAC_DEV_ONLINE  1
+#define AAC_DEV_OFFLINE 2
 struct aac_device {
-        int flags;
-
+        uint8_t valid;
         uint8_t type;
         dev_info_t *dip;
         int ncmds[AAC_CMDQ_NUM];        /* outstanding cmds of the device */
         int throttle[AAC_CMDQ_NUM];     /* hold IO cmds for the device */
 };

@@ -204,10 +189,11 @@
 struct aac_nondasd {
         struct aac_device dev;
 
         uint32_t bus;
         uint32_t tid;
+        uint8_t dtype;          /* SCSI device type */
 };
 
 /*
  * The firmware can support a lot of outstanding commands. Each aac_slot
  * is corresponding to one of such commands. It records the command and

@@ -221,106 +207,28 @@
         uint64_t fib_phyaddr;   /* physical address of FIB memory */
         struct aac_cmd *acp;    /* command using this slot */
         struct aac_fib *fibp;   /* virtual address of FIB memory */
 };
 
-/*
- * Scatter-gather list structure defined by HBA hardware
- */
-struct aac_sge {
-        uint32_t bcount;        /* byte count */
-        union {
-                uint32_t ad32;  /* 32 bit address */
-                struct {
-                        uint32_t lo;
-                        uint32_t hi;
-                } ad64;         /* 64 bit address */
-        } addr;
-};
-
-/* aac_cmd flags */
-#define AAC_CMD_CONSISTENT              (1 << 0)
-#define AAC_CMD_DMA_PARTIAL             (1 << 1)
-#define AAC_CMD_DMA_VALID               (1 << 2)
-#define AAC_CMD_BUF_READ                (1 << 3)
-#define AAC_CMD_BUF_WRITE               (1 << 4)
-#define AAC_CMD_SYNC                    (1 << 5) /* use sync FIB */
-#define AAC_CMD_NO_INTR                 (1 << 6) /* poll IO, no intr */
-#define AAC_CMD_NO_CB                   (1 << 7) /* sync IO, no callback */
-#define AAC_CMD_NTAG                    (1 << 8)
-#define AAC_CMD_CMPLT                   (1 << 9) /* cmd exec'ed by driver/fw */
-#define AAC_CMD_ABORT                   (1 << 10)
-#define AAC_CMD_TIMEOUT                 (1 << 11)
-#define AAC_CMD_ERR                     (1 << 12)
-#define AAC_CMD_IN_SYNC_SLOT            (1 << 13)
-
-struct aac_softstate;
-typedef void (*aac_cmd_fib_t)(struct aac_softstate *, struct aac_cmd *);
-
-struct aac_cmd {
-        /*
-         * Note: should be the first member for aac_cmd_queue to work
-         * correctly.
-         */
-        struct aac_cmd *next;
-        struct aac_cmd *prev;
-
-        struct scsi_pkt *pkt;
-        int cmdlen;
-        int flags;
-        uint32_t timeout; /* time when the cmd should have completed */
-        struct buf *bp;
-        ddi_dma_handle_t buf_dma_handle;
-
-        /* For non-aligned buffer and SRB */
-        caddr_t abp;
-        ddi_acc_handle_t abh;
-
-        /* Data transfer state */
-        ddi_dma_cookie_t cookie;
-        uint_t left_cookien;
-        uint_t cur_win;
-        uint_t total_nwin;
-        size_t total_xfer;
-        uint64_t blkno;
-        uint32_t bcount;        /* buffer size in byte */
-        struct aac_sge *sgt;    /* sg table */
-
-        /* FIB construct function */
-        aac_cmd_fib_t aac_cmd_fib;
-        /* Call back function for completed command */
-        void (*ac_comp)(struct aac_softstate *, struct aac_cmd *);
-
-        struct aac_slot *slotp; /* slot used by this command */
-        struct aac_device *dvp; /* target device */
-
-        /* FIB for this IO command */
-        int fib_size; /* size of the FIB xferred to/from the card */
-        struct aac_fib *fibp;
-
-#ifdef DEBUG
-        uint32_t fib_flags;
-#endif
-};
-
 /* Flags for attach tracking */
 #define AAC_ATTACH_SOFTSTATE_ALLOCED    (1 << 0)
 #define AAC_ATTACH_CARD_DETECTED        (1 << 1)
 #define AAC_ATTACH_PCI_MEM_MAPPED       (1 << 2)
 #define AAC_ATTACH_KMUTEX_INITED        (1 << 3)
-#define AAC_ATTACH_SCSI_TRAN_SETUP      (1 << 4)
-#define AAC_ATTACH_COMM_SPACE_SETUP     (1 << 5)
-#define AAC_ATTACH_CREATE_DEVCTL        (1 << 6)
-#define AAC_ATTACH_CREATE_SCSI          (1 << 7)
+#define AAC_ATTACH_HARD_INTR_SETUP      (1 << 4)
+#define AAC_ATTACH_SOFT_INTR_SETUP      (1 << 5)
+#define AAC_ATTACH_SCSI_TRAN_SETUP      (1 << 6)
+#define AAC_ATTACH_COMM_SPACE_SETUP     (1 << 7)
+#define AAC_ATTACH_CREATE_DEVCTL        (1 << 8)
+#define AAC_ATTACH_CREATE_SCSI          (1 << 9)
 
 /* Driver running states */
 #define AAC_STATE_STOPPED       0
 #define AAC_STATE_RUN           (1 << 0)
 #define AAC_STATE_RESET         (1 << 1)
 #define AAC_STATE_QUIESCED      (1 << 2)
 #define AAC_STATE_DEAD          (1 << 3)
-#define AAC_STATE_INTR          (1 << 4)
 
 /*
  * Flags for aac firmware
  * Note: Quirks are only valid for the older cards. These cards only supported
  * old comm. Thus they are not valid for any cards that support new comm.

@@ -335,33 +243,37 @@
 #define AAC_FLAGS_ARRAY_64BIT   (1 << 6) /* 64-bit array size */
 #define AAC_FLAGS_LBA_64BIT     (1 << 7) /* 64-bit LBA supported */
 #define AAC_FLAGS_17SG          (1 << 8) /* quirk: 17 scatter gather maximum */
 #define AAC_FLAGS_34SG          (1 << 9) /* quirk: 34 scatter gather maximum */
 #define AAC_FLAGS_NONDASD       (1 << 10) /* non-DASD device supported */
-#define AAC_FLAGS_BRKUP         (1 << 11) /* pkt breakup support */
-#define AAC_FLAGS_JBOD          (1 << 12) /* JBOD mode support */
+#define AAC_FLAGS_NEW_COMM_TYPE1        (1 << 11)       /* New comm. type1 supported */
+#define AAC_FLAGS_NEW_COMM_TYPE2        (1 << 12)       /* New comm. type2 supported */
+#define AAC_FLAGS_NEW_COMM_TYPE34       (1 << 13)       /* New comm. type3-4 */
+#define AAC_FLAGS_SYNC_MODE     (1 << 14)       /* Sync. transfer mode */
 
 struct aac_softstate;
 struct aac_interface {
+        void (*aif_set_intr)(struct aac_softstate *, int enable);
+        void (*aif_status_clr)(struct aac_softstate *, int mask);
+        int (*aif_status_get)(struct aac_softstate *);
+        void (*aif_notify)(struct aac_softstate *, int val);
         int (*aif_get_fwstatus)(struct aac_softstate *);
         int (*aif_get_mailbox)(struct aac_softstate *, int);
         void (*aif_set_mailbox)(struct aac_softstate *, uint32_t,
             uint32_t, uint32_t, uint32_t, uint32_t);
+        int (*aif_send_command)(struct aac_softstate *, struct aac_slot *);
 };
 
-#define AAC_CTXFLAG_FILLED      0x01    /* aifq's full for this ctx */
-#define AAC_CTXFLAG_RESETED     0x02
-
 struct aac_fib_context {
         uint32_t unique;
         int ctx_idx;
         int ctx_filled;         /* aifq is full for this fib context */
-        int ctx_flags;
-        int ctx_overrun;
         struct aac_fib_context *next, *prev;
 };
 
+typedef void (*aac_cmd_fib_t)(struct aac_softstate *, struct aac_cmd *);
+
 #define AAC_VENDOR_LEN          8
 #define AAC_PRODUCT_LEN         16
 
 struct aac_softstate {
         int card;               /* index to aac_cards */

@@ -371,58 +283,62 @@
         uint16_t devid;         /* device id */
         uint16_t subsysid;      /* sub system id */
         char vendor_name[AAC_VENDOR_LEN + 1];
         char product_name[AAC_PRODUCT_LEN + 1];
         uint32_t support_opt;   /* firmware features */
-        uint32_t support_opt2;
-        uint32_t feature_bits;
         uint32_t atu_size;      /* actual size of PCI mem space */
         uint32_t map_size;      /* mapped PCI mem space size */
         uint32_t map_size_min;  /* minimum size of PCI mem that must be */
                                 /* mapped to address the card */
         int flags;              /* firmware features enabled */
         int instance;
         dev_info_t *devinfo_p;
         scsi_hba_tran_t *hba_tran;
         int slen;
-        int legacy;             /* legacy device naming */
-        uint32_t dma_max;       /* for buf breakup */
+        int legacy;
+        int sync_mode;
+        int no_sgl_conv;
 
         /* DMA attributes */
         ddi_dma_attr_t buf_dma_attr;
         ddi_dma_attr_t addr_dma_attr;
 
         /* PCI spaces */
-        ddi_device_acc_attr_t acc_attr;
-        ddi_device_acc_attr_t reg_attr;
-        ddi_acc_handle_t pci_mem_handle;
-        uint8_t *pci_mem_base_vaddr;
-        uint32_t pci_mem_base_paddr;
+        ddi_acc_handle_t pci_mem_handle[AAC_MAX_MEM_SPACE];
+        char *pci_mem_base_vaddr[AAC_MAX_MEM_SPACE];
+        uint32_t pci_mem_base_paddr[AAC_MAX_MEM_SPACE];
 
         struct aac_interface aac_if;    /* adapter hardware interface */
 
-        struct aac_cmd sync_ac;         /* sync FIB */
+        struct aac_slot *sync_slot;      /* sync FIB */
+        int sync_slot_busy;
+        struct aac_slot *sync_mode_slot;
 
         /* Communication space */
         struct aac_comm_space *comm_space;
         ddi_acc_handle_t comm_space_acc_handle;
         ddi_dma_handle_t comm_space_dma_handle;
         uint32_t comm_space_phyaddr;
 
+        /* New Comm. type1: response buffer index */
+        uint32_t aac_host_rrq_idx;
+
         /* Old Comm. interface: message queues */
         struct aac_queue_table *qtablep;
         struct aac_queue_entry *qentries[AAC_QUEUE_COUNT];
 
         /* New Comm. interface */
         uint32_t aac_max_fibs;          /* max. FIB count */
         uint32_t aac_max_fib_size;      /* max. FIB size */
         uint32_t aac_sg_tablesize;      /* max. sg count from host */
         uint32_t aac_max_sectors;       /* max. I/O size from host (blocks) */
+        uint32_t aac_max_aif;           /* max. AIF count */
 
         aac_cmd_fib_t aac_cmd_fib;      /* IO cmd FIB construct function */
         aac_cmd_fib_t aac_cmd_fib_scsi; /* SRB construct function */
 
+        ddi_iblock_cookie_t iblock_cookie;
         ddi_softintr_t softint_id;      /* soft intr */
 
         kmutex_t io_lock;
         int state;                      /* driver state */
 

@@ -429,10 +345,12 @@
         struct aac_container containers[AAC_MAX_LD];
         int container_count;            /* max container id + 1 */
         struct aac_nondasd *nondasds;
         uint32_t bus_max;               /* max FW buses exposed */
         uint32_t tgt_max;               /* max FW target per bus */
+        uint32_t aac_feature_bits;
+        uint32_t aac_support_opt2;
 
         /*
          * Command queues
          * Each aac command flows through wait(or wait_sync) queue,
          * busy queue, and complete queue sequentially.

@@ -446,58 +364,35 @@
         int total_slots;                /* total slots allocated */
         int total_fibs;                 /* total FIBs allocated */
         struct aac_slot *io_slot;       /* static list for allocated slots */
         struct aac_slot *free_io_slot_head;
 
+        timeout_id_t timeout_id;        /* for timeout daemon */
+
         kcondvar_t event;               /* for ioctl_send_fib() and sync IO */
-        kcondvar_t sync_fib_cv;         /* for sync_fib_slot_bind/release */
 
         int bus_ncmds[AAC_CMDQ_NUM];    /* total outstanding async cmds */
         int bus_throttle[AAC_CMDQ_NUM]; /* hold IO cmds for the bus */
         int ndrains;                    /* number of draining threads */
         timeout_id_t drain_timeid;      /* for outstanding cmd drain */
         kcondvar_t drain_cv;            /* for quiesce drain */
 
-        /* Internal timer */
-        kmutex_t time_mutex;
-        timeout_id_t timeout_id;        /* for timeout daemon */
-        uint32_t timebase;              /* internal timer in seconds */
-        uint32_t time_sync;             /* next time to sync with firmware */
-        uint32_t time_out;              /* next time to check timeout */
-        uint32_t time_throttle;         /* next time to restore throttle */
-
-        /* Internal events handling */
-        kmutex_t ev_lock;
-        int events;
-        kthread_t *event_thread;        /* for AIF & timeout */
-        kcondvar_t event_wait_cv;
-        kcondvar_t event_disp_cv;
-
         /* AIF */
         kmutex_t aifq_mutex;            /* for AIF queue aifq */
-        kcondvar_t aifq_cv;
+        kcondvar_t aifv;
         union aac_fib_align aifq[AAC_AIFQ_LENGTH];
         int aifq_idx;                   /* slot for next new AIF */
         int aifq_wrap;                  /* AIF queue has ever been wrapped */
-        struct aac_fib_context aifctx;  /* sys aif ctx */
-        struct aac_fib_context *fibctx_p;
+        struct aac_fib_context *fibctx;
         int devcfg_wait_on;             /* AIF event waited for rescan */
 
         int fm_capabilities;
+        ddi_taskq_t *taskq;
 
-        /* MSI specific fields */
-        ddi_intr_handle_t *htable;      /* For array of interrupts */
-        int intr_type;                  /* What type of interrupt */
-        int intr_cnt;                   /* # of intrs count returned */
-        int intr_size;
-        uint_t intr_pri;                /* Interrupt priority   */
-        int intr_cap;                   /* Interrupt capabilities */
-
-#ifdef DEBUG
+#ifdef AAC_DEBUG
         /* UART trace printf variables */
         uint32_t debug_flags;           /* debug print flags bitmap */
-        uint32_t debug_fib_flags;       /* debug FIB print flags bitmap */
         uint32_t debug_fw_flags;        /* FW debug flags */
         uint32_t debug_buf_offset;      /* offset from DPMEM start */
         uint32_t debug_buf_size;        /* FW debug buffer size in bytes */
         uint32_t debug_header_size;     /* size of debug header */
 #endif

@@ -509,14 +404,98 @@
  * re-initialization.
  */
 _NOTE(SCHEME_PROTECTS_DATA("stable data", aac_softstate::{flags slen \
     buf_dma_attr pci_mem_handle pci_mem_base_vaddr \
     comm_space_acc_handle comm_space_dma_handle aac_max_fib_size \
-    aac_sg_tablesize aac_cmd_fib aac_cmd_fib_scsi debug_flags bus_max tgt_max}))
+    aac_sg_tablesize aac_cmd_fib aac_cmd_fib_scsi debug_flags bus_max tgt_max \
+        aac_feature_bits}))
 
-#ifdef DEBUG
+/*
+ * Scatter-gather list structure defined by HBA hardware
+ */
+struct aac_sge {
+        uint32_t bcount;        /* byte count */
+        union {
+                uint32_t ad32;  /* 32 bit address */
+                struct {
+                        uint32_t lo;
+                        uint32_t hi;
+                } ad64;         /* 64 bit address */
+        } addr;
+};
 
+/* aac_cmd flags */
+#define AAC_CMD_CONSISTENT              (1 << 0)
+#define AAC_CMD_DMA_PARTIAL             (1 << 1)
+#define AAC_CMD_DMA_VALID               (1 << 2)
+#define AAC_CMD_BUF_READ                (1 << 3)
+#define AAC_CMD_BUF_WRITE               (1 << 4)
+#define AAC_CMD_SYNC                    (1 << 5) /* use sync FIB */
+#define AAC_CMD_NO_INTR                 (1 << 6) /* poll IO, no intr */
+#define AAC_CMD_NO_CB                   (1 << 7) /* sync IO, no callback */
+#define AAC_CMD_NTAG                    (1 << 8)
+#define AAC_CMD_CMPLT                   (1 << 9) /* cmd exec'ed by driver/fw */
+#define AAC_CMD_ABORT                   (1 << 10)
+#define AAC_CMD_TIMEOUT                 (1 << 11)
+#define AAC_CMD_ERR                     (1 << 12)
+#define AAC_CMD_AIF                     (1 << 13)
+#define AAC_CMD_AIF_NOMORE              (1 << 14)
+#define AAC_CMD_FASTRESP                (1 << 15)
+
+#define AAC_MAXSEGMENTS         16
+
+struct aac_cmd {
+        /*
+         * Note: should be the first member for aac_cmd_queue to work
+         * correctly.
+         */
+        struct aac_cmd *next;
+        struct aac_cmd *prev;
+
+        struct scsi_pkt *pkt;
+        int cmdlen;
+        int flags;
+        uint32_t timeout; /* time when the cmd should have completed */
+        struct buf *bp;
+
+        uint_t segment_cnt;
+        uint_t left_cookien;
+        struct {
+                ddi_dma_handle_t buf_dma_handle;
+                /* For non-aligned buffer and SRB */
+                caddr_t abp;
+                ddi_acc_handle_t abh;
+                uint32_t abp_size;
+                size_t abp_real_size;
+
+                /* Data transfer state */
+                ddi_dma_cookie_t cookie;
+                uint_t left_cookien;
+                struct aac_sge *sgt;
+        } segments[AAC_MAXSEGMENTS];
+        uint_t cur_segment;
+        uint_t cur_win;
+        uint_t total_nwin;
+        size_t total_xfer;
+        uint64_t blkno;
+        uint32_t bcount;        /* buffer size in byte */
+        struct aac_sge *sgt;    /* sg table */
+
+        /* FIB construct function */
+        aac_cmd_fib_t aac_cmd_fib;
+        /* Call back function for completed command */
+        void (*ac_comp)(struct aac_softstate *, struct aac_cmd *);
+
+        struct aac_slot *slotp; /* slot used by this command */
+        struct aac_device *dvp; /* target device */
+
+        /* FIB for this IO command */
+        int fib_size; /* size of the FIB xferred to/from the card */
+        struct aac_fib *fibp;
+};
+
+#ifdef AAC_DEBUG
 #define AACDB_FLAGS_MASK                0x0000ffff
 #define AACDB_FLAGS_KERNEL_PRINT        0x00000001
 #define AACDB_FLAGS_FW_PRINT            0x00000002
 #define AACDB_FLAGS_NO_HEADERS          0x00000004
 

@@ -526,27 +505,13 @@
 #define AACDB_FLAGS_SCMD                0x00000080
 #define AACDB_FLAGS_AIF                 0x00000100
 #define AACDB_FLAGS_FIB                 0x00000200
 #define AACDB_FLAGS_IOCTL               0x00000400
 
-/*
- * Flags for FIB print
- */
-/* FIB sources */
-#define AACDB_FLAGS_FIB_SCMD            0x00000001
-#define AACDB_FLAGS_FIB_IOCTL           0x00000002
-#define AACDB_FLAGS_FIB_SRB             0x00000004
-#define AACDB_FLAGS_FIB_SYNC            0x00000008
-/* FIB components */
-#define AACDB_FLAGS_FIB_HEADER          0x00000010
-/* FIB states */
-#define AACDB_FLAGS_FIB_TIMEOUT         0x00000100
-
 extern uint32_t aac_debug_flags;
 extern int aac_dbflag_on(struct aac_softstate *, int);
 extern void aac_printf(struct aac_softstate *, uint_t, const char *, ...);
-extern void aac_print_fib(struct aac_softstate *, struct aac_slot *);
 
 #define AACDB_PRINT(s, lev, ...) { \
         if (aac_dbflag_on((s), AACDB_FLAGS_MISC)) \
                 aac_printf((s), (lev), __VA_ARGS__); }
 

@@ -559,32 +524,34 @@
                 aac_printf((s), CE_NOTE, __VA_ARGS__); }
 
 #define DBCALLED(s, n) { \
         if (aac_dbflag_on((s), AACDB_FLAGS_FUNC ## n)) \
                 aac_printf((s), CE_NOTE, "--- %s() called ---", __func__); }
+#else
+#define AACDB_PRINT(s, lev, ...)
+#define AACDB_PRINT_IOCTL(s, ...)
+#define AACDB_PRINT_TRAN(s, ...)
+#define DBCALLED(s, n)
+#endif /* AAC_DEBUG */
 
+#ifdef AAC_DEBUG_ALL
+extern void aac_print_fib(struct aac_softstate *, struct aac_fib *);
+
 #define AACDB_PRINT_SCMD(s, x) { \
         if (aac_dbflag_on((s), AACDB_FLAGS_SCMD)) aac_print_scmd((s), (x)); }
 
 #define AACDB_PRINT_AIF(s, x) { \
         if (aac_dbflag_on((s), AACDB_FLAGS_AIF)) aac_print_aif((s), (x)); }
 
 #define AACDB_PRINT_FIB(s, x) { \
         if (aac_dbflag_on((s), AACDB_FLAGS_FIB)) aac_print_fib((s), (x)); }
-
-#else /* DEBUG */
-
-#define AACDB_PRINT(s, lev, ...)
-#define AACDB_PRINT_IOCTL(s, ...)
-#define AACDB_PRINT_TRAN(s, ...)
+#else
 #define AACDB_PRINT_FIB(s, x)
 #define AACDB_PRINT_SCMD(s, x)
 #define AACDB_PRINT_AIF(s, x)
-#define DBCALLED(s, n)
+#endif /* AAC_DEBUG_ALL */
 
-#endif /* DEBUG */
-
 #ifdef  __cplusplus
 }
 #endif
 
 #endif /* _AAC_H_ */