|
@@ -952,9 +952,12 @@ static void ath9k_hw_set_operating_mode(struct ath_hw *ah, int opmode)
|
|
REG_SET_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
|
|
REG_SET_BIT(ah, AR_CFG, AR_CFG_AP_ADHOC_INDICATION);
|
|
break;
|
|
break;
|
|
case NL80211_IFTYPE_STATION:
|
|
case NL80211_IFTYPE_STATION:
|
|
- case NL80211_IFTYPE_MONITOR:
|
|
|
|
REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE);
|
|
REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE);
|
|
break;
|
|
break;
|
|
|
|
+ default:
|
|
|
|
+ if (ah->is_monitoring)
|
|
|
|
+ REG_WRITE(ah, AR_STA_ID1, val | AR_STA_ID1_KSRCH_MODE);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1634,7 +1637,6 @@ void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period)
|
|
|
|
|
|
switch (ah->opmode) {
|
|
switch (ah->opmode) {
|
|
case NL80211_IFTYPE_STATION:
|
|
case NL80211_IFTYPE_STATION:
|
|
- case NL80211_IFTYPE_MONITOR:
|
|
|
|
REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon));
|
|
REG_WRITE(ah, AR_NEXT_TBTT_TIMER, TU_TO_USEC(next_beacon));
|
|
REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, 0xffff);
|
|
REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, 0xffff);
|
|
REG_WRITE(ah, AR_NEXT_SWBA, 0x7ffff);
|
|
REG_WRITE(ah, AR_NEXT_SWBA, 0x7ffff);
|
|
@@ -1663,6 +1665,14 @@ void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period)
|
|
AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN;
|
|
AR_TBTT_TIMER_EN | AR_DBA_TIMER_EN | AR_SWBA_TIMER_EN;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
|
|
+ if (ah->is_monitoring) {
|
|
|
|
+ REG_WRITE(ah, AR_NEXT_TBTT_TIMER,
|
|
|
|
+ TU_TO_USEC(next_beacon));
|
|
|
|
+ REG_WRITE(ah, AR_NEXT_DMA_BEACON_ALERT, 0xffff);
|
|
|
|
+ REG_WRITE(ah, AR_NEXT_SWBA, 0x7ffff);
|
|
|
|
+ flags |= AR_TBTT_TIMER_EN;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
ath_print(ath9k_hw_common(ah), ATH_DBG_BEACON,
|
|
ath_print(ath9k_hw_common(ah), ATH_DBG_BEACON,
|
|
"%s: unsupported opmode: %d\n",
|
|
"%s: unsupported opmode: %d\n",
|
|
__func__, ah->opmode);
|
|
__func__, ah->opmode);
|