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 */ 1914779705SSam Leffler #ifndef _ATH_AR5416_H_ 2014779705SSam Leffler #define _ATH_AR5416_H_ 2114779705SSam Leffler 2214779705SSam Leffler #include "ar5212/ar5212.h" 2314779705SSam Leffler #include "ar5416_cal.h" 247d4f72b3SRui Paulo #include "ah_eeprom_v14.h" /* for CAL_TARGET_POWER_* */ 2514779705SSam Leffler 2614779705SSam Leffler #define AR5416_MAGIC 0x20065416 2714779705SSam Leffler 2814779705SSam Leffler typedef struct { 2914779705SSam Leffler uint16_t synth_center; 3014779705SSam Leffler uint16_t ctl_center; 3114779705SSam Leffler uint16_t ext_center; 3214779705SSam Leffler } CHAN_CENTERS; 3314779705SSam Leffler 34a03467b1SAdrian Chadd typedef enum Ar5416_Rates { 35a03467b1SAdrian Chadd rate6mb, rate9mb, rate12mb, rate18mb, 36a03467b1SAdrian Chadd rate24mb, rate36mb, rate48mb, rate54mb, 37a03467b1SAdrian Chadd rate1l, rate2l, rate2s, rate5_5l, 38a03467b1SAdrian Chadd rate5_5s, rate11l, rate11s, rateXr, 39a03467b1SAdrian Chadd rateHt20_0, rateHt20_1, rateHt20_2, rateHt20_3, 40a03467b1SAdrian Chadd rateHt20_4, rateHt20_5, rateHt20_6, rateHt20_7, 41a03467b1SAdrian Chadd rateHt40_0, rateHt40_1, rateHt40_2, rateHt40_3, 42a03467b1SAdrian Chadd rateHt40_4, rateHt40_5, rateHt40_6, rateHt40_7, 43a03467b1SAdrian Chadd rateDupCck, rateDupOfdm, rateExtCck, rateExtOfdm, 44a03467b1SAdrian Chadd Ar5416RateSize 45a03467b1SAdrian Chadd } AR5416_RATES; 46a03467b1SAdrian Chadd 4714779705SSam Leffler #define AR5416_DEFAULT_RXCHAINMASK 7 4814779705SSam Leffler #define AR5416_DEFAULT_TXCHAINMASK 1 4914779705SSam Leffler #define AR5416_MAX_RATE_POWER 63 5014779705SSam Leffler #define AR5416_KEYTABLE_SIZE 128 5114779705SSam Leffler 5214779705SSam Leffler #define AR5416_CCA_MAX_GOOD_VALUE -85 5314779705SSam Leffler #define AR5416_CCA_MAX_HIGH_VALUE -62 5414779705SSam Leffler #define AR5416_CCA_MIN_BAD_VALUE -140 55f3d3bf87SRui Paulo #define AR9285_CCA_MAX_GOOD_VALUE -118 5614779705SSam Leffler 574a948799SSam Leffler #define AR5416_SPUR_RSSI_THRESH 40 584a948799SSam Leffler 59c6c9d8c8SAdrian Chadd struct ar5416NfLimits { 60c6c9d8c8SAdrian Chadd int16_t max; 61c6c9d8c8SAdrian Chadd int16_t min; 62c6c9d8c8SAdrian Chadd int16_t nominal; 63c6c9d8c8SAdrian Chadd }; 64c6c9d8c8SAdrian Chadd 6514779705SSam Leffler struct ath_hal_5416 { 6614779705SSam Leffler struct ath_hal_5212 ah_5212; 6714779705SSam Leffler 6814779705SSam Leffler /* NB: RF data setup at attach */ 6914779705SSam Leffler HAL_INI_ARRAY ah_ini_bb_rfgain; 7014779705SSam Leffler HAL_INI_ARRAY ah_ini_bank0; 7114779705SSam Leffler HAL_INI_ARRAY ah_ini_bank1; 7214779705SSam Leffler HAL_INI_ARRAY ah_ini_bank2; 7314779705SSam Leffler HAL_INI_ARRAY ah_ini_bank3; 7414779705SSam Leffler HAL_INI_ARRAY ah_ini_bank6; 7514779705SSam Leffler HAL_INI_ARRAY ah_ini_bank7; 7614779705SSam Leffler HAL_INI_ARRAY ah_ini_addac; 7744834ea4SSam Leffler HAL_INI_ARRAY ah_ini_pcieserdes; 7814779705SSam Leffler 794a948799SSam Leffler void (*ah_writeIni)(struct ath_hal *, 804a948799SSam Leffler const struct ieee80211_channel *); 814a948799SSam Leffler void (*ah_spurMitigate)(struct ath_hal *, 824a948799SSam Leffler const struct ieee80211_channel *); 834a948799SSam Leffler 84c0b9002dSAdrian Chadd /* calibration ops */ 85c0b9002dSAdrian Chadd HAL_BOOL (*ah_cal_initcal)(struct ath_hal *, 86c0b9002dSAdrian Chadd const struct ieee80211_channel *); 87c0b9002dSAdrian Chadd void (*ah_cal_pacal)(struct ath_hal *, 88c0b9002dSAdrian Chadd HAL_BOOL is_reset); 89c0b9002dSAdrian Chadd 9048c1d364SAdrian Chadd /* optional open-loop tx power control related methods */ 9148c1d364SAdrian Chadd void (*ah_olcInit)(struct ath_hal *); 9248c1d364SAdrian Chadd void (*ah_olcTempCompensation)(struct ath_hal *); 9348c1d364SAdrian Chadd 9448c1d364SAdrian Chadd /* tx power control */ 9548c1d364SAdrian Chadd HAL_BOOL (*ah_setPowerCalTable) (struct ath_hal *ah, 9648c1d364SAdrian Chadd struct ar5416eeprom *pEepData, 9748c1d364SAdrian Chadd const struct ieee80211_channel *chan, 9848c1d364SAdrian Chadd int16_t *pTxPowerIndexOffset); 9948c1d364SAdrian Chadd 100c2442d27SAdrian Chadd /* baseband operations */ 101c2442d27SAdrian Chadd void (*ah_initPLL) (struct ath_hal *ah, 102c2442d27SAdrian Chadd const struct ieee80211_channel *chan); 103c2442d27SAdrian Chadd 104e89812c3SAdrian Chadd /* bluetooth coexistence operations */ 105e89812c3SAdrian Chadd void (*ah_btCoexSetDiversity)(struct ath_hal *ah); 106e89812c3SAdrian Chadd 10714779705SSam Leffler u_int ah_globaltxtimeout; /* global tx timeout */ 10840ce4246SSam Leffler u_int ah_gpioMask; 10914779705SSam Leffler int ah_hangs; /* h/w hangs state */ 11014779705SSam Leffler uint8_t ah_keytype[AR5416_KEYTABLE_SIZE]; 11114779705SSam Leffler /* 112a1dd224bSAdrian Chadd * Primary/Extension Channel Tx, Rx, Rx Clear State 11314779705SSam Leffler */ 11414779705SSam Leffler uint32_t ah_cycleCount; 11514779705SSam Leffler uint32_t ah_ctlBusy; 11614779705SSam Leffler uint32_t ah_extBusy; 117a1dd224bSAdrian Chadd uint32_t ah_rxBusy; 118a1dd224bSAdrian Chadd uint32_t ah_txBusy; 11914779705SSam Leffler uint32_t ah_rx_chainmask; 12014779705SSam Leffler uint32_t ah_tx_chainmask; 12114779705SSam Leffler 122744996fcSAdrian Chadd HAL_ANI_CMD ah_ani_function; 123744996fcSAdrian Chadd 12414779705SSam Leffler struct ar5416PerCal ah_cal; /* periodic calibration state */ 125c6c9d8c8SAdrian Chadd 126c6c9d8c8SAdrian Chadd struct ar5416NfLimits nf_2g; 127c6c9d8c8SAdrian Chadd struct ar5416NfLimits nf_5g; 12848c1d364SAdrian Chadd 12991046e9cSAdrian Chadd /* 13091046e9cSAdrian Chadd * TX power configuration related structures 13191046e9cSAdrian Chadd */ 13248c1d364SAdrian Chadd int initPDADC; 13391046e9cSAdrian Chadd int ah_ht40PowerIncForPdadc; 13491046e9cSAdrian Chadd int16_t ah_ratesArray[Ar5416RateSize]; 135c5067868SAdrian Chadd 136c5067868SAdrian Chadd int ah_need_an_top2_fixup; /* merlin or later chips that may need this workaround */ 1376479ef78SAdrian Chadd 1386479ef78SAdrian Chadd /* 1396479ef78SAdrian Chadd * Bluetooth coexistence static setup according to the registry 1406479ef78SAdrian Chadd */ 1416479ef78SAdrian Chadd HAL_BT_MODULE ah_btModule; /* Bluetooth module identifier */ 1426479ef78SAdrian Chadd uint8_t ah_btCoexConfigType; /* BT coex configuration */ 1436479ef78SAdrian Chadd uint8_t ah_btActiveGpioSelect; /* GPIO pin for BT_ACTIVE */ 1446479ef78SAdrian Chadd uint8_t ah_btPriorityGpioSelect; /* GPIO pin for BT_PRIORITY */ 1456479ef78SAdrian Chadd uint8_t ah_wlanActiveGpioSelect; /* GPIO pin for WLAN_ACTIVE */ 1466479ef78SAdrian Chadd uint8_t ah_btActivePolarity; /* Polarity of BT_ACTIVE */ 1476479ef78SAdrian Chadd HAL_BOOL ah_btCoexSingleAnt; /* Single or dual antenna configuration */ 1486479ef78SAdrian Chadd uint8_t ah_btWlanIsolation; /* Isolation between BT and WLAN in dB */ 1496479ef78SAdrian Chadd 1506479ef78SAdrian Chadd /* 1516479ef78SAdrian Chadd * Bluetooth coexistence runtime settings 1526479ef78SAdrian Chadd */ 1536479ef78SAdrian Chadd HAL_BOOL ah_btCoexEnabled; /* If Bluetooth coexistence is enabled */ 1546479ef78SAdrian Chadd uint32_t ah_btCoexMode; /* Register setting for AR_BT_COEX_MODE */ 1556479ef78SAdrian Chadd uint32_t ah_btCoexBTWeight; /* Register setting for AR_BT_COEX_WEIGHT */ 1566479ef78SAdrian Chadd uint32_t ah_btCoexWLANWeight; /* Register setting for AR_BT_COEX_WEIGHT */ 1576479ef78SAdrian Chadd uint32_t ah_btCoexMode2; /* Register setting for AR_BT_COEX_MODE2 */ 1586479ef78SAdrian Chadd uint32_t ah_btCoexFlag; /* Special tuning flags for BT coex */ 15914779705SSam Leffler }; 16014779705SSam Leffler #define AH5416(_ah) ((struct ath_hal_5416 *)(_ah)) 16114779705SSam Leffler 16214779705SSam Leffler #define IS_5416_PCI(ah) ((AH_PRIVATE(ah)->ah_macVersion) == AR_SREV_VERSION_OWL_PCI) 16314779705SSam Leffler #define IS_5416_PCIE(ah) ((AH_PRIVATE(ah)->ah_macVersion) == AR_SREV_VERSION_OWL_PCIE) 16414779705SSam Leffler #undef IS_PCIE 16514779705SSam Leffler #define IS_PCIE(ah) (IS_5416_PCIE(ah)) 16614779705SSam Leffler 16714779705SSam Leffler extern HAL_BOOL ar2133RfAttach(struct ath_hal *, HAL_STATUS *); 16814779705SSam Leffler 16914779705SSam Leffler struct ath_hal; 17014779705SSam Leffler 1713f1c6130SSam Leffler extern uint32_t ar5416GetRadioRev(struct ath_hal *ah); 17214779705SSam Leffler extern void ar5416InitState(struct ath_hal_5416 *, uint16_t devid, 17314779705SSam Leffler HAL_SOFTC sc, HAL_BUS_TAG st, HAL_BUS_HANDLE sh, 17414779705SSam Leffler HAL_STATUS *status); 17514779705SSam Leffler extern void ar5416Detach(struct ath_hal *ah); 17644834ea4SSam Leffler extern void ar5416AttachPCIE(struct ath_hal *ah); 17714779705SSam Leffler extern HAL_BOOL ar5416FillCapabilityInfo(struct ath_hal *ah); 17814779705SSam Leffler 17914779705SSam Leffler extern void ar5416AniAttach(struct ath_hal *, const struct ar5212AniParams *, 18014779705SSam Leffler const struct ar5212AniParams *, HAL_BOOL ena); 18114779705SSam Leffler extern void ar5416AniDetach(struct ath_hal *); 18214779705SSam Leffler extern HAL_BOOL ar5416AniControl(struct ath_hal *, HAL_ANI_CMD cmd, int param); 18314779705SSam Leffler extern HAL_BOOL ar5416AniSetParams(struct ath_hal *, 18414779705SSam Leffler const struct ar5212AniParams *, const struct ar5212AniParams *); 18514779705SSam Leffler extern void ar5416ProcessMibIntr(struct ath_hal *, const HAL_NODE_STATS *); 186a108ab63SAdrian Chadd extern void ar5416RxMonitor(struct ath_hal *, const HAL_NODE_STATS *, 18759efa8b5SSam Leffler const struct ieee80211_channel *); 188a108ab63SAdrian Chadd extern void ar5416AniPoll(struct ath_hal *, const struct ieee80211_channel *); 18959efa8b5SSam Leffler extern void ar5416AniReset(struct ath_hal *, const struct ieee80211_channel *, 1901ce01724SRenato Botelho HAL_OPMODE, int); 19114779705SSam Leffler 19214779705SSam Leffler extern void ar5416SetBeaconTimers(struct ath_hal *, const HAL_BEACON_TIMERS *); 19314779705SSam Leffler extern void ar5416BeaconInit(struct ath_hal *ah, 19414779705SSam Leffler uint32_t next_beacon, uint32_t beacon_period); 19514779705SSam Leffler extern void ar5416ResetStaBeaconTimers(struct ath_hal *ah); 19614779705SSam Leffler extern void ar5416SetStaBeaconTimers(struct ath_hal *ah, 19714779705SSam Leffler const HAL_BEACON_STATE *); 198fc4de9b7SAdrian Chadd extern uint64_t ar5416GetNextTBTT(struct ath_hal *); 19914779705SSam Leffler 2006479ef78SAdrian Chadd /* ar5416_btcoex.c */ 2016479ef78SAdrian Chadd extern void ar5416SetBTCoexInfo(struct ath_hal *ah, 2026479ef78SAdrian Chadd HAL_BT_COEX_INFO *btinfo); 2036479ef78SAdrian Chadd extern void ar5416BTCoexConfig(struct ath_hal *ah, 2046479ef78SAdrian Chadd HAL_BT_COEX_CONFIG *btconf); 205e89812c3SAdrian Chadd extern void ar5416BTCoexAntennaDiversity(struct ath_hal *ah); 2066479ef78SAdrian Chadd extern void ar5416BTCoexSetQcuThresh(struct ath_hal *ah, int qnum); 2076479ef78SAdrian Chadd extern void ar5416BTCoexSetWeights(struct ath_hal *ah, uint32_t stompType); 2086479ef78SAdrian Chadd extern void ar5416BTCoexSetupBmissThresh(struct ath_hal *ah, 2096479ef78SAdrian Chadd uint32_t thresh); 2106479ef78SAdrian Chadd extern void ar5416BTCoexSetParameter(struct ath_hal *ah, uint32_t type, 2116479ef78SAdrian Chadd uint32_t value); 2126479ef78SAdrian Chadd extern void ar5416BTCoexDisable(struct ath_hal *ah); 2136479ef78SAdrian Chadd extern int ar5416BTCoexEnable(struct ath_hal *ah); 2146479ef78SAdrian Chadd extern void ar5416InitBTCoex(struct ath_hal *ah); 2156479ef78SAdrian Chadd 21614779705SSam Leffler extern HAL_BOOL ar5416EepromRead(struct ath_hal *, u_int off, uint16_t *data); 21714779705SSam Leffler extern HAL_BOOL ar5416EepromWrite(struct ath_hal *, u_int off, uint16_t data); 21814779705SSam Leffler 21914779705SSam Leffler extern HAL_BOOL ar5416IsInterruptPending(struct ath_hal *ah); 22014779705SSam Leffler extern HAL_BOOL ar5416GetPendingInterrupts(struct ath_hal *, HAL_INT *masked); 22114779705SSam Leffler extern HAL_INT ar5416SetInterrupts(struct ath_hal *ah, HAL_INT ints); 22214779705SSam Leffler 223869ff02eSSam Leffler extern HAL_BOOL ar5416GpioCfgOutput(struct ath_hal *, uint32_t gpio, 224869ff02eSSam Leffler HAL_GPIO_MUX_TYPE); 22514779705SSam Leffler extern HAL_BOOL ar5416GpioCfgInput(struct ath_hal *, uint32_t gpio); 22614779705SSam Leffler extern HAL_BOOL ar5416GpioSet(struct ath_hal *, uint32_t gpio, uint32_t val); 22714779705SSam Leffler extern uint32_t ar5416GpioGet(struct ath_hal *ah, uint32_t gpio); 22814779705SSam Leffler extern void ar5416GpioSetIntr(struct ath_hal *ah, u_int, uint32_t ilevel); 22914779705SSam Leffler 23014779705SSam Leffler extern u_int ar5416GetWirelessModes(struct ath_hal *ah); 23114779705SSam Leffler extern void ar5416SetLedState(struct ath_hal *ah, HAL_LED_STATE state); 232fc4de9b7SAdrian Chadd extern uint64_t ar5416GetTsf64(struct ath_hal *ah); 233fc4de9b7SAdrian Chadd extern void ar5416SetTsf64(struct ath_hal *ah, uint64_t tsf64); 23414779705SSam Leffler extern void ar5416ResetTsf(struct ath_hal *ah); 235a57433b9SAdrian Chadd extern uint32_t ar5416GetCurRssi(struct ath_hal *ah); 23614779705SSam Leffler extern HAL_BOOL ar5416SetAntennaSwitch(struct ath_hal *, HAL_ANT_SETTING); 23714779705SSam Leffler extern HAL_BOOL ar5416SetDecompMask(struct ath_hal *, uint16_t, int); 23814779705SSam Leffler extern void ar5416SetCoverageClass(struct ath_hal *, uint8_t, int); 239352f07f6SAdrian Chadd extern HAL_BOOL ar5416GetMibCycleCounts(struct ath_hal *ah, 240af5336e3SAdrian Chadd HAL_SURVEY_SAMPLE *hsample); 241d2a72d67SAdrian Chadd extern void ar5416SetChainMasks(struct ath_hal *ah, uint32_t, uint32_t); 24214779705SSam Leffler extern uint32_t ar5416Get11nExtBusy(struct ath_hal *ah); 24314779705SSam Leffler extern void ar5416Set11nMac2040(struct ath_hal *ah, HAL_HT_MACMODE mode); 24414779705SSam Leffler extern HAL_HT_RXCLEAR ar5416Get11nRxClear(struct ath_hal *ah); 24514779705SSam Leffler extern void ar5416Set11nRxClear(struct ath_hal *ah, HAL_HT_RXCLEAR rxclear); 24604d172dbSAdrian Chadd extern HAL_STATUS ar5416SetQuiet(struct ath_hal *ah, uint32_t period, 24704d172dbSAdrian Chadd uint32_t duration, uint32_t nextStart, HAL_QUIET_FLAG flag); 24814779705SSam Leffler extern HAL_STATUS ar5416GetCapability(struct ath_hal *ah, 24914779705SSam Leffler HAL_CAPABILITY_TYPE type, uint32_t capability, uint32_t *result); 25040ffb20dSAdrian Chadd extern HAL_BOOL ar5416SetCapability(struct ath_hal *ah, 25140ffb20dSAdrian Chadd HAL_CAPABILITY_TYPE type, uint32_t capability, uint32_t val, 25240ffb20dSAdrian Chadd HAL_STATUS *status); 25314779705SSam Leffler extern HAL_BOOL ar5416GetDiagState(struct ath_hal *ah, int request, 25414779705SSam Leffler const void *args, uint32_t argsize, 25514779705SSam Leffler void **result, uint32_t *resultsize); 256d6415a7cSAdrian Chadd extern HAL_BOOL ar5416SetRifsDelay(struct ath_hal *ah, 257d6415a7cSAdrian Chadd const struct ieee80211_channel *chan, HAL_BOOL enable); 2587b1144d2SAdrian Chadd 2592cb5233bSAdrian Chadd extern void ar5416EnableDfs(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); 26054798be0SAdrian Chadd extern HAL_BOOL ar5416GetDfsDefaultThresh(struct ath_hal *ah, 26154798be0SAdrian Chadd HAL_PHYERR_PARAM *pe); 2622cb5233bSAdrian Chadd extern void ar5416GetDfsThresh(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); 2633d423111SAdrian Chadd extern HAL_BOOL ar5416ProcessRadarEvent(struct ath_hal *ah, 2643d423111SAdrian Chadd struct ath_rx_status *rxs, uint64_t fulltsf, const char *buf, 2653d423111SAdrian Chadd HAL_DFS_EVENT *event); 26660829c48SAdrian Chadd extern HAL_BOOL ar5416IsFastClockEnabled(struct ath_hal *ah); 26714779705SSam Leffler 268973d4077SAdrian Chadd /* ar9280_spectral.c */ 269973d4077SAdrian Chadd extern void ar5416ConfigureSpectralScan(struct ath_hal *ah, HAL_SPECTRAL_PARAM *ss); 270973d4077SAdrian Chadd extern void ar5416GetSpectralParams(struct ath_hal *ah, HAL_SPECTRAL_PARAM *ss); 271973d4077SAdrian Chadd extern HAL_BOOL ar5416IsSpectralActive(struct ath_hal *ah); 272973d4077SAdrian Chadd extern HAL_BOOL ar5416IsSpectralEnabled(struct ath_hal *ah); 273973d4077SAdrian Chadd extern void ar5416StartSpectralScan(struct ath_hal *ah); 274973d4077SAdrian Chadd extern void ar5416StopSpectralScan(struct ath_hal *ah); 275973d4077SAdrian Chadd extern uint32_t ar5416GetSpectralConfig(struct ath_hal *ah); 276973d4077SAdrian Chadd extern void ar5416RestoreSpectralConfig(struct ath_hal *ah, uint32_t restoreval); 277973d4077SAdrian Chadd 27814779705SSam Leffler extern HAL_BOOL ar5416SetPowerMode(struct ath_hal *ah, HAL_POWER_MODE mode, 27914779705SSam Leffler int setChip); 28014779705SSam Leffler extern HAL_POWER_MODE ar5416GetPowerMode(struct ath_hal *ah); 28114779705SSam Leffler extern HAL_BOOL ar5416GetPowerStatus(struct ath_hal *ah); 28214779705SSam Leffler 28314779705SSam Leffler extern HAL_BOOL ar5416ResetKeyCacheEntry(struct ath_hal *ah, uint16_t entry); 28414779705SSam Leffler extern HAL_BOOL ar5416SetKeyCacheEntry(struct ath_hal *ah, uint16_t entry, 28514779705SSam Leffler const HAL_KEYVAL *k, const uint8_t *mac, int xorKey); 28614779705SSam Leffler 287f1ef788dSAdrian Chadd extern uint32_t ar5416GetRxFilter(struct ath_hal *ah); 288f1ef788dSAdrian Chadd extern void ar5416SetRxFilter(struct ath_hal *ah, uint32_t bits); 289aaaca7e7SAdrian Chadd extern HAL_BOOL ar5416StopDmaReceive(struct ath_hal *ah); 290a8083b9cSAdrian Chadd extern void ar5416StartPcuReceive(struct ath_hal *ah, HAL_BOOL); 29114779705SSam Leffler extern void ar5416StopPcuReceive(struct ath_hal *ah); 29214779705SSam Leffler extern HAL_BOOL ar5416SetupRxDesc(struct ath_hal *, 29314779705SSam Leffler struct ath_desc *, uint32_t size, u_int flags); 29414779705SSam Leffler extern HAL_STATUS ar5416ProcRxDesc(struct ath_hal *ah, struct ath_desc *, 29514779705SSam Leffler uint32_t, struct ath_desc *, uint64_t, 29614779705SSam Leffler struct ath_rx_status *); 29714779705SSam Leffler 29814779705SSam Leffler extern HAL_BOOL ar5416Reset(struct ath_hal *ah, HAL_OPMODE opmode, 29959efa8b5SSam Leffler struct ieee80211_channel *chan, 300f50e4ebfSAdrian Chadd HAL_BOOL bChannelChange, 301f50e4ebfSAdrian Chadd HAL_RESET_TYPE, 302f50e4ebfSAdrian Chadd HAL_STATUS *status); 30314779705SSam Leffler extern HAL_BOOL ar5416PhyDisable(struct ath_hal *ah); 30414779705SSam Leffler extern HAL_RFGAIN ar5416GetRfgain(struct ath_hal *ah); 30514779705SSam Leffler extern HAL_BOOL ar5416Disable(struct ath_hal *ah); 30659efa8b5SSam Leffler extern HAL_BOOL ar5416ChipReset(struct ath_hal *ah, 307*8c01c3dcSAdrian Chadd const struct ieee80211_channel *, 308*8c01c3dcSAdrian Chadd HAL_RESET_TYPE); 30948c1d364SAdrian Chadd extern int ar5416GetRegChainOffset(struct ath_hal *ah, int i); 3107d4f72b3SRui Paulo extern HAL_BOOL ar5416SetBoardValues(struct ath_hal *, 3117d4f72b3SRui Paulo const struct ieee80211_channel *); 31214779705SSam Leffler extern HAL_BOOL ar5416SetResetReg(struct ath_hal *, uint32_t type); 31314779705SSam Leffler extern HAL_BOOL ar5416SetTxPowerLimit(struct ath_hal *ah, uint32_t limit); 3147d4f72b3SRui Paulo extern HAL_BOOL ar5416SetTransmitPower(struct ath_hal *, 3157d4f72b3SRui Paulo const struct ieee80211_channel *, uint16_t *); 31614779705SSam Leffler extern HAL_BOOL ar5416GetChipPowerLimits(struct ath_hal *ah, 31759efa8b5SSam Leffler struct ieee80211_channel *chan); 31814779705SSam Leffler extern void ar5416GetChannelCenters(struct ath_hal *, 31959efa8b5SSam Leffler const struct ieee80211_channel *chan, CHAN_CENTERS *centers); 3202f399d37SAdrian Chadd extern void ar5416SetRatesArrayFromTargetPower(struct ath_hal *ah, 3212f399d37SAdrian Chadd const struct ieee80211_channel *chan, 3222f399d37SAdrian Chadd int16_t *ratesArray, 3232f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerCck, 3242f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerCckExt, 3252f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerOfdm, 3262f399d37SAdrian Chadd const CAL_TARGET_POWER_LEG *targetPowerOfdmExt, 3272f399d37SAdrian Chadd const CAL_TARGET_POWER_HT *targetPowerHt20, 3282f399d37SAdrian Chadd const CAL_TARGET_POWER_HT *targetPowerHt40); 3297d4f72b3SRui Paulo extern void ar5416GetTargetPowers(struct ath_hal *ah, 3307d4f72b3SRui Paulo const struct ieee80211_channel *chan, 3317d4f72b3SRui Paulo CAL_TARGET_POWER_HT *powInfo, 3327d4f72b3SRui Paulo uint16_t numChannels, CAL_TARGET_POWER_HT *pNewPower, 3337d4f72b3SRui Paulo uint16_t numRates, HAL_BOOL isHt40Target); 3347d4f72b3SRui Paulo extern void ar5416GetTargetPowersLeg(struct ath_hal *ah, 3357d4f72b3SRui Paulo const struct ieee80211_channel *chan, 3367d4f72b3SRui Paulo CAL_TARGET_POWER_LEG *powInfo, 3377d4f72b3SRui Paulo uint16_t numChannels, CAL_TARGET_POWER_LEG *pNewPower, 3387d4f72b3SRui Paulo uint16_t numRates, HAL_BOOL isExtTarget); 33960a507a5SAdrian Chadd extern void ar5416InitChainMasks(struct ath_hal *ah); 340f68a9f06SAdrian Chadd extern void ar5416RestoreChainMask(struct ath_hal *ah); 341f6f59583SAdrian Chadd extern void ar5416EepromSetAddac(struct ath_hal *ah, 342f6f59583SAdrian Chadd const struct ieee80211_channel *chan); 34318a3a330SAdrian Chadd extern uint16_t ar5416GetMaxEdgePower(uint16_t freq, 34418a3a330SAdrian Chadd CAL_CTL_EDGES *pRdEdgesPower, HAL_BOOL is2GHz); 345c2442d27SAdrian Chadd extern void ar5416InitPLL(struct ath_hal *ah, 346c2442d27SAdrian Chadd const struct ieee80211_channel *chan); 34714779705SSam Leffler 34848c1d364SAdrian Chadd /* TX power setup related routines in ar5416_reset.c */ 34948c1d364SAdrian Chadd extern void ar5416GetGainBoundariesAndPdadcs(struct ath_hal *ah, 35048c1d364SAdrian Chadd const struct ieee80211_channel *chan, CAL_DATA_PER_FREQ *pRawDataSet, 35148c1d364SAdrian Chadd uint8_t * bChans, uint16_t availPiers, 35248c1d364SAdrian Chadd uint16_t tPdGainOverlap, int16_t *pMinCalPower, 35348c1d364SAdrian Chadd uint16_t * pPdGainBoundaries, uint8_t * pPDADCValues, 35448c1d364SAdrian Chadd uint16_t numXpdGains); 35548c1d364SAdrian Chadd extern void ar5416SetGainBoundariesClosedLoop(struct ath_hal *ah, 356b90b8dd2SAdrian Chadd int i, uint16_t pdGainOverlap_t2, 35748c1d364SAdrian Chadd uint16_t gainBoundaries[]); 35848c1d364SAdrian Chadd extern uint16_t ar5416GetXpdGainValues(struct ath_hal *ah, uint16_t xpdMask, 35948c1d364SAdrian Chadd uint16_t xpdGainValues[]); 36048c1d364SAdrian Chadd extern void ar5416WriteDetectorGainBiases(struct ath_hal *ah, 36148c1d364SAdrian Chadd uint16_t numXpdGain, uint16_t xpdGainValues[]); 362b90b8dd2SAdrian Chadd extern void ar5416WritePdadcValues(struct ath_hal *ah, int i, 36348c1d364SAdrian Chadd uint8_t pdadcValues[]); 36448c1d364SAdrian Chadd extern HAL_BOOL ar5416SetPowerCalTable(struct ath_hal *ah, 36548c1d364SAdrian Chadd struct ar5416eeprom *pEepData, const struct ieee80211_channel *chan, 36648c1d364SAdrian Chadd int16_t *pTxPowerIndexOffset); 367b998ae64SAdrian Chadd extern void ar5416WriteTxPowerRateRegisters(struct ath_hal *ah, 368b998ae64SAdrian Chadd const struct ieee80211_channel *chan, const int16_t ratesArray[]); 36948c1d364SAdrian Chadd 37014779705SSam Leffler extern HAL_BOOL ar5416StopTxDma(struct ath_hal *ah, u_int q); 37114779705SSam Leffler extern HAL_BOOL ar5416SetupTxDesc(struct ath_hal *ah, struct ath_desc *ds, 37214779705SSam Leffler u_int pktLen, u_int hdrLen, HAL_PKT_TYPE type, u_int txPower, 37314779705SSam Leffler u_int txRate0, u_int txTries0, 37414779705SSam Leffler u_int keyIx, u_int antMode, u_int flags, 37514779705SSam Leffler u_int rtsctsRate, u_int rtsctsDuration, 37614779705SSam Leffler u_int compicvLen, u_int compivLen, u_int comp); 37714779705SSam Leffler extern HAL_BOOL ar5416SetupXTxDesc(struct ath_hal *, struct ath_desc *, 37814779705SSam Leffler u_int txRate1, u_int txRetries1, 37914779705SSam Leffler u_int txRate2, u_int txRetries2, 38014779705SSam Leffler u_int txRate3, u_int txRetries3); 38114779705SSam Leffler extern HAL_BOOL ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds, 38246634305SAdrian Chadd HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, 38346634305SAdrian Chadd u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg, 38414779705SSam Leffler const struct ath_desc *ds0); 38514779705SSam Leffler extern HAL_STATUS ar5416ProcTxDesc(struct ath_hal *ah, 38614779705SSam Leffler struct ath_desc *, struct ath_tx_status *); 3879ea46744SAdrian Chadd extern HAL_BOOL ar5416GetTxCompletionRates(struct ath_hal *ah, 3889ea46744SAdrian Chadd const struct ath_desc *ds0, int *rates, int *tries); 38914779705SSam Leffler 3904bc2f08fSAdrian Chadd extern HAL_BOOL ar5416ResetTxQueue(struct ath_hal *ah, u_int q); 3914bc2f08fSAdrian Chadd extern int ar5416SetupTxQueue(struct ath_hal *ah, HAL_TX_QUEUE type, 3924bc2f08fSAdrian Chadd const HAL_TXQ_INFO *qInfo); 3934bc2f08fSAdrian Chadd 39494b61069SAdrian Chadd extern HAL_BOOL ar5416ChainTxDesc(struct ath_hal *ah, struct ath_desc *ds, 395fffbec86SAdrian Chadd HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, 39694b61069SAdrian Chadd u_int pktLen, u_int hdrLen, HAL_PKT_TYPE type, u_int keyIx, 397fffbec86SAdrian Chadd HAL_CIPHER cipher, uint8_t delims, 39833d34032SAdrian Chadd HAL_BOOL firstSeg, HAL_BOOL lastSeg, HAL_BOOL lastAggr); 39994b61069SAdrian Chadd extern HAL_BOOL ar5416SetupFirstTxDesc(struct ath_hal *ah, struct ath_desc *ds, 40094b61069SAdrian Chadd u_int aggrLen, u_int flags, u_int txPower, u_int txRate0, u_int txTries0, 40194b61069SAdrian Chadd u_int antMode, u_int rtsctsRate, u_int rtsctsDuration); 40294b61069SAdrian Chadd extern HAL_BOOL ar5416SetupLastTxDesc(struct ath_hal *ah, struct ath_desc *ds, 40394b61069SAdrian Chadd const struct ath_desc *ds0); 40494b61069SAdrian Chadd extern HAL_BOOL ar5416SetGlobalTxTimeout(struct ath_hal *ah, u_int tu); 40594b61069SAdrian Chadd extern u_int ar5416GetGlobalTxTimeout(struct ath_hal *ah); 40694b61069SAdrian Chadd extern void ar5416Set11nRateScenario(struct ath_hal *ah, struct ath_desc *ds, 40794b61069SAdrian Chadd u_int durUpdateEn, u_int rtsctsRate, HAL_11N_RATE_SERIES series[], 4087c913deaSAdrian Chadd u_int nseries, u_int flags); 4095916ef68SAdrian Chadd 4105916ef68SAdrian Chadd extern void ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, 411f74b406dSAdrian Chadd u_int aggrLen, u_int numDelims); 41294b61069SAdrian Chadd extern void ar5416Set11nAggrMiddle(struct ath_hal *ah, struct ath_desc *ds, u_int numDelims); 4135916ef68SAdrian Chadd extern void ar5416Set11nAggrLast(struct ath_hal *ah, struct ath_desc *ds); 41494b61069SAdrian Chadd extern void ar5416Clr11nAggr(struct ath_hal *ah, struct ath_desc *ds); 415bdb9fa5cSAdrian Chadd extern void ar5416Set11nVirtualMoreFrag(struct ath_hal *ah, 416bdb9fa5cSAdrian Chadd struct ath_desc *ds, u_int vmf); 4175916ef68SAdrian Chadd 41894b61069SAdrian Chadd extern void ar5416Set11nBurstDuration(struct ath_hal *ah, struct ath_desc *ds, u_int burstDuration); 41994b61069SAdrian Chadd 42014779705SSam Leffler extern const HAL_RATE_TABLE *ar5416GetRateTable(struct ath_hal *, u_int mode); 42114779705SSam Leffler #endif /* _ATH_AR5416_H_ */ 422