#ifndef _ATH_HAL_H
#define _ATH_HAL_H
#ifdef __cplusplus
extern "C" {
#endif
#define HAL_ABI_VERSION 0x08052700
typedef void * HAL_SOFTC;
typedef void * HAL_BUS_TAG;
typedef void * HAL_BUS_HANDLE;
typedef uint32_t HAL_BUS_ADDR;
typedef uint16_t HAL_CTRY_CODE;
typedef uint16_t HAL_REG_DOMAIN;
#define HAL_NUM_TX_QUEUES 10
#define HAL_BEACON_PERIOD 0x0000ffff
#define HAL_BEACON_ENA 0x00800000
#define HAL_BEACON_RESET_TSF 0x01000000
#define CHANNEL_RAD_INT 0x00001
#define CHANNEL_CW_INT 0x00002
#define CHANNEL_BUSY 0x00004
#define CHANNEL_TURBO 0x00010
#define CHANNEL_CCK 0x00020
#define CHANNEL_OFDM 0x00040
#define CHANNEL_2GHZ 0x00080
#define CHANNEL_5GHZ 0x00100
#define CHANNEL_PASSIVE 0x00200
#define CHANNEL_DYN 0x00400
#define CHANNEL_XR 0x00800
#define CHANNEL_STURBO 0x02000
#define CHANNEL_HALF 0x04000
#define CHANNEL_QUARTER 0x08000
#define CHANNEL_HT20 0x10000
#define CHANNEL_HT40PLUS 0x20000
#define CHANNEL_HT40MINUS 0x40000
#define CHANNEL_A (CHANNEL_5GHZ|CHANNEL_OFDM)
#define CHANNEL_B (CHANNEL_2GHZ|CHANNEL_CCK)
#define CHANNEL_PUREG (CHANNEL_2GHZ|CHANNEL_OFDM)
#define CHANNEL_G (CHANNEL_2GHZ|CHANNEL_OFDM)
#define CHANNEL_T (CHANNEL_5GHZ|CHANNEL_OFDM|CHANNEL_TURBO)
#define CHANNEL_ST (CHANNEL_T|CHANNEL_STURBO)
#define CHANNEL_108G (CHANNEL_2GHZ|CHANNEL_OFDM|CHANNEL_TURBO)
#define CHANNEL_108A CHANNEL_T
#define CHANNEL_X (CHANNEL_5GHZ|CHANNEL_OFDM|CHANNEL_XR)
#define CHANNEL_G_HT20 (CHANNEL_G|CHANNEL_HT20)
#define CHANNEL_A_HT20 (CHANNEL_A|CHANNEL_HT20)
#define CHANNEL_G_HT40PLUS (CHANNEL_G_HT20|CHANNEL_HT40PLUS)
#define CHANNEL_A_HT40PLUS (CHANNEL_A_HT20|CHANNEL_HT40PLUS)
#define CHANNEL_A_HT40MINUS (CHANNEL_A_HT20|CHANNEL_HT40MINUS)
#define CHANNEL_ALL \
(CHANNEL_OFDM|CHANNEL_CCK|CHANNEL_5GHZ|CHANNEL_2GHZ| \
CHANNEL_TURBO|CHANNEL_HT20|CHANNEL_HT40PLUS|CHANNEL_HT40MINUS)
#define CHANNEL_ALL_NOTURBO (CHANNEL_ALL &~ CHANNEL_TURBO)
#define CHANNEL_COMPAT (CHANNEL_ALL_NOTURBO | CHANNEL_PASSIVE)
#define CHANNEL_INTERFERENCE 0x01
#define CHANNEL_DFS 0x02
#define CHANNEL_4MS_LIMIT 0x04
#define CHANNEL_DFS_CLEAR 0x08
#define HAL_RSSI_EP_MULTIPLIER (1<<7)
#define HAL_TXDESC_CLRDMASK 0x0001
#define HAL_TXDESC_NOACK 0x0002
#define HAL_TXDESC_RTSENA 0x0004
#define HAL_TXDESC_CTSENA 0x0008
#define HAL_TXDESC_INTREQ 0x0010
#define HAL_TXDESC_VEOL 0x0020
#define HAL_TXDESC_DURENA 0x0040
#define HAL_TXDESC_EXT_ONLY 0x0080
#define HAL_TXDESC_EXT_AND_CTL 0x0100
#define HAL_TXDESC_VMF 0x0200
#define HAL_RXDESC_INTREQ 0x0020
#define HAL_TXERR_XRETRY 0x01
#define HAL_TXERR_FILT 0x02
#define HAL_TXERR_FIFO 0x04
#define HAL_TXERR_XTXOP 0x08
#define HAL_TXERR_DESC_CFG_ERR 0x10
#define HAL_TXERR_DATA_UNDERRUN 0x20
#define HAL_TXERR_DELIM_UNDERRUN 0x40
#define HAL_TXSTAT_ALTRATE 0x80
#define HAL_TX_BA 0x01
#define HAL_TX_AGGR 0x02
#define HAL_RXERR_CRC 0x01
#define HAL_RXERR_PHY 0x02
#define HAL_RXERR_FIFO 0x04
#define HAL_RXERR_DECRYPT 0x08
#define HAL_RXERR_MIC 0x10
#define HAL_RX_MORE 0x01
#define HAL_RX_MORE_AGGR 0x02
#define HAL_RX_GI 0x04
#define HAL_RX_2040 0x08
#define HAL_RX_DELIM_CRC_PRE 0x10
#define HAL_RX_DELIM_CRC_POST 0x20
#define HAL_RX_DECRYPT_BUSY 0x40
#define HAL_RX_DUP_FRAME 0x80
#define HAL_RXKEYIX_INVALID ((uint8_t)-1)
#define HAL_TXKEYIX_INVALID ((uint32_t)-1)
#define HAL_COMP_BUF_MAX_SIZE 9216
#define HAL_COMP_BUF_ALIGN_SIZE 512
#define HAL_ANTENNA_MIN_MODE 0
#define HAL_ANTENNA_FIXED_A 1
#define HAL_ANTENNA_FIXED_B 2
#define HAL_ANTENNA_MAX_MODE 3
typedef enum {
HAL_OK = 0,
HAL_ENXIO = 1,
HAL_ENOMEM = 2,
HAL_EIO = 3,
HAL_EEMAGIC = 4,
HAL_EEVERSION = 5,
HAL_EELOCKED = 6,
HAL_EEBADSUM = 7,
HAL_EEREAD = 8,
HAL_EEBADMAC = 9,
HAL_EESIZE = 10,
HAL_EEWRITE = 11,
HAL_EINVAL = 12,
HAL_ENOTSUPP = 13,
HAL_ESELFTEST = 14,
HAL_EINPROGRESS = 15
} HAL_STATUS;
typedef enum {
AH_FALSE = 0,
AH_TRUE = 1
} HAL_BOOL;
typedef enum {
HAL_CAP_REG_DMN = 0,
HAL_CAP_CIPHER = 1,
HAL_CAP_TKIP_MIC = 2,
HAL_CAP_TKIP_SPLIT = 3,
HAL_CAP_PHYCOUNTERS = 4,
HAL_CAP_DIVERSITY = 5,
HAL_CAP_KEYCACHE_SIZE = 6,
HAL_CAP_NUM_TXQUEUES = 7,
HAL_CAP_VEOL = 9,
HAL_CAP_PSPOLL = 10,
HAL_CAP_DIAG = 11,
HAL_CAP_COMPRESSION = 12,
HAL_CAP_BURST = 13,
HAL_CAP_FASTFRAME = 14,
HAL_CAP_TXPOW = 15,
HAL_CAP_TPC = 16,
HAL_CAP_PHYDIAG = 17,
HAL_CAP_BSSIDMASK = 18,
HAL_CAP_MCAST_KEYSRCH = 19,
HAL_CAP_TSF_ADJUST = 20,
HAL_CAP_XR = 21,
HAL_CAP_WME_TKIPMIC = 22,
HAL_CAP_CHAN_HALFRATE = 23,
HAL_CAP_CHAN_QUARTERRATE = 24,
HAL_CAP_RFSILENT = 25,
HAL_CAP_TPC_ACK = 26,
HAL_CAP_TPC_CTS = 27,
HAL_CAP_11D = 28,
HAL_CAP_INTMIT = 29,
HAL_CAP_RXORN_FATAL = 30,
HAL_CAP_HT = 31,
HAL_CAP_NUMTXCHAIN = 32,
HAL_CAP_NUMRXCHAIN = 33,
HAL_CAP_RXTSTAMP_PREC = 34
} HAL_CAPABILITY_TYPE;
typedef enum {
HAL_LED_INIT = 0,
HAL_LED_SCAN = 1,
HAL_LED_AUTH = 2,
HAL_LED_ASSOC = 3,
HAL_LED_RUN = 4
} HAL_LED_STATE;
typedef enum {
HAL_TX_QUEUE_INACTIVE = 0,
HAL_TX_QUEUE_DATA = 1,
HAL_TX_QUEUE_BEACON = 2,
HAL_TX_QUEUE_CAB = 3,
HAL_TX_QUEUE_UAPSD = 4
} HAL_TX_QUEUE;
typedef enum {
HAL_WME_AC_BK = 0,
HAL_WME_AC_BE = 1,
HAL_WME_AC_VI = 2,
HAL_WME_AC_VO = 3,
HAL_WME_UPSD = 4,
HAL_XR_DATA = 5
} HAL_TX_QUEUE_SUBTYPE;
typedef enum {
HAL_TXQ_TXOKINT_ENABLE = 0x0001,
HAL_TXQ_TXERRINT_ENABLE = 0x0001,
HAL_TXQ_TXDESCINT_ENABLE = 0x0002,
HAL_TXQ_TXEOLINT_ENABLE = 0x0004,
HAL_TXQ_TXURNINT_ENABLE = 0x0008,
HAL_TXQ_COMPRESSION_ENABLE = 0x0010,
HAL_TXQ_RDYTIME_EXP_POLICY_ENABLE = 0x0020,
HAL_TXQ_DBA_GATED = 0x0040,
HAL_TXQ_CBR_DIS_QEMPTY = 0x0080,
HAL_TXQ_CBR_DIS_BEMPTY = 0x0100,
HAL_TXQ_FRAG_BURST_BACKOFF_ENABLE = 0x00800000,
HAL_TXQ_BACKOFF_DISABLE = 0x00010000,
HAL_TXQ_ARB_LOCKOUT_INTRA = 0x00020000,
HAL_TXQ_ARB_LOCKOUT_GLOBAL = 0x00040000,
HAL_TXQ_IGNORE_VIRTCOL = 0x00080000,
HAL_TXQ_SEQNUM_INC_DIS = 0x00100000
} HAL_TX_QUEUE_FLAGS;
typedef struct {
uint32_t tqi_ver;
HAL_TX_QUEUE_SUBTYPE tqi_subtype;
HAL_TX_QUEUE_FLAGS tqi_qflags;
uint32_t tqi_priority;
uint32_t tqi_aifs;
int32_t tqi_cwmin;
int32_t tqi_cwmax;
uint16_t tqi_shretry;
uint16_t tqi_lgretry;
uint32_t tqi_cbrPeriod;
uint32_t tqi_cbrOverflowLimit;
uint32_t tqi_burstTime;
uint32_t tqi_readyTime;
uint32_t tqi_compBuf;
} HAL_TXQ_INFO;
#define HAL_TQI_NONVAL 0xffff
#define HAL_TXQ_USEDEFAULT ((uint32_t)-1)
typedef enum {
HAL_PKT_TYPE_NORMAL = 0,
HAL_PKT_TYPE_ATIM = 1,
HAL_PKT_TYPE_PSPOLL = 2,
HAL_PKT_TYPE_BEACON = 3,
HAL_PKT_TYPE_PROBE_RESP = 4,
HAL_PKT_TYPE_CHIRP = 5,
HAL_PKT_TYPE_GRP_POLL = 6,
HAL_PKT_TYPE_AMPDU = 7
} HAL_PKT_TYPE;
typedef enum {
HAL_RX_FILTER_UCAST = 0x00000001,
HAL_RX_FILTER_MCAST = 0x00000002,
HAL_RX_FILTER_BCAST = 0x00000004,
HAL_RX_FILTER_CONTROL = 0x00000008,
HAL_RX_FILTER_BEACON = 0x00000010,
HAL_RX_FILTER_PROM = 0x00000020,
HAL_RX_FILTER_XRPOLL = 0x00000040,
HAL_RX_FILTER_PROBEREQ = 0x00000080,
HAL_RX_FILTER_PHYERR = 0x00000100,
HAL_RX_FILTER_PHYRADAR = 0x00000200
} HAL_RX_FILTER;
typedef enum {
HAL_PM_AWAKE = 0,
HAL_PM_FULL_SLEEP = 1,
HAL_PM_NETWORK_SLEEP = 2,
HAL_PM_UNDEFINED = 3
} HAL_POWER_MODE;
typedef enum {
HAL_INT_RX = 0x00000001,
HAL_INT_RXDESC = 0x00000002,
HAL_INT_RXNOFRM = 0x00000008,
HAL_INT_RXEOL = 0x00000010,
HAL_INT_RXORN = 0x00000020,
HAL_INT_TX = 0x00000040,
HAL_INT_TXDESC = 0x00000080,
HAL_INT_TXURN = 0x00000800,
HAL_INT_MIB = 0x00001000,
HAL_INT_RXPHY = 0x00004000,
HAL_INT_RXKCM = 0x00008000,
HAL_INT_SWBA = 0x00010000,
HAL_INT_BMISS = 0x00040000,
HAL_INT_BNR = 0x00100000,
HAL_INT_TIM = 0x00200000,
HAL_INT_DTIM = 0x00400000,
HAL_INT_DTIMSYNC = 0x00800000,
HAL_INT_GPIO = 0x01000000,
HAL_INT_CABEND = 0x02000000,
HAL_INT_CST = 0x10000000,
HAL_INT_GTT = 0x20000000,
HAL_INT_FATAL = 0x40000000,
HAL_INT_GLOBAL = INT_MIN,
HAL_INT_BMISC = HAL_INT_TIM
| HAL_INT_DTIM
| HAL_INT_DTIMSYNC
| HAL_INT_CABEND,
HAL_INT_COMMON = HAL_INT_RXNOFRM
| HAL_INT_RXDESC
| HAL_INT_RXEOL
| HAL_INT_RXORN
| HAL_INT_TXURN
| HAL_INT_TXDESC
| HAL_INT_MIB
| HAL_INT_RXPHY
| HAL_INT_RXKCM
| HAL_INT_SWBA
| HAL_INT_BMISS
| HAL_INT_GPIO,
} HAL_INT;
typedef enum {
HAL_RFGAIN_INACTIVE = 0,
HAL_RFGAIN_READ_REQUESTED = 1,
HAL_RFGAIN_NEED_CHANGE = 2
} HAL_RFGAIN;
typedef enum {
HAL_PHYERR_UNDERRUN = 0,
HAL_PHYERR_TIMING = 1,
HAL_PHYERR_PARITY = 2,
HAL_PHYERR_RATE = 3,
HAL_PHYERR_LENGTH = 4,
HAL_PHYERR_RADAR = 5,
HAL_PHYERR_SERVICE = 6,
HAL_PHYERR_TOR = 7,
HAL_PHYERR_OFDM_TIMING = 17,
HAL_PHYERR_OFDM_SIGNAL_PARITY = 18,
HAL_PHYERR_OFDM_RATE_ILLEGAL = 19,
HAL_PHYERR_OFDM_LENGTH_ILLEGAL = 20,
HAL_PHYERR_OFDM_POWER_DROP = 21,
HAL_PHYERR_OFDM_SERVICE = 22,
HAL_PHYERR_OFDM_RESTART = 23,
HAL_PHYERR_CCK_TIMING = 25,
HAL_PHYERR_CCK_HEADER_CRC = 26,
HAL_PHYERR_CCK_RATE_ILLEGAL = 27,
HAL_PHYERR_CCK_SERVICE = 30,
HAL_PHYERR_CCK_RESTART = 31
}HAL_PHYERR;
typedef struct {
uint32_t channelFlags;
uint16_t channel;
uint8_t privFlags;
int8_t maxRegTxPower;
int8_t maxTxPower;
int8_t minTxPower;
} HAL_CHANNEL;
typedef struct {
uint32_t ackrcv_bad;
uint32_t rts_bad;
uint32_t rts_good;
uint32_t fcs_bad;
uint32_t beacons;
} HAL_MIB_STATS;
enum {
CTRY_DEBUG = 0x1ff,
CTRY_DEFAULT = 0
};
enum {
HAL_MODE_11A = 0x001,
HAL_MODE_TURBO = 0x002,
HAL_MODE_11B = 0x004,
HAL_MODE_PUREG = 0x008,
HAL_MODE_11G = 0x008,
HAL_MODE_108G = 0x020,
HAL_MODE_108A = 0x040,
HAL_MODE_XR = 0x100,
HAL_MODE_11A_HALF_RATE = 0x200,
HAL_MODE_11A_QUARTER_RATE = 0x400,
HAL_MODE_11NG_HT20 = 0x8000,
HAL_MODE_11NA_HT20 = 0x10000,
HAL_MODE_11NG_HT40PLUS = 0x20000,
HAL_MODE_11NG_HT40MINUS = 0x40000,
HAL_MODE_11NA_HT40PLUS = 0x80000,
HAL_MODE_11NA_HT40MINUS = 0x100000,
HAL_MODE_ALL = 0xffffff
};
typedef struct {
int rateCount;
uint8_t rateCodeToIndex[144];
struct {
uint8_t valid;
uint8_t phy;
uint32_t rateKbps;
uint8_t rateCode;
uint8_t shortPreamble;
uint8_t dot11Rate;
uint8_t controlRate;
uint16_t lpAckDuration;
uint16_t spAckDuration;
} info[32];
} HAL_RATE_TABLE;
typedef struct {
uint32_t rs_count;
uint8_t rs_rates[32];
} HAL_RATE_SET;
typedef enum {
HAL_CHAINTYPE_TX = 1,
HAL_CHAINTYPE_RX = 2,
} HAL_CHAIN_TYPE;
typedef struct {
uint_t Tries;
uint_t Rate;
uint_t PktDuration;
uint_t ChSel;
uint_t RateFlags;
#define HAL_RATESERIES_RTS_CTS 0x0001
#define HAL_RATESERIES_2040 0x0002
#define HAL_RATESERIES_HALFGI 0x0004
} HAL_11N_RATE_SERIES;
typedef enum {
HAL_HT_MACMODE_20 = 0,
HAL_HT_MACMODE_2040 = 1
} HAL_HT_MACMODE;
typedef enum {
HAL_HT_PHYMODE_20 = 0,
HAL_HT_PHYMODE_2040 = 1
} HAL_HT_PHYMODE;
typedef enum {
HAL_HT_EXTPROTSPACING_20 = 0,
HAL_HT_EXTPROTSPACING_25 = 1
} HAL_HT_EXTPROTSPACING;
typedef enum {
HAL_RX_CLEAR_CTL_LOW = 1,
HAL_RX_CLEAR_EXT_LOW = 2
} HAL_HT_RXCLEAR;
typedef enum {
HAL_ANT_VARIABLE = 0,
HAL_ANT_FIXED_A = 1,
HAL_ANT_FIXED_B = 2
} HAL_ANT_SETTING;
typedef enum {
HAL_M_STA = 1,
HAL_M_IBSS = 0,
HAL_M_HOSTAP = 6,
HAL_M_MONITOR = 8
} HAL_OPMODE;
typedef struct {
uint8_t kv_type;
uint8_t kv_pad;
uint16_t kv_len;
uint8_t kv_val[16];
uint8_t kv_mic[8];
uint8_t kv_txmic[8];
} HAL_KEYVAL;
typedef enum {
HAL_CIPHER_WEP = 0,
HAL_CIPHER_AES_OCB = 1,
HAL_CIPHER_AES_CCM = 2,
HAL_CIPHER_CKIP = 3,
HAL_CIPHER_TKIP = 4,
HAL_CIPHER_CLR = 5,
HAL_CIPHER_MIC = 127
} HAL_CIPHER;
enum {
HAL_SLOT_TIME_6 = 6,
HAL_SLOT_TIME_9 = 9,
HAL_SLOT_TIME_20 = 20
};
typedef struct {
uint32_t bs_nexttbtt;
uint32_t bs_nextdtim;
uint32_t bs_intval;
uint32_t bs_dtimperiod;
uint16_t bs_cfpperiod;
uint16_t bs_cfpmaxduration;
uint32_t bs_cfpnext;
uint16_t bs_timoffset;
uint16_t bs_bmissthreshold;
uint32_t bs_sleepduration;
} HAL_BEACON_STATE;
typedef struct {
uint32_t bt_intval;
uint32_t bt_nexttbtt;
uint32_t bt_nextatim;
uint32_t bt_nextdba;
uint32_t bt_nextswba;
uint32_t bt_flags;
#define HAL_BEACON_TBTT_EN 0x00000001
#define HAL_BEACON_DBA_EN 0x00000002
#define HAL_BEACON_SWBA_EN 0x00000004
} HAL_BEACON_TIMERS;
typedef struct {
uint32_t ns_avgbrssi;
uint32_t ns_avgrssi;
uint32_t ns_avgtxrssi;
} HAL_NODE_STATS;
struct ath_tx_status {
uint16_t ts_seqnum;
uint16_t ts_tstamp;
uint8_t ts_status;
uint8_t ts_rate;
int8_t ts_rssi;
uint8_t ts_shortretry;
uint8_t ts_longretry;
uint8_t ts_virtcol;
uint8_t ts_antenna;
uint8_t ts_finaltsi;
uint8_t ts_flags;
int8_t ts_rssi_ctl[3];
int8_t ts_rssi_ext[3];
uint32_t ts_ba_low;
uint32_t ts_ba_high;
uint32_t ts_evm0;
uint32_t ts_evm1;
uint32_t ts_evm2;
};
struct ath_rx_status {
uint16_t rs_datalen;
uint8_t rs_status;
uint8_t rs_phyerr;
int8_t rs_rssi;
uint8_t rs_keyix;
uint8_t rs_rate;
uint8_t rs_more;
uint32_t rs_tstamp;
uint32_t rs_antenna;
int8_t rs_rssi_ctl[3];
int8_t rs_rssi_ext[3];
uint8_t rs_isaggr;
uint8_t rs_moreaggr;
uint8_t rs_num_delims;
uint8_t rs_flags;
uint32_t rs_evm0;
uint32_t rs_evm1;
uint32_t rs_evm2;
};
#define HAL_DESC_HW_SIZE 20
#pragma pack(1)
struct ath_desc {
uint32_t ds_link;
uint32_t ds_data;
uint32_t ds_ctl0;
uint32_t ds_ctl1;
uint32_t ds_hw[HAL_DESC_HW_SIZE];
};
struct ath_desc_status {
union {
struct ath_tx_status tx;
struct ath_rx_status rx;
} ds_us;
};
#pragma pack()
#define ds_txstat ds_us.tx
#define ds_rxstat ds_us.rx
struct ath_hal {
uint32_t ah_magic;
uint32_t ah_abi;
uint16_t ah_devid;
uint16_t ah_subvendorid;
HAL_SOFTC ah_sc;
HAL_BUS_TAG ah_st;
HAL_BUS_HANDLE ah_sh;
HAL_CTRY_CODE ah_countryCode;
uint32_t ah_macVersion;
uint16_t ah_macRev;
uint16_t ah_phyRev;
uint16_t ah_analog5GhzRev;
uint16_t ah_analog2GhzRev;
const HAL_RATE_TABLE *(*ah_getRateTable)(struct ath_hal *,
uint32_t mode);
void (*ah_detach) (struct ath_hal *);
HAL_BOOL (*ah_reset) (struct ath_hal *, HAL_OPMODE,
HAL_CHANNEL *, HAL_BOOL bChannelChange,
HAL_STATUS *status);
HAL_BOOL (*ah_phyDisable) (struct ath_hal *);
HAL_BOOL (*ah_disable) (struct ath_hal *);
void (*ah_setPCUConfig) (struct ath_hal *);
HAL_BOOL (*ah_perCalibration) (struct ath_hal *, HAL_CHANNEL *,
HAL_BOOL *);
HAL_BOOL (*ah_setTxPowerLimit)(struct ath_hal *, uint32_t);
HAL_BOOL (*ah_radarWait)(struct ath_hal *, HAL_CHANNEL *);
HAL_BOOL (*ah_updateTxTrigLevel) (struct ath_hal *,
HAL_BOOL incTrigLevel);
int (*ah_setupTxQueue) (struct ath_hal *, HAL_TX_QUEUE,
const HAL_TXQ_INFO *qInfo);
HAL_BOOL (*ah_setTxQueueProps) (struct ath_hal *, int q,
const HAL_TXQ_INFO *qInfo);
HAL_BOOL (*ah_getTxQueueProps)(struct ath_hal *, int q,
HAL_TXQ_INFO *qInfo);
HAL_BOOL (*ah_releaseTxQueue) (struct ath_hal *ah, uint32_t q);
HAL_BOOL (*ah_resetTxQueue) (struct ath_hal *ah, uint32_t q);
uint32_t (*ah_getTxDP) (struct ath_hal *, uint32_t);
HAL_BOOL (*ah_setTxDP) (struct ath_hal *, uint32_t, uint32_t txdp);
uint32_t (*ah_numTxPending)(struct ath_hal *, uint32_t q);
HAL_BOOL (*ah_startTxDma) (struct ath_hal *, uint32_t);
HAL_BOOL (*ah_stopTxDma) (struct ath_hal *, uint32_t);
HAL_BOOL (*ah_setupTxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t pktLen, uint32_t hdrLen,
HAL_PKT_TYPE type, uint32_t txPower,
uint32_t txRate0, uint32_t txTries0,
uint32_t keyIx, uint32_t antMode,
uint32_t flags, uint32_t rtsctsRate,
uint32_t rtsctsDuration,
uint32_t compicvLen, uint32_t compivLen,
uint32_t comp);
HAL_BOOL (*ah_setupXTxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t txRate1, uint32_t txTries1,
uint32_t txRate2, uint32_t txTries2,
uint32_t txRate3, uint32_t txTries3);
HAL_BOOL (*ah_fillTxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t segLen, HAL_BOOL firstSeg,
HAL_BOOL lastSeg, const struct ath_desc *);
HAL_STATUS (*ah_procTxDesc)(struct ath_hal *, struct ath_desc *,
struct ath_tx_status *);
void (*ah_getTxIntrQueue)(struct ath_hal *, uint32_t *);
void (*ah_reqTxIntrDesc)(struct ath_hal *, struct ath_desc *);
uint32_t (*ah_getRxDP) (struct ath_hal *);
void (*ah_setRxDP) (struct ath_hal *, uint32_t rxdp);
void (*ah_enableReceive) (struct ath_hal *);
HAL_BOOL (*ah_stopDmaReceive) (struct ath_hal *);
void (*ah_startPcuReceive) (struct ath_hal *);
void (*ah_stopPcuReceive) (struct ath_hal *);
void (*ah_setMulticastFilter) (struct ath_hal *,
uint32_t filter0, uint32_t filter1);
HAL_BOOL (*ah_setMulticastFilterIndex) (struct ath_hal *,
uint32_t index);
HAL_BOOL (*ah_clrMulticastFilterIndex) (struct ath_hal *,
uint32_t index);
uint32_t (*ah_getRxFilter) (struct ath_hal *);
void (*ah_setRxFilter) (struct ath_hal *, uint32_t);
HAL_BOOL (*ah_setupRxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t size, uint32_t flags);
HAL_STATUS (*ah_procRxDesc) (struct ath_hal *, struct ath_desc *,
uint32_t phyAddr, struct ath_desc *next,
uint64_t tsf, struct ath_rx_status *);
void (*ah_rxMonitor) (struct ath_hal *,
const HAL_NODE_STATS *, HAL_CHANNEL *);
void (*ah_procMibEvent) (struct ath_hal *,
const HAL_NODE_STATS *);
HAL_STATUS (*ah_getCapability) (struct ath_hal *,
HAL_CAPABILITY_TYPE, uint32_t capability,
uint32_t *result);
HAL_BOOL (*ah_setCapability) (struct ath_hal *,
HAL_CAPABILITY_TYPE, uint32_t capability,
uint32_t setting, HAL_STATUS *);
HAL_BOOL (*ah_getDiagState) (struct ath_hal *, int request,
const void *args, uint32_t argsize,
void **result, uint32_t *resultsize);
void (*ah_getMacAddress) (struct ath_hal *, uint8_t *);
HAL_BOOL (*ah_setMacAddress) (struct ath_hal *, const uint8_t *);
void (*ah_getBssIdMask)(struct ath_hal *, uint8_t *);
HAL_BOOL (*ah_setBssIdMask)(struct ath_hal *, const uint8_t *);
HAL_BOOL (*ah_setRegulatoryDomain) (struct ath_hal *,
uint16_t, HAL_STATUS *);
void (*ah_setLedState) (struct ath_hal *, HAL_LED_STATE);
void (*ah_writeAssocid) (struct ath_hal *,
const uint8_t *bssid, uint16_t assocId);
HAL_BOOL (*ah_gpioCfgOutput) (struct ath_hal *, uint32_t gpio);
HAL_BOOL (*ah_gpioCfgInput) (struct ath_hal *, uint32_t gpio);
uint32_t (*ah_gpioGet) (struct ath_hal *, uint32_t gpio);
HAL_BOOL (*ah_gpioSet) (struct ath_hal *,
uint32_t gpio, uint32_t val);
void (*ah_gpioSetIntr) (struct ath_hal *, uint32_t, uint32_t);
uint32_t (*ah_getTsf32) (struct ath_hal *);
uint64_t (*ah_getTsf64) (struct ath_hal *);
void (*ah_resetTsf) (struct ath_hal *);
HAL_BOOL (*ah_detectCardPresent) (struct ath_hal *);
void (*ah_updateMibCounters) (struct ath_hal *, HAL_MIB_STATS *);
HAL_RFGAIN (*ah_getRfGain) (struct ath_hal *);
uint32_t (*ah_getDefAntenna) (struct ath_hal *);
void (*ah_setDefAntenna) (struct ath_hal *, uint32_t);
HAL_ANT_SETTING (*ah_getAntennaSwitch) (struct ath_hal *);
HAL_BOOL (*ah_setAntennaSwitch) (struct ath_hal *, HAL_ANT_SETTING);
HAL_BOOL (*ah_setSifsTime) (struct ath_hal *, uint32_t);
uint32_t (*ah_getSifsTime) (struct ath_hal *);
HAL_BOOL (*ah_setSlotTime) (struct ath_hal *, uint32_t);
uint32_t (*ah_getSlotTime) (struct ath_hal *);
HAL_BOOL (*ah_setAckTimeout) (struct ath_hal *, uint32_t);
uint32_t (*ah_getAckTimeout) (struct ath_hal *);
HAL_BOOL (*ah_setAckCTSRate) (struct ath_hal *, uint32_t);
uint32_t (*ah_getAckCTSRate) (struct ath_hal *);
HAL_BOOL (*ah_setCTSTimeout) (struct ath_hal *, uint32_t);
uint32_t (*ah_getCTSTimeout) (struct ath_hal *);
HAL_BOOL (*ah_setDecompMask)(struct ath_hal *, uint16_t, int);
void (*ah_setCoverageClass)(struct ath_hal *, uint8_t, int);
uint32_t (*ah_getKeyCacheSize) (struct ath_hal *);
HAL_BOOL (*ah_resetKeyCacheEntry) (struct ath_hal *, uint16_t);
HAL_BOOL (*ah_isKeyCacheEntryValid) (struct ath_hal *, uint16_t);
HAL_BOOL (*ah_setKeyCacheEntry) (struct ath_hal *,
uint16_t, const HAL_KEYVAL *,
const uint8_t *, int);
HAL_BOOL (*ah_setKeyCacheEntryMac) (struct ath_hal *,
uint16_t, const uint8_t *);
HAL_BOOL (*ah_setPowerMode) (struct ath_hal *,
HAL_POWER_MODE mode, int setChip);
HAL_POWER_MODE (*ah_getPowerMode) (struct ath_hal *);
int16_t (*ah_getChanNoise)(struct ath_hal *, HAL_CHANNEL *);
void (*ah_setBeaconTimers) (struct ath_hal *,
const HAL_BEACON_TIMERS *);
void (*ah_beaconInit) (struct ath_hal *,
uint32_t nexttbtt, uint32_t intval);
void (*ah_setStationBeaconTimers) (struct ath_hal *,
const HAL_BEACON_STATE *);
void (*ah_resetStationBeaconTimers) (struct ath_hal *);
HAL_BOOL (*ah_isInterruptPending) (struct ath_hal *);
HAL_BOOL (*ah_getPendingInterrupts) (struct ath_hal *, HAL_INT *);
HAL_INT (*ah_getInterrupts) (struct ath_hal *);
HAL_INT (*ah_setInterrupts) (struct ath_hal *, HAL_INT);
};
extern const char *ath_hal_probe(uint16_t vendorid, uint16_t devid);
extern struct ath_hal *ath_hal_attach(uint16_t devid, HAL_SOFTC,
HAL_BUS_TAG, HAL_BUS_HANDLE, HAL_STATUS *status);
extern HAL_BOOL ath_hal_setvendor(struct ath_hal *, uint32_t);
extern HAL_BOOL ath_hal_init_channels(struct ath_hal *,
HAL_CHANNEL *chans, uint32_t maxchans, uint32_t *nchans,
uint8_t *regclassids, uint32_t maxregids, uint32_t *nregids,
HAL_CTRY_CODE cc, uint_t modeSelect,
HAL_BOOL enableOutdoor, HAL_BOOL enableExtendedChannels);
extern void ath_hal_process_noisefloor(struct ath_hal *ah);
extern uint32_t ath_hal_getwirelessmodes(struct ath_hal *, HAL_CTRY_CODE);
extern uint16_t ath_hal_computetxtime(struct ath_hal *,
const HAL_RATE_TABLE *rates, uint32_t frameLen,
uint16_t rateix, HAL_BOOL shortPreamble);
extern HAL_BOOL ath_hal_ispublicsafetysku(struct ath_hal *);
extern HAL_BOOL ath_hal_isgsmsku(struct ath_hal *);
extern int ath_hal_mhz2ieee(struct ath_hal *, uint32_t mhz, uint32_t flags);
extern char ath_hal_version[];
extern const char *ath_hal_buildopts[];
#define ATH_HAL_RESET(_ah, _opmode, _chan, _outdoor, _pstatus) \
((*(_ah)->ah_reset)((_ah), (_opmode), (_chan), (_outdoor), (_pstatus)))
#define ATH_HAL_PHYDISABLE(_ah) \
((*(_ah)->ah_phyDisable)((_ah)))
#define ATH_HAL_GETCAPABILITY(_ah, _cap, _param, _result) \
((*(_ah)->ah_getCapability)((_ah), (_cap), (_param), (_result)))
#define ATH_HAL_SETCAPABILITY(_ah, _type, _cap, _param, _status) \
((*(_ah)->ah_setCapability)((_ah), (_type), (_cap), (_param), \
(_status)))
#define ATH_HAL_GETREGDOMAIN(_ah, _prd) \
ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_REG_DMN, 0, (_prd))
#define ATH_HAL_GETCOUNTRYCODE(_ah, _pcc) \
(*(_pcc) = (_ah)->ah_countryCode)
#define ATH_HAL_GETRATETABLE(_ah, _mode) \
((*(_ah)->ah_getRateTable)((_ah), (_mode)))
#define ATH_HAL_GETMAC(_ah, _mac) \
((*(_ah)->ah_getMacAddress)((_ah), (_mac)))
#define ATH_HAL_SETMAC(_ah, _mac) \
((*(_ah)->ah_setMacAddress)((_ah), (_mac)))
#define ATH_HAL_INTRSET(_ah, _mask) \
((*(_ah)->ah_setInterrupts)((_ah), (_mask)))
#define ATH_HAL_INTRGET(_ah) \
((*(_ah)->ah_getInterrupts)((_ah)))
#define ATH_HAL_INTRPEND(_ah) \
((*(_ah)->ah_isInterruptPending)((_ah)))
#define ATH_HAL_GETISR(_ah, _pmask) \
((*(_ah)->ah_getPendingInterrupts)((_ah), (_pmask)))
#define ATH_HAL_UPDATETXTRIGLEVEL(_ah, _inc) \
((*(_ah)->ah_updateTxTrigLevel)((_ah), (_inc)))
#define ATH_HAL_SETPOWER(_ah, _mode) \
((*(_ah)->ah_setPowerMode)((_ah), (_mode), AH_TRUE))
#define ATH_HAL_KEYRESET(_ah, _ix) \
((*(_ah)->ah_resetKeyCacheEntry)((_ah), (_ix)))
#define ATH_HAL_KEYSET(_ah, _ix, _pk, _mac) \
((*(_ah)->ah_setKeyCacheEntry)((_ah), (_ix), (_pk), (_mac), AH_FALSE))
#define ATH_HAL_KEYISVALID(_ah, _ix) \
(((*(_ah)->ah_isKeyCacheEntryValid)((_ah), (_ix))))
#define ATH_HAL_KEYSETMAC(_ah, _ix, _mac) \
((*(_ah)->ah_setKeyCacheEntryMac)((_ah), (_ix), (_mac)))
#define ATH_HAL_KEYCACHESIZE(_ah) \
((*(_ah)->ah_getKeyCacheSize)((_ah)))
#define ATH_HAL_GETRXFILTER(_ah) \
((*(_ah)->ah_getRxFilter)((_ah)))
#define ATH_HAL_SETRXFILTER(_ah, _filter) \
((*(_ah)->ah_setRxFilter)((_ah), (_filter)))
#define ATH_HAL_SETMCASTFILTER(_ah, _mfilt0, _mfilt1) \
((*(_ah)->ah_setMulticastFilter)((_ah), (_mfilt0), (_mfilt1)))
#define ATH_HAL_WAITFORBEACON(_ah, _bf) \
((*(_ah)->ah_waitForBeaconDone)((_ah), (_bf)->bf_daddr))
#define ATH_HAL_PUTRXBUF(_ah, _bufaddr) \
((*(_ah)->ah_setRxDP)((_ah), (_bufaddr)))
#define ATH_HAL_GETTSF32(_ah) \
((*(_ah)->ah_getTsf32)((_ah)))
#define ATH_HAL_GETTSF64(_ah) \
((*(_ah)->ah_getTsf64)((_ah)))
#define ATH_HAL_RESETTSF(_ah) \
((*(_ah)->ah_resetTsf)((_ah)))
#define ATH_HAL_RXENA(_ah) \
((*(_ah)->ah_enableReceive)((_ah)))
#define ATH_HAL_PUTTXBUF(_ah, _q, _bufaddr) \
((*(_ah)->ah_setTxDP)((_ah), (_q), (_bufaddr)))
#define ATH_HAL_GETTXBUF(_ah, _q) \
((*(_ah)->ah_getTxDP)((_ah), (_q)))
#define ATH_HAL_GETRXBUF(_ah) \
((*(_ah)->ah_getRxDP)((_ah)))
#define ATH_HAL_TXSTART(_ah, _q) \
((*(_ah)->ah_startTxDma)((_ah), (_q)))
#define ATH_HAL_SETCHANNEL(_ah, _chan) \
((*(_ah)->ah_setChannel)((_ah), (_chan)))
#define ATH_HAL_CALIBRATE(_ah, _chan, _iqcal) \
((*(_ah)->ah_perCalibration)((_ah), (_chan), (_iqcal)))
#define ATH_HAL_SETLEDSTATE(_ah, _state) \
((*(_ah)->ah_setLedState)((_ah), (_state)))
#define ATH_HAL_BEACONINIT(_ah, _nextb, _bperiod) \
((*(_ah)->ah_beaconInit)((_ah), (_nextb), (_bperiod)))
#define ATH_HAL_BEACONRESET(_ah) \
((*(_ah)->ah_resetStationBeaconTimers)((_ah)))
#define ATH_HAL_BEACONTIMERS(_ah, _beacon_state) \
((*(_ah)->ah_setStationBeaconTimers)((_ah), (_beacon_state)))
#define ATH_HAL_SETASSOCID(_ah, _bss, _associd) \
((*(_ah)->ah_writeAssocid)((_ah), (_bss), (_associd)))
#define ATH_HAL_SETOPMODE(_ah) \
((*(_ah)->ah_setPCUConfig)((_ah)))
#define ATH_HAL_STOPTXDMA(_ah, _qnum) \
((*(_ah)->ah_stopTxDma)((_ah), (_qnum)))
#define ATH_HAL_STOPPCURECV(_ah) \
((*(_ah)->ah_stopPcuReceive)((_ah)))
#define ATH_HAL_STARTPCURECV(_ah) \
((*(_ah)->ah_startPcuReceive)((_ah)))
#define ATH_HAL_STOPDMARECV(_ah) \
((*(_ah)->ah_stopDmaReceive)((_ah)))
#define ATH_HAL_DUMPSTATE(_ah) \
((*(_ah)->ah_dumpState)((_ah)))
#define ATH_HAL_DUMPEEPROM(_ah) \
((*(_ah)->ah_dumpEeprom)((_ah)))
#define ATH_HAL_DUMPRFGAIN(_ah) \
((*(_ah)->ah_dumpRfGain)((_ah)))
#define ATH_HAL_DUMPANI(_ah) \
((*(_ah)->ah_dumpAni)((_ah)))
#define ATH_HAL_SETUPTXQUEUE(_ah, _type, _irq) \
((*(_ah)->ah_setupTxQueue)((_ah), (_type), (_irq)))
#define ATH_HAL_RESETTXQUEUE(_ah, _q) \
((*(_ah)->ah_resetTxQueue)((_ah), (_q)))
#define ATH_HAL_RELEASETXQUEUE(_ah, _q) \
((*(_ah)->ah_releaseTxQueue)((_ah), (_q)))
#define ATH_HAL_GETTXQUEUEPROPS(_ah, _q, _qi) \
((*(_ah)->ah_getTxQueueProps)((_ah), (_q), (_qi)))
#define ATH_HAL_SETTXQUEUEPROPS(_ah, _q, _qi) \
((*(_ah)->ah_setTxQueueProps)((_ah), (_q), (_qi)))
#define ATH_HAL_HASVEOL(_ah) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_VEOL, 0, NULL) == HAL_OK)
#define ATH_HAL_GETRFGAIN(_ah) \
((*(_ah)->ah_getRfGain)((_ah)))
#define ATH_HAL_RXMONITOR(_ah, _arg, _chan) \
((*(_ah)->ah_rxMonitor)((_ah), (_arg), (_chan)))
#define ATH_HAL_SETSLOTTIME(_ah, _us) \
((*(_ah)->ah_setSlotTime)((_ah), (_us)))
#define ATH_HAL_SETUPBEACONDESC(_ah, _ds, _opmode, _flen, _hlen, \
_rate, _antmode) \
((*(_ah)->ah_setupBeaconDesc)((_ah), (_ds), (_opmode), \
(_flen), (_hlen), (_rate), (_antmode)))
#define ATH_HAL_SETUPRXDESC(_ah, _ds, _size, _intreq) \
((*(_ah)->ah_setupRxDesc)((_ah), (_ds), (_size), (_intreq)))
#define ATH_HAL_RXPROCDESC(_ah, _ds, _dspa, _dsnext, _rs) \
((*(_ah)->ah_procRxDesc)((_ah), (_ds), (_dspa), (_dsnext), 0, (_rs)))
#define ATH_HAL_SETUPTXDESC(_ah, _ds, _plen, _hlen, _atype, _txpow, \
_txr0, _txtr0, _keyix, _ant, _flags, \
_rtsrate, _rtsdura) \
((*(_ah)->ah_setupTxDesc)((_ah), (_ds), (_plen), (_hlen), (_atype), \
(_txpow), (_txr0), (_txtr0), (_keyix), (_ant), \
(_flags), (_rtsrate), (_rtsdura), 0, 0, 0))
#define ATH_HAL_SETUPXTXDESC(_ah, _ds, \
_txr1, _txtr1, _txr2, _txtr2, _txr3, _txtr3) \
((*(_ah)->ah_setupXTxDesc)((_ah), (_ds), \
(_txr1), (_txtr1), (_txr2), (_txtr2), (_txr3), (_txtr3)))
#define ATH_HAL_FILLTXDESC(_ah, _ds, _l, _first, _last, _ath_desc) \
((*(_ah)->ah_fillTxDesc)((_ah), (_ds), (_l), (_first), (_last), \
(_ath_desc)))
#define ATH_HAL_TXPROCDESC(_ah, _ds, _ts) \
((*(_ah)->ah_procTxDesc)((_ah), (_ds), (_ts)))
#define ATH_HAL_CIPHERSUPPORTED(_ah, _cipher) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_CIPHER, _cipher, NULL) == HAL_OK)
#define ATH_HAL_HASTKIPSPLIT(_ah) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_TKIP_SPLIT, 0, NULL) == HAL_OK)
#define ATH_HAL_GETTKIPSPLIT(_ah) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_TKIP_SPLIT, 1, NULL) == HAL_OK)
#define ATH_HAL_SETTKIPSPLIT(_ah, _v) \
(ATH_HAL_SETCAPABILITY(_ah, HAL_CAP_TKIP_SPLIT, 1, _v, NULL))
#define ATH_HAL_HASRFSILENT(ah) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 0, NULL) == HAL_OK)
#define ATH_HAL_GETRFKILL(_ah) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 1, NULL) == HAL_OK)
#define ATH_HAL_SETRFKILL(_ah, _onoff) \
(ATH_HAL_SETCAPABILITY(_ah, HAL_CAP_RFSILENT, 1, _onoff, NULL))
#define ATH_HAL_GETRFSILENT(_ah, _prfsilent) \
(ATH_HAL_GETCAPABILITY(_ah, HAL_CAP_RFSILENT, 2, _prfsilent) == HAL_OK)
#define ATH_HAL_SETRFSILENT(_ah, _rfsilent) \
(ATH_HAL_SETCAPABILITY(_ah, HAL_CAP_RFSILENT, 2, _rfsilent, NULL))
#if HAL_ABI_VERSION < 0x05120700
#define ATH_HAL_PROCESS_NOISEFLOOR(_ah)
#define ATH_HAL_GETCHANNOISE(_ah, _c) (-96)
#define HAL_CAP_TPC_ACK 100
#define HAL_CAP_TPC_CTS 101
#else
#define ATH_HAL_GETCHANNOISE(_ah, _c) \
((*(_ah)->ah_getChanNoise)((_ah), (_c)))
#endif
#if HAL_ABI_VERSION < 0x05122200
#define HAL_TXQ_TXOKINT_ENABLE TXQ_FLAG_TXOKINT_ENABLE
#define HAL_TXQ_TXERRINT_ENABLE TXQ_FLAG_TXERRINT_ENABLE
#define HAL_TXQ_TXDESCINT_ENABLE TXQ_FLAG_TXDESCINT_ENABLE
#define HAL_TXQ_TXEOLINT_ENABLE TXQ_FLAG_TXEOLINT_ENABLE
#define HAL_TXQ_TXURNINT_ENABLE TXQ_FLAG_TXURNINT_ENABLE
#endif
#ifdef __cplusplus
}
#endif
#endif