Commit 70b06dac authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville

ath9k: Add wrappers for beacon events

Using these wrappers allows us to move the 'sched'
variable in ath_softc inside CONFIG_ATH9K_CHANNEL_CONTEXT.
Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 73b5ef0b
...@@ -433,6 +433,10 @@ void ath9k_p2p_bss_info_changed(struct ath_softc *sc, ...@@ -433,6 +433,10 @@ void ath9k_p2p_bss_info_changed(struct ath_softc *sc,
struct ieee80211_vif *vif); struct ieee80211_vif *vif);
void ath9k_p2p_ps_timer(void *priv); void ath9k_p2p_ps_timer(void *priv);
void ath_chanctx_beacon_recv_ev(struct ath_softc *sc, u32 ts,
enum ath_chanctx_event ev);
void ath_chanctx_beacon_sent_ev(struct ath_softc *sc,
enum ath_chanctx_event ev);
void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif, void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
enum ath_chanctx_event ev); enum ath_chanctx_event ev);
void ath_chanctx_set_next(struct ath_softc *sc, bool force); void ath_chanctx_set_next(struct ath_softc *sc, bool force);
...@@ -453,6 +457,14 @@ static inline void ath9k_init_channel_context(struct ath_softc *sc) ...@@ -453,6 +457,14 @@ static inline void ath9k_init_channel_context(struct ath_softc *sc)
static inline void ath9k_deinit_channel_context(struct ath_softc *sc) static inline void ath9k_deinit_channel_context(struct ath_softc *sc)
{ {
} }
static inline void ath_chanctx_beacon_recv_ev(struct ath_softc *sc, u32 ts,
enum ath_chanctx_event ev)
{
}
static inline void ath_chanctx_beacon_sent_ev(struct ath_softc *sc,
enum ath_chanctx_event ev)
{
}
static inline void ath_chanctx_event(struct ath_softc *sc, static inline void ath_chanctx_event(struct ath_softc *sc,
struct ieee80211_vif *vif, struct ieee80211_vif *vif,
enum ath_chanctx_event ev) enum ath_chanctx_event ev)
...@@ -901,6 +913,7 @@ struct ath_softc { ...@@ -901,6 +913,7 @@ struct ath_softc {
#ifdef CONFIG_ATH9K_CHANNEL_CONTEXT #ifdef CONFIG_ATH9K_CHANNEL_CONTEXT
struct ath_gen_timer *p2p_ps_timer; struct ath_gen_timer *p2p_ps_timer;
struct ath_vif *p2p_ps_vif; struct ath_vif *p2p_ps_vif;
struct ath_chanctx_sched sched;
#endif #endif
unsigned long driver_data; unsigned long driver_data;
...@@ -925,7 +938,6 @@ struct ath_softc { ...@@ -925,7 +938,6 @@ struct ath_softc {
struct ath_chanctx *next_chan; struct ath_chanctx *next_chan;
spinlock_t chan_lock; spinlock_t chan_lock;
struct ath_offchannel offchannel; struct ath_offchannel offchannel;
struct ath_chanctx_sched sched;
#ifdef CONFIG_MAC80211_LEDS #ifdef CONFIG_MAC80211_LEDS
bool led_registered; bool led_registered;
......
...@@ -428,9 +428,8 @@ void ath9k_beacon_tasklet(unsigned long data) ...@@ -428,9 +428,8 @@ void ath9k_beacon_tasklet(unsigned long data)
/* EDMA devices check that in the tx completion function. */ /* EDMA devices check that in the tx completion function. */
if (!edma) { if (!edma) {
if (ath9k_is_chanctx_enabled()) { if (ath9k_is_chanctx_enabled()) {
if (sc->sched.beacon_pending) ath_chanctx_beacon_sent_ev(sc,
ath_chanctx_event(sc, NULL, ATH_CHANCTX_EVENT_BEACON_SENT);
ATH_CHANCTX_EVENT_BEACON_SENT);
} }
if (ath9k_csa_is_finished(sc, vif)) if (ath9k_csa_is_finished(sc, vif))
......
...@@ -463,6 +463,20 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif, ...@@ -463,6 +463,20 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
spin_unlock_bh(&sc->chan_lock); spin_unlock_bh(&sc->chan_lock);
} }
void ath_chanctx_beacon_sent_ev(struct ath_softc *sc,
enum ath_chanctx_event ev)
{
if (sc->sched.beacon_pending)
ath_chanctx_event(sc, NULL, ev);
}
void ath_chanctx_beacon_recv_ev(struct ath_softc *sc, u32 ts,
enum ath_chanctx_event ev)
{
sc->sched.next_tbtt = ts;
ath_chanctx_event(sc, NULL, ev);
}
static int ath_scan_channel_duration(struct ath_softc *sc, static int ath_scan_channel_duration(struct ath_softc *sc,
struct ieee80211_channel *chan) struct ieee80211_channel *chan)
{ {
......
...@@ -893,11 +893,9 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc, ...@@ -893,11 +893,9 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
} }
if (ath9k_is_chanctx_enabled()) { if (ath9k_is_chanctx_enabled()) {
if (rx_stats->is_mybeacon) { if (rx_stats->is_mybeacon)
sc->sched.next_tbtt = rx_stats->rs_tstamp; ath_chanctx_beacon_recv_ev(sc, rx_stats->rs_tstamp,
ath_chanctx_event(sc, NULL, ATH_CHANCTX_EVENT_BEACON_RECEIVED);
ATH_CHANCTX_EVENT_BEACON_RECEIVED);
}
} }
ath9k_cmn_process_rssi(common, hw, rx_stats, rx_status); ath9k_cmn_process_rssi(common, hw, rx_stats, rx_status);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment