96 lines
2.6 KiB
Diff
96 lines
2.6 KiB
Diff
|
--- a/net/mac80211/driver-ops.h
|
||
|
+++ b/net/mac80211/driver-ops.h
|
||
|
@@ -10,6 +10,16 @@ static inline void check_sdata_in_driver
|
||
|
WARN_ON(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER));
|
||
|
}
|
||
|
|
||
|
+static inline struct ieee80211_sub_if_data *
|
||
|
+get_bss_sdata(struct ieee80211_sub_if_data *sdata)
|
||
|
+{
|
||
|
+ if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||
|
+ sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
|
||
|
+ u.ap);
|
||
|
+
|
||
|
+ return sdata;
|
||
|
+}
|
||
|
+
|
||
|
static inline void drv_tx(struct ieee80211_local *local, struct sk_buff *skb)
|
||
|
{
|
||
|
local->ops->tx(&local->hw, skb);
|
||
|
@@ -427,6 +437,7 @@ static inline void drv_sta_notify(struct
|
||
|
enum sta_notify_cmd cmd,
|
||
|
struct ieee80211_sta *sta)
|
||
|
{
|
||
|
+ sdata = get_bss_sdata(sdata);
|
||
|
check_sdata_in_driver(sdata);
|
||
|
|
||
|
trace_drv_sta_notify(local, sdata, cmd, sta);
|
||
|
@@ -443,6 +454,7 @@ static inline int drv_sta_add(struct iee
|
||
|
|
||
|
might_sleep();
|
||
|
|
||
|
+ sdata = get_bss_sdata(sdata);
|
||
|
check_sdata_in_driver(sdata);
|
||
|
|
||
|
trace_drv_sta_add(local, sdata, sta);
|
||
|
@@ -460,6 +472,7 @@ static inline void drv_sta_remove(struct
|
||
|
{
|
||
|
might_sleep();
|
||
|
|
||
|
+ sdata = get_bss_sdata(sdata);
|
||
|
check_sdata_in_driver(sdata);
|
||
|
|
||
|
trace_drv_sta_remove(local, sdata, sta);
|
||
|
@@ -553,6 +566,7 @@ static inline int drv_ampdu_action(struc
|
||
|
|
||
|
might_sleep();
|
||
|
|
||
|
+ sdata = get_bss_sdata(sdata);
|
||
|
check_sdata_in_driver(sdata);
|
||
|
|
||
|
trace_drv_ampdu_action(local, sdata, action, sta, tid, ssn, buf_size);
|
||
|
--- a/net/mac80211/sta_info.c
|
||
|
+++ b/net/mac80211/sta_info.c
|
||
|
@@ -353,10 +353,6 @@ static int sta_info_finish_insert(struct
|
||
|
|
||
|
if (!sta->dummy || dummy_reinsert) {
|
||
|
/* notify driver */
|
||
|
- if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||
|
- sdata = container_of(sdata->bss,
|
||
|
- struct ieee80211_sub_if_data,
|
||
|
- u.ap);
|
||
|
err = drv_sta_add(local, sdata, &sta->sta);
|
||
|
if (err) {
|
||
|
if (!async)
|
||
|
--- a/net/mac80211/agg-tx.c
|
||
|
+++ b/net/mac80211/agg-tx.c
|
||
|
@@ -550,7 +550,7 @@ void ieee80211_start_tx_ba_cb(struct iee
|
||
|
}
|
||
|
|
||
|
mutex_lock(&local->sta_mtx);
|
||
|
- sta = sta_info_get(sdata, ra);
|
||
|
+ sta = sta_info_get_bss(sdata, ra);
|
||
|
if (!sta) {
|
||
|
mutex_unlock(&local->sta_mtx);
|
||
|
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||
|
@@ -679,7 +679,7 @@ void ieee80211_stop_tx_ba_cb(struct ieee
|
||
|
|
||
|
mutex_lock(&local->sta_mtx);
|
||
|
|
||
|
- sta = sta_info_get(sdata, ra);
|
||
|
+ sta = sta_info_get_bss(sdata, ra);
|
||
|
if (!sta) {
|
||
|
#ifdef CONFIG_MAC80211_HT_DEBUG
|
||
|
printk(KERN_DEBUG "Could not find station: %pM\n", ra);
|
||
|
--- a/net/mac80211/agg-rx.c
|
||
|
+++ b/net/mac80211/agg-rx.c
|
||
|
@@ -109,7 +109,7 @@ void ieee80211_stop_rx_ba_session(struct
|
||
|
int i;
|
||
|
|
||
|
rcu_read_lock();
|
||
|
- sta = sta_info_get(sdata, addr);
|
||
|
+ sta = sta_info_get_bss(sdata, addr);
|
||
|
if (!sta) {
|
||
|
rcu_read_unlock();
|
||
|
return;
|