#ifndef _QL_DEF_H_
#define _QL_DEF_H_
#define BIT_0 (0x1 << 0)
#define BIT_1 (0x1 << 1)
#define BIT_2 (0x1 << 2)
#define BIT_3 (0x1 << 3)
#define BIT_4 (0x1 << 4)
#define BIT_5 (0x1 << 5)
#define BIT_6 (0x1 << 6)
#define BIT_7 (0x1 << 7)
#define BIT_8 (0x1 << 8)
#define BIT_9 (0x1 << 9)
#define BIT_10 (0x1 << 10)
#define BIT_11 (0x1 << 11)
#define BIT_12 (0x1 << 12)
#define BIT_13 (0x1 << 13)
#define BIT_14 (0x1 << 14)
#define BIT_15 (0x1 << 15)
#define BIT_16 (0x1 << 16)
#define BIT_17 (0x1 << 17)
#define BIT_18 (0x1 << 18)
#define BIT_19 (0x1 << 19)
#define BIT_20 (0x1 << 20)
#define BIT_21 (0x1 << 21)
#define BIT_22 (0x1 << 22)
#define BIT_23 (0x1 << 23)
#define BIT_24 (0x1 << 24)
#define BIT_25 (0x1 << 25)
#define BIT_26 (0x1 << 26)
#define BIT_27 (0x1 << 27)
#define BIT_28 (0x1 << 28)
#define BIT_29 (0x1 << 29)
#define BIT_30 (0x1 << 30)
#define BIT_31 (0x1 << 31)
struct qla_rx_buf {
struct mbuf *m_head;
bus_dmamap_t map;
bus_addr_t paddr;
uint32_t handle;
void *next;
};
typedef struct qla_rx_buf qla_rx_buf_t;
struct qla_rx_ring {
qla_rx_buf_t rx_buf[NUM_RX_DESCRIPTORS];
};
typedef struct qla_rx_ring qla_rx_ring_t;
struct qla_tx_buf {
struct mbuf *m_head;
bus_dmamap_t map;
};
typedef struct qla_tx_buf qla_tx_buf_t;
#define QLA_MAX_SEGMENTS 62
#define QLA_MAX_MTU 9000
#define QLA_STD_FRAME_SIZE 1514
#define QLA_MAX_TSO_FRAME_SIZE ((64 * 1024 - 1) + 22)
struct qla_ivec {
uint32_t sds_idx;
void *ha;
struct resource *irq;
void *handle;
int irq_rid;
};
typedef struct qla_ivec qla_ivec_t;
#define QLA_WATCHDOG_CALLOUT_TICKS 2
typedef struct _qla_tx_ring {
qla_tx_buf_t tx_buf[NUM_TX_DESCRIPTORS];
uint64_t count;
uint64_t iscsi_pkt_count;
} qla_tx_ring_t;
typedef struct _qla_tx_fp {
struct mtx tx_mtx;
char tx_mtx_name[32];
struct buf_ring *tx_br;
struct task fp_task;
struct taskqueue *fp_taskqueue;
void *ha;
uint32_t txr_idx;
} qla_tx_fp_t;
struct qla_host {
volatile struct {
volatile uint32_t
qla_callout_init :1,
qla_watchdog_active :1,
parent_tag :1,
lock_init :1;
} flags;
volatile uint32_t qla_interface_up;
volatile uint32_t stop_rcv;
volatile uint32_t qla_watchdog_exit;
volatile uint32_t qla_watchdog_exited;
volatile uint32_t qla_watchdog_pause;
volatile uint32_t qla_watchdog_paused;
volatile uint32_t qla_initiate_recovery;
volatile uint32_t qla_detach_active;
volatile uint32_t offline;
device_t pci_dev;
volatile uint16_t watchdog_ticks;
uint8_t pci_func;
struct cdev *ioctl_dev;
struct resource *pci_reg;
int reg_rid;
struct resource *pci_reg1;
int reg_rid1;
struct resource *mbx_irq;
void *mbx_handle;
int mbx_irq_rid;
int msix_count;
qla_ivec_t irq_vec[MAX_SDS_RINGS];
bus_dma_tag_t parent_tag;
if_t ifp;
struct ifmedia media;
uint16_t max_frame_size;
uint16_t rsrvd0;
int if_flags;
struct mtx sp_log_lock;
struct mtx hw_lock;
volatile uint32_t hw_lock_held;
uint64_t hw_lock_failed;
uint32_t txr_idx;
qla_tx_ring_t tx_ring[NUM_TX_RINGS];
bus_dma_tag_t tx_tag;
struct callout tx_callout;
qla_tx_fp_t tx_fp[MAX_SDS_RINGS];
qla_rx_ring_t rx_ring[MAX_RDS_RINGS];
bus_dma_tag_t rx_tag;
uint32_t std_replenish;
qla_rx_buf_t *rxb_free;
uint32_t rxb_free_count;
uint32_t err_m_getcl;
uint32_t err_m_getjcl;
uint32_t err_tx_dmamap_create;
uint32_t err_tx_dmamap_load;
uint32_t err_tx_defrag;
uint64_t rx_frames;
uint64_t rx_bytes;
uint64_t lro_pkt_count;
uint64_t lro_bytes;
uint64_t ipv4_lro;
uint64_t ipv6_lro;
uint64_t tx_frames;
uint64_t tx_bytes;
uint64_t tx_tso_frames;
uint64_t hw_vlan_tx_frames;
struct task stats_task;
struct taskqueue *stats_tq;
uint32_t fw_ver_major;
uint32_t fw_ver_minor;
uint32_t fw_ver_sub;
uint32_t fw_ver_build;
qla_hw_t hw;
volatile const char *qla_lock;
volatile const char *qla_unlock;
uint32_t dbg_level;
uint32_t enable_minidump;
uint32_t enable_driverstate_dump;
uint32_t enable_error_recovery;
uint32_t ms_delay_after_init;
uint8_t fw_ver_str[32];
uint32_t err_inject;
struct task err_task;
struct taskqueue *err_tq;
uint32_t async_event;
struct task async_event_task;
struct taskqueue *async_event_tq;
device_t peer_dev;
volatile uint32_t msg_from_peer;
#define QL_PEER_MSG_RESET 0x01
#define QL_PEER_MSG_ACK 0x02
};
typedef struct qla_host qla_host_t;
#define QL_ALIGN(size, align) (((size) + ((align) - 1)) & (~((align) - 1)))
#define QL_MIN(x, y) ((x < y) ? x : y)
#define QL_RUNNING(ifp) (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
#define QL_MAC_CMP(mac1, mac2) \
((((*(uint32_t *) mac1) == (*(uint32_t *) mac2) && \
(*(uint16_t *)(mac1 + 4)) == (*(uint16_t *)(mac2 + 4)))) ? 0 : 1)
#define QL_INITIATE_RECOVERY(ha) qla_set_error_recovery(ha)
#endif