Lines Matching +full:rfkill +full:- +full:gpio
1 /*-
2 * SPDX-License-Identifier: ISC
4 * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5 * Copyright (c) 2002-2008 Atheros Communications, Inc.
32 #define AR_NUM_GPIO 6 /* 6 GPIO pins */
33 #define AR_GPIOD_MASK 0x0000002F /* GPIO data reg r/w mask */
40 OS_MEMCPY(mac, ahp->ah_macaddr, IEEE80211_ADDR_LEN); in ar5212GetMacAddress()
48 OS_MEMCPY(ahp->ah_macaddr, mac, IEEE80211_ADDR_LEN); in ar5212SetMacAddress()
57 OS_MEMCPY(mask, ahp->ah_bssidmask, IEEE80211_ADDR_LEN); in ar5212GetBssIdMask()
66 OS_MEMCPY(ahp->ah_bssidmask, mask, IEEE80211_ADDR_LEN); in ar5212SetBssIdMask()
68 OS_REG_WRITE(ah, AR_BSSMSKL, LE_READ_4(ahp->ah_bssidmask)); in ar5212SetBssIdMask()
69 OS_REG_WRITE(ah, AR_BSSMSKU, LE_READ_2(ahp->ah_bssidmask + 4)); in ar5212SetBssIdMask()
82 if (AH_PRIVATE(ah)->ah_currentRD == regDomain) { in ar5212SetRegulatoryDomain()
95 AH_PRIVATE(ah)->ah_currentRD = regDomain; in ar5212SetRegulatoryDomain()
121 if (AH_PRIVATE(ah)->ah_caps.halChanHalfRate) in ar5212GetWirelessModes()
123 if (AH_PRIVATE(ah)->ah_caps.halChanQuarterRate) in ar5212GetWirelessModes()
129 AH_PRIVATE(ah)->ah_subvendorid != AR_SUBVENDOR_ID_NOG) { in ar5212GetWirelessModes()
133 if (AH_PRIVATE(ah)->ah_caps.halChanHalfRate) in ar5212GetWirelessModes()
135 if (AH_PRIVATE(ah)->ah_caps.halChanQuarterRate) in ar5212GetWirelessModes()
142 * Set the interrupt and GPIO values so the ISR can disable RF
143 * on a switch signal. Assumes GPIO port and interrupt polarity
149 uint16_t rfsilent = AH_PRIVATE(ah)->ah_rfsilent; in ar5212EnableRfKill()
154 * Configure the desired GPIO port for input in ar5212EnableRfKill()
160 * If radio disable switch connection to GPIO bit x is enabled in ar5212EnableRfKill()
161 * program GPIO interrupt. in ar5212EnableRfKill()
162 * If rfkill bit on eeprom is 1, setupeeprommap routine has already in ar5212EnableRfKill()
164 * rfkill bit and it is set to 1, indicating that GPIO bit x hardware in ar5212EnableRfKill()
196 * the LED(s) using the GPIO lines). in ar5212SetLedState()
221 /* save bssid for possible re-use on reset */ in ar5212WriteAssocid()
222 OS_MEMCPY(ahp->ah_bssid, bssid, IEEE80211_ADDR_LEN); in ar5212WriteAssocid()
223 ahp->ah_assocId = assocId; in ar5212WriteAssocid()
224 OS_REG_WRITE(ah, AR_BSS_ID0, LE_READ_4(ahp->ah_bssid)); in ar5212WriteAssocid()
225 OS_REG_WRITE(ah, AR_BSS_ID1, LE_READ_2(ahp->ah_bssid+4) | in ar5212WriteAssocid()
237 /* sync multi-word read */ in ar5212GetTsf64()
244 * then we re-reading AR_TSF_U32 does no good as the in ar5212GetTsf64()
247 * to check for rollover doesn't help if preempted--so in ar5212GetTsf64()
286 * the internal signal to cause a reset of the TSF - but if the signal in ar5212ResetTsf()
301 const struct ieee80211_channel *chan = AH_PRIVATE(ah)->ah_curchan; in ar5212SetBasicRate()
309 for (i = 0; i < rs->rs_count; i++) { in ar5212SetBasicRate()
310 uint8_t rset = rs->rs_rates[i]; in ar5212SetBasicRate()
327 * Grab a semi-random value from hardware registers - may not
337 nf = 0 - ((nf ^ 0x1ff) + 1); in ar5212GetRandomSeed()
359 return (AH_PRIVATE(ah)->ah_macVersion == macVersion && in ar5212DetectCardPresent()
360 AH_PRIVATE(ah)->ah_macRev == macRev); in ar5212DetectCardPresent()
383 stats->ackrcv_bad += OS_REG_READ(ah, AR_ACK_FAIL); in ar5212UpdateMibCounters()
384 stats->rts_bad += OS_REG_READ(ah, AR_RTS_FAIL); in ar5212UpdateMibCounters()
385 stats->fcs_bad += OS_REG_READ(ah, AR_FCS_FAIL); in ar5212UpdateMibCounters()
386 stats->rts_good += OS_REG_READ(ah, AR_RTS_OK); in ar5212UpdateMibCounters()
387 stats->beacons += OS_REG_READ(ah, AR_BEACON_CNT); in ar5212UpdateMibCounters()
423 return AH5212(ah)->ah_antControl; in ar5212GetAntennaSwitch()
430 const struct ieee80211_channel *chan = AH_PRIVATE(ah)->ah_curchan; in ar5212SetAntennaSwitch()
432 if (!ahp->ah_phyPowerOn || chan == AH_NULL) { in ar5212SetAntennaSwitch()
434 ahp->ah_antControl = setting; in ar5212SetAntennaSwitch()
435 ahp->ah_diversity = (setting == HAL_ANT_VARIABLE); in ar5212SetAntennaSwitch()
455 ahp->ah_sifstime = (u_int) -1; /* restore default handling */ in ar5212SetSifsTime()
459 OS_REG_WRITE(ah, AR_D_GBL_IFS_SIFS, ath_hal_mac_clks(ah, us-2)); in ar5212SetSifsTime()
460 ahp->ah_sifstime = us; in ar5212SetSifsTime()
480 ahp->ah_slottime = (u_int) -1; /* restore default handling */ in ar5212SetSlotTime()
485 ahp->ah_slottime = us; in ar5212SetSlotTime()
505 ahp->ah_acktimeout = (u_int) -1; /* restore default handling */ in ar5212SetAckTimeout()
511 ahp->ah_acktimeout = us; in ar5212SetAckTimeout()
526 return ((AH5212(ah)->ah_staId1Defaults & AR_STA_ID1_ACKCTS_6MB) == 0); in ar5212GetAckCTSRate()
536 ahp->ah_staId1Defaults &= ~AR_STA_ID1_ACKCTS_6MB; in ar5212SetAckCTSRate()
539 ahp->ah_staId1Defaults |= AR_STA_ID1_ACKCTS_6MB; in ar5212SetAckCTSRate()
552 ahp->ah_ctstimeout = (u_int) -1; /* restore default handling */ in ar5212SetCTSTimeout()
558 ahp->ah_ctstimeout = us; in ar5212SetCTSTimeout()
580 ahp->ah_decompMask[keyidx] = en; in ar5212SetDecompMask()
592 AH_PRIVATE(ah)->ah_coverageClass = coverageclass; in ar5212SetCoverageClass()
595 if (AH_PRIVATE(ah)->ah_coverageClass == 0) in ar5212SetCoverageClass()
599 if (!IEEE80211_IS_CHAN_A(AH_PRIVATE(ah)->ah_curchan)) in ar5212SetCoverageClass()
608 if (IEEE80211_IS_CHAN_HALF(AH_PRIVATE(ah)->ah_curchan)) { in ar5212SetCoverageClass()
611 } else if (IEEE80211_IS_CHAN_QUARTER(AH_PRIVATE(ah)->ah_curchan)) { in ar5212SetCoverageClass()
653 ar5212SetOperatingMode(ah, AH_PRIVATE(ah)->ah_opmode); in ar5212SetPCUConfig()
668 (ahp->ah_enable32kHzClock == USE_32KHZ || in ar5212Use32KHzclock()
669 ahp->ah_enable32kHzClock == AUTO_32KHZ); in ar5212Use32KHzclock()
678 * baseband registers (27-31, 124-127) are required.
750 * Restore BB registers to power-on defaults in ar5212RestoreClock()
773 { 5790, 11 }, /* NB: ordered high -> low */ in ar5212GetNfAdjust()
787 for (i = 0; c->channel <= adjustDef[i].freqLow; i++) in ar5212GetNfAdjust()
796 #define MACVERSION(ah) AH_PRIVATE(ah)->ah_macVersion in ar5212GetCapability()
798 const HAL_CAPABILITIES *pCap = &AH_PRIVATE(ah)->ah_caps; in ar5212GetCapability()
805 return pCap->halCipherAesCcmSupport ? in ar5212GetCapability()
821 return (ahp->ah_staId1Defaults & in ar5212GetCapability()
828 return pCap->halTkipMicTxRxKeySupport ? in ar5212GetCapability()
831 return (ahp->ah_miscMode & in ar5212GetCapability()
839 AH_PRIVATE(ah)->ah_macRev >= 8) ? HAL_OK : HAL_ENOTSUPP; in ar5212GetCapability()
845 return ahp->ah_diversity ? HAL_OK : HAL_ENXIO; in ar5212GetCapability()
853 *result = AH_PRIVATE(ah)->ah_diagreg; in ar5212GetCapability()
860 return ahp->ah_tpcEnabled ? HAL_OK : HAL_ENXIO; in ar5212GetCapability()
877 return pCap->halMcastKeySrchSupport ? HAL_OK : HAL_ENXIO; in ar5212GetCapability()
879 return (ahp->ah_staId1Defaults & in ar5212GetCapability()
886 return pCap->halTsfAddSupport ? HAL_OK : HAL_ENOTSUPP; in ar5212GetCapability()
888 return (ahp->ah_miscMode & AR_MISC_MODE_TX_ADD_TSF) ? in ar5212GetCapability()
893 *result = MS(ahp->ah_macTPC, AR_TPC_ACK); in ar5212GetCapability()
896 *result = MS(ahp->ah_macTPC, AR_TPC_CTS); in ar5212GetCapability()
903 return (ahp->ah_procPhyErr & HAL_ANI_ENA) ? in ar5212GetCapability()
914 case 2: *result = ani->noiseImmunityLevel; break; in ar5212GetCapability()
915 case 3: *result = !ani->ofdmWeakSigDetectOff; break; in ar5212GetCapability()
916 case 4: *result = ani->cckWeakSigThreshold; break; in ar5212GetCapability()
917 case 5: *result = ani->firstepLevel; break; in ar5212GetCapability()
918 case 6: *result = ani->spurImmunityLevel; break; in ar5212GetCapability()
935 const HAL_CAPABILITIES *pCap = &AH_PRIVATE(ah)->ah_caps; in ar5212SetCapability()
941 ahp->ah_staId1Defaults |= AR_STA_ID1_CRPT_MIC_ENABLE; in ar5212SetCapability()
943 ahp->ah_staId1Defaults &= ~AR_STA_ID1_CRPT_MIC_ENABLE; in ar5212SetCapability()
946 if (!pCap->halTkipMicTxRxKeySupport) in ar5212SetCapability()
950 ahp->ah_miscMode &= ~AR_MISC_MODE_MIC_NEW_LOC_ENABLE; in ar5212SetCapability()
952 ahp->ah_miscMode |= AR_MISC_MODE_MIC_NEW_LOC_ENABLE; in ar5212SetCapability()
954 OS_REG_WRITE(ah, AR_MISC_MODE, OS_REG_READ(ah, AR_MISC_MODE) | ahp->ah_miscMode); in ar5212SetCapability()
961 if (ahp->ah_phyPowerOn) { in ar5212SetCapability()
971 ahp->ah_diversity = (setting != 0); in ar5212SetCapability()
975 if (! ahp->ah_phyPowerOn) in ar5212SetCapability()
991 AH_PRIVATE(ah)->ah_diagreg = setting; in ar5212SetCapability()
992 OS_REG_WRITE(ah, AR_DIAG_SW, AH_PRIVATE(ah)->ah_diagreg); in ar5212SetCapability()
995 ahp->ah_tpcEnabled = (setting != 0); in ar5212SetCapability()
999 ahp->ah_staId1Defaults |= AR_STA_ID1_MCAST_KSRCH; in ar5212SetCapability()
1001 ahp->ah_staId1Defaults &= ~AR_STA_ID1_MCAST_KSRCH; in ar5212SetCapability()
1005 setting += ahp->ah_txPowerIndexOffset; in ar5212SetCapability()
1009 ahp->ah_macTPC &= AR_TPC_ACK; in ar5212SetCapability()
1010 ahp->ah_macTPC |= MS(setting, AR_TPC_ACK); in ar5212SetCapability()
1012 ahp->ah_macTPC &= AR_TPC_CTS; in ar5212SetCapability()
1013 ahp->ah_macTPC |= MS(setting, AR_TPC_CTS); in ar5212SetCapability()
1015 OS_REG_WRITE(ah, AR_TPC, ahp->ah_macTPC); in ar5212SetCapability()
1030 AH5212(ah)->ah_aniControl(ah, cmds[capability], setting) : in ar5212SetCapability()
1034 if (pCap->halTsfAddSupport) { in ar5212SetCapability()
1036 ahp->ah_miscMode |= AR_MISC_MODE_TX_ADD_TSF; in ar5212SetCapability()
1038 ahp->ah_miscMode &= ~AR_MISC_MODE_TX_ADD_TSF; in ar5212SetCapability()
1069 *result = __DECONST(void *, ahp->ah_gainValues.currStep); in ar5212GetDiagState()
1074 *result = ahp->ah_pcdacTable; in ar5212GetDiagState()
1075 *resultsize = ahp->ah_pcdacTableSize; in ar5212GetDiagState()
1078 *result = &ahp->ah_ratesArray[0]; in ar5212GetDiagState()
1079 *resultsize = sizeof(ahp->ah_ratesArray); in ar5212GetDiagState()
1087 OS_MEMZERO(&ahp->ext_ani_stats, sizeof(ahp->ext_ani_stats)); in ar5212GetDiagState()
1093 OS_MEMCPY(&ahp->ext_ani_stats, astats, sizeof(HAL_ANI_STATS)); in ar5212GetDiagState()
1094 *result = &ahp->ext_ani_stats; in ar5212GetDiagState()
1095 *resultsize = sizeof(ahp->ext_ani_stats); in ar5212GetDiagState()
1101 AH5212(ah)->ah_aniControl(ah, ((const uint32_t *)args)[0], in ar5212GetDiagState()
1115 *result = __DECONST(void *, aniState->params); in ar5212GetDiagState()
1129 * Check whether there's an in-progress NF completion.
1131 * Returns AH_TRUE if there's a in-progress NF calibration, AH_FALSE
1143 * Wait for an in-progress NF calibration to complete.
1169 if (pe->pe_firpwr != HAL_PHYERR_PARAM_NOVAL) { in ar5212EnableDfs()
1171 val |= SM(pe->pe_firpwr, AR_PHY_RADAR_0_FIRPWR); in ar5212EnableDfs()
1173 if (pe->pe_rrssi != HAL_PHYERR_PARAM_NOVAL) { in ar5212EnableDfs()
1175 val |= SM(pe->pe_rrssi, AR_PHY_RADAR_0_RRSSI); in ar5212EnableDfs()
1177 if (pe->pe_height != HAL_PHYERR_PARAM_NOVAL) { in ar5212EnableDfs()
1179 val |= SM(pe->pe_height, AR_PHY_RADAR_0_HEIGHT); in ar5212EnableDfs()
1181 if (pe->pe_prssi != HAL_PHYERR_PARAM_NOVAL) { in ar5212EnableDfs()
1183 val |= SM(pe->pe_prssi, AR_PHY_RADAR_0_PRSSI); in ar5212EnableDfs()
1185 if (pe->pe_inband != HAL_PHYERR_PARAM_NOVAL) { in ar5212EnableDfs()
1187 val |= SM(pe->pe_inband, AR_PHY_RADAR_0_INBAND); in ar5212EnableDfs()
1189 if (pe->pe_enabled) in ar5212EnableDfs()
1195 if (pe->pe_blockradar == 1) in ar5212EnableDfs()
1202 if (pe->pe_en_relstep_check == 1) in ar5212EnableDfs()
1209 if (pe->pe_usefir128 == 1) in ar5212EnableDfs()
1216 if (pe->pe_enmaxrssi == 1) in ar5212EnableDfs()
1223 if (pe->pe_enrelpwr == 1) in ar5212EnableDfs()
1230 if (pe->pe_relpwr != HAL_PHYERR_PARAM_NOVAL) in ar5212EnableDfs()
1232 AR_PHY_RADAR_2_RELPWR, pe->pe_relpwr); in ar5212EnableDfs()
1234 if (pe->pe_relstep != HAL_PHYERR_PARAM_NOVAL) in ar5212EnableDfs()
1236 AR_PHY_RADAR_2_RELSTEP, pe->pe_relstep); in ar5212EnableDfs()
1238 if (pe->pe_maxlen != HAL_PHYERR_PARAM_NOVAL) in ar5212EnableDfs()
1240 AR_PHY_RADAR_2_MAXLEN, pe->pe_maxlen); in ar5212EnableDfs()
1249 #define AR5212_DFS_FIRPWR -35
1258 #define AR5413_DFS_FIRPWR -34
1272 pe->pe_firpwr = AR5413_DFS_FIRPWR; in ar5212GetDfsDefaultThresh()
1273 pe->pe_rrssi = AR5413_DFS_RRSSI; in ar5212GetDfsDefaultThresh()
1274 pe->pe_height = AR5413_DFS_HEIGHT; in ar5212GetDfsDefaultThresh()
1275 pe->pe_prssi = AR5413_DFS_PRSSI; in ar5212GetDfsDefaultThresh()
1276 pe->pe_inband = AR5413_DFS_INBAND; in ar5212GetDfsDefaultThresh()
1277 pe->pe_relpwr = AR5413_DFS_RELPWR; in ar5212GetDfsDefaultThresh()
1278 pe->pe_relstep = AR5413_DFS_RELSTEP; in ar5212GetDfsDefaultThresh()
1279 pe->pe_maxlen = AR5413_DFS_MAXLEN; in ar5212GetDfsDefaultThresh()
1280 pe->pe_usefir128 = 0; in ar5212GetDfsDefaultThresh()
1281 pe->pe_blockradar = 1; in ar5212GetDfsDefaultThresh()
1282 pe->pe_enmaxrssi = 1; in ar5212GetDfsDefaultThresh()
1283 pe->pe_enrelpwr = 1; in ar5212GetDfsDefaultThresh()
1284 pe->pe_en_relstep_check = 0; in ar5212GetDfsDefaultThresh()
1286 pe->pe_firpwr = AR5212_DFS_FIRPWR; in ar5212GetDfsDefaultThresh()
1287 pe->pe_rrssi = AR5212_DFS_RRSSI; in ar5212GetDfsDefaultThresh()
1288 pe->pe_height = AR5212_DFS_HEIGHT; in ar5212GetDfsDefaultThresh()
1289 pe->pe_prssi = AR5212_DFS_PRSSI; in ar5212GetDfsDefaultThresh()
1290 pe->pe_inband = AR5212_DFS_INBAND; in ar5212GetDfsDefaultThresh()
1291 pe->pe_relpwr = 0; in ar5212GetDfsDefaultThresh()
1292 pe->pe_relstep = 0; in ar5212GetDfsDefaultThresh()
1293 pe->pe_maxlen = 0; in ar5212GetDfsDefaultThresh()
1294 pe->pe_usefir128 = 0; in ar5212GetDfsDefaultThresh()
1295 pe->pe_blockradar = 0; in ar5212GetDfsDefaultThresh()
1296 pe->pe_enmaxrssi = 0; in ar5212GetDfsDefaultThresh()
1297 pe->pe_enrelpwr = 0; in ar5212GetDfsDefaultThresh()
1298 pe->pe_en_relstep_check = 0; in ar5212GetDfsDefaultThresh()
1313 pe->pe_firpwr = temp; in ar5212GetDfsThresh()
1314 pe->pe_rrssi = MS(val, AR_PHY_RADAR_0_RRSSI); in ar5212GetDfsThresh()
1315 pe->pe_height = MS(val, AR_PHY_RADAR_0_HEIGHT); in ar5212GetDfsThresh()
1316 pe->pe_prssi = MS(val, AR_PHY_RADAR_0_PRSSI); in ar5212GetDfsThresh()
1317 pe->pe_inband = MS(val, AR_PHY_RADAR_0_INBAND); in ar5212GetDfsThresh()
1318 pe->pe_enabled = !! (val & AR_PHY_RADAR_0_ENA); in ar5212GetDfsThresh()
1320 pe->pe_relpwr = 0; in ar5212GetDfsThresh()
1321 pe->pe_relstep = 0; in ar5212GetDfsThresh()
1322 pe->pe_maxlen = 0; in ar5212GetDfsThresh()
1323 pe->pe_usefir128 = 0; in ar5212GetDfsThresh()
1324 pe->pe_blockradar = 0; in ar5212GetDfsThresh()
1325 pe->pe_enmaxrssi = 0; in ar5212GetDfsThresh()
1326 pe->pe_enrelpwr = 0; in ar5212GetDfsThresh()
1327 pe->pe_en_relstep_check = 0; in ar5212GetDfsThresh()
1328 pe->pe_extchannel = AH_FALSE; in ar5212GetDfsThresh()
1332 pe->pe_relpwr = !! MS(val, AR_PHY_RADAR_2_RELPWR); in ar5212GetDfsThresh()
1333 pe->pe_relstep = !! MS(val, AR_PHY_RADAR_2_RELSTEP); in ar5212GetDfsThresh()
1334 pe->pe_maxlen = !! MS(val, AR_PHY_RADAR_2_MAXLEN); in ar5212GetDfsThresh()
1336 pe->pe_usefir128 = !! (val & AR_PHY_RADAR_2_USEFIR128); in ar5212GetDfsThresh()
1337 pe->pe_blockradar = !! (val & AR_PHY_RADAR_2_BLOCKOFDMWEAK); in ar5212GetDfsThresh()
1338 pe->pe_enmaxrssi = !! (val & AR_PHY_RADAR_2_ENMAXRSSI); in ar5212GetDfsThresh()
1339 pe->pe_enrelpwr = !! (val & AR_PHY_RADAR_2_ENRELPWRCHK); in ar5212GetDfsThresh()
1340 pe->pe_en_relstep_check = in ar5212GetDfsThresh()
1356 if ((rxs->rs_phyerr != HAL_PHYERR_RADAR) && in ar5212ProcessRadarEvent()
1357 (rxs->rs_phyerr != HAL_PHYERR_FALSE_RADAR_EXT)) in ar5212ProcessRadarEvent()
1361 * The first byte is the pulse width - if there's in ar5212ProcessRadarEvent()
1364 if (rxs->rs_datalen >= 1) in ar5212ProcessRadarEvent()
1371 rssi = (uint8_t) rxs->rs_rssi; in ar5212ProcessRadarEvent()
1381 event->re_full_ts = fulltsf; in ar5212ProcessRadarEvent()
1382 event->re_ts = rxs->rs_tstamp; in ar5212ProcessRadarEvent()
1383 event->re_rssi = rssi; in ar5212ProcessRadarEvent()
1384 event->re_dur = dur; in ar5212ProcessRadarEvent()
1385 event->re_flags = HAL_DFS_EVENT_PRICH; in ar5212ProcessRadarEvent()
1391 * Return whether 5GHz fast-clock (44MHz) is enabled.
1425 if (ahp->ah_cycleCount == 0 || ahp->ah_cycleCount > cc) { in ar5212GetMibCycleCounts()
1429 * right shift rather than wrap--so punt and return 0. in ar5212GetMibCycleCounts()
1435 hsample->cycle_count = cc - ahp->ah_cycleCount; in ar5212GetMibCycleCounts()
1436 hsample->chan_busy = rc - ahp->ah_ctlBusy; in ar5212GetMibCycleCounts()
1437 hsample->ext_chan_busy = 0; in ar5212GetMibCycleCounts()
1438 hsample->rx_busy = rf - ahp->ah_rxBusy; in ar5212GetMibCycleCounts()
1439 hsample->tx_busy = tf - ahp->ah_txBusy; in ar5212GetMibCycleCounts()
1446 ahp->ah_cycleCount = cc; in ar5212GetMibCycleCounts()
1447 ahp->ah_rxBusy = rf; in ar5212GetMibCycleCounts()
1448 ahp->ah_ctlBusy = rc; in ar5212GetMibCycleCounts()
1449 ahp->ah_txBusy = tf; in ar5212GetMibCycleCounts()