2 * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
3 * Copyright (c) 2002-2008 Atheros Communications, Inc.
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 * $Id: ar5416.h,v 1.1.1.1 2008/12/11 04:46:46 alc Exp $
19 #ifndef _ATH_AR5416_H_
20 #define _ATH_AR5416_H_
22 #include "ar5212/ar5212.h"
23 #include "ar5416_cal.h"
25 #define AR5416_MAGIC 0x20065416
34 uint16_t synth_center
;
39 #define AR5416_DEFAULT_RXCHAINMASK 7
40 #define AR5416_DEFAULT_TXCHAINMASK 1
41 #define AR5416_MAX_RATE_POWER 63
42 #define AR5416_KEYTABLE_SIZE 128
44 #define AR5416_CCA_MAX_GOOD_VALUE -85
45 #define AR5416_CCA_MAX_HIGH_VALUE -62
46 #define AR5416_CCA_MIN_BAD_VALUE -140
49 struct ath_hal_5212 ah_5212
;
51 /* NB: RF data setup at attach */
52 HAL_INI_ARRAY ah_ini_bb_rfgain
;
53 HAL_INI_ARRAY ah_ini_bank0
;
54 HAL_INI_ARRAY ah_ini_bank1
;
55 HAL_INI_ARRAY ah_ini_bank2
;
56 HAL_INI_ARRAY ah_ini_bank3
;
57 HAL_INI_ARRAY ah_ini_bank6
;
58 HAL_INI_ARRAY ah_ini_bank7
;
59 HAL_INI_ARRAY ah_ini_addac
;
61 u_int ah_globaltxtimeout
; /* global tx timeout */
62 int ah_hangs
; /* h/w hangs state */
63 uint8_t ah_keytype
[AR5416_KEYTABLE_SIZE
];
65 * Extension Channel Rx Clear State
67 uint32_t ah_cycleCount
;
70 uint32_t ah_rx_chainmask
;
71 uint32_t ah_tx_chainmask
;
73 struct ar5416PerCal ah_cal
; /* periodic calibration state */
75 #define AH5416(_ah) ((struct ath_hal_5416 *)(_ah))
77 #define IS_5416_PCI(ah) ((AH_PRIVATE(ah)->ah_macVersion) == AR_SREV_VERSION_OWL_PCI)
78 #define IS_5416_PCIE(ah) ((AH_PRIVATE(ah)->ah_macVersion) == AR_SREV_VERSION_OWL_PCIE)
80 #define IS_PCIE(ah) (IS_5416_PCIE(ah))
82 extern HAL_BOOL
ar2133RfAttach(struct ath_hal
*, HAL_STATUS
*);
86 extern struct ath_hal
* ar5416Attach(uint16_t devid
, HAL_SOFTC sc
,
87 HAL_BUS_TAG st
, HAL_BUS_HANDLE sh
, HAL_STATUS
*status
);
88 extern void ar5416InitState(struct ath_hal_5416
*, uint16_t devid
,
89 HAL_SOFTC sc
, HAL_BUS_TAG st
, HAL_BUS_HANDLE sh
,
91 extern void ar5416Detach(struct ath_hal
*ah
);
92 extern HAL_BOOL
ar5416FillCapabilityInfo(struct ath_hal
*ah
);
94 #define IS_5GHZ_FAST_CLOCK_EN(_ah, _c) \
95 (IS_CHAN_5GHZ(_c) && ath_hal_eepromGetFlag(ah, AR_EEP_FSTCLK_5G))
97 extern void ar5416AniAttach(struct ath_hal
*, const struct ar5212AniParams
*,
98 const struct ar5212AniParams
*, HAL_BOOL ena
);
99 extern void ar5416AniDetach(struct ath_hal
*);
100 extern HAL_BOOL
ar5416AniControl(struct ath_hal
*, HAL_ANI_CMD cmd
, int param
);
101 extern HAL_BOOL
ar5416AniSetParams(struct ath_hal
*,
102 const struct ar5212AniParams
*, const struct ar5212AniParams
*);
103 extern void ar5416ProcessMibIntr(struct ath_hal
*, const HAL_NODE_STATS
*);
104 extern void ar5416AniPoll(struct ath_hal
*, const HAL_NODE_STATS
*,
106 extern void ar5416AniReset(struct ath_hal
*, HAL_CHANNEL_INTERNAL
*,
109 extern void ar5416SetBeaconTimers(struct ath_hal
*, const HAL_BEACON_TIMERS
*);
110 extern void ar5416BeaconInit(struct ath_hal
*ah
,
111 uint32_t next_beacon
, uint32_t beacon_period
);
112 extern void ar5416ResetStaBeaconTimers(struct ath_hal
*ah
);
113 extern void ar5416SetStaBeaconTimers(struct ath_hal
*ah
,
114 const HAL_BEACON_STATE
*);
116 extern HAL_BOOL
ar5416EepromRead(struct ath_hal
*, u_int off
, uint16_t *data
);
117 extern HAL_BOOL
ar5416EepromWrite(struct ath_hal
*, u_int off
, uint16_t data
);
119 extern HAL_BOOL
ar5416IsInterruptPending(struct ath_hal
*ah
);
120 extern HAL_BOOL
ar5416GetPendingInterrupts(struct ath_hal
*, HAL_INT
*masked
);
121 extern HAL_INT
ar5416SetInterrupts(struct ath_hal
*ah
, HAL_INT ints
);
123 extern HAL_BOOL
ar5416GpioCfgOutput(struct ath_hal
*, uint32_t gpio
);
124 extern HAL_BOOL
ar5416GpioCfgInput(struct ath_hal
*, uint32_t gpio
);
125 extern HAL_BOOL
ar5416GpioSet(struct ath_hal
*, uint32_t gpio
, uint32_t val
);
126 extern uint32_t ar5416GpioGet(struct ath_hal
*ah
, uint32_t gpio
);
127 extern void ar5416GpioSetIntr(struct ath_hal
*ah
, u_int
, uint32_t ilevel
);
129 extern u_int
ar5416GetWirelessModes(struct ath_hal
*ah
);
130 extern void ar5416SetLedState(struct ath_hal
*ah
, HAL_LED_STATE state
);
131 extern void ar5416ResetTsf(struct ath_hal
*ah
);
132 extern HAL_BOOL
ar5416SetAntennaSwitch(struct ath_hal
*, HAL_ANT_SETTING
);
133 extern HAL_BOOL
ar5416SetDecompMask(struct ath_hal
*, uint16_t, int);
134 extern void ar5416SetCoverageClass(struct ath_hal
*, uint8_t, int);
135 extern uint32_t ar5416Get11nExtBusy(struct ath_hal
*ah
);
136 extern void ar5416Set11nMac2040(struct ath_hal
*ah
, HAL_HT_MACMODE mode
);
137 extern HAL_HT_RXCLEAR
ar5416Get11nRxClear(struct ath_hal
*ah
);
138 extern void ar5416Set11nRxClear(struct ath_hal
*ah
, HAL_HT_RXCLEAR rxclear
);
139 extern HAL_STATUS
ar5416GetCapability(struct ath_hal
*ah
,
140 HAL_CAPABILITY_TYPE type
, uint32_t capability
, uint32_t *result
);
141 extern HAL_BOOL
ar5416GetDiagState(struct ath_hal
*ah
, int request
,
142 const void *args
, uint32_t argsize
,
143 void **result
, uint32_t *resultsize
);
145 extern HAL_BOOL
ar5416SetPowerMode(struct ath_hal
*ah
, HAL_POWER_MODE mode
,
147 extern HAL_POWER_MODE
ar5416GetPowerMode(struct ath_hal
*ah
);
148 extern HAL_BOOL
ar5416GetPowerStatus(struct ath_hal
*ah
);
150 extern HAL_BOOL
ar5416ResetKeyCacheEntry(struct ath_hal
*ah
, uint16_t entry
);
151 extern HAL_BOOL
ar5416SetKeyCacheEntry(struct ath_hal
*ah
, uint16_t entry
,
152 const HAL_KEYVAL
*k
, const uint8_t *mac
, int xorKey
);
154 extern void ar5416StartPcuReceive(struct ath_hal
*ah
);
155 extern void ar5416StopPcuReceive(struct ath_hal
*ah
);
156 extern HAL_BOOL
ar5416SetupRxDesc(struct ath_hal
*,
157 struct ath_desc
*, uint32_t size
, u_int flags
);
158 extern HAL_STATUS
ar5416ProcRxDesc(struct ath_hal
*ah
, struct ath_desc
*,
159 uint32_t, struct ath_desc
*, uint64_t,
160 struct ath_rx_status
*);
162 extern HAL_BOOL
ar5416Reset(struct ath_hal
*ah
, HAL_OPMODE opmode
,
163 HAL_CHANNEL
*chan
, HAL_BOOL bChannelChange
, HAL_STATUS
*status
);
164 extern HAL_BOOL
ar5416PhyDisable(struct ath_hal
*ah
);
165 extern HAL_RFGAIN
ar5416GetRfgain(struct ath_hal
*ah
);
166 extern HAL_BOOL
ar5416Disable(struct ath_hal
*ah
);
167 extern HAL_BOOL
ar5416ChipReset(struct ath_hal
*ah
, HAL_CHANNEL
*);
168 extern HAL_BOOL
ar5416SetResetReg(struct ath_hal
*, uint32_t type
);
169 extern HAL_BOOL
ar5416SetTxPowerLimit(struct ath_hal
*ah
, uint32_t limit
);
170 extern HAL_BOOL
ar5416GetChipPowerLimits(struct ath_hal
*ah
,
171 HAL_CHANNEL
*chans
, uint32_t nchans
);
172 extern void ar5416GetChannelCenters(struct ath_hal
*,
173 HAL_CHANNEL_INTERNAL
*chan
, CHAN_CENTERS
*centers
);
175 extern HAL_BOOL
ar5416StopTxDma(struct ath_hal
*ah
, u_int q
);
176 extern HAL_BOOL
ar5416SetupTxDesc(struct ath_hal
*ah
, struct ath_desc
*ds
,
177 u_int pktLen
, u_int hdrLen
, HAL_PKT_TYPE type
, u_int txPower
,
178 u_int txRate0
, u_int txTries0
,
179 u_int keyIx
, u_int antMode
, u_int flags
,
180 u_int rtsctsRate
, u_int rtsctsDuration
,
181 u_int compicvLen
, u_int compivLen
, u_int comp
);
182 extern HAL_BOOL
ar5416SetupXTxDesc(struct ath_hal
*, struct ath_desc
*,
183 u_int txRate1
, u_int txRetries1
,
184 u_int txRate2
, u_int txRetries2
,
185 u_int txRate3
, u_int txRetries3
);
186 extern HAL_BOOL
ar5416FillTxDesc(struct ath_hal
*ah
, struct ath_desc
*ds
,
187 u_int segLen
, HAL_BOOL firstSeg
, HAL_BOOL lastSeg
,
188 const struct ath_desc
*ds0
);
189 extern HAL_STATUS
ar5416ProcTxDesc(struct ath_hal
*ah
,
190 struct ath_desc
*, struct ath_tx_status
*);
192 extern const HAL_RATE_TABLE
*ar5416GetRateTable(struct ath_hal
*, u_int mode
);
193 #endif /* _ATH_AR5416_H_ */