summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath5k/base.c
diff options
context:
space:
mode:
authorJohannes Berg2007-12-19 01:31:26 +0100
committerDavid S. Miller2008-01-29 00:09:36 +0100
commit32bfd35d4b63bd63de4bb0d791ef049c3c868726 (patch)
treec1c213a35a00bcbe71a2ecc6521e19dec66cf6eb /drivers/net/wireless/ath5k/base.c
parentAdd rtl8180 wireless driver (diff)
downloadkernel-qcow2-linux-32bfd35d4b63bd63de4bb0d791ef049c3c868726.tar.gz
kernel-qcow2-linux-32bfd35d4b63bd63de4bb0d791ef049c3c868726.tar.xz
kernel-qcow2-linux-32bfd35d4b63bd63de4bb0d791ef049c3c868726.zip
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/ath5k/base.c')
-rw-r--r--drivers/net/wireless/ath5k/base.c15
1 files changed, 8 insertions, 7 deletions
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,
struct ieee80211_if_init_conf *conf);
static int ath5k_config(struct ieee80211_hw *hw,
struct ieee80211_conf *conf);
-static int ath5k_config_interface(struct ieee80211_hw *hw, int if_id,
+static int ath5k_config_interface(struct ieee80211_hw *hw,
+ struct ieee80211_vif *vif,
struct ieee80211_if_conf *conf);
static void ath5k_configure_filter(struct ieee80211_hw *hw,
unsigned int changed_flags,
@@ -2498,12 +2499,12 @@ static int ath5k_add_interface(struct ieee80211_hw *hw,
int ret;
mutex_lock(&sc->lock);
- if (sc->iface_id) {
+ if (sc->vif) {
ret = 0;
goto end;
}
- sc->iface_id = conf->if_id;
+ sc->vif = conf->vif;
switch (conf->type) {
case IEEE80211_IF_TYPE_STA:
@@ -2528,10 +2529,10 @@ ath5k_remove_interface(struct ieee80211_hw *hw,
struct ath5k_softc *sc = hw->priv;
mutex_lock(&sc->lock);
- if (sc->iface_id != conf->if_id)
+ if (sc->vif != conf->vif)
goto end;
- sc->iface_id = 0;
+ sc->vif = NULL;
end:
mutex_unlock(&sc->lock);
}
@@ -2549,7 +2550,7 @@ ath5k_config(struct ieee80211_hw *hw,
}
static int
-ath5k_config_interface(struct ieee80211_hw *hw, int if_id,
+ath5k_config_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
struct ieee80211_if_conf *conf)
{
struct ath5k_softc *sc = hw->priv;
@@ -2560,7 +2561,7 @@ ath5k_config_interface(struct ieee80211_hw *hw, int if_id,
* be set to mac80211's value at ath5k_config(). */
sc->bintval = 1000 * 1000 / 1024;
mutex_lock(&sc->lock);
- if (sc->iface_id != if_id) {
+ if (sc->vif != vif) {
ret = -EIO;
goto unlock;
}