summaryrefslogtreecommitdiff
path: root/package/mac80211/patches/423-mac80211-make-bss-conf-part-of-vif.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/mac80211/patches/423-mac80211-make-bss-conf-part-of-vif.patch')
-rw-r--r--package/mac80211/patches/423-mac80211-make-bss-conf-part-of-vif.patch303
1 files changed, 303 insertions, 0 deletions
diff --git a/package/mac80211/patches/423-mac80211-make-bss-conf-part-of-vif.patch b/package/mac80211/patches/423-mac80211-make-bss-conf-part-of-vif.patch
new file mode 100644
index 0000000000..556d651a0a
--- /dev/null
+++ b/package/mac80211/patches/423-mac80211-make-bss-conf-part-of-vif.patch
@@ -0,0 +1,303 @@
+Subject: mac80211: move bss_conf into vif
+
+Move bss_conf into the vif struct so that drivers can
+access it during ->tx without having to store it in
+the private data or similar. No driver updates because
+this is only for when they want to start using it.
+
+Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
+---
+ include/net/mac80211.h | 3 +++
+ net/mac80211/cfg.c | 6 +++---
+ net/mac80211/debugfs_netdev.c | 2 +-
+ net/mac80211/ieee80211_i.h | 3 ---
+ net/mac80211/iface.c | 2 +-
+ net/mac80211/main.c | 8 ++++----
+ net/mac80211/mlme.c | 30 +++++++++++++++---------------
+ net/mac80211/tx.c | 16 ++++++++--------
+ net/mac80211/util.c | 6 +++---
+ 9 files changed, 38 insertions(+), 38 deletions(-)
+
+--- everything.orig/include/net/mac80211.h 2008-10-10 17:09:04.000000000 +0200
++++ everything/include/net/mac80211.h 2008-10-10 17:09:41.000000000 +0200
+@@ -519,11 +519,14 @@ struct ieee80211_conf {
+ * use during the life of a virtual interface.
+ *
+ * @type: type of this virtual interface
++ * @bss_conf: BSS configuration for this interface, either our own
++ * or the BSS we're associated to
+ * @drv_priv: data area for driver use, will always be aligned to
+ * sizeof(void *).
+ */
+ struct ieee80211_vif {
+ enum nl80211_iftype type;
++ struct ieee80211_bss_conf bss_conf;
+ /* must be last */
+ u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
+ };
+--- everything.orig/net/mac80211/ieee80211_i.h 2008-10-10 17:10:40.000000000 +0200
++++ everything/net/mac80211/ieee80211_i.h 2008-10-10 17:10:45.000000000 +0200
+@@ -440,9 +440,6 @@ struct ieee80211_sub_if_data {
+
+ u16 sequence_number;
+
+- /* BSS configuration for this interface. */
+- struct ieee80211_bss_conf bss_conf;
+-
+ /*
+ * AP this belongs to: self in AP mode and
+ * corresponding AP in VLAN mode, NULL for
+--- everything.orig/net/mac80211/main.c 2008-10-10 17:10:55.000000000 +0200
++++ everything/net/mac80211/main.c 2008-10-10 17:11:10.000000000 +0200
+@@ -249,15 +249,15 @@ void ieee80211_bss_info_change_notify(st
+ if (local->ops->bss_info_changed)
+ local->ops->bss_info_changed(local_to_hw(local),
+ &sdata->vif,
+- &sdata->bss_conf,
++ &sdata->vif.bss_conf,
+ changed);
+ }
+
+ u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
+ {
+- sdata->bss_conf.use_cts_prot = false;
+- sdata->bss_conf.use_short_preamble = false;
+- sdata->bss_conf.use_short_slot = false;
++ sdata->vif.bss_conf.use_cts_prot = false;
++ sdata->vif.bss_conf.use_short_preamble = false;
++ sdata->vif.bss_conf.use_short_slot = false;
+ return BSS_CHANGED_ERP_CTS_PROT |
+ BSS_CHANGED_ERP_PREAMBLE |
+ BSS_CHANGED_ERP_SLOT;
+--- everything.orig/net/mac80211/iface.c 2008-10-10 17:12:11.000000000 +0200
++++ everything/net/mac80211/iface.c 2008-10-10 17:12:13.000000000 +0200
+@@ -695,7 +695,7 @@ int ieee80211_if_change_type(struct ieee
+ ieee80211_setup_sdata(sdata, type);
+
+ /* reset some values that shouldn't be kept across type changes */
+- sdata->bss_conf.basic_rates =
++ sdata->vif.bss_conf.basic_rates =
+ ieee80211_mandatory_rates(sdata->local,
+ sdata->local->hw.conf.channel->band);
+ sdata->drop_unencrypted = 0;
+--- everything.orig/net/mac80211/mlme.c 2008-10-10 17:11:49.000000000 +0200
++++ everything/net/mac80211/mlme.c 2008-10-10 17:11:58.000000000 +0200
+@@ -572,7 +572,7 @@ static void ieee80211_sta_wmm_params(str
+ static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata,
+ u16 capab, bool erp_valid, u8 erp)
+ {
+- struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf;
++ struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
+ #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
+ struct ieee80211_if_sta *ifsta = &sdata->u.sta;
+ DECLARE_MAC_BUF(mac);
+@@ -720,9 +720,9 @@ static void ieee80211_set_associated(str
+ ifsta->ssid, ifsta->ssid_len);
+ if (bss) {
+ /* set timing information */
+- sdata->bss_conf.beacon_int = bss->beacon_int;
+- sdata->bss_conf.timestamp = bss->timestamp;
+- sdata->bss_conf.dtim_period = bss->dtim_period;
++ sdata->vif.bss_conf.beacon_int = bss->beacon_int;
++ sdata->vif.bss_conf.timestamp = bss->timestamp;
++ sdata->vif.bss_conf.dtim_period = bss->dtim_period;
+
+ changed |= ieee80211_handle_bss_capability(sdata,
+ bss->capability, bss->has_erp_value, bss->erp_value);
+@@ -732,9 +732,9 @@ static void ieee80211_set_associated(str
+
+ if (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) {
+ changed |= BSS_CHANGED_HT;
+- sdata->bss_conf.assoc_ht = 1;
+- sdata->bss_conf.ht_cap = &conf->ht_cap;
+- sdata->bss_conf.ht_bss_conf = &conf->ht_bss_conf;
++ sdata->vif.bss_conf.assoc_ht = 1;
++ sdata->vif.bss_conf.ht_cap = &conf->ht_cap;
++ sdata->vif.bss_conf.ht_bss_conf = &conf->ht_bss_conf;
+ }
+
+ ifsta->flags |= IEEE80211_STA_PREV_BSSID_SET;
+@@ -744,7 +744,7 @@ static void ieee80211_set_associated(str
+ ifsta->last_probe = jiffies;
+ ieee80211_led_assoc(local, 1);
+
+- sdata->bss_conf.assoc = 1;
++ sdata->vif.bss_conf.assoc = 1;
+ /*
+ * For now just always ask the driver to update the basic rateset
+ * when we have associated, we aren't checking whether it actually
+@@ -853,15 +853,15 @@ static void ieee80211_set_disassoc(struc
+ ifsta->flags &= ~IEEE80211_STA_ASSOCIATED;
+ changed |= ieee80211_reset_erp_info(sdata);
+
+- if (sdata->bss_conf.assoc_ht)
++ if (sdata->vif.bss_conf.assoc_ht)
+ changed |= BSS_CHANGED_HT;
+
+- sdata->bss_conf.assoc_ht = 0;
+- sdata->bss_conf.ht_cap = NULL;
+- sdata->bss_conf.ht_bss_conf = NULL;
++ sdata->vif.bss_conf.assoc_ht = 0;
++ sdata->vif.bss_conf.ht_cap = NULL;
++ sdata->vif.bss_conf.ht_bss_conf = NULL;
+
+ ieee80211_led_assoc(local, 0);
+- sdata->bss_conf.assoc = 0;
++ sdata->vif.bss_conf.assoc = 0;
+
+ ieee80211_sta_send_apinfo(sdata, ifsta);
+
+@@ -1194,7 +1194,7 @@ static void ieee80211_rx_mgmt_assoc_resp
+ u64 rates, basic_rates;
+ u16 capab_info, status_code, aid;
+ struct ieee802_11_elems elems;
+- struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf;
++ struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
+ u8 *pos;
+ int i, j;
+ DECLARE_MAC_BUF(mac);
+@@ -1337,7 +1337,7 @@ static void ieee80211_rx_mgmt_assoc_resp
+ }
+
+ sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
+- sdata->bss_conf.basic_rates = basic_rates;
++ sdata->vif.bss_conf.basic_rates = basic_rates;
+
+ /* cf. IEEE 802.11 9.2.12 */
+ if (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ &&
+--- everything.orig/net/mac80211/cfg.c 2008-10-10 17:12:29.000000000 +0200
++++ everything/net/mac80211/cfg.c 2008-10-10 17:12:31.000000000 +0200
+@@ -966,16 +966,16 @@ static int ieee80211_change_bss(struct w
+ return -EINVAL;
+
+ if (params->use_cts_prot >= 0) {
+- sdata->bss_conf.use_cts_prot = params->use_cts_prot;
++ sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot;
+ changed |= BSS_CHANGED_ERP_CTS_PROT;
+ }
+ if (params->use_short_preamble >= 0) {
+- sdata->bss_conf.use_short_preamble =
++ sdata->vif.bss_conf.use_short_preamble =
+ params->use_short_preamble;
+ changed |= BSS_CHANGED_ERP_PREAMBLE;
+ }
+ if (params->use_short_slot_time >= 0) {
+- sdata->bss_conf.use_short_slot =
++ sdata->vif.bss_conf.use_short_slot =
+ params->use_short_slot_time;
+ changed |= BSS_CHANGED_ERP_SLOT;
+ }
+--- everything.orig/net/mac80211/debugfs_netdev.c 2008-10-10 17:13:26.000000000 +0200
++++ everything/net/mac80211/debugfs_netdev.c 2008-10-10 17:13:28.000000000 +0200
+@@ -120,7 +120,7 @@ static ssize_t ieee80211_if_fmt_flags(
+ sdata->u.sta.flags & IEEE80211_STA_AUTHENTICATED ? "AUTH\n" : "",
+ sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED ? "ASSOC\n" : "",
+ sdata->u.sta.flags & IEEE80211_STA_PROBEREQ_POLL ? "PROBEREQ POLL\n" : "",
+- sdata->bss_conf.use_cts_prot ? "CTS prot\n" : "");
++ sdata->vif.bss_conf.use_cts_prot ? "CTS prot\n" : "");
+ }
+ __IEEE80211_IF_FILE(flags);
+
+--- everything.orig/net/mac80211/tx.c 2008-10-10 17:12:46.000000000 +0200
++++ everything/net/mac80211/tx.c 2008-10-10 17:12:49.000000000 +0200
+@@ -116,7 +116,7 @@ static __le16 ieee80211_duration(struct
+ if (r->bitrate > txrate->bitrate)
+ break;
+
+- if (tx->sdata->bss_conf.basic_rates & BIT(i))
++ if (tx->sdata->vif.bss_conf.basic_rates & BIT(i))
+ rate = r->bitrate;
+
+ switch (sband->band) {
+@@ -150,7 +150,7 @@ static __le16 ieee80211_duration(struct
+ * to closest integer */
+
+ dur = ieee80211_frame_duration(local, 10, rate, erp,
+- tx->sdata->bss_conf.use_short_preamble);
++ tx->sdata->vif.bss_conf.use_short_preamble);
+
+ if (next_frag_len) {
+ /* Frame is fragmented: duration increases with time needed to
+@@ -159,7 +159,7 @@ static __le16 ieee80211_duration(struct
+ /* next fragment */
+ dur += ieee80211_frame_duration(local, next_frag_len,
+ txrate->bitrate, erp,
+- tx->sdata->bss_conf.use_short_preamble);
++ tx->sdata->vif.bss_conf.use_short_preamble);
+ }
+
+ return cpu_to_le16(dur);
+@@ -465,7 +465,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
+ } else
+ info->control.retries[0].rate_idx = -1;
+
+- if (tx->sdata->bss_conf.use_cts_prot &&
++ if (tx->sdata->vif.bss_conf.use_cts_prot &&
+ (tx->flags & IEEE80211_TX_FRAGMENTED) && (rsel.nonerp_idx >= 0)) {
+ tx->last_frag_rate_idx = tx->rate_idx;
+ if (rsel.probe_idx >= 0)
+@@ -531,7 +531,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_
+ if ((tx->sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) &&
+ (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_ERP_G) &&
+ (tx->flags & IEEE80211_TX_UNICAST) &&
+- tx->sdata->bss_conf.use_cts_prot &&
++ tx->sdata->vif.bss_conf.use_cts_prot &&
+ !(info->flags & IEEE80211_TX_CTL_USE_RTS_CTS))
+ info->flags |= IEEE80211_TX_CTL_USE_CTS_PROTECT;
+
+@@ -540,7 +540,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_
+ * available on the network at the current point in time. */
+ if (ieee80211_is_data(hdr->frame_control) &&
+ (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE) &&
+- tx->sdata->bss_conf.use_short_preamble &&
++ tx->sdata->vif.bss_conf.use_short_preamble &&
+ (!tx->sta || test_sta_flags(tx->sta, WLAN_STA_SHORT_PREAMBLE))) {
+ info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE;
+ }
+@@ -560,7 +560,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_
+ for (idx = 0; idx < sband->n_bitrates; idx++) {
+ if (sband->bitrates[idx].bitrate > rate->bitrate)
+ continue;
+- if (tx->sdata->bss_conf.basic_rates & BIT(idx) &&
++ if (tx->sdata->vif.bss_conf.basic_rates & BIT(idx) &&
+ (baserate < 0 ||
+ (sband->bitrates[baserate].bitrate
+ < sband->bitrates[idx].bitrate)))
+@@ -1981,7 +1981,7 @@ struct sk_buff *ieee80211_beacon_get(str
+ info->flags |= IEEE80211_TX_CTL_NO_ACK;
+ info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
+ info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
+- if (sdata->bss_conf.use_short_preamble &&
++ if (sdata->vif.bss_conf.use_short_preamble &&
+ sband->bitrates[rsel.rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE)
+ info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE;
+
+--- everything.orig/net/mac80211/util.c 2008-10-10 17:13:03.000000000 +0200
++++ everything/net/mac80211/util.c 2008-10-10 17:13:06.000000000 +0200
+@@ -239,7 +239,7 @@ __le16 ieee80211_generic_frame_duration(
+ erp = 0;
+ if (vif) {
+ sdata = vif_to_sdata(vif);
+- short_preamble = sdata->bss_conf.use_short_preamble;
++ short_preamble = sdata->vif.bss_conf.use_short_preamble;
+ if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
+ erp = rate->flags & IEEE80211_RATE_ERP_G;
+ }
+@@ -272,7 +272,7 @@ __le16 ieee80211_rts_duration(struct iee
+ erp = 0;
+ if (vif) {
+ sdata = vif_to_sdata(vif);
+- short_preamble = sdata->bss_conf.use_short_preamble;
++ short_preamble = sdata->vif.bss_conf.use_short_preamble;
+ if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
+ erp = rate->flags & IEEE80211_RATE_ERP_G;
+ }
+@@ -312,7 +312,7 @@ __le16 ieee80211_ctstoself_duration(stru
+ erp = 0;
+ if (vif) {
+ sdata = vif_to_sdata(vif);
+- short_preamble = sdata->bss_conf.use_short_preamble;
++ short_preamble = sdata->vif.bss_conf.use_short_preamble;
+ if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
+ erp = rate->flags & IEEE80211_RATE_ERP_G;
+ }