16e778a7eSPedro F. Giffuni /*- 26e778a7eSPedro F. Giffuni * SPDX-License-Identifier: ISC 36e778a7eSPedro F. Giffuni * 459efa8b5SSam Leffler * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting 514779705SSam Leffler * Copyright (c) 2002-2008 Atheros Communications, Inc. 614779705SSam Leffler * 714779705SSam Leffler * Permission to use, copy, modify, and/or distribute this software for any 814779705SSam Leffler * purpose with or without fee is hereby granted, provided that the above 914779705SSam Leffler * copyright notice and this permission notice appear in all copies. 1014779705SSam Leffler * 1114779705SSam Leffler * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1214779705SSam Leffler * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1314779705SSam Leffler * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1414779705SSam Leffler * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1514779705SSam Leffler * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1614779705SSam Leffler * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1714779705SSam Leffler * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1814779705SSam Leffler * 1959efa8b5SSam Leffler * $FreeBSD$ 2014779705SSam Leffler */ 2114779705SSam Leffler #ifndef _ATH_AR5416_H_ 2214779705SSam Leffler #define _ATH_AR5416_H_ 2314779705SSam Leffler 2414779705SSam Leffler #include "ar5212/ar5212.h" 2514779705SSam Leffler #include "ar5416_cal.h" 267d4f72b3SRui Paulo #include "ah_eeprom_v14.h" /* for CAL_TARGET_POWER_* */ 2714779705SSam Leffler 2814779705SSam Leffler #define AR5416_MAGIC 0x20065416 2914779705SSam Leffler 3014779705SSam Leffler typedef struct { 3114779705SSam Leffler uint16_t synth_center; 3214779705SSam Leffler uint16_t ctl_center; 3314779705SSam Leffler uint16_t ext_center; 3414779705SSam Leffler } CHAN_CENTERS; 3514779705SSam Leffler 36a03467b1SAdrian Chadd typedef enum Ar5416_Rates { 37a03467b1SAdrian Chadd rate6mb, rate9mb, rate12mb, rate18mb, 38a03467b1SAdrian Chadd rate24mb, rate36mb, rate48mb, rate54mb, 39a03467b1SAdrian Chadd rate1l, rate2l, rate2s, rate5_5l, 40a03467b1SAdrian Chadd rate5_5s, rate11l, rate11s, rateXr, 41a03467b1SAdrian Chadd rateHt20_0, rateHt20_1, rateHt20_2, rateHt20_3, 42a03467b1SAdrian Chadd rateHt20_4, rateHt20_5, rateHt20_6, rateHt20_7, 43a03467b1SAdrian Chadd rateHt40_0, rateHt40_1, rateHt40_2, rateHt40_3, 44a03467b1SAdrian Chadd rateHt40_4, rateHt40_5, rateHt40_6, rateHt40_7, 45a03467b1SAdrian Chadd rateDupCck, rateDupOfdm, rateExtCck, rateExtOfdm, 46a03467b1SAdrian Chadd Ar5416RateSize 47a03467b1SAdrian Chadd } AR5416_RATES; 48a03467b1SAdrian Chadd 4914779705SSam Leffler #define AR5416_DEFAULT_RXCHAINMASK 7 5014779705SSam Leffler #define AR5416_DEFAULT_TXCHAINMASK 1 5114779705SSam Leffler #define AR5416_MAX_RATE_POWER 63 5214779705SSam Leffler #define AR5416_KEYTABLE_SIZE 128 5314779705SSam Leffler 5414779705SSam Leffler #define AR5416_CCA_MAX_GOOD_VALUE -85 5514779705SSam Leffler #define AR5416_CCA_MAX_HIGH_VALUE -62 5614779705SSam Leffler #define AR5416_CCA_MIN_BAD_VALUE -140 57f3d3bf87SRui Paulo #define AR9285_CCA_MAX_GOOD_VALUE -118 5814779705SSam Leffler 594a948799SSam Leffler #define AR5416_SPUR_RSSI_THRESH 40 604a948799SSam Leffler 61c6c9d8c8SAdrian Chadd struct ar5416NfLimits { 62c6c9d8c8SAdrian Chadd int16_t max; 63c6c9d8c8SAdrian Chadd int16_t min; 64c6c9d8c8SAdrian Chadd int16_t nominal; 65c6c9d8c8SAdrian Chadd }; 66c6c9d8c8SAdrian Chadd 6714779705SSam Leffler struct ath_hal_5416 { 6814779705SSam Leffler struct ath_hal_5212 ah_5212; 6914779705SSam Leffler 7014779705SSam Leffler /* NB: RF data setup at attach */ 7114779705SSam Leffler HAL_INI_ARRAY ah_ini_bb_rfgain; 7214779705SSam Leffler HAL_INI_ARRAY ah_ini_bank0; 7314779705SSam Leffler HAL_INI_ARRAY ah_ini_bank1; 7414779705SSam Leffler HAL_INI_ARRAY ah_ini_bank2; 7514779705SSam Leffler HAL_INI_ARRAY ah_ini_bank3; 7614779705SSam Leffler HAL_INI_ARRAY ah_ini_bank6; 7714779705SSam Leffler HAL_INI_ARRAY ah_ini_bank7; 7814779705SSam Leffler HAL_INI_ARRAY ah_ini_addac; 7944834ea4SSam Leffler HAL_INI_ARRAY ah_ini_pcieserdes; 8014779705SSam Leffler 814a948799SSam Leffler void (*ah_writeIni)(struct ath_hal *, 824a948799SSam Leffler const struct ieee80211_channel *); 834a948799SSam Leffler void (*ah_spurMitigate)(struct ath_hal *, 844a948799SSam Leffler const struct ieee80211_channel *); 854a948799SSam Leffler 86c0b9002dSAdrian Chadd /* calibration ops */ 87c0b9002dSAdrian Chadd HAL_BOOL (*ah_cal_initcal)(struct ath_hal *, 88c0b9002dSAdrian Chadd const struct ieee80211_channel *); 89c0b9002dSAdrian Chadd void (*ah_cal_pacal)(struct ath_hal *, 90c0b9002dSAdrian Chadd HAL_BOOL is_reset); 91c0b9002dSAdrian Chadd 9248c1d364SAdrian Chadd /* optional open-loop tx power control related methods */ 9348c1d364SAdrian Chadd void (*ah_olcInit)(struct ath_hal *); 9448c1d364SAdrian Chadd void (*ah_olcTempCompensation)(struct ath_hal *); 9548c1d364SAdrian Chadd 9648c1d364SAdrian Chadd /* tx power control */ 9748c1d364SAdrian Chadd HAL_BOOL (*ah_setPowerCalTable) (struct ath_hal *ah, 9848c1d364SAdrian Chadd struct ar5416eeprom *pEepData, 9948c1d364SAdrian Chadd const struct ieee80211_channel *chan, 10048c1d364SAdrian Chadd int16_t *pTxPowerIndexOffset); 10148c1d364SAdrian Chadd 102c2442d27SAdrian Chadd /* baseband operations */ 103c2442d27SAdrian Chadd void (*ah_initPLL) (struct ath_hal *ah, 104c2442d27SAdrian Chadd const struct ieee80211_channel *chan); 105c2442d27SAdrian Chadd 106e89812c3SAdrian Chadd /* bluetooth coexistence operations */ 107e89812c3SAdrian Chadd void (*ah_btCoexSetDiversity)(struct ath_hal *ah); 108e89812c3SAdrian Chadd 10914779705SSam Leffler u_int ah_globaltxtimeout; /* global tx timeout */ 11040ce4246SSam Leffler u_int ah_gpioMask; 11114779705SSam Leffler int ah_hangs; /* h/w hangs state */ 11214779705SSam Leffler uint8_t ah_keytype[AR5416_KEYTABLE_SIZE]; 11314779705SSam Leffler /* 114a1dd224bSAdrian Chadd * Primary/Extension Channel Tx, Rx, Rx Clear State 11514779705SSam Leffler */ 11614779705SSam Leffler uint32_t ah_cycleCount; 11714779705SSam Leffler uint32_t ah_ctlBusy; 11814779705SSam Leffler uint32_t ah_extBusy; 119a1dd224bSAdrian Chadd uint32_t ah_rxBusy; 120a1dd224bSAdrian Chadd uint32_t ah_txBusy; 12114779705SSam Leffler uint32_t ah_rx_chainmask; 12214779705SSam Leffler uint32_t ah_tx_chainmask; 12314779705SSam Leffler 124744996fcSAdrian Chadd HAL_ANI_CMD ah_ani_function; 125744996fcSAdrian Chadd 12614779705SSam Leffler struct ar5416PerCal ah_cal; /* periodic calibration state */ 127c6c9d8c8SAdrian Chadd 128c6c9d8c8SAdrian Chadd struct ar5416NfLimits nf_2g; 129c6c9d8c8SAdrian Chadd struct ar5416NfLimits nf_5g; 13048c1d364SAdrian Chadd 13191046e9cSAdrian Chadd /* 13291046e9cSAdrian Chadd * TX power configuration related structures 13391046e9cSAdrian Chadd */ 13448c1d364SAdrian Chadd int initPDADC; 13591046e9cSAdrian Chadd int ah_ht40PowerIncForPdadc; 13691046e9cSAdrian Chadd int16_t ah_ratesArray[Ar5416RateSize]; 137c5067868SAdrian Chadd 138c5067868SAdrian Chadd int ah_need_an_top2_fixup; /* merlin or later chips that may need this workaround */ 1396479ef78SAdrian Chadd 1406479ef78SAdrian Chadd /* 1416479ef78SAdrian Chadd * Bluetooth coexistence static setup according to the registry 1426479ef78SAdrian Chadd */ 1436479ef78SAdrian Chadd HAL_BT_MODULE ah_btModule; /* Bluetooth module identifier */ 1446479ef78SAdrian Chadd uint8_t ah_btCoexConfigType; /* BT coex configuration */ 1456479ef78SAdrian Chadd uint8_t ah_btActiveGpioSelect; /* GPIO pin for BT_ACTIVE */ 1466479ef78SAdrian Chadd uint8_t ah_btPriorityGpioSelect; /* GPIO pin for BT_PRIORITY */ 1476479ef78SAdrian Chadd uint8_t ah_wlanActiveGpioSelect; /* GPIO pin for WLAN_ACTIVE */ 1486479ef78SAdrian Chadd uint8_t ah_btActivePolarity; /* Polarity of BT_ACTIVE */ 1496479ef78SAdrian Chadd HAL_BOOL ah_btCoexSingleAnt; /* Single or dual antenna configuration */ 1506479ef78SAdrian Chadd uint8_t ah_btWlanIsolation; /* Isolation between BT and WLAN in dB */ 1516479ef78SAdrian Chadd 1526479ef78SAdrian Chadd /* 1536479ef78SAdrian Chadd * Bluetooth coexistence runtime settings 1546479ef78SAdrian Chadd */ 1556479ef78SAdrian Chadd HAL_BOOL ah_btCoexEnabled; /* If Bluetooth coexistence is enabled */ 1566479ef78SAdrian Chadd uint32_t ah_btCoexMode; /* Register setting for AR_BT_COEX_MODE */ 1576479ef78SAdrian Chadd uint32_t ah_btCoexBTWeight; /* Register setting for AR_BT_COEX_WEIGHT */ 1586479ef78SAdrian Chadd uint32_t ah_btCoexWLANWeight; /* Register setting for AR_BT_COEX_WEIGHT */ 1596479ef78SAdrian Chadd uint32_t ah_btCoexMode2; /* Register setting for AR_BT_COEX_MODE2 */ 1606479ef78SAdrian Chadd uint32_t ah_btCoexFlag; /* Special tuning flags for BT coex */ 16114779705SSam Leffler }; 16214779705SSam Leffler #define AH5416(_ah) ((struct ath_hal_5416 *)(_ah)) 16314779705SSam Leffler 16414779705SSam Leffler #define IS_5416_PCI(ah) ((AH_PRIVATE(ah)->ah_macVersion) == AR_SREV_VERSION_OWL_PCI) 16514779705SSam Leffler #define IS_5416_PCIE(ah) ((AH_PRIVATE(ah)->ah_macVersion) == AR_SREV_VERSION_OWL_PCIE) 16614779705SSam Leffler #undef IS_PCIE 16714779705SSam Leffler #define IS_PCIE(ah) (IS_5416_PCIE(ah)) 16814779705SSam Leffler 16914779705SSam Leffler extern HAL_BOOL ar2133RfAttach(struct ath_hal *, HAL_STATUS *); 17014779705SSam Leffler 17114779705SSam Leffler struct ath_hal; 17214779705SSam Leffler 1733f1c6130SSam Leffler extern uint32_t ar5416GetRadioRev(struct ath_hal *ah); 17414779705SSam Leffler extern void ar5416InitState(struct ath_hal_5416 *, uint16_t devid, 17514779705SSam Leffler HAL_SOFTC sc, HAL_BUS_TAG st, HAL_BUS_HANDLE sh, 17614779705SSam Leffler HAL_STATUS *status); 17714779705SSam Leffler extern void ar5416Detach(struct ath_hal *ah); 17844834ea4SSam Leffler extern void ar5416AttachPCIE(struct ath_hal *ah); 17914779705SSam Leffler extern HAL_BOOL ar5416FillCapabilityInfo(struct ath_hal *ah); 18014779705SSam Leffler 18114779705SSam Leffler extern void ar5416AniAttach(struct ath_hal *, const struct ar5212AniParams *, 18214779705SSam Leffler const struct ar5212AniParams *, HAL_BOOL ena); 18314779705SSam Leffler extern void ar5416AniDetach(struct ath_hal *); 18414779705SSam Leffler extern HAL_BOOL ar5416AniControl(struct ath_hal *, HAL_ANI_CMD cmd, int param); 18514779705SSam Leffler extern HAL_BOOL ar5416AniSetParams(struct ath_hal *, 18614779705SSam Leffler const struct ar5212AniParams *, const struct ar5212AniParams *); 18714779705SSam Leffler extern void ar5416ProcessMibIntr(struct ath_hal *, const HAL_NODE_STATS *); 188a108ab63SAdrian Chadd extern void ar5416RxMonitor(struct ath_hal *, const HAL_NODE_STATS *, 18959efa8b5SSam Leffler const struct ieee80211_channel *); 190a108ab63SAdrian Chadd extern void ar5416AniPoll(struct ath_hal *, const struct ieee80211_channel *); 19159efa8b5SSam Leffler extern void ar5416AniReset(struct ath_hal *, const struct ieee80211_channel *, 1921ce01724SRenato Botelho HAL_OPMODE, int); 19314779705SSam Leffler 19414779705SSam Leffler extern void ar5416SetBeaconTimers(struct ath_hal *, const HAL_BEACON_TIMERS *); 19514779705SSam Leffler extern void ar5416BeaconInit(struct ath_hal *ah, 19614779705SSam Leffler uint32_t next_beacon, uint32_t beacon_period); 19714779705SSam Leffler extern void ar5416ResetStaBeaconTimers(struct ath_hal *ah); 19814779705SSam Leffler extern void ar5416SetStaBeaconTimers(struct ath_hal *ah, 19914779705SSam Leffler const HAL_BEACON_STATE *); 200fc4de9b7SAdrian Chadd extern uint64_t ar5416GetNextTBTT(struct ath_hal *); 20114779705SSam Leffler 2026479ef78SAdrian Chadd /* ar5416_btcoex.c */ 2036479ef78SAdrian Chadd extern void ar5416SetBTCoexInfo(struct ath_hal *ah, 2046479ef78SAdrian Chadd HAL_BT_COEX_INFO *btinfo); 2056479ef78SAdrian Chadd extern void ar5416BTCoexConfig(struct ath_hal *ah, 2066479ef78SAdrian Chadd HAL_BT_COEX_CONFIG *btconf); 207e89812c3SAdrian Chadd extern void ar5416BTCoexAntennaDiversity(struct ath_hal *ah); 2086479ef78SAdrian Chadd extern void ar5416BTCoexSetQcuThresh(struct ath_hal *ah, int qnum); 2096479ef78SAdrian Chadd extern void ar5416BTCoexSetWeights(struct ath_hal *ah, uint32_t stompType); 2106479ef78SAdrian Chadd extern void ar5416BTCoexSetupBmissThresh(struct ath_hal *ah, 2116479ef78SAdrian Chadd uint32_t thresh); 2126479ef78SAdrian Chadd extern void ar5416BTCoexSetParameter(struct ath_hal *ah, uint32_t type, 2136479ef78SAdrian Chadd uint32_t value); 2146479ef78SAdrian Chadd extern void ar5416BTCoexDisable(struct ath_hal *ah); 2156479ef78SAdrian Chadd extern int ar5416BTCoexEnable(struct ath_hal *ah); 2166479ef78SAdrian Chadd extern void ar5416InitBTCoex(struct ath_hal *ah); 2176479ef78SAdrian Chadd 21814779705SSam Leffler extern HAL_BOOL ar5416EepromRead(struct ath_hal *, u_int off, uint16_t *data); 21914779705SSam Leffler extern HAL_BOOL ar5416EepromWrite(struct ath_hal *, u_int off, uint16_t data); 22014779705SSam Leffler 22114779705SSam Leffler extern HAL_BOOL ar5416IsInterruptPending(struct ath_hal *ah); 22214779705SSam Leffler extern HAL_BOOL ar5416GetPendingInterrupts(struct ath_hal *, HAL_INT *masked); 22314779705SSam Leffler extern HAL_INT ar5416SetInterrupts(struct ath_hal *ah, HAL_INT ints); 22414779705SSam Leffler 225869ff02eSSam Leffler extern HAL_BOOL ar5416GpioCfgOutput(struct ath_hal *, uint32_t gpio, 226869ff02eSSam Leffler HAL_GPIO_MUX_TYPE); 22714779705SSam Leffler extern HAL_BOOL ar5416GpioCfgInput(struct ath_hal *, uint32_t gpio); 22814779705SSam Leffler extern HAL_BOOL ar5416GpioSet(struct ath_hal *, uint32_t gpio, uint32_t val); 22914779705SSam Leffler extern uint32_t ar5416GpioGet(struct ath_hal *ah, uint32_t gpio); 23014779705SSam Leffler extern void ar5416GpioSetIntr(struct ath_hal *ah, u_int, uint32_t ilevel); 23114779705SSam Leffler 23214779705SSam Leffler extern u_int ar5416GetWirelessModes(struct ath_hal *ah); 23314779705SSam Leffler extern void ar5416SetLedState(struct ath_hal *ah, HAL_LED_STATE state); 234fc4de9b7SAdrian Chadd extern uint64_t ar5416GetTsf64(struct ath_hal *ah); 235fc4de9b7SAdrian Chadd extern void ar5416SetTsf64(struct ath_hal *ah, uint64_t tsf64); 23614779705SSam Leffler extern void ar5416ResetTsf(struct ath_hal *ah); 237a57433b9SAdrian Chadd extern uint32_t ar5416GetCurRssi(struct ath_hal *ah); 23814779705SSam Leffler extern HAL_BOOL ar5416SetAntennaSwitch(struct ath_hal *, HAL_ANT_SETTING); 23914779705SSam Leffler extern HAL_BOOL ar5416SetDecompMask(struct ath_hal *, uint16_t, int); 24014779705SSam Leffler extern void ar5416SetCoverageClass(struct ath_hal *, uint8_t, int); 241352f07f6SAdrian Chadd extern HAL_BOOL ar5416GetMibCycleCounts(struct ath_hal *ah, 242af5336e3SAdrian Chadd HAL_SURVEY_SAMPLE *hsample); 243d2a72d67SAdrian Chadd extern void ar5416SetChainMasks(struct ath_hal *ah, uint32_t, uint32_t); 24414779705SSam Leffler extern uint32_t ar5416Get11nExtBusy(struct ath_hal *ah); 24514779705SSam Leffler extern void ar5416Set11nMac2040(struct ath_hal *ah, HAL_HT_MACMODE mode); 24614779705SSam Leffler extern HAL_HT_RXCLEAR ar5416Get11nRxClear(struct ath_hal *ah); 24714779705SSam Leffler extern void ar5416Set11nRxClear(struct ath_hal *ah, HAL_HT_RXCLEAR rxclear); 24804d172dbSAdrian Chadd extern HAL_STATUS ar5416SetQuiet(struct ath_hal *ah, uint32_t period, 24904d172dbSAdrian Chadd uint32_t duration, uint32_t nextStart, HAL_QUIET_FLAG flag); 25014779705SSam Leffler extern HAL_STATUS ar5416GetCapability(struct ath_hal *ah, 25114779705SSam Leffler HAL_CAPABILITY_TYPE type, uint32_t capability, uint32_t *result); 25240ffb20dSAdrian Chadd extern HAL_BOOL ar5416SetCapability(struct ath_hal *ah, 25340ffb20dSAdrian Chadd HAL_CAPABILITY_TYPE type, uint32_t capability, uint32_t val, 25440ffb20dSAdrian Chadd HAL_STATUS *status); 25514779705SSam Leffler extern HAL_BOOL ar5416GetDiagState(struct ath_hal *ah, int request, 25614779705SSam Leffler const void *args, uint32_t argsize, 25714779705SSam Leffler void **result, uint32_t *resultsize); 258d6415a7cSAdrian Chadd extern HAL_BOOL ar5416SetRifsDelay(struct ath_hal *ah, 259d6415a7cSAdrian Chadd const struct ieee80211_channel *chan, HAL_BOOL enable); 2607b1144d2SAdrian Chadd 2612cb5233bSAdrian Chadd extern void ar5416EnableDfs(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); 26254798be0SAdrian Chadd extern HAL_BOOL ar5416GetDfsDefaultThresh(struct ath_hal *ah, 26354798be0SAdrian Chadd HAL_PHYERR_PARAM *pe); 2642cb5233bSAdrian Chadd extern void ar5416GetDfsThresh(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); 2653d423111SAdrian Chadd extern HAL_BOOL ar5416ProcessRadarEvent(struct ath_hal *ah, 2663d423111SAdrian Chadd struct ath_rx_status *rxs, uint64_t fulltsf, const char *buf, 2673d423111SAdrian Chadd HAL_DFS_EVENT *event); 26860829c48SAdrian Chadd extern HAL_BOOL ar5416IsFastClockEnabled(struct ath_hal *ah); 26914779705SSam Leffler 270973d4077SAdrian Chadd /* ar9280_spectral.c */ 271973d4077SAdrian Chadd extern void ar5416ConfigureSpectralScan(struct ath_hal *ah, HAL_SPECTRAL_PARAM *ss); 272973d4077SAdrian Chadd extern void ar5416GetSpectralParams(struct ath_hal *ah, HAL_SPECTRAL_PARAM *ss); 273973d4077SAdrian Chadd extern HAL_BOOL ar5416IsSpectralActive(struct ath_hal *ah); 274973d4077SAdrian Chadd extern HAL_BOOL ar5416IsSpectralEnabled(struct ath_hal *ah); 275973d4077SAdrian Chadd extern void ar5416StartSpectralScan(struct ath_hal *ah); 276973d4077SAdrian Chadd extern void ar5416StopSpectralScan(struct ath_hal *ah); 277973d4077SAdrian Chadd extern uint32_t ar5416GetSpectralConfig(struct ath_hal *ah); 278973d4077SAdrian Chadd extern void ar5416RestoreSpectralConfig(struct ath_hal *ah, uint32_t restoreval); 279973d4077SAdrian Chadd 28014779705SSam Leffler extern HAL_BOOL ar5416SetPowerMode(struct ath_hal *ah, HAL_POWER_MODE mode, 28114779705SSam Leffler int setChip); 28214779705SSam Leffler extern HAL_POWER_MODE ar5416GetPowerMode(struct ath_hal *ah); 28314779705SSam Leffler extern HAL_BOOL ar5416GetPowerStatus(struct ath_hal *ah); 28414779705SSam Leffler 28514779705SSam Leffler extern HAL_BOOL ar5416ResetKeyCacheEntry(struct ath_hal *ah, uint16_t entry); 28614779705SSam Leffler extern HAL_BOOL ar5416SetKeyCacheEntry(struct ath_hal *ah, uint16_t entry, 28714779705SSam Leffler const HAL_KEYVAL *k, const uint8_t *mac, int xorKey); 28814779705SSam Leffler 289f1ef788dSAdrian Chadd extern uint32_t ar5416GetRxFilter(struct ath_hal *ah); 290f1ef788dSAdrian Chadd extern void ar5416SetRxFilter(struct ath_hal *ah, uint32_t bits); 291aaaca7e7SAdrian Chadd extern HAL_BOOL ar5416StopDmaReceive(struct ath_hal *ah); 292a8083b9cSAdrian Chadd extern void ar5416StartPcuReceive(struct ath_hal *ah, HAL_BOOL); 29314779705SSam Leffler extern void ar5416StopPcuReceive(struct ath_hal *ah); 29414779705SSam Leffler extern HAL_BOOL ar5416SetupRxDesc(struct ath_hal *, 29514779705SSam Leffler struct ath_desc *, uint32_t size, u_int flags); 29614779705SSam Leffler extern HAL_STATUS ar5416ProcRxDesc(struct ath_hal *ah, struct ath_desc *, 29714779705SSam Leffler uint32_t, struct ath_desc *, uint64_t, 29814779705SSam Leffler struct ath_rx_status *); 29914779705SSam Leffler 30014779705SSam Leffler extern HAL_BOOL ar5416Reset(struct ath_hal *ah, HAL_OPMODE opmode, 30159efa8b5SSam Leffler struct ieee80211_channel *chan, 302f50e4ebfSAdrian Chadd HAL_BOOL bChannelChange, 303f50e4ebfSAdrian Chadd HAL_RESET_TYPE, 304f50e4ebfSAdrian Chadd HAL_STATUS *status); 30514779705SSam Leffler extern HAL_BOOL ar5416PhyDisable(struct ath_hal *ah); 30614779705SSam Leffler extern HAL_RFGAIN ar5416GetRfgain(struct ath_hal *ah); 30714779705SSam Leffler extern HAL_BOOL ar5416Disable(struct ath_hal *ah); 30859efa8b5SSam Leffler extern HAL_BOOL ar5416ChipReset(struct ath_hal *ah, 309*8c01c3dcSAdrian Chadd const struct ieee80211_channel *, 310*8c01c3dcSAdrian Chadd HAL_RESET_TYPE); 31148c1d364SAdrian Chadd extern int ar5416GetRegChainOffset(struct ath_hal *ah, int i); 3127d4f72b3SRui Paulo extern HAL_BOOL ar5416SetBoardValues(struct ath_hal *, 3137d4f72b3SRui Paulo const struct ieee80211_channel *); 31414779705SSam Leffler extern HAL_BOOL ar5416SetResetReg(struct ath_hal *, uint32_t type); 31514779705SSam Leffler extern HAL_BOOL ar5416SetTxPowerLimit(struct ath_hal *ah, uint32_t limit); 3167d4f72b3SRui Paulo extern HAL_BOOL ar5416SetTransmitPower(struct ath_hal *, 3177d4f72b3SRui Paulo const struct ieee80211_channel *, uint16_t *); 31814779705SSam Leffler extern HAL_BOOL ar5416GetChipPowerLimits(struct ath_hal *ah, 31959efa8b5SSam Leffler struct ieee80211_channel *chan); 32014779705SSam Leffler extern void ar5416GetChannelCenters(struct ath_hal *, 32159efa8b5SSam Leffler const struct ieee80211_channel *chan, CHAN_CENTERS *centers); 3222f399d37SAdrian Chadd extern void ar5416SetRatesArrayFromTargetPower(struct ath_hal *ah, 3232f399d37SAdrian Chadd const struct ieee80211_channel *chan, 3242f399d37SAdrian Chadd int16_t *ratesArray, 3252f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerCck, 3262f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerCckExt, 3272f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerOfdm, 3282f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerOfdmExt, 3292f399d37SAdrian Chadd const CAL_TARGET_POWER_HT *targetPowerHt20, 3302f399d37SAdrian Chadd const CAL_TARGET_POWER_HT *targetPowerHt40); 3317d4f72b3SRui Paulo extern void ar5416GetTargetPowers(struct ath_hal *ah, 3327d4f72b3SRui Paulo const struct ieee80211_channel *chan, 3337d4f72b3SRui Paulo CAL_TARGET_POWER_HT *powInfo, 3347d4f72b3SRui Paulo uint16_t numChannels, CAL_TARGET_POWER_HT *pNewPower, 3357d4f72b3SRui Paulo uint16_t numRates, HAL_BOOL isHt40Target); 3367d4f72b3SRui Paulo extern void ar5416GetTargetPowersLeg(struct ath_hal *ah, 3377d4f72b3SRui Paulo const struct ieee80211_channel *chan, 3387d4f72b3SRui Paulo CAL_TARGET_POWER_LEG *powInfo, 3397d4f72b3SRui Paulo uint16_t numChannels, CAL_TARGET_POWER_LEG *pNewPower, 3407d4f72b3SRui Paulo uint16_t numRates, HAL_BOOL isExtTarget); 34160a507a5SAdrian Chadd extern void ar5416InitChainMasks(struct ath_hal *ah); 342f68a9f06SAdrian Chadd extern void ar5416RestoreChainMask(struct ath_hal *ah); 343f6f59583SAdrian Chadd extern void ar5416EepromSetAddac(struct ath_hal *ah, 344f6f59583SAdrian Chadd const struct ieee80211_channel *chan); 34518a3a330SAdrian Chadd extern uint16_t ar5416GetMaxEdgePower(uint16_t freq, 34618a3a330SAdrian Chadd CAL_CTL_EDGES *pRdEdgesPower, HAL_BOOL is2GHz); 347c2442d27SAdrian Chadd extern void ar5416InitPLL(struct ath_hal *ah, 348c2442d27SAdrian Chadd const struct ieee80211_channel *chan); 34914779705SSam Leffler 35048c1d364SAdrian Chadd /* TX power setup related routines in ar5416_reset.c */ 35148c1d364SAdrian Chadd extern void ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah, 35248c1d364SAdrian Chadd const struct ieee80211_channel *chan, CAL_DATA_PER_FREQ *pRawDataSet, 35348c1d364SAdrian Chadd uint8_t * bChans, uint16_t availPiers, 35448c1d364SAdrian Chadd uint16_t tPdGainOverlap, int16_t *pMinCalPower, 35548c1d364SAdrian Chadd uint16_t * pPdGainBoundaries, uint8_t * pPDADCValues, 35648c1d364SAdrian Chadd uint16_t numXpdGains); 35748c1d364SAdrian Chadd extern void ar5416SetGainBoundariesClosedLoop(struct ath_hal *ah, 358b90b8dd2SAdrian Chadd int i, uint16_t pdGainOverlap_t2, 35948c1d364SAdrian Chadd uint16_t gainBoundaries[]); 36048c1d364SAdrian Chadd extern uint16_t ar5416GetXpdGainValues(struct ath_hal *ah, uint16_t xpdMask, 36148c1d364SAdrian Chadd uint16_t xpdGainValues[]); 36248c1d364SAdrian Chadd extern void ar5416WriteDetectorGainBiases(struct ath_hal *ah, 36348c1d364SAdrian Chadd uint16_t numXpdGain, uint16_t xpdGainValues[]); 364b90b8dd2SAdrian Chadd extern void ar5416WritePdadcValues(struct ath_hal *ah, int i, 36548c1d364SAdrian Chadd uint8_t pdadcValues[]); 36648c1d364SAdrian Chadd extern HAL_BOOL ar5416SetPowerCalTable(struct ath_hal *ah, 36748c1d364SAdrian Chadd struct ar5416eeprom *pEepData, const struct ieee80211_channel *chan, 36848c1d364SAdrian Chadd int16_t *pTxPowerIndexOffset); 369b998ae64SAdrian Chadd extern void ar5416WriteTxPowerRateRegisters(struct ath_hal *ah, 370b998ae64SAdrian Chadd const struct ieee80211_channel *chan, const int16_t ratesArray[]); 37148c1d364SAdrian Chadd 37214779705SSam Leffler extern HAL_BOOL ar5416StopTxDma(struct ath_hal *ah, u_int q); 37314779705SSam Leffler extern HAL_BOOL ar5416SetupTxDesc(struct ath_hal *ah, struct ath_desc *ds, 37414779705SSam Leffler u_int pktLen, u_int hdrLen, HAL_PKT_TYPE type, u_int txPower, 37514779705SSam Leffler u_int txRate0, u_int txTries0, 37614779705SSam Leffler u_int keyIx, u_int antMode, u_int flags, 37714779705SSam Leffler u_int rtsctsRate, u_int rtsctsDuration, 37814779705SSam Leffler u_int compicvLen, u_int compivLen, u_int comp); 37914779705SSam Leffler extern HAL_BOOL ar5416SetupXTxDesc(struct ath_hal *, struct ath_desc *, 38014779705SSam Leffler u_int txRate1, u_int txRetries1, 38114779705SSam Leffler u_int txRate2, u_int txRetries2, 38214779705SSam Leffler u_int txRate3, u_int txRetries3); 38314779705SSam Leffler extern HAL_BOOL ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds, 38446634305SAdrian Chadd HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, 38546634305SAdrian Chadd u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg, 38614779705SSam Leffler const struct ath_desc *ds0); 38714779705SSam Leffler extern HAL_STATUS ar5416ProcTxDesc(struct ath_hal *ah, 38814779705SSam Leffler struct ath_desc *, struct ath_tx_status *); 3899ea46744SAdrian Chadd extern HAL_BOOL ar5416GetTxCompletionRates(struct ath_hal *ah, 3909ea46744SAdrian Chadd const struct ath_desc *ds0, int *rates, int *tries); 39114779705SSam Leffler 3924bc2f08fSAdrian Chadd extern HAL_BOOL ar5416ResetTxQueue(struct ath_hal *ah, u_int q); 3934bc2f08fSAdrian Chadd extern int ar5416SetupTxQueue(struct ath_hal *ah, HAL_TX_QUEUE type, 3944bc2f08fSAdrian Chadd const HAL_TXQ_INFO *qInfo); 3954bc2f08fSAdrian Chadd 39694b61069SAdrian Chadd extern HAL_BOOL ar5416ChainTxDesc(struct ath_hal *ah, struct ath_desc *ds, 397fffbec86SAdrian Chadd HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, 39894b61069SAdrian Chadd u_int pktLen, u_int hdrLen, HAL_PKT_TYPE type, u_int keyIx, 399fffbec86SAdrian Chadd HAL_CIPHER cipher, uint8_t delims, 40033d34032SAdrian Chadd HAL_BOOL firstSeg, HAL_BOOL lastSeg, HAL_BOOL lastAggr); 40194b61069SAdrian Chadd extern HAL_BOOL ar5416SetupFirstTxDesc(struct ath_hal *ah, struct ath_desc *ds, 40294b61069SAdrian Chadd u_int aggrLen, u_int flags, u_int txPower, u_int txRate0, u_int txTries0, 40394b61069SAdrian Chadd u_int antMode, u_int rtsctsRate, u_int rtsctsDuration); 40494b61069SAdrian Chadd extern HAL_BOOL ar5416SetupLastTxDesc(struct ath_hal *ah, struct ath_desc *ds, 40594b61069SAdrian Chadd const struct ath_desc *ds0); 40694b61069SAdrian Chadd extern HAL_BOOL ar5416SetGlobalTxTimeout(struct ath_hal *ah, u_int tu); 40794b61069SAdrian Chadd extern u_int ar5416GetGlobalTxTimeout(struct ath_hal *ah); 40894b61069SAdrian Chadd extern void ar5416Set11nRateScenario(struct ath_hal *ah, struct ath_desc *ds, 40994b61069SAdrian Chadd u_int durUpdateEn, u_int rtsctsRate, HAL_11N_RATE_SERIES series[], 4107c913deaSAdrian Chadd u_int nseries, u_int flags); 4115916ef68SAdrian Chadd 4125916ef68SAdrian Chadd extern void ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, 413f74b406dSAdrian Chadd u_int aggrLen, u_int numDelims); 41494b61069SAdrian Chadd extern void ar5416Set11nAggrMiddle(struct ath_hal *ah, struct ath_desc *ds, u_int numDelims); 4155916ef68SAdrian Chadd extern void ar5416Set11nAggrLast(struct ath_hal *ah, struct ath_desc *ds); 41694b61069SAdrian Chadd extern void ar5416Clr11nAggr(struct ath_hal *ah, struct ath_desc *ds); 417bdb9fa5cSAdrian Chadd extern void ar5416Set11nVirtualMoreFrag(struct ath_hal *ah, 418bdb9fa5cSAdrian Chadd struct ath_desc *ds, u_int vmf); 4195916ef68SAdrian Chadd 42094b61069SAdrian Chadd extern void ar5416Set11nBurstDuration(struct ath_hal *ah, struct ath_desc *ds, u_int burstDuration); 42194b61069SAdrian Chadd 42214779705SSam Leffler extern const HAL_RATE_TABLE *ar5416GetRateTable(struct ath_hal *, u_int mode); 42314779705SSam Leffler #endif /* _ATH_AR5416_H_ */ 424