diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2007-12-18 19:31:26 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:09:36 -0500 |
commit | 32bfd35d4b63bd63de4bb0d791ef049c3c868726 (patch) | |
tree | c1c213a35a00bcbe71a2ecc6521e19dec66cf6eb /drivers/net | |
parent | f653211197f3841f383fa9757ef8ce182c6cf627 (diff) |
mac80211: dont use interface indices in drivers
This patch gets rid of the if_id stuff where possible in favour of
a new per-virtual-interface structure "struct ieee80211_vif". This
structure is located at the end of the per-interface structure and
contains a variable length driver-use data area.
This has two advantages:
* removes the need to look up interfaces by if_id, this is better
for working with network namespaces and performance
* allows drivers to store and retrieve per-interface data without
having to allocate own lists/hash tables
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
22 files changed, 87 insertions, 82 deletions
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c index 14d90a9409aa..79796186713e 100644 --- a/drivers/net/wireless/adm8211.c +++ b/drivers/net/wireless/adm8211.c | |||
@@ -1312,7 +1312,8 @@ static int adm8211_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | |||
1312 | return 0; | 1312 | return 0; |
1313 | } | 1313 | } |
1314 | 1314 | ||
1315 | static int adm8211_config_interface(struct ieee80211_hw *dev, int if_id, | 1315 | static int adm8211_config_interface(struct ieee80211_hw *dev, |
1316 | struct ieee80211_vif *vif, | ||
1316 | struct ieee80211_if_conf *conf) | 1317 | struct ieee80211_if_conf *conf) |
1317 | { | 1318 | { |
1318 | struct adm8211_priv *priv = dev->priv; | 1319 | struct adm8211_priv *priv = dev->priv; |
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index d3d37282f3dc..742616a03d5f 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c | |||
@@ -178,7 +178,8 @@ static void ath5k_remove_interface(struct ieee80211_hw *hw, | |||
178 | struct ieee80211_if_init_conf *conf); | 178 | struct ieee80211_if_init_conf *conf); |
179 | static int ath5k_config(struct ieee80211_hw *hw, | 179 | static int ath5k_config(struct ieee80211_hw *hw, |
180 | struct ieee80211_conf *conf); | 180 | struct ieee80211_conf *conf); |
181 | static int ath5k_config_interface(struct ieee80211_hw *hw, int if_id, | 181 | static int ath5k_config_interface(struct ieee80211_hw *hw, |
182 | struct ieee80211_vif *vif, | ||
182 | struct ieee80211_if_conf *conf); | 183 | struct ieee80211_if_conf *conf); |
183 | static void ath5k_configure_filter(struct ieee80211_hw *hw, | 184 | static void ath5k_configure_filter(struct ieee80211_hw *hw, |
184 | unsigned int changed_flags, | 185 | unsigned int changed_flags, |
@@ -2498,12 +2499,12 @@ static int ath5k_add_interface(struct ieee80211_hw *hw, | |||
2498 | int ret; | 2499 | int ret; |
2499 | 2500 | ||
2500 | mutex_lock(&sc->lock); | 2501 | mutex_lock(&sc->lock); |
2501 | if (sc->iface_id) { | 2502 | if (sc->vif) { |
2502 | ret = 0; | 2503 | ret = 0; |
2503 | goto end; | 2504 | goto end; |
2504 | } | 2505 | } |
2505 | 2506 | ||
2506 | sc->iface_id = conf->if_id; | 2507 | sc->vif = conf->vif; |
2507 | 2508 | ||
2508 | switch (conf->type) { | 2509 | switch (conf->type) { |
2509 | case IEEE80211_IF_TYPE_STA: | 2510 | case IEEE80211_IF_TYPE_STA: |
@@ -2528,10 +2529,10 @@ ath5k_remove_interface(struct ieee80211_hw *hw, | |||
2528 | struct ath5k_softc *sc = hw->priv; | 2529 | struct ath5k_softc *sc = hw->priv; |
2529 | 2530 | ||
2530 | mutex_lock(&sc->lock); | 2531 | mutex_lock(&sc->lock); |
2531 | if (sc->iface_id != conf->if_id) | 2532 | if (sc->vif != conf->vif) |
2532 | goto end; | 2533 | goto end; |
2533 | 2534 | ||
2534 | sc->iface_id = 0; | 2535 | sc->vif = NULL; |
2535 | end: | 2536 | end: |
2536 | mutex_unlock(&sc->lock); | 2537 | mutex_unlock(&sc->lock); |
2537 | } | 2538 | } |
@@ -2549,7 +2550,7 @@ ath5k_config(struct ieee80211_hw *hw, | |||
2549 | } | 2550 | } |
2550 | 2551 | ||
2551 | static int | 2552 | static int |
2552 | ath5k_config_interface(struct ieee80211_hw *hw, int if_id, | 2553 | ath5k_config_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, |
2553 | struct ieee80211_if_conf *conf) | 2554 | struct ieee80211_if_conf *conf) |
2554 | { | 2555 | { |
2555 | struct ath5k_softc *sc = hw->priv; | 2556 | struct ath5k_softc *sc = hw->priv; |
@@ -2560,7 +2561,7 @@ ath5k_config_interface(struct ieee80211_hw *hw, int if_id, | |||
2560 | * be set to mac80211's value at ath5k_config(). */ | 2561 | * be set to mac80211's value at ath5k_config(). */ |
2561 | sc->bintval = 1000 * 1000 / 1024; | 2562 | sc->bintval = 1000 * 1000 / 1024; |
2562 | mutex_lock(&sc->lock); | 2563 | mutex_lock(&sc->lock); |
2563 | if (sc->iface_id != if_id) { | 2564 | if (sc->vif != vif) { |
2564 | ret = -EIO; | 2565 | ret = -EIO; |
2565 | goto unlock; | 2566 | goto unlock; |
2566 | } | 2567 | } |
diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h index 927d67db3dc2..7ba2223d2247 100644 --- a/drivers/net/wireless/ath5k/base.h +++ b/drivers/net/wireless/ath5k/base.h | |||
@@ -123,7 +123,7 @@ struct ath5k_softc { | |||
123 | unsigned int curmode; /* current phy mode */ | 123 | unsigned int curmode; /* current phy mode */ |
124 | struct ieee80211_channel *curchan; /* current h/w channel */ | 124 | struct ieee80211_channel *curchan; /* current h/w channel */ |
125 | 125 | ||
126 | int iface_id; /* add/remove_interface id */ | 126 | struct ieee80211_vif *vif; |
127 | 127 | ||
128 | struct { | 128 | struct { |
129 | u8 rxflags; /* radiotap rx flags */ | 129 | u8 rxflags; /* radiotap rx flags */ |
diff --git a/drivers/net/wireless/ath5k/hw.c b/drivers/net/wireless/ath5k/hw.c index 5623d7dc738e..3b9336387df0 100644 --- a/drivers/net/wireless/ath5k/hw.c +++ b/drivers/net/wireless/ath5k/hw.c | |||
@@ -533,7 +533,7 @@ static inline void ath5k_hw_write_rate_duration(struct ath5k_hw *ah, | |||
533 | * ieee80211_duration() for a brief description of | 533 | * ieee80211_duration() for a brief description of |
534 | * what rate we should choose to TX ACKs. */ | 534 | * what rate we should choose to TX ACKs. */ |
535 | tx_time = ieee80211_generic_frame_duration(sc->hw, | 535 | tx_time = ieee80211_generic_frame_duration(sc->hw, |
536 | sc->iface_id, 10, control_rate->rate_kbps/100); | 536 | sc->vif, 10, control_rate->rate_kbps/100); |
537 | 537 | ||
538 | ath5k_hw_reg_write(ah, tx_time, reg); | 538 | ath5k_hw_reg_write(ah, tx_time, reg); |
539 | 539 | ||
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h index 5a1a790a105b..82bff51d5595 100644 --- a/drivers/net/wireless/b43/b43.h +++ b/drivers/net/wireless/b43/b43.h | |||
@@ -625,10 +625,7 @@ struct b43_wl { | |||
625 | * at a time. General information about this interface follows. | 625 | * at a time. General information about this interface follows. |
626 | */ | 626 | */ |
627 | 627 | ||
628 | /* Opaque ID of the operating interface from the ieee80211 | 628 | struct ieee80211_vif *vif; |
629 | * subsystem. Do not modify. | ||
630 | */ | ||
631 | int if_id; | ||
632 | /* The MAC address of the operating interface. */ | 629 | /* The MAC address of the operating interface. */ |
633 | u8 mac_addr[ETH_ALEN]; | 630 | u8 mac_addr[ETH_ALEN]; |
634 | /* Current BSSID */ | 631 | /* Current BSSID */ |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index ea63a9928803..af3d24c559c0 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -1169,7 +1169,7 @@ static void b43_write_probe_resp_plcp(struct b43_wldev *dev, | |||
1169 | plcp.data = 0; | 1169 | plcp.data = 0; |
1170 | b43_generate_plcp_hdr(&plcp, size + FCS_LEN, rate); | 1170 | b43_generate_plcp_hdr(&plcp, size + FCS_LEN, rate); |
1171 | dur = ieee80211_generic_frame_duration(dev->wl->hw, | 1171 | dur = ieee80211_generic_frame_duration(dev->wl->hw, |
1172 | dev->wl->if_id, size, | 1172 | dev->wl->vif, size, |
1173 | B43_RATE_TO_BASE100KBPS(rate)); | 1173 | B43_RATE_TO_BASE100KBPS(rate)); |
1174 | /* Write PLCP in two parts and timing for packet transfer */ | 1174 | /* Write PLCP in two parts and timing for packet transfer */ |
1175 | tmp = le32_to_cpu(plcp.data); | 1175 | tmp = le32_to_cpu(plcp.data); |
@@ -1226,7 +1226,7 @@ static u8 *b43_generate_probe_resp(struct b43_wldev *dev, | |||
1226 | hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | | 1226 | hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | |
1227 | IEEE80211_STYPE_PROBE_RESP); | 1227 | IEEE80211_STYPE_PROBE_RESP); |
1228 | dur = ieee80211_generic_frame_duration(dev->wl->hw, | 1228 | dur = ieee80211_generic_frame_duration(dev->wl->hw, |
1229 | dev->wl->if_id, *dest_size, | 1229 | dev->wl->vif, *dest_size, |
1230 | B43_RATE_TO_BASE100KBPS(rate)); | 1230 | B43_RATE_TO_BASE100KBPS(rate)); |
1231 | hdr->duration_id = dur; | 1231 | hdr->duration_id = dur; |
1232 | 1232 | ||
@@ -2928,7 +2928,7 @@ static void b43_op_configure_filter(struct ieee80211_hw *hw, | |||
2928 | } | 2928 | } |
2929 | 2929 | ||
2930 | static int b43_op_config_interface(struct ieee80211_hw *hw, | 2930 | static int b43_op_config_interface(struct ieee80211_hw *hw, |
2931 | int if_id, | 2931 | struct ieee80211_vif *vif, |
2932 | struct ieee80211_if_conf *conf) | 2932 | struct ieee80211_if_conf *conf) |
2933 | { | 2933 | { |
2934 | struct b43_wl *wl = hw_to_b43_wl(hw); | 2934 | struct b43_wl *wl = hw_to_b43_wl(hw); |
@@ -2939,7 +2939,7 @@ static int b43_op_config_interface(struct ieee80211_hw *hw, | |||
2939 | return -ENODEV; | 2939 | return -ENODEV; |
2940 | mutex_lock(&wl->mutex); | 2940 | mutex_lock(&wl->mutex); |
2941 | spin_lock_irqsave(&wl->irq_lock, flags); | 2941 | spin_lock_irqsave(&wl->irq_lock, flags); |
2942 | B43_WARN_ON(wl->if_id != if_id); | 2942 | B43_WARN_ON(wl->vif != vif); |
2943 | if (conf->bssid) | 2943 | if (conf->bssid) |
2944 | memcpy(wl->bssid, conf->bssid, ETH_ALEN); | 2944 | memcpy(wl->bssid, conf->bssid, ETH_ALEN); |
2945 | else | 2945 | else |
@@ -3445,7 +3445,7 @@ static int b43_op_add_interface(struct ieee80211_hw *hw, | |||
3445 | 3445 | ||
3446 | dev = wl->current_dev; | 3446 | dev = wl->current_dev; |
3447 | wl->operating = 1; | 3447 | wl->operating = 1; |
3448 | wl->if_id = conf->if_id; | 3448 | wl->vif = conf->vif; |
3449 | wl->if_type = conf->type; | 3449 | wl->if_type = conf->type; |
3450 | memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); | 3450 | memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); |
3451 | 3451 | ||
@@ -3473,7 +3473,8 @@ static void b43_op_remove_interface(struct ieee80211_hw *hw, | |||
3473 | mutex_lock(&wl->mutex); | 3473 | mutex_lock(&wl->mutex); |
3474 | 3474 | ||
3475 | B43_WARN_ON(!wl->operating); | 3475 | B43_WARN_ON(!wl->operating); |
3476 | B43_WARN_ON(wl->if_id != conf->if_id); | 3476 | B43_WARN_ON(wl->vif != conf->vif); |
3477 | wl->vif = NULL; | ||
3477 | 3478 | ||
3478 | wl->operating = 0; | 3479 | wl->operating = 0; |
3479 | 3480 | ||
diff --git a/drivers/net/wireless/b43/xmit.c b/drivers/net/wireless/b43/xmit.c index 419aca1fc4fe..5014213b7752 100644 --- a/drivers/net/wireless/b43/xmit.c +++ b/drivers/net/wireless/b43/xmit.c | |||
@@ -221,7 +221,7 @@ static void generate_txhdr_fw4(struct b43_wldev *dev, | |||
221 | } else { | 221 | } else { |
222 | int fbrate_base100kbps = B43_RATE_TO_BASE100KBPS(rate_fb); | 222 | int fbrate_base100kbps = B43_RATE_TO_BASE100KBPS(rate_fb); |
223 | txhdr->dur_fb = ieee80211_generic_frame_duration(dev->wl->hw, | 223 | txhdr->dur_fb = ieee80211_generic_frame_duration(dev->wl->hw, |
224 | dev->wl->if_id, | 224 | txctl->vif, |
225 | fragment_len, | 225 | fragment_len, |
226 | fbrate_base100kbps); | 226 | fbrate_base100kbps); |
227 | } | 227 | } |
@@ -312,7 +312,7 @@ static void generate_txhdr_fw4(struct b43_wldev *dev, | |||
312 | rts_rate_fb_ofdm = b43_is_ofdm_rate(rts_rate_fb); | 312 | rts_rate_fb_ofdm = b43_is_ofdm_rate(rts_rate_fb); |
313 | 313 | ||
314 | if (txctl->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) { | 314 | if (txctl->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) { |
315 | ieee80211_ctstoself_get(dev->wl->hw, dev->wl->if_id, | 315 | ieee80211_ctstoself_get(dev->wl->hw, txctl->vif, |
316 | fragment_data, fragment_len, | 316 | fragment_data, fragment_len, |
317 | txctl, | 317 | txctl, |
318 | (struct ieee80211_cts *)(txhdr-> | 318 | (struct ieee80211_cts *)(txhdr-> |
@@ -320,7 +320,7 @@ static void generate_txhdr_fw4(struct b43_wldev *dev, | |||
320 | mac_ctl |= B43_TX4_MAC_SENDCTS; | 320 | mac_ctl |= B43_TX4_MAC_SENDCTS; |
321 | len = sizeof(struct ieee80211_cts); | 321 | len = sizeof(struct ieee80211_cts); |
322 | } else { | 322 | } else { |
323 | ieee80211_rts_get(dev->wl->hw, dev->wl->if_id, | 323 | ieee80211_rts_get(dev->wl->hw, txctl->vif, |
324 | fragment_data, fragment_len, txctl, | 324 | fragment_data, fragment_len, txctl, |
325 | (struct ieee80211_rts *)(txhdr-> | 325 | (struct ieee80211_rts *)(txhdr-> |
326 | rts_frame)); | 326 | rts_frame)); |
diff --git a/drivers/net/wireless/b43legacy/b43legacy.h b/drivers/net/wireless/b43legacy/b43legacy.h index e4de437b7896..8352a4e1cfc9 100644 --- a/drivers/net/wireless/b43legacy/b43legacy.h +++ b/drivers/net/wireless/b43legacy/b43legacy.h | |||
@@ -577,10 +577,7 @@ struct b43legacy_wl { | |||
577 | * at a time. General information about this interface follows. | 577 | * at a time. General information about this interface follows. |
578 | */ | 578 | */ |
579 | 579 | ||
580 | /* Opaque ID of the operating interface from the ieee80211 | 580 | struct ieee80211_vif *vif; |
581 | * subsystem. Do not modify. | ||
582 | */ | ||
583 | int if_id; | ||
584 | /* MAC address (can be NULL). */ | 581 | /* MAC address (can be NULL). */ |
585 | u8 mac_addr[ETH_ALEN]; | 582 | u8 mac_addr[ETH_ALEN]; |
586 | /* Current BSSID (can be NULL). */ | 583 | /* Current BSSID (can be NULL). */ |
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index 575fd9a5874d..2d5735ddad8c 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
@@ -976,7 +976,7 @@ static void b43legacy_write_probe_resp_plcp(struct b43legacy_wldev *dev, | |||
976 | plcp.data = 0; | 976 | plcp.data = 0; |
977 | b43legacy_generate_plcp_hdr(&plcp, size + FCS_LEN, rate); | 977 | b43legacy_generate_plcp_hdr(&plcp, size + FCS_LEN, rate); |
978 | dur = ieee80211_generic_frame_duration(dev->wl->hw, | 978 | dur = ieee80211_generic_frame_duration(dev->wl->hw, |
979 | dev->wl->if_id, | 979 | dev->wl->vif, |
980 | size, | 980 | size, |
981 | B43legacy_RATE_TO_100KBPS(rate)); | 981 | B43legacy_RATE_TO_100KBPS(rate)); |
982 | /* Write PLCP in two parts and timing for packet transfer */ | 982 | /* Write PLCP in two parts and timing for packet transfer */ |
@@ -1042,7 +1042,7 @@ static u8 *b43legacy_generate_probe_resp(struct b43legacy_wldev *dev, | |||
1042 | hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | | 1042 | hdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | |
1043 | IEEE80211_STYPE_PROBE_RESP); | 1043 | IEEE80211_STYPE_PROBE_RESP); |
1044 | dur = ieee80211_generic_frame_duration(dev->wl->hw, | 1044 | dur = ieee80211_generic_frame_duration(dev->wl->hw, |
1045 | dev->wl->if_id, | 1045 | dev->wl->vif, |
1046 | *dest_size, | 1046 | *dest_size, |
1047 | B43legacy_RATE_TO_100KBPS(rate)); | 1047 | B43legacy_RATE_TO_100KBPS(rate)); |
1048 | hdr->duration_id = dur; | 1048 | hdr->duration_id = dur; |
@@ -2647,7 +2647,7 @@ static void b43legacy_op_configure_filter(struct ieee80211_hw *hw, | |||
2647 | } | 2647 | } |
2648 | 2648 | ||
2649 | static int b43legacy_op_config_interface(struct ieee80211_hw *hw, | 2649 | static int b43legacy_op_config_interface(struct ieee80211_hw *hw, |
2650 | int if_id, | 2650 | struct ieee80211_vif *vif, |
2651 | struct ieee80211_if_conf *conf) | 2651 | struct ieee80211_if_conf *conf) |
2652 | { | 2652 | { |
2653 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); | 2653 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); |
@@ -2658,7 +2658,7 @@ static int b43legacy_op_config_interface(struct ieee80211_hw *hw, | |||
2658 | return -ENODEV; | 2658 | return -ENODEV; |
2659 | mutex_lock(&wl->mutex); | 2659 | mutex_lock(&wl->mutex); |
2660 | spin_lock_irqsave(&wl->irq_lock, flags); | 2660 | spin_lock_irqsave(&wl->irq_lock, flags); |
2661 | B43legacy_WARN_ON(wl->if_id != if_id); | 2661 | B43legacy_WARN_ON(wl->vif != vif); |
2662 | if (conf->bssid) | 2662 | if (conf->bssid) |
2663 | memcpy(wl->bssid, conf->bssid, ETH_ALEN); | 2663 | memcpy(wl->bssid, conf->bssid, ETH_ALEN); |
2664 | else | 2664 | else |
@@ -3177,7 +3177,7 @@ static int b43legacy_op_add_interface(struct ieee80211_hw *hw, | |||
3177 | 3177 | ||
3178 | dev = wl->current_dev; | 3178 | dev = wl->current_dev; |
3179 | wl->operating = 1; | 3179 | wl->operating = 1; |
3180 | wl->if_id = conf->if_id; | 3180 | wl->vif = conf->vif; |
3181 | wl->if_type = conf->type; | 3181 | wl->if_type = conf->type; |
3182 | memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); | 3182 | memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); |
3183 | 3183 | ||
@@ -3205,7 +3205,8 @@ static void b43legacy_op_remove_interface(struct ieee80211_hw *hw, | |||
3205 | mutex_lock(&wl->mutex); | 3205 | mutex_lock(&wl->mutex); |
3206 | 3206 | ||
3207 | B43legacy_WARN_ON(!wl->operating); | 3207 | B43legacy_WARN_ON(!wl->operating); |
3208 | B43legacy_WARN_ON(wl->if_id != conf->if_id); | 3208 | B43legacy_WARN_ON(wl->vif != conf->vif); |
3209 | wl->vif = NULL; | ||
3209 | 3210 | ||
3210 | wl->operating = 0; | 3211 | wl->operating = 0; |
3211 | 3212 | ||
diff --git a/drivers/net/wireless/b43legacy/xmit.c b/drivers/net/wireless/b43legacy/xmit.c index fa095d43237f..e20c552442d5 100644 --- a/drivers/net/wireless/b43legacy/xmit.c +++ b/drivers/net/wireless/b43legacy/xmit.c | |||
@@ -223,7 +223,7 @@ static void generate_txhdr_fw3(struct b43legacy_wldev *dev, | |||
223 | } else { | 223 | } else { |
224 | int fbrate_base100kbps = B43legacy_RATE_TO_100KBPS(rate_fb); | 224 | int fbrate_base100kbps = B43legacy_RATE_TO_100KBPS(rate_fb); |
225 | txhdr->dur_fb = ieee80211_generic_frame_duration(dev->wl->hw, | 225 | txhdr->dur_fb = ieee80211_generic_frame_duration(dev->wl->hw, |
226 | dev->wl->if_id, | 226 | txctl->vif, |
227 | fragment_len, | 227 | fragment_len, |
228 | fbrate_base100kbps); | 228 | fbrate_base100kbps); |
229 | } | 229 | } |
@@ -312,7 +312,7 @@ static void generate_txhdr_fw3(struct b43legacy_wldev *dev, | |||
312 | 312 | ||
313 | if (txctl->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) { | 313 | if (txctl->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) { |
314 | ieee80211_ctstoself_get(dev->wl->hw, | 314 | ieee80211_ctstoself_get(dev->wl->hw, |
315 | dev->wl->if_id, | 315 | txctl->vif, |
316 | fragment_data, | 316 | fragment_data, |
317 | fragment_len, txctl, | 317 | fragment_len, txctl, |
318 | (struct ieee80211_cts *) | 318 | (struct ieee80211_cts *) |
@@ -321,7 +321,7 @@ static void generate_txhdr_fw3(struct b43legacy_wldev *dev, | |||
321 | len = sizeof(struct ieee80211_cts); | 321 | len = sizeof(struct ieee80211_cts); |
322 | } else { | 322 | } else { |
323 | ieee80211_rts_get(dev->wl->hw, | 323 | ieee80211_rts_get(dev->wl->hw, |
324 | dev->wl->if_id, | 324 | txctl->vif, |
325 | fragment_data, fragment_len, txctl, | 325 | fragment_data, fragment_len, txctl, |
326 | (struct ieee80211_rts *) | 326 | (struct ieee80211_rts *) |
327 | (txhdr->rts_frame)); | 327 | (txhdr->rts_frame)); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h index e97f1fb48b97..20b925f57e35 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.h +++ b/drivers/net/wireless/iwlwifi/iwl-3945.h | |||
@@ -863,7 +863,7 @@ struct iwl3945_priv { | |||
863 | u32 timestamp1; | 863 | u32 timestamp1; |
864 | u16 beacon_int; | 864 | u16 beacon_int; |
865 | struct iwl3945_driver_hw_info hw_setting; | 865 | struct iwl3945_driver_hw_info hw_setting; |
866 | int interface_id; | 866 | struct ieee80211_vif *vif; |
867 | 867 | ||
868 | /* Current association information needed to configure the | 868 | /* Current association information needed to configure the |
869 | * hardware */ | 869 | * hardware */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.h b/drivers/net/wireless/iwlwifi/iwl-4965.h index 241f4448a4ad..aad7f70bab76 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.h +++ b/drivers/net/wireless/iwlwifi/iwl-4965.h | |||
@@ -1212,7 +1212,7 @@ struct iwl4965_priv { | |||
1212 | u32 timestamp1; | 1212 | u32 timestamp1; |
1213 | u16 beacon_int; | 1213 | u16 beacon_int; |
1214 | struct iwl4965_driver_hw_info hw_setting; | 1214 | struct iwl4965_driver_hw_info hw_setting; |
1215 | int interface_id; | 1215 | struct ieee80211_vif *vif; |
1216 | 1216 | ||
1217 | /* Current association information needed to configure the | 1217 | /* Current association information needed to configure the |
1218 | * hardware */ | 1218 | * hardware */ |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index b662ff3b9141..1830e13d5cfd 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -2767,8 +2767,8 @@ static int iwl3945_tx_skb(struct iwl3945_priv *priv, | |||
2767 | goto drop_unlock; | 2767 | goto drop_unlock; |
2768 | } | 2768 | } |
2769 | 2769 | ||
2770 | if (!priv->interface_id) { | 2770 | if (!priv->vif) { |
2771 | IWL_DEBUG_DROP("Dropping - !priv->interface_id\n"); | 2771 | IWL_DEBUG_DROP("Dropping - !priv->vif\n"); |
2772 | goto drop_unlock; | 2772 | goto drop_unlock; |
2773 | } | 2773 | } |
2774 | 2774 | ||
@@ -3549,7 +3549,7 @@ static void iwl3945_bg_beacon_update(struct work_struct *work) | |||
3549 | struct sk_buff *beacon; | 3549 | struct sk_buff *beacon; |
3550 | 3550 | ||
3551 | /* Pull updated AP beacon from mac80211. will fail if not in AP mode */ | 3551 | /* Pull updated AP beacon from mac80211. will fail if not in AP mode */ |
3552 | beacon = ieee80211_beacon_get(priv->hw, priv->interface_id, NULL); | 3552 | beacon = ieee80211_beacon_get(priv->hw, priv->vif, NULL); |
3553 | 3553 | ||
3554 | if (!beacon) { | 3554 | if (!beacon) { |
3555 | IWL_ERROR("update beacon failed\n"); | 3555 | IWL_ERROR("update beacon failed\n"); |
@@ -6780,7 +6780,7 @@ static void iwl3945_bg_post_associate(struct work_struct *data) | |||
6780 | 6780 | ||
6781 | mutex_lock(&priv->mutex); | 6781 | mutex_lock(&priv->mutex); |
6782 | 6782 | ||
6783 | if (!priv->interface_id || !priv->is_open) { | 6783 | if (!priv->vif || !priv->is_open) { |
6784 | mutex_unlock(&priv->mutex); | 6784 | mutex_unlock(&priv->mutex); |
6785 | return; | 6785 | return; |
6786 | } | 6786 | } |
@@ -6981,15 +6981,15 @@ static int iwl3945_mac_add_interface(struct ieee80211_hw *hw, | |||
6981 | unsigned long flags; | 6981 | unsigned long flags; |
6982 | DECLARE_MAC_BUF(mac); | 6982 | DECLARE_MAC_BUF(mac); |
6983 | 6983 | ||
6984 | IWL_DEBUG_MAC80211("enter: id %d, type %d\n", conf->if_id, conf->type); | 6984 | IWL_DEBUG_MAC80211("enter: type %d\n", conf->type); |
6985 | 6985 | ||
6986 | if (priv->interface_id) { | 6986 | if (priv->vif) { |
6987 | IWL_DEBUG_MAC80211("leave - interface_id != 0\n"); | 6987 | IWL_DEBUG_MAC80211("leave - vif != NULL\n"); |
6988 | return -EOPNOTSUPP; | 6988 | return -EOPNOTSUPP; |
6989 | } | 6989 | } |
6990 | 6990 | ||
6991 | spin_lock_irqsave(&priv->lock, flags); | 6991 | spin_lock_irqsave(&priv->lock, flags); |
6992 | priv->interface_id = conf->if_id; | 6992 | priv->vif = conf->vif; |
6993 | 6993 | ||
6994 | spin_unlock_irqrestore(&priv->lock, flags); | 6994 | spin_unlock_irqrestore(&priv->lock, flags); |
6995 | 6995 | ||
@@ -7157,7 +7157,8 @@ static void iwl3945_config_ap(struct iwl3945_priv *priv) | |||
7157 | * clear sta table, add BCAST sta... */ | 7157 | * clear sta table, add BCAST sta... */ |
7158 | } | 7158 | } |
7159 | 7159 | ||
7160 | static int iwl3945_mac_config_interface(struct ieee80211_hw *hw, int if_id, | 7160 | static int iwl3945_mac_config_interface(struct ieee80211_hw *hw, |
7161 | struct ieee80211_vif *vif, | ||
7161 | struct ieee80211_if_conf *conf) | 7162 | struct ieee80211_if_conf *conf) |
7162 | { | 7163 | { |
7163 | struct iwl3945_priv *priv = hw->priv; | 7164 | struct iwl3945_priv *priv = hw->priv; |
@@ -7179,7 +7180,6 @@ static int iwl3945_mac_config_interface(struct ieee80211_hw *hw, int if_id, | |||
7179 | 7180 | ||
7180 | mutex_lock(&priv->mutex); | 7181 | mutex_lock(&priv->mutex); |
7181 | 7182 | ||
7182 | IWL_DEBUG_MAC80211("enter: interface id %d\n", if_id); | ||
7183 | if (conf->bssid) | 7183 | if (conf->bssid) |
7184 | IWL_DEBUG_MAC80211("bssid: %s\n", | 7184 | IWL_DEBUG_MAC80211("bssid: %s\n", |
7185 | print_mac(mac, conf->bssid)); | 7185 | print_mac(mac, conf->bssid)); |
@@ -7196,8 +7196,8 @@ static int iwl3945_mac_config_interface(struct ieee80211_hw *hw, int if_id, | |||
7196 | return 0; | 7196 | return 0; |
7197 | } | 7197 | } |
7198 | 7198 | ||
7199 | if (priv->interface_id != if_id) { | 7199 | if (priv->vif != vif) { |
7200 | IWL_DEBUG_MAC80211("leave - interface_id != if_id\n"); | 7200 | IWL_DEBUG_MAC80211("leave - priv->vif != vif\n"); |
7201 | mutex_unlock(&priv->mutex); | 7201 | mutex_unlock(&priv->mutex); |
7202 | return 0; | 7202 | return 0; |
7203 | } | 7203 | } |
@@ -7295,8 +7295,8 @@ static void iwl3945_mac_remove_interface(struct ieee80211_hw *hw, | |||
7295 | priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK; | 7295 | priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK; |
7296 | iwl3945_commit_rxon(priv); | 7296 | iwl3945_commit_rxon(priv); |
7297 | } | 7297 | } |
7298 | if (priv->interface_id == conf->if_id) { | 7298 | if (priv->vif == conf->vif) { |
7299 | priv->interface_id = 0; | 7299 | priv->vif = NULL; |
7300 | memset(priv->bssid, 0, ETH_ALEN); | 7300 | memset(priv->bssid, 0, ETH_ALEN); |
7301 | memset(priv->essid, 0, IW_ESSID_MAX_SIZE); | 7301 | memset(priv->essid, 0, IW_ESSID_MAX_SIZE); |
7302 | priv->essid_len = 0; | 7302 | priv->essid_len = 0; |
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c index ce0574b087fb..52eb37f4ac78 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c | |||
@@ -2897,8 +2897,8 @@ static int iwl4965_tx_skb(struct iwl4965_priv *priv, | |||
2897 | goto drop_unlock; | 2897 | goto drop_unlock; |
2898 | } | 2898 | } |
2899 | 2899 | ||
2900 | if (!priv->interface_id) { | 2900 | if (!priv->vif) { |
2901 | IWL_DEBUG_DROP("Dropping - !priv->interface_id\n"); | 2901 | IWL_DEBUG_DROP("Dropping - !priv->vif\n"); |
2902 | goto drop_unlock; | 2902 | goto drop_unlock; |
2903 | } | 2903 | } |
2904 | 2904 | ||
@@ -3893,7 +3893,7 @@ static void iwl4965_bg_beacon_update(struct work_struct *work) | |||
3893 | struct sk_buff *beacon; | 3893 | struct sk_buff *beacon; |
3894 | 3894 | ||
3895 | /* Pull updated AP beacon from mac80211. will fail if not in AP mode */ | 3895 | /* Pull updated AP beacon from mac80211. will fail if not in AP mode */ |
3896 | beacon = ieee80211_beacon_get(priv->hw, priv->interface_id, NULL); | 3896 | beacon = ieee80211_beacon_get(priv->hw, priv->vif, NULL); |
3897 | 3897 | ||
3898 | if (!beacon) { | 3898 | if (!beacon) { |
3899 | IWL_ERROR("update beacon failed\n"); | 3899 | IWL_ERROR("update beacon failed\n"); |
@@ -7214,7 +7214,7 @@ static void iwl4965_bg_post_associate(struct work_struct *data) | |||
7214 | 7214 | ||
7215 | mutex_lock(&priv->mutex); | 7215 | mutex_lock(&priv->mutex); |
7216 | 7216 | ||
7217 | if (!priv->interface_id || !priv->is_open) { | 7217 | if (!priv->vif || !priv->is_open) { |
7218 | mutex_unlock(&priv->mutex); | 7218 | mutex_unlock(&priv->mutex); |
7219 | return; | 7219 | return; |
7220 | } | 7220 | } |
@@ -7425,15 +7425,15 @@ static int iwl4965_mac_add_interface(struct ieee80211_hw *hw, | |||
7425 | unsigned long flags; | 7425 | unsigned long flags; |
7426 | DECLARE_MAC_BUF(mac); | 7426 | DECLARE_MAC_BUF(mac); |
7427 | 7427 | ||
7428 | IWL_DEBUG_MAC80211("enter: id %d, type %d\n", conf->if_id, conf->type); | 7428 | IWL_DEBUG_MAC80211("enter: type %d\n", conf->type); |
7429 | 7429 | ||
7430 | if (priv->interface_id) { | 7430 | if (priv->vif) { |
7431 | IWL_DEBUG_MAC80211("leave - interface_id != 0\n"); | 7431 | IWL_DEBUG_MAC80211("leave - vif != NULL\n"); |
7432 | return 0; | 7432 | return 0; |
7433 | } | 7433 | } |
7434 | 7434 | ||
7435 | spin_lock_irqsave(&priv->lock, flags); | 7435 | spin_lock_irqsave(&priv->lock, flags); |
7436 | priv->interface_id = conf->if_id; | 7436 | priv->vif = conf->vif; |
7437 | 7437 | ||
7438 | spin_unlock_irqrestore(&priv->lock, flags); | 7438 | spin_unlock_irqrestore(&priv->lock, flags); |
7439 | 7439 | ||
@@ -7617,7 +7617,8 @@ static void iwl4965_config_ap(struct iwl4965_priv *priv) | |||
7617 | * clear sta table, add BCAST sta... */ | 7617 | * clear sta table, add BCAST sta... */ |
7618 | } | 7618 | } |
7619 | 7619 | ||
7620 | static int iwl4965_mac_config_interface(struct ieee80211_hw *hw, int if_id, | 7620 | static int iwl4965_mac_config_interface(struct ieee80211_hw *hw, |
7621 | struct ieee80211_vif *vif, | ||
7621 | struct ieee80211_if_conf *conf) | 7622 | struct ieee80211_if_conf *conf) |
7622 | { | 7623 | { |
7623 | struct iwl4965_priv *priv = hw->priv; | 7624 | struct iwl4965_priv *priv = hw->priv; |
@@ -7637,7 +7638,6 @@ static int iwl4965_mac_config_interface(struct ieee80211_hw *hw, int if_id, | |||
7637 | 7638 | ||
7638 | mutex_lock(&priv->mutex); | 7639 | mutex_lock(&priv->mutex); |
7639 | 7640 | ||
7640 | IWL_DEBUG_MAC80211("enter: interface id %d\n", if_id); | ||
7641 | if (conf->bssid) | 7641 | if (conf->bssid) |
7642 | IWL_DEBUG_MAC80211("bssid: %s\n", | 7642 | IWL_DEBUG_MAC80211("bssid: %s\n", |
7643 | print_mac(mac, conf->bssid)); | 7643 | print_mac(mac, conf->bssid)); |
@@ -7654,8 +7654,8 @@ static int iwl4965_mac_config_interface(struct ieee80211_hw *hw, int if_id, | |||
7654 | return 0; | 7654 | return 0; |
7655 | } | 7655 | } |
7656 | 7656 | ||
7657 | if (priv->interface_id != if_id) { | 7657 | if (priv->vif != vif) { |
7658 | IWL_DEBUG_MAC80211("leave - interface_id != if_id\n"); | 7658 | IWL_DEBUG_MAC80211("leave - priv->vif != vif\n"); |
7659 | mutex_unlock(&priv->mutex); | 7659 | mutex_unlock(&priv->mutex); |
7660 | return 0; | 7660 | return 0; |
7661 | } | 7661 | } |
@@ -7753,8 +7753,8 @@ static void iwl4965_mac_remove_interface(struct ieee80211_hw *hw, | |||
7753 | priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK; | 7753 | priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK; |
7754 | iwl4965_commit_rxon(priv); | 7754 | iwl4965_commit_rxon(priv); |
7755 | } | 7755 | } |
7756 | if (priv->interface_id == conf->if_id) { | 7756 | if (priv->vif == conf->vif) { |
7757 | priv->interface_id = 0; | 7757 | priv->vif = NULL; |
7758 | memset(priv->bssid, 0, ETH_ALEN); | 7758 | memset(priv->bssid, 0, ETH_ALEN); |
7759 | memset(priv->essid, 0, IW_ESSID_MAX_SIZE); | 7759 | memset(priv->essid, 0, IW_ESSID_MAX_SIZE); |
7760 | priv->essid_len = 0; | 7760 | priv->essid_len = 0; |
diff --git a/drivers/net/wireless/p54common.c b/drivers/net/wireless/p54common.c index 9660fdd873ac..5cda49aff3a8 100644 --- a/drivers/net/wireless/p54common.c +++ b/drivers/net/wireless/p54common.c | |||
@@ -854,7 +854,8 @@ static int p54_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | |||
854 | return ret; | 854 | return ret; |
855 | } | 855 | } |
856 | 856 | ||
857 | static int p54_config_interface(struct ieee80211_hw *dev, int if_id, | 857 | static int p54_config_interface(struct ieee80211_hw *dev, |
858 | struct ieee80211_vif *vif, | ||
858 | struct ieee80211_if_conf *conf) | 859 | struct ieee80211_if_conf *conf) |
859 | { | 860 | { |
860 | struct p54_common *priv = dev->priv; | 861 | struct p54_common *priv = dev->priv; |
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 5fb9734ade85..94a8a7ce5382 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
@@ -372,7 +372,7 @@ struct interface { | |||
372 | * to us by the 80211 stack, and is used to request | 372 | * to us by the 80211 stack, and is used to request |
373 | * new beacons. | 373 | * new beacons. |
374 | */ | 374 | */ |
375 | int id; | 375 | struct ieee80211_vif *id; |
376 | 376 | ||
377 | /* | 377 | /* |
378 | * Current working type (IEEE80211_IF_TYPE_*). | 378 | * Current working type (IEEE80211_IF_TYPE_*). |
@@ -929,7 +929,8 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, | |||
929 | void rt2x00mac_remove_interface(struct ieee80211_hw *hw, | 929 | void rt2x00mac_remove_interface(struct ieee80211_hw *hw, |
930 | struct ieee80211_if_init_conf *conf); | 930 | struct ieee80211_if_init_conf *conf); |
931 | int rt2x00mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf); | 931 | int rt2x00mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf); |
932 | int rt2x00mac_config_interface(struct ieee80211_hw *hw, int if_id, | 932 | int rt2x00mac_config_interface(struct ieee80211_hw *hw, |
933 | struct ieee80211_vif *vif, | ||
933 | struct ieee80211_if_conf *conf); | 934 | struct ieee80211_if_conf *conf); |
934 | int rt2x00mac_get_stats(struct ieee80211_hw *hw, | 935 | int rt2x00mac_get_stats(struct ieee80211_hw *hw, |
935 | struct ieee80211_low_level_stats *stats); | 936 | struct ieee80211_low_level_stats *stats); |
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index e99d167d7df6..1d67bcd46bcb 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c | |||
@@ -181,7 +181,7 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, | |||
181 | is_interface_present(intf)) | 181 | is_interface_present(intf)) |
182 | return -ENOBUFS; | 182 | return -ENOBUFS; |
183 | 183 | ||
184 | intf->id = conf->if_id; | 184 | intf->id = conf->vif; |
185 | intf->type = conf->type; | 185 | intf->type = conf->type; |
186 | if (conf->type == IEEE80211_IF_TYPE_AP) | 186 | if (conf->type == IEEE80211_IF_TYPE_AP) |
187 | memcpy(&intf->bssid, conf->mac_addr, ETH_ALEN); | 187 | memcpy(&intf->bssid, conf->mac_addr, ETH_ALEN); |
@@ -265,7 +265,8 @@ int rt2x00mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf) | |||
265 | } | 265 | } |
266 | EXPORT_SYMBOL_GPL(rt2x00mac_config); | 266 | EXPORT_SYMBOL_GPL(rt2x00mac_config); |
267 | 267 | ||
268 | int rt2x00mac_config_interface(struct ieee80211_hw *hw, int if_id, | 268 | int rt2x00mac_config_interface(struct ieee80211_hw *hw, |
269 | struct ieee80211_vif *vif, | ||
269 | struct ieee80211_if_conf *conf) | 270 | struct ieee80211_if_conf *conf) |
270 | { | 271 | { |
271 | struct rt2x00_dev *rt2x00dev = hw->priv; | 272 | struct rt2x00_dev *rt2x00dev = hw->priv; |
diff --git a/drivers/net/wireless/rtl8180.h b/drivers/net/wireless/rtl8180.h index 0b333cacbd85..2cbfe3c8081f 100644 --- a/drivers/net/wireless/rtl8180.h +++ b/drivers/net/wireless/rtl8180.h | |||
@@ -90,8 +90,8 @@ struct rtl8180_priv { | |||
90 | /* common between rtl818x drivers */ | 90 | /* common between rtl818x drivers */ |
91 | struct rtl818x_csr __iomem *map; | 91 | struct rtl818x_csr __iomem *map; |
92 | const struct rtl818x_rf_ops *rf; | 92 | const struct rtl818x_rf_ops *rf; |
93 | struct ieee80211_vif *vif; | ||
93 | int mode; | 94 | int mode; |
94 | int if_id; | ||
95 | 95 | ||
96 | /* rtl8180 driver specific */ | 96 | /* rtl8180 driver specific */ |
97 | spinlock_t lock; | 97 | spinlock_t lock; |
diff --git a/drivers/net/wireless/rtl8180_dev.c b/drivers/net/wireless/rtl8180_dev.c index 4b7b032c194a..07f37b0ccf91 100644 --- a/drivers/net/wireless/rtl8180_dev.c +++ b/drivers/net/wireless/rtl8180_dev.c | |||
@@ -236,7 +236,8 @@ static int rtl8180_tx(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
236 | kmemdup(control, sizeof(*control), GFP_ATOMIC); | 236 | kmemdup(control, sizeof(*control), GFP_ATOMIC); |
237 | 237 | ||
238 | if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) | 238 | if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) |
239 | rts_duration = ieee80211_rts_duration(dev, priv->if_id, skb->len, control); | 239 | rts_duration = ieee80211_rts_duration(dev, priv->vif, skb->len, |
240 | control); | ||
240 | 241 | ||
241 | if (!priv->r8185) { | 242 | if (!priv->r8185) { |
242 | unsigned int remainder; | 243 | unsigned int remainder; |
@@ -638,6 +639,8 @@ static int rtl8180_add_interface(struct ieee80211_hw *dev, | |||
638 | return -EOPNOTSUPP; | 639 | return -EOPNOTSUPP; |
639 | } | 640 | } |
640 | 641 | ||
642 | priv->vif = conf->vif; | ||
643 | |||
641 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); | 644 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); |
642 | rtl818x_iowrite32(priv, (__le32 __iomem *)&priv->map->MAC[0], | 645 | rtl818x_iowrite32(priv, (__le32 __iomem *)&priv->map->MAC[0], |
643 | cpu_to_le32(*(u32 *)conf->mac_addr)); | 646 | cpu_to_le32(*(u32 *)conf->mac_addr)); |
@@ -653,6 +656,7 @@ static void rtl8180_remove_interface(struct ieee80211_hw *dev, | |||
653 | { | 656 | { |
654 | struct rtl8180_priv *priv = dev->priv; | 657 | struct rtl8180_priv *priv = dev->priv; |
655 | priv->mode = IEEE80211_IF_TYPE_MNTR; | 658 | priv->mode = IEEE80211_IF_TYPE_MNTR; |
659 | priv->vif = NULL; | ||
656 | } | 660 | } |
657 | 661 | ||
658 | static int rtl8180_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | 662 | static int rtl8180_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) |
@@ -664,14 +668,13 @@ static int rtl8180_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | |||
664 | return 0; | 668 | return 0; |
665 | } | 669 | } |
666 | 670 | ||
667 | static int rtl8180_config_interface(struct ieee80211_hw *dev, int if_id, | 671 | static int rtl8180_config_interface(struct ieee80211_hw *dev, |
672 | struct ieee80211_vif *vif, | ||
668 | struct ieee80211_if_conf *conf) | 673 | struct ieee80211_if_conf *conf) |
669 | { | 674 | { |
670 | struct rtl8180_priv *priv = dev->priv; | 675 | struct rtl8180_priv *priv = dev->priv; |
671 | int i; | 676 | int i; |
672 | 677 | ||
673 | priv->if_id = if_id; | ||
674 | |||
675 | for (i = 0; i < ETH_ALEN; i++) | 678 | for (i = 0; i < ETH_ALEN; i++) |
676 | rtl818x_iowrite8(priv, &priv->map->BSSID[i], conf->bssid[i]); | 679 | rtl818x_iowrite8(priv, &priv->map->BSSID[i], conf->bssid[i]); |
677 | 680 | ||
diff --git a/drivers/net/wireless/rtl8187.h b/drivers/net/wireless/rtl8187.h index 26a4f1097b4a..8680a0b6433c 100644 --- a/drivers/net/wireless/rtl8187.h +++ b/drivers/net/wireless/rtl8187.h | |||
@@ -65,8 +65,8 @@ struct rtl8187_priv { | |||
65 | /* common between rtl818x drivers */ | 65 | /* common between rtl818x drivers */ |
66 | struct rtl818x_csr *map; | 66 | struct rtl818x_csr *map; |
67 | const struct rtl818x_rf_ops *rf; | 67 | const struct rtl818x_rf_ops *rf; |
68 | struct ieee80211_vif *vif; | ||
68 | int mode; | 69 | int mode; |
69 | int if_id; | ||
70 | 70 | ||
71 | /* rtl8187 specific */ | 71 | /* rtl8187 specific */ |
72 | struct ieee80211_channel channels[14]; | 72 | struct ieee80211_channel channels[14]; |
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c index 8dab25a65990..0d71716d750d 100644 --- a/drivers/net/wireless/rtl8187_dev.c +++ b/drivers/net/wireless/rtl8187_dev.c | |||
@@ -150,7 +150,8 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
150 | flags |= RTL8187_TX_FLAG_MORE_FRAG; | 150 | flags |= RTL8187_TX_FLAG_MORE_FRAG; |
151 | if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) { | 151 | if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS) { |
152 | flags |= RTL8187_TX_FLAG_RTS; | 152 | flags |= RTL8187_TX_FLAG_RTS; |
153 | rts_dur = ieee80211_rts_duration(dev, priv->if_id, skb->len, control); | 153 | rts_dur = ieee80211_rts_duration(dev, priv->vif, |
154 | skb->len, control); | ||
154 | } | 155 | } |
155 | if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) | 156 | if (control->flags & IEEE80211_TXCTL_USE_CTS_PROTECT) |
156 | flags |= RTL8187_TX_FLAG_CTS; | 157 | flags |= RTL8187_TX_FLAG_CTS; |
@@ -560,14 +561,13 @@ static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf) | |||
560 | return 0; | 561 | return 0; |
561 | } | 562 | } |
562 | 563 | ||
563 | static int rtl8187_config_interface(struct ieee80211_hw *dev, int if_id, | 564 | static int rtl8187_config_interface(struct ieee80211_hw *dev, |
565 | struct ieee80211_vif *vif, | ||
564 | struct ieee80211_if_conf *conf) | 566 | struct ieee80211_if_conf *conf) |
565 | { | 567 | { |
566 | struct rtl8187_priv *priv = dev->priv; | 568 | struct rtl8187_priv *priv = dev->priv; |
567 | int i; | 569 | int i; |
568 | 570 | ||
569 | priv->if_id = if_id; | ||
570 | |||
571 | for (i = 0; i < ETH_ALEN; i++) | 571 | for (i = 0; i < ETH_ALEN; i++) |
572 | rtl818x_iowrite8(priv, &priv->map->BSSID[i], conf->bssid[i]); | 572 | rtl818x_iowrite8(priv, &priv->map->BSSID[i], conf->bssid[i]); |
573 | 573 | ||
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c index 7b8693050480..3409cf97f5f8 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.c +++ b/drivers/net/wireless/zd1211rw/zd_mac.c | |||
@@ -733,7 +733,8 @@ static int zd_op_config(struct ieee80211_hw *hw, struct ieee80211_conf *conf) | |||
733 | return zd_chip_set_channel(&mac->chip, conf->channel); | 733 | return zd_chip_set_channel(&mac->chip, conf->channel); |
734 | } | 734 | } |
735 | 735 | ||
736 | static int zd_op_config_interface(struct ieee80211_hw *hw, int if_id, | 736 | static int zd_op_config_interface(struct ieee80211_hw *hw, |
737 | struct ieee80211_vif *vif, | ||
737 | struct ieee80211_if_conf *conf) | 738 | struct ieee80211_if_conf *conf) |
738 | { | 739 | { |
739 | struct zd_mac *mac = zd_hw_mac(hw); | 740 | struct zd_mac *mac = zd_hw_mac(hw); |