#ifndef _RT2661_VAR_H
#define _RT2661_VAR_H
#ifdef __cplusplus
extern "C" {
#endif
struct dma_area {
ddi_acc_handle_t acc_hdl;
caddr_t mem_va;
uint32_t nslots;
uint32_t size;
size_t alength;
ddi_dma_handle_t dma_hdl;
offset_t offset;
ddi_dma_cookie_t cookie;
uint32_t ncookies;
uint32_t token;
};
struct rt2661_tx_data {
struct dma_area txdata_dma;
caddr_t buf;
uint32_t paddr;
struct ieee80211_node *ni;
};
struct rt2661_tx_ring {
struct dma_area txdesc_dma;
uint32_t paddr;
struct rt2661_tx_desc *desc;
struct rt2661_tx_data *data;
int count;
int queued;
int cur;
int next;
int stat;
};
struct rt2661_rx_data {
struct dma_area rxdata_dma;
caddr_t buf;
uint32_t paddr;
};
struct rt2661_rx_ring {
struct dma_area rxdesc_dma;
uint32_t paddr;
struct rt2661_rx_desc *desc;
struct rt2661_rx_data *data;
int count;
int cur;
int next;
};
struct rt2661_amrr {
uint_t amrr_min_success_threshold;
uint_t amrr_max_success_threshold;
};
struct rt2661_amrr_node {
int amn_success;
int amn_recovery;
int amn_success_threshold;
int amn_txcnt;
int amn_retrycnt;
};
struct rt2661_node {
struct ieee80211_node ni;
struct rt2661_amrr_node amn;
};
struct rt2661_softc {
struct ieee80211com sc_ic;
dev_info_t *sc_dev;
ddi_acc_handle_t sc_cfg_handle;
caddr_t sc_cfg_base;
ddi_acc_handle_t sc_io_handle;
caddr_t sc_io_base;
uint16_t sc_cachelsz;
uint32_t sc_dmabuf_size;
struct rt2661_amrr amrr;
struct rt2661_tx_ring txq[4];
struct rt2661_tx_ring mgtq;
struct rt2661_rx_ring rxq;
ddi_iblock_cookie_t sc_iblock;
ddi_softint_handle_t sc_softintr_hdl;
ddi_intr_handle_t *sc_intr_htable;
uint_t sc_intr_pri;
kmutex_t sc_genlock;
kmutex_t sc_txlock;
kmutex_t sc_rxlock;
int sc_tx_timer;
uint32_t sc_rx_pend;
timeout_id_t sc_scan_id;
timeout_id_t sc_rssadapt_id;
timeout_id_t sc_stat_id;
enum ieee80211_state sc_ostate;
struct ieee80211_channel *sc_curchan;
uint8_t rf_rev;
uint8_t rfprog;
uint8_t rffreq;
uint32_t rf_regs[4];
int8_t txpow[38];
struct {
uint8_t reg;
uint8_t val;
} bbp_prom[16];
int hw_radio;
int rx_ant;
int tx_ant;
int nb_ant;
int ext_2ghz_lna;
int ext_5ghz_lna;
int rssi_2ghz_corr;
int rssi_5ghz_corr;
int ncalls;
int avg_rssi;
int sifs;
uint8_t bbp18;
uint8_t bbp21;
uint8_t bbp22;
uint8_t bbp16;
uint8_t bbp17;
uint8_t bbp64;
uint32_t sc_tx_nobuf;
uint32_t sc_rx_nobuf;
uint32_t sc_tx_err;
uint32_t sc_rx_err;
uint32_t sc_tx_retries;
uint32_t sc_need_sched;
uint32_t sc_flags;
uint32_t sc_rcr;
int (*sc_newstate)(struct ieee80211com *,
enum ieee80211_state, int);
};
#define RT2661_GLOCK(_sc) mutex_enter(&(_sc)->sc_genlock)
#define RT2661_GUNLOCK(_sc) mutex_exit(&(_sc)->sc_genlock)
#define RT2661_INPUT_RUNNING (1 << 0)
#define RT2661_F_RUNNING (1 << 1)
#define RT2661_F_SUSPEND (1 << 2)
#define RT2661_F_FWLOADED (1 << 3)
#define RT2661_F_QUIESCE (1 << 4)
#define RT2661_RCR_PROMISC (1 << 0)
#define RT2661_RCR_MULTI (1 << 1)
#define RT2661_IS_RUNNING(_sc) (((_sc)->sc_flags & RT2661_F_RUNNING))
#define RT2661_IS_SUSPEND(_sc) (((_sc)->sc_flags & RT2661_F_SUSPEND))
#define RT2661_IS_FWLOADED(_sc) (((_sc)->sc_flags & RT2661_F_FWLOADED))
#define RT2661_IS_FASTREBOOT(_sc) (((_sc)->sc_flags & RT2661_F_QUIESCE))
#define RT2661_DMA_SYNC(area, flag) ((void) ddi_dma_sync((area).dma_hdl,\
(area).offset, (area).alength, (flag)))
#define RT2661_SUCCESS 0
#define RT2661_FAILURE -1
#ifdef __cplusplus
}
#endif
#endif