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/wireless/b43legacy | |
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/wireless/b43legacy')
-rw-r--r-- | drivers/net/wireless/b43legacy/b43legacy.h | 5 | ||||
-rw-r--r-- | drivers/net/wireless/b43legacy/main.c | 13 | ||||
-rw-r--r-- | drivers/net/wireless/b43legacy/xmit.c | 6 |
3 files changed, 11 insertions, 13 deletions
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)); |