diff options
25 files changed, 170 insertions, 214 deletions
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c index 39410016b4ff..e1f04bb437e3 100644 --- a/drivers/net/wireless/adm8211.c +++ b/drivers/net/wireless/adm8211.c | |||
@@ -1400,15 +1400,15 @@ static void adm8211_configure_filter(struct ieee80211_hw *dev, | |||
1400 | } | 1400 | } |
1401 | 1401 | ||
1402 | static int adm8211_add_interface(struct ieee80211_hw *dev, | 1402 | static int adm8211_add_interface(struct ieee80211_hw *dev, |
1403 | struct ieee80211_if_init_conf *conf) | 1403 | struct ieee80211_vif *vif) |
1404 | { | 1404 | { |
1405 | struct adm8211_priv *priv = dev->priv; | 1405 | struct adm8211_priv *priv = dev->priv; |
1406 | if (priv->mode != NL80211_IFTYPE_MONITOR) | 1406 | if (priv->mode != NL80211_IFTYPE_MONITOR) |
1407 | return -EOPNOTSUPP; | 1407 | return -EOPNOTSUPP; |
1408 | 1408 | ||
1409 | switch (conf->type) { | 1409 | switch (vif->type) { |
1410 | case NL80211_IFTYPE_STATION: | 1410 | case NL80211_IFTYPE_STATION: |
1411 | priv->mode = conf->type; | 1411 | priv->mode = vif->type; |
1412 | break; | 1412 | break; |
1413 | default: | 1413 | default: |
1414 | return -EOPNOTSUPP; | 1414 | return -EOPNOTSUPP; |
@@ -1416,8 +1416,8 @@ static int adm8211_add_interface(struct ieee80211_hw *dev, | |||
1416 | 1416 | ||
1417 | ADM8211_IDLE(); | 1417 | ADM8211_IDLE(); |
1418 | 1418 | ||
1419 | ADM8211_CSR_WRITE(PAR0, le32_to_cpu(*(__le32 *)conf->mac_addr)); | 1419 | ADM8211_CSR_WRITE(PAR0, le32_to_cpu(*(__le32 *)vif->addr)); |
1420 | ADM8211_CSR_WRITE(PAR1, le16_to_cpu(*(__le16 *)(conf->mac_addr + 4))); | 1420 | ADM8211_CSR_WRITE(PAR1, le16_to_cpu(*(__le16 *)(vif->addr + 4))); |
1421 | 1421 | ||
1422 | adm8211_update_mode(dev); | 1422 | adm8211_update_mode(dev); |
1423 | 1423 | ||
@@ -1427,7 +1427,7 @@ static int adm8211_add_interface(struct ieee80211_hw *dev, | |||
1427 | } | 1427 | } |
1428 | 1428 | ||
1429 | static void adm8211_remove_interface(struct ieee80211_hw *dev, | 1429 | static void adm8211_remove_interface(struct ieee80211_hw *dev, |
1430 | struct ieee80211_if_init_conf *conf) | 1430 | struct ieee80211_vif *vif) |
1431 | { | 1431 | { |
1432 | struct adm8211_priv *priv = dev->priv; | 1432 | struct adm8211_priv *priv = dev->priv; |
1433 | priv->mode = NL80211_IFTYPE_MONITOR; | 1433 | priv->mode = NL80211_IFTYPE_MONITOR; |
diff --git a/drivers/net/wireless/at76c50x-usb.c b/drivers/net/wireless/at76c50x-usb.c index 2517364d3ebe..0fb419936dff 100644 --- a/drivers/net/wireless/at76c50x-usb.c +++ b/drivers/net/wireless/at76c50x-usb.c | |||
@@ -1789,7 +1789,7 @@ static void at76_mac80211_stop(struct ieee80211_hw *hw) | |||
1789 | } | 1789 | } |
1790 | 1790 | ||
1791 | static int at76_add_interface(struct ieee80211_hw *hw, | 1791 | static int at76_add_interface(struct ieee80211_hw *hw, |
1792 | struct ieee80211_if_init_conf *conf) | 1792 | struct ieee80211_vif *vif) |
1793 | { | 1793 | { |
1794 | struct at76_priv *priv = hw->priv; | 1794 | struct at76_priv *priv = hw->priv; |
1795 | int ret = 0; | 1795 | int ret = 0; |
@@ -1798,7 +1798,7 @@ static int at76_add_interface(struct ieee80211_hw *hw, | |||
1798 | 1798 | ||
1799 | mutex_lock(&priv->mtx); | 1799 | mutex_lock(&priv->mtx); |
1800 | 1800 | ||
1801 | switch (conf->type) { | 1801 | switch (vif->type) { |
1802 | case NL80211_IFTYPE_STATION: | 1802 | case NL80211_IFTYPE_STATION: |
1803 | priv->iw_mode = IW_MODE_INFRA; | 1803 | priv->iw_mode = IW_MODE_INFRA; |
1804 | break; | 1804 | break; |
@@ -1814,7 +1814,7 @@ exit: | |||
1814 | } | 1814 | } |
1815 | 1815 | ||
1816 | static void at76_remove_interface(struct ieee80211_hw *hw, | 1816 | static void at76_remove_interface(struct ieee80211_hw *hw, |
1817 | struct ieee80211_if_init_conf *conf) | 1817 | struct ieee80211_vif *vif) |
1818 | { | 1818 | { |
1819 | at76_dbg(DBG_MAC80211, "%s()", __func__); | 1819 | at76_dbg(DBG_MAC80211, "%s()", __func__); |
1820 | } | 1820 | } |
diff --git a/drivers/net/wireless/ath/ar9170/main.c b/drivers/net/wireless/ath/ar9170/main.c index 20f04ab2b13e..4d27f7f67c76 100644 --- a/drivers/net/wireless/ath/ar9170/main.c +++ b/drivers/net/wireless/ath/ar9170/main.c | |||
@@ -1939,7 +1939,7 @@ err_free: | |||
1939 | } | 1939 | } |
1940 | 1940 | ||
1941 | static int ar9170_op_add_interface(struct ieee80211_hw *hw, | 1941 | static int ar9170_op_add_interface(struct ieee80211_hw *hw, |
1942 | struct ieee80211_if_init_conf *conf) | 1942 | struct ieee80211_vif *vif) |
1943 | { | 1943 | { |
1944 | struct ar9170 *ar = hw->priv; | 1944 | struct ar9170 *ar = hw->priv; |
1945 | struct ath_common *common = &ar->common; | 1945 | struct ath_common *common = &ar->common; |
@@ -1952,8 +1952,8 @@ static int ar9170_op_add_interface(struct ieee80211_hw *hw, | |||
1952 | goto unlock; | 1952 | goto unlock; |
1953 | } | 1953 | } |
1954 | 1954 | ||
1955 | ar->vif = conf->vif; | 1955 | ar->vif = vif; |
1956 | memcpy(common->macaddr, conf->mac_addr, ETH_ALEN); | 1956 | memcpy(common->macaddr, vif->addr, ETH_ALEN); |
1957 | 1957 | ||
1958 | if (modparam_nohwcrypt || (ar->vif->type != NL80211_IFTYPE_STATION)) { | 1958 | if (modparam_nohwcrypt || (ar->vif->type != NL80211_IFTYPE_STATION)) { |
1959 | ar->rx_software_decryption = true; | 1959 | ar->rx_software_decryption = true; |
@@ -1973,7 +1973,7 @@ unlock: | |||
1973 | } | 1973 | } |
1974 | 1974 | ||
1975 | static void ar9170_op_remove_interface(struct ieee80211_hw *hw, | 1975 | static void ar9170_op_remove_interface(struct ieee80211_hw *hw, |
1976 | struct ieee80211_if_init_conf *conf) | 1976 | struct ieee80211_vif *vif) |
1977 | { | 1977 | { |
1978 | struct ar9170 *ar = hw->priv; | 1978 | struct ar9170 *ar = hw->priv; |
1979 | 1979 | ||
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index a4c086f069b1..20c7e5b450aa 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
@@ -225,9 +225,9 @@ static int ath5k_reset_wake(struct ath5k_softc *sc); | |||
225 | static int ath5k_start(struct ieee80211_hw *hw); | 225 | static int ath5k_start(struct ieee80211_hw *hw); |
226 | static void ath5k_stop(struct ieee80211_hw *hw); | 226 | static void ath5k_stop(struct ieee80211_hw *hw); |
227 | static int ath5k_add_interface(struct ieee80211_hw *hw, | 227 | static int ath5k_add_interface(struct ieee80211_hw *hw, |
228 | struct ieee80211_if_init_conf *conf); | 228 | struct ieee80211_vif *vif); |
229 | static void ath5k_remove_interface(struct ieee80211_hw *hw, | 229 | static void ath5k_remove_interface(struct ieee80211_hw *hw, |
230 | struct ieee80211_if_init_conf *conf); | 230 | struct ieee80211_vif *vif); |
231 | static int ath5k_config(struct ieee80211_hw *hw, u32 changed); | 231 | static int ath5k_config(struct ieee80211_hw *hw, u32 changed); |
232 | static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw, | 232 | static u64 ath5k_prepare_multicast(struct ieee80211_hw *hw, |
233 | int mc_count, struct dev_addr_list *mc_list); | 233 | int mc_count, struct dev_addr_list *mc_list); |
@@ -2785,7 +2785,7 @@ static void ath5k_stop(struct ieee80211_hw *hw) | |||
2785 | } | 2785 | } |
2786 | 2786 | ||
2787 | static int ath5k_add_interface(struct ieee80211_hw *hw, | 2787 | static int ath5k_add_interface(struct ieee80211_hw *hw, |
2788 | struct ieee80211_if_init_conf *conf) | 2788 | struct ieee80211_vif *vif) |
2789 | { | 2789 | { |
2790 | struct ath5k_softc *sc = hw->priv; | 2790 | struct ath5k_softc *sc = hw->priv; |
2791 | int ret; | 2791 | int ret; |
@@ -2796,22 +2796,22 @@ static int ath5k_add_interface(struct ieee80211_hw *hw, | |||
2796 | goto end; | 2796 | goto end; |
2797 | } | 2797 | } |
2798 | 2798 | ||
2799 | sc->vif = conf->vif; | 2799 | sc->vif = vif; |
2800 | 2800 | ||
2801 | switch (conf->type) { | 2801 | switch (vif->type) { |
2802 | case NL80211_IFTYPE_AP: | 2802 | case NL80211_IFTYPE_AP: |
2803 | case NL80211_IFTYPE_STATION: | 2803 | case NL80211_IFTYPE_STATION: |
2804 | case NL80211_IFTYPE_ADHOC: | 2804 | case NL80211_IFTYPE_ADHOC: |
2805 | case NL80211_IFTYPE_MESH_POINT: | 2805 | case NL80211_IFTYPE_MESH_POINT: |
2806 | case NL80211_IFTYPE_MONITOR: | 2806 | case NL80211_IFTYPE_MONITOR: |
2807 | sc->opmode = conf->type; | 2807 | sc->opmode = vif->type; |
2808 | break; | 2808 | break; |
2809 | default: | 2809 | default: |
2810 | ret = -EOPNOTSUPP; | 2810 | ret = -EOPNOTSUPP; |
2811 | goto end; | 2811 | goto end; |
2812 | } | 2812 | } |
2813 | 2813 | ||
2814 | ath5k_hw_set_lladdr(sc->ah, conf->mac_addr); | 2814 | ath5k_hw_set_lladdr(sc->ah, vif->addr); |
2815 | ath5k_mode_setup(sc); | 2815 | ath5k_mode_setup(sc); |
2816 | 2816 | ||
2817 | ret = 0; | 2817 | ret = 0; |
@@ -2822,13 +2822,13 @@ end: | |||
2822 | 2822 | ||
2823 | static void | 2823 | static void |
2824 | ath5k_remove_interface(struct ieee80211_hw *hw, | 2824 | ath5k_remove_interface(struct ieee80211_hw *hw, |
2825 | struct ieee80211_if_init_conf *conf) | 2825 | struct ieee80211_vif *vif) |
2826 | { | 2826 | { |
2827 | struct ath5k_softc *sc = hw->priv; | 2827 | struct ath5k_softc *sc = hw->priv; |
2828 | u8 mac[ETH_ALEN] = {}; | 2828 | u8 mac[ETH_ALEN] = {}; |
2829 | 2829 | ||
2830 | mutex_lock(&sc->lock); | 2830 | mutex_lock(&sc->lock); |
2831 | if (sc->vif != conf->vif) | 2831 | if (sc->vif != vif) |
2832 | goto end; | 2832 | goto end; |
2833 | 2833 | ||
2834 | ath5k_hw_set_lladdr(sc->ah, mac); | 2834 | ath5k_hw_set_lladdr(sc->ah, mac); |
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 3f5b887d0fcd..446bd23756e5 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -2534,12 +2534,12 @@ static void ath9k_stop(struct ieee80211_hw *hw) | |||
2534 | } | 2534 | } |
2535 | 2535 | ||
2536 | static int ath9k_add_interface(struct ieee80211_hw *hw, | 2536 | static int ath9k_add_interface(struct ieee80211_hw *hw, |
2537 | struct ieee80211_if_init_conf *conf) | 2537 | struct ieee80211_vif *vif) |
2538 | { | 2538 | { |
2539 | struct ath_wiphy *aphy = hw->priv; | 2539 | struct ath_wiphy *aphy = hw->priv; |
2540 | struct ath_softc *sc = aphy->sc; | 2540 | struct ath_softc *sc = aphy->sc; |
2541 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 2541 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
2542 | struct ath_vif *avp = (void *)conf->vif->drv_priv; | 2542 | struct ath_vif *avp = (void *)vif->drv_priv; |
2543 | enum nl80211_iftype ic_opmode = NL80211_IFTYPE_UNSPECIFIED; | 2543 | enum nl80211_iftype ic_opmode = NL80211_IFTYPE_UNSPECIFIED; |
2544 | int ret = 0; | 2544 | int ret = 0; |
2545 | 2545 | ||
@@ -2551,7 +2551,7 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, | |||
2551 | goto out; | 2551 | goto out; |
2552 | } | 2552 | } |
2553 | 2553 | ||
2554 | switch (conf->type) { | 2554 | switch (vif->type) { |
2555 | case NL80211_IFTYPE_STATION: | 2555 | case NL80211_IFTYPE_STATION: |
2556 | ic_opmode = NL80211_IFTYPE_STATION; | 2556 | ic_opmode = NL80211_IFTYPE_STATION; |
2557 | break; | 2557 | break; |
@@ -2562,11 +2562,11 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, | |||
2562 | ret = -ENOBUFS; | 2562 | ret = -ENOBUFS; |
2563 | goto out; | 2563 | goto out; |
2564 | } | 2564 | } |
2565 | ic_opmode = conf->type; | 2565 | ic_opmode = vif->type; |
2566 | break; | 2566 | break; |
2567 | default: | 2567 | default: |
2568 | ath_print(common, ATH_DBG_FATAL, | 2568 | ath_print(common, ATH_DBG_FATAL, |
2569 | "Interface type %d not yet supported\n", conf->type); | 2569 | "Interface type %d not yet supported\n", vif->type); |
2570 | ret = -EOPNOTSUPP; | 2570 | ret = -EOPNOTSUPP; |
2571 | goto out; | 2571 | goto out; |
2572 | } | 2572 | } |
@@ -2598,18 +2598,18 @@ static int ath9k_add_interface(struct ieee80211_hw *hw, | |||
2598 | * Enable MIB interrupts when there are hardware phy counters. | 2598 | * Enable MIB interrupts when there are hardware phy counters. |
2599 | * Note we only do this (at the moment) for station mode. | 2599 | * Note we only do this (at the moment) for station mode. |
2600 | */ | 2600 | */ |
2601 | if ((conf->type == NL80211_IFTYPE_STATION) || | 2601 | if ((vif->type == NL80211_IFTYPE_STATION) || |
2602 | (conf->type == NL80211_IFTYPE_ADHOC) || | 2602 | (vif->type == NL80211_IFTYPE_ADHOC) || |
2603 | (conf->type == NL80211_IFTYPE_MESH_POINT)) { | 2603 | (vif->type == NL80211_IFTYPE_MESH_POINT)) { |
2604 | sc->imask |= ATH9K_INT_MIB; | 2604 | sc->imask |= ATH9K_INT_MIB; |
2605 | sc->imask |= ATH9K_INT_TSFOOR; | 2605 | sc->imask |= ATH9K_INT_TSFOOR; |
2606 | } | 2606 | } |
2607 | 2607 | ||
2608 | ath9k_hw_set_interrupts(sc->sc_ah, sc->imask); | 2608 | ath9k_hw_set_interrupts(sc->sc_ah, sc->imask); |
2609 | 2609 | ||
2610 | if (conf->type == NL80211_IFTYPE_AP || | 2610 | if (vif->type == NL80211_IFTYPE_AP || |
2611 | conf->type == NL80211_IFTYPE_ADHOC || | 2611 | vif->type == NL80211_IFTYPE_ADHOC || |
2612 | conf->type == NL80211_IFTYPE_MONITOR) | 2612 | vif->type == NL80211_IFTYPE_MONITOR) |
2613 | ath_start_ani(common); | 2613 | ath_start_ani(common); |
2614 | 2614 | ||
2615 | out: | 2615 | out: |
@@ -2618,12 +2618,12 @@ out: | |||
2618 | } | 2618 | } |
2619 | 2619 | ||
2620 | static void ath9k_remove_interface(struct ieee80211_hw *hw, | 2620 | static void ath9k_remove_interface(struct ieee80211_hw *hw, |
2621 | struct ieee80211_if_init_conf *conf) | 2621 | struct ieee80211_vif *vif) |
2622 | { | 2622 | { |
2623 | struct ath_wiphy *aphy = hw->priv; | 2623 | struct ath_wiphy *aphy = hw->priv; |
2624 | struct ath_softc *sc = aphy->sc; | 2624 | struct ath_softc *sc = aphy->sc; |
2625 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 2625 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
2626 | struct ath_vif *avp = (void *)conf->vif->drv_priv; | 2626 | struct ath_vif *avp = (void *)vif->drv_priv; |
2627 | int i; | 2627 | int i; |
2628 | 2628 | ||
2629 | ath_print(common, ATH_DBG_CONFIG, "Detach Interface\n"); | 2629 | ath_print(common, ATH_DBG_CONFIG, "Detach Interface\n"); |
@@ -2644,7 +2644,7 @@ static void ath9k_remove_interface(struct ieee80211_hw *hw, | |||
2644 | sc->sc_flags &= ~SC_OP_BEACONS; | 2644 | sc->sc_flags &= ~SC_OP_BEACONS; |
2645 | 2645 | ||
2646 | for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) { | 2646 | for (i = 0; i < ARRAY_SIZE(sc->beacon.bslot); i++) { |
2647 | if (sc->beacon.bslot[i] == conf->vif) { | 2647 | if (sc->beacon.bslot[i] == vif) { |
2648 | printk(KERN_DEBUG "%s: vif had allocated beacon " | 2648 | printk(KERN_DEBUG "%s: vif had allocated beacon " |
2649 | "slot\n", __func__); | 2649 | "slot\n", __func__); |
2650 | sc->beacon.bslot[i] = NULL; | 2650 | sc->beacon.bslot[i] = NULL; |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index b0b5ce950008..6634a77fc766 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
@@ -4391,7 +4391,7 @@ err_busdown: | |||
4391 | } | 4391 | } |
4392 | 4392 | ||
4393 | static int b43_op_add_interface(struct ieee80211_hw *hw, | 4393 | static int b43_op_add_interface(struct ieee80211_hw *hw, |
4394 | struct ieee80211_if_init_conf *conf) | 4394 | struct ieee80211_vif *vif) |
4395 | { | 4395 | { |
4396 | struct b43_wl *wl = hw_to_b43_wl(hw); | 4396 | struct b43_wl *wl = hw_to_b43_wl(hw); |
4397 | struct b43_wldev *dev; | 4397 | struct b43_wldev *dev; |
@@ -4399,24 +4399,24 @@ static int b43_op_add_interface(struct ieee80211_hw *hw, | |||
4399 | 4399 | ||
4400 | /* TODO: allow WDS/AP devices to coexist */ | 4400 | /* TODO: allow WDS/AP devices to coexist */ |
4401 | 4401 | ||
4402 | if (conf->type != NL80211_IFTYPE_AP && | 4402 | if (vif->type != NL80211_IFTYPE_AP && |
4403 | conf->type != NL80211_IFTYPE_MESH_POINT && | 4403 | vif->type != NL80211_IFTYPE_MESH_POINT && |
4404 | conf->type != NL80211_IFTYPE_STATION && | 4404 | vif->type != NL80211_IFTYPE_STATION && |
4405 | conf->type != NL80211_IFTYPE_WDS && | 4405 | vif->type != NL80211_IFTYPE_WDS && |
4406 | conf->type != NL80211_IFTYPE_ADHOC) | 4406 | vif->type != NL80211_IFTYPE_ADHOC) |
4407 | return -EOPNOTSUPP; | 4407 | return -EOPNOTSUPP; |
4408 | 4408 | ||
4409 | mutex_lock(&wl->mutex); | 4409 | mutex_lock(&wl->mutex); |
4410 | if (wl->operating) | 4410 | if (wl->operating) |
4411 | goto out_mutex_unlock; | 4411 | goto out_mutex_unlock; |
4412 | 4412 | ||
4413 | b43dbg(wl, "Adding Interface type %d\n", conf->type); | 4413 | b43dbg(wl, "Adding Interface type %d\n", vif->type); |
4414 | 4414 | ||
4415 | dev = wl->current_dev; | 4415 | dev = wl->current_dev; |
4416 | wl->operating = 1; | 4416 | wl->operating = 1; |
4417 | wl->vif = conf->vif; | 4417 | wl->vif = vif; |
4418 | wl->if_type = conf->type; | 4418 | wl->if_type = vif->type; |
4419 | memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); | 4419 | memcpy(wl->mac_addr, vif->addr, ETH_ALEN); |
4420 | 4420 | ||
4421 | b43_adjust_opmode(dev); | 4421 | b43_adjust_opmode(dev); |
4422 | b43_set_pretbtt(dev); | 4422 | b43_set_pretbtt(dev); |
@@ -4431,17 +4431,17 @@ static int b43_op_add_interface(struct ieee80211_hw *hw, | |||
4431 | } | 4431 | } |
4432 | 4432 | ||
4433 | static void b43_op_remove_interface(struct ieee80211_hw *hw, | 4433 | static void b43_op_remove_interface(struct ieee80211_hw *hw, |
4434 | struct ieee80211_if_init_conf *conf) | 4434 | struct ieee80211_vif *vif) |
4435 | { | 4435 | { |
4436 | struct b43_wl *wl = hw_to_b43_wl(hw); | 4436 | struct b43_wl *wl = hw_to_b43_wl(hw); |
4437 | struct b43_wldev *dev = wl->current_dev; | 4437 | struct b43_wldev *dev = wl->current_dev; |
4438 | 4438 | ||
4439 | b43dbg(wl, "Removing Interface type %d\n", conf->type); | 4439 | b43dbg(wl, "Removing Interface type %d\n", vif->type); |
4440 | 4440 | ||
4441 | mutex_lock(&wl->mutex); | 4441 | mutex_lock(&wl->mutex); |
4442 | 4442 | ||
4443 | B43_WARN_ON(!wl->operating); | 4443 | B43_WARN_ON(!wl->operating); |
4444 | B43_WARN_ON(wl->vif != conf->vif); | 4444 | B43_WARN_ON(wl->vif != vif); |
4445 | wl->vif = NULL; | 4445 | wl->vif = NULL; |
4446 | 4446 | ||
4447 | wl->operating = 0; | 4447 | wl->operating = 0; |
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index ab6a18c2e9d9..494017e4fcc9 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
@@ -3361,7 +3361,7 @@ err_kfree_lo_control: | |||
3361 | } | 3361 | } |
3362 | 3362 | ||
3363 | static int b43legacy_op_add_interface(struct ieee80211_hw *hw, | 3363 | static int b43legacy_op_add_interface(struct ieee80211_hw *hw, |
3364 | struct ieee80211_if_init_conf *conf) | 3364 | struct ieee80211_vif *vif) |
3365 | { | 3365 | { |
3366 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); | 3366 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); |
3367 | struct b43legacy_wldev *dev; | 3367 | struct b43legacy_wldev *dev; |
@@ -3370,23 +3370,23 @@ static int b43legacy_op_add_interface(struct ieee80211_hw *hw, | |||
3370 | 3370 | ||
3371 | /* TODO: allow WDS/AP devices to coexist */ | 3371 | /* TODO: allow WDS/AP devices to coexist */ |
3372 | 3372 | ||
3373 | if (conf->type != NL80211_IFTYPE_AP && | 3373 | if (vif->type != NL80211_IFTYPE_AP && |
3374 | conf->type != NL80211_IFTYPE_STATION && | 3374 | vif->type != NL80211_IFTYPE_STATION && |
3375 | conf->type != NL80211_IFTYPE_WDS && | 3375 | vif->type != NL80211_IFTYPE_WDS && |
3376 | conf->type != NL80211_IFTYPE_ADHOC) | 3376 | vif->type != NL80211_IFTYPE_ADHOC) |
3377 | return -EOPNOTSUPP; | 3377 | return -EOPNOTSUPP; |
3378 | 3378 | ||
3379 | mutex_lock(&wl->mutex); | 3379 | mutex_lock(&wl->mutex); |
3380 | if (wl->operating) | 3380 | if (wl->operating) |
3381 | goto out_mutex_unlock; | 3381 | goto out_mutex_unlock; |
3382 | 3382 | ||
3383 | b43legacydbg(wl, "Adding Interface type %d\n", conf->type); | 3383 | b43legacydbg(wl, "Adding Interface type %d\n", vif->type); |
3384 | 3384 | ||
3385 | dev = wl->current_dev; | 3385 | dev = wl->current_dev; |
3386 | wl->operating = 1; | 3386 | wl->operating = 1; |
3387 | wl->vif = conf->vif; | 3387 | wl->vif = vif; |
3388 | wl->if_type = conf->type; | 3388 | wl->if_type = vif->type; |
3389 | memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); | 3389 | memcpy(wl->mac_addr, vif->addr, ETH_ALEN); |
3390 | 3390 | ||
3391 | spin_lock_irqsave(&wl->irq_lock, flags); | 3391 | spin_lock_irqsave(&wl->irq_lock, flags); |
3392 | b43legacy_adjust_opmode(dev); | 3392 | b43legacy_adjust_opmode(dev); |
@@ -3403,18 +3403,18 @@ static int b43legacy_op_add_interface(struct ieee80211_hw *hw, | |||
3403 | } | 3403 | } |
3404 | 3404 | ||
3405 | static void b43legacy_op_remove_interface(struct ieee80211_hw *hw, | 3405 | static void b43legacy_op_remove_interface(struct ieee80211_hw *hw, |
3406 | struct ieee80211_if_init_conf *conf) | 3406 | struct ieee80211_vif *vif) |
3407 | { | 3407 | { |
3408 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); | 3408 | struct b43legacy_wl *wl = hw_to_b43legacy_wl(hw); |
3409 | struct b43legacy_wldev *dev = wl->current_dev; | 3409 | struct b43legacy_wldev *dev = wl->current_dev; |
3410 | unsigned long flags; | 3410 | unsigned long flags; |
3411 | 3411 | ||
3412 | b43legacydbg(wl, "Removing Interface type %d\n", conf->type); | 3412 | b43legacydbg(wl, "Removing Interface type %d\n", vif->type); |
3413 | 3413 | ||
3414 | mutex_lock(&wl->mutex); | 3414 | mutex_lock(&wl->mutex); |
3415 | 3415 | ||
3416 | B43legacy_WARN_ON(!wl->operating); | 3416 | B43legacy_WARN_ON(!wl->operating); |
3417 | B43legacy_WARN_ON(wl->vif != conf->vif); | 3417 | B43legacy_WARN_ON(wl->vif != vif); |
3418 | wl->vif = NULL; | 3418 | wl->vif = NULL; |
3419 | 3419 | ||
3420 | wl->operating = 0; | 3420 | wl->operating = 0; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index e3b96b48b7fe..14f482960d7f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -2584,12 +2584,12 @@ int iwl_set_mode(struct iwl_priv *priv, int mode) | |||
2584 | EXPORT_SYMBOL(iwl_set_mode); | 2584 | EXPORT_SYMBOL(iwl_set_mode); |
2585 | 2585 | ||
2586 | int iwl_mac_add_interface(struct ieee80211_hw *hw, | 2586 | int iwl_mac_add_interface(struct ieee80211_hw *hw, |
2587 | struct ieee80211_if_init_conf *conf) | 2587 | struct ieee80211_vif *vif) |
2588 | { | 2588 | { |
2589 | struct iwl_priv *priv = hw->priv; | 2589 | struct iwl_priv *priv = hw->priv; |
2590 | unsigned long flags; | 2590 | unsigned long flags; |
2591 | 2591 | ||
2592 | IWL_DEBUG_MAC80211(priv, "enter: type %d\n", conf->type); | 2592 | IWL_DEBUG_MAC80211(priv, "enter: type %d\n", vif->type); |
2593 | 2593 | ||
2594 | if (priv->vif) { | 2594 | if (priv->vif) { |
2595 | IWL_DEBUG_MAC80211(priv, "leave - vif != NULL\n"); | 2595 | IWL_DEBUG_MAC80211(priv, "leave - vif != NULL\n"); |
@@ -2597,19 +2597,19 @@ int iwl_mac_add_interface(struct ieee80211_hw *hw, | |||
2597 | } | 2597 | } |
2598 | 2598 | ||
2599 | spin_lock_irqsave(&priv->lock, flags); | 2599 | spin_lock_irqsave(&priv->lock, flags); |
2600 | priv->vif = conf->vif; | 2600 | priv->vif = vif; |
2601 | priv->iw_mode = conf->type; | 2601 | priv->iw_mode = vif->type; |
2602 | 2602 | ||
2603 | spin_unlock_irqrestore(&priv->lock, flags); | 2603 | spin_unlock_irqrestore(&priv->lock, flags); |
2604 | 2604 | ||
2605 | mutex_lock(&priv->mutex); | 2605 | mutex_lock(&priv->mutex); |
2606 | 2606 | ||
2607 | if (conf->mac_addr) { | 2607 | if (vif->addr) { |
2608 | IWL_DEBUG_MAC80211(priv, "Set %pM\n", conf->mac_addr); | 2608 | IWL_DEBUG_MAC80211(priv, "Set %pM\n", vif->addr); |
2609 | memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN); | 2609 | memcpy(priv->mac_addr, vif->addr, ETH_ALEN); |
2610 | } | 2610 | } |
2611 | 2611 | ||
2612 | if (iwl_set_mode(priv, conf->type) == -EAGAIN) | 2612 | if (iwl_set_mode(priv, vif->type) == -EAGAIN) |
2613 | /* we are not ready, will run again when ready */ | 2613 | /* we are not ready, will run again when ready */ |
2614 | set_bit(STATUS_MODE_PENDING, &priv->status); | 2614 | set_bit(STATUS_MODE_PENDING, &priv->status); |
2615 | 2615 | ||
@@ -2621,7 +2621,7 @@ int iwl_mac_add_interface(struct ieee80211_hw *hw, | |||
2621 | EXPORT_SYMBOL(iwl_mac_add_interface); | 2621 | EXPORT_SYMBOL(iwl_mac_add_interface); |
2622 | 2622 | ||
2623 | void iwl_mac_remove_interface(struct ieee80211_hw *hw, | 2623 | void iwl_mac_remove_interface(struct ieee80211_hw *hw, |
2624 | struct ieee80211_if_init_conf *conf) | 2624 | struct ieee80211_vif *vif) |
2625 | { | 2625 | { |
2626 | struct iwl_priv *priv = hw->priv; | 2626 | struct iwl_priv *priv = hw->priv; |
2627 | 2627 | ||
@@ -2634,7 +2634,7 @@ void iwl_mac_remove_interface(struct ieee80211_hw *hw, | |||
2634 | priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK; | 2634 | priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK; |
2635 | iwlcore_commit_rxon(priv); | 2635 | iwlcore_commit_rxon(priv); |
2636 | } | 2636 | } |
2637 | if (priv->vif == conf->vif) { | 2637 | if (priv->vif == vif) { |
2638 | priv->vif = NULL; | 2638 | priv->vif = NULL; |
2639 | memset(priv->bssid, 0, ETH_ALEN); | 2639 | memset(priv->bssid, 0, ETH_ALEN); |
2640 | } | 2640 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index f7acbb32900a..1728f961dcba 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -332,9 +332,9 @@ int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb); | |||
332 | int iwl_commit_rxon(struct iwl_priv *priv); | 332 | int iwl_commit_rxon(struct iwl_priv *priv); |
333 | int iwl_set_mode(struct iwl_priv *priv, int mode); | 333 | int iwl_set_mode(struct iwl_priv *priv, int mode); |
334 | int iwl_mac_add_interface(struct ieee80211_hw *hw, | 334 | int iwl_mac_add_interface(struct ieee80211_hw *hw, |
335 | struct ieee80211_if_init_conf *conf); | 335 | struct ieee80211_vif *vif); |
336 | void iwl_mac_remove_interface(struct ieee80211_hw *hw, | 336 | void iwl_mac_remove_interface(struct ieee80211_hw *hw, |
337 | struct ieee80211_if_init_conf *conf); | 337 | struct ieee80211_vif *vif); |
338 | int iwl_mac_config(struct ieee80211_hw *hw, u32 changed); | 338 | int iwl_mac_config(struct ieee80211_hw *hw, u32 changed); |
339 | void iwl_config_ap(struct iwl_priv *priv); | 339 | void iwl_config_ap(struct iwl_priv *priv); |
340 | int iwl_mac_get_tx_stats(struct ieee80211_hw *hw, | 340 | int iwl_mac_get_tx_stats(struct ieee80211_hw *hw, |
diff --git a/drivers/net/wireless/libertas_tf/main.c b/drivers/net/wireless/libertas_tf/main.c index 019431d2f8a9..15a367680f59 100644 --- a/drivers/net/wireless/libertas_tf/main.c +++ b/drivers/net/wireless/libertas_tf/main.c | |||
@@ -318,14 +318,14 @@ static void lbtf_op_stop(struct ieee80211_hw *hw) | |||
318 | } | 318 | } |
319 | 319 | ||
320 | static int lbtf_op_add_interface(struct ieee80211_hw *hw, | 320 | static int lbtf_op_add_interface(struct ieee80211_hw *hw, |
321 | struct ieee80211_if_init_conf *conf) | 321 | struct ieee80211_vif *vif) |
322 | { | 322 | { |
323 | struct lbtf_private *priv = hw->priv; | 323 | struct lbtf_private *priv = hw->priv; |
324 | if (priv->vif != NULL) | 324 | if (priv->vif != NULL) |
325 | return -EOPNOTSUPP; | 325 | return -EOPNOTSUPP; |
326 | 326 | ||
327 | priv->vif = conf->vif; | 327 | priv->vif = vif; |
328 | switch (conf->type) { | 328 | switch (vif->type) { |
329 | case NL80211_IFTYPE_MESH_POINT: | 329 | case NL80211_IFTYPE_MESH_POINT: |
330 | case NL80211_IFTYPE_AP: | 330 | case NL80211_IFTYPE_AP: |
331 | lbtf_set_mode(priv, LBTF_AP_MODE); | 331 | lbtf_set_mode(priv, LBTF_AP_MODE); |
@@ -337,12 +337,12 @@ static int lbtf_op_add_interface(struct ieee80211_hw *hw, | |||
337 | priv->vif = NULL; | 337 | priv->vif = NULL; |
338 | return -EOPNOTSUPP; | 338 | return -EOPNOTSUPP; |
339 | } | 339 | } |
340 | lbtf_set_mac_address(priv, (u8 *) conf->mac_addr); | 340 | lbtf_set_mac_address(priv, (u8 *) vif->addr); |
341 | return 0; | 341 | return 0; |
342 | } | 342 | } |
343 | 343 | ||
344 | static void lbtf_op_remove_interface(struct ieee80211_hw *hw, | 344 | static void lbtf_op_remove_interface(struct ieee80211_hw *hw, |
345 | struct ieee80211_if_init_conf *conf) | 345 | struct ieee80211_vif *vif) |
346 | { | 346 | { |
347 | struct lbtf_private *priv = hw->priv; | 347 | struct lbtf_private *priv = hw->priv; |
348 | 348 | ||
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 4dee69a38c1d..84df3fcf37b3 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c | |||
@@ -584,24 +584,24 @@ static void mac80211_hwsim_stop(struct ieee80211_hw *hw) | |||
584 | 584 | ||
585 | 585 | ||
586 | static int mac80211_hwsim_add_interface(struct ieee80211_hw *hw, | 586 | static int mac80211_hwsim_add_interface(struct ieee80211_hw *hw, |
587 | struct ieee80211_if_init_conf *conf) | 587 | struct ieee80211_vif *vif) |
588 | { | 588 | { |
589 | printk(KERN_DEBUG "%s:%s (type=%d mac_addr=%pM)\n", | 589 | printk(KERN_DEBUG "%s:%s (type=%d mac_addr=%pM)\n", |
590 | wiphy_name(hw->wiphy), __func__, conf->type, | 590 | wiphy_name(hw->wiphy), __func__, vif->type, |
591 | conf->mac_addr); | 591 | vif->addr); |
592 | hwsim_set_magic(conf->vif); | 592 | hwsim_set_magic(vif); |
593 | return 0; | 593 | return 0; |
594 | } | 594 | } |
595 | 595 | ||
596 | 596 | ||
597 | static void mac80211_hwsim_remove_interface( | 597 | static void mac80211_hwsim_remove_interface( |
598 | struct ieee80211_hw *hw, struct ieee80211_if_init_conf *conf) | 598 | struct ieee80211_hw *hw, struct ieee80211_vif *vif) |
599 | { | 599 | { |
600 | printk(KERN_DEBUG "%s:%s (type=%d mac_addr=%pM)\n", | 600 | printk(KERN_DEBUG "%s:%s (type=%d mac_addr=%pM)\n", |
601 | wiphy_name(hw->wiphy), __func__, conf->type, | 601 | wiphy_name(hw->wiphy), __func__, vif->type, |
602 | conf->mac_addr); | 602 | vif->addr); |
603 | hwsim_check_magic(conf->vif); | 603 | hwsim_check_magic(vif); |
604 | hwsim_clear_magic(conf->vif); | 604 | hwsim_clear_magic(vif); |
605 | } | 605 | } |
606 | 606 | ||
607 | 607 | ||
diff --git a/drivers/net/wireless/mwl8k.c b/drivers/net/wireless/mwl8k.c index 97a95decf9a8..c1c6ecd0c5b3 100644 --- a/drivers/net/wireless/mwl8k.c +++ b/drivers/net/wireless/mwl8k.c | |||
@@ -2835,7 +2835,7 @@ static void mwl8k_stop(struct ieee80211_hw *hw) | |||
2835 | } | 2835 | } |
2836 | 2836 | ||
2837 | static int mwl8k_add_interface(struct ieee80211_hw *hw, | 2837 | static int mwl8k_add_interface(struct ieee80211_hw *hw, |
2838 | struct ieee80211_if_init_conf *conf) | 2838 | struct ieee80211_vif *vif) |
2839 | { | 2839 | { |
2840 | struct mwl8k_priv *priv = hw->priv; | 2840 | struct mwl8k_priv *priv = hw->priv; |
2841 | struct mwl8k_vif *mwl8k_vif; | 2841 | struct mwl8k_vif *mwl8k_vif; |
@@ -2849,7 +2849,7 @@ static int mwl8k_add_interface(struct ieee80211_hw *hw, | |||
2849 | /* | 2849 | /* |
2850 | * We only support managed interfaces for now. | 2850 | * We only support managed interfaces for now. |
2851 | */ | 2851 | */ |
2852 | if (conf->type != NL80211_IFTYPE_STATION) | 2852 | if (vif->type != NL80211_IFTYPE_STATION) |
2853 | return -EINVAL; | 2853 | return -EINVAL; |
2854 | 2854 | ||
2855 | /* | 2855 | /* |
@@ -2865,24 +2865,24 @@ static int mwl8k_add_interface(struct ieee80211_hw *hw, | |||
2865 | } | 2865 | } |
2866 | 2866 | ||
2867 | /* Clean out driver private area */ | 2867 | /* Clean out driver private area */ |
2868 | mwl8k_vif = MWL8K_VIF(conf->vif); | 2868 | mwl8k_vif = MWL8K_VIF(vif); |
2869 | memset(mwl8k_vif, 0, sizeof(*mwl8k_vif)); | 2869 | memset(mwl8k_vif, 0, sizeof(*mwl8k_vif)); |
2870 | 2870 | ||
2871 | /* Set and save the mac address */ | 2871 | /* Set and save the mac address */ |
2872 | mwl8k_cmd_set_mac_addr(hw, conf->mac_addr); | 2872 | mwl8k_cmd_set_mac_addr(hw, vif->addr); |
2873 | memcpy(mwl8k_vif->mac_addr, conf->mac_addr, ETH_ALEN); | 2873 | memcpy(mwl8k_vif->mac_addr, vif->addr, ETH_ALEN); |
2874 | 2874 | ||
2875 | /* Set Initial sequence number to zero */ | 2875 | /* Set Initial sequence number to zero */ |
2876 | mwl8k_vif->seqno = 0; | 2876 | mwl8k_vif->seqno = 0; |
2877 | 2877 | ||
2878 | priv->vif = conf->vif; | 2878 | priv->vif = vif; |
2879 | priv->current_channel = NULL; | 2879 | priv->current_channel = NULL; |
2880 | 2880 | ||
2881 | return 0; | 2881 | return 0; |
2882 | } | 2882 | } |
2883 | 2883 | ||
2884 | static void mwl8k_remove_interface(struct ieee80211_hw *hw, | 2884 | static void mwl8k_remove_interface(struct ieee80211_hw *hw, |
2885 | struct ieee80211_if_init_conf *conf) | 2885 | struct ieee80211_vif *vif) |
2886 | { | 2886 | { |
2887 | struct mwl8k_priv *priv = hw->priv; | 2887 | struct mwl8k_priv *priv = hw->priv; |
2888 | 2888 | ||
diff --git a/drivers/net/wireless/p54/main.c b/drivers/net/wireless/p54/main.c index 18012dbfb45d..26428e4c9c60 100644 --- a/drivers/net/wireless/p54/main.c +++ b/drivers/net/wireless/p54/main.c | |||
@@ -216,7 +216,7 @@ static void p54_stop(struct ieee80211_hw *dev) | |||
216 | } | 216 | } |
217 | 217 | ||
218 | static int p54_add_interface(struct ieee80211_hw *dev, | 218 | static int p54_add_interface(struct ieee80211_hw *dev, |
219 | struct ieee80211_if_init_conf *conf) | 219 | struct ieee80211_vif *vif) |
220 | { | 220 | { |
221 | struct p54_common *priv = dev->priv; | 221 | struct p54_common *priv = dev->priv; |
222 | 222 | ||
@@ -226,28 +226,28 @@ static int p54_add_interface(struct ieee80211_hw *dev, | |||
226 | return -EOPNOTSUPP; | 226 | return -EOPNOTSUPP; |
227 | } | 227 | } |
228 | 228 | ||
229 | priv->vif = conf->vif; | 229 | priv->vif = vif; |
230 | 230 | ||
231 | switch (conf->type) { | 231 | switch (vif->type) { |
232 | case NL80211_IFTYPE_STATION: | 232 | case NL80211_IFTYPE_STATION: |
233 | case NL80211_IFTYPE_ADHOC: | 233 | case NL80211_IFTYPE_ADHOC: |
234 | case NL80211_IFTYPE_AP: | 234 | case NL80211_IFTYPE_AP: |
235 | case NL80211_IFTYPE_MESH_POINT: | 235 | case NL80211_IFTYPE_MESH_POINT: |
236 | priv->mode = conf->type; | 236 | priv->mode = vif->type; |
237 | break; | 237 | break; |
238 | default: | 238 | default: |
239 | mutex_unlock(&priv->conf_mutex); | 239 | mutex_unlock(&priv->conf_mutex); |
240 | return -EOPNOTSUPP; | 240 | return -EOPNOTSUPP; |
241 | } | 241 | } |
242 | 242 | ||
243 | memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN); | 243 | memcpy(priv->mac_addr, vif->addr, ETH_ALEN); |
244 | p54_setup_mac(priv); | 244 | p54_setup_mac(priv); |
245 | mutex_unlock(&priv->conf_mutex); | 245 | mutex_unlock(&priv->conf_mutex); |
246 | return 0; | 246 | return 0; |
247 | } | 247 | } |
248 | 248 | ||
249 | static void p54_remove_interface(struct ieee80211_hw *dev, | 249 | static void p54_remove_interface(struct ieee80211_hw *dev, |
250 | struct ieee80211_if_init_conf *conf) | 250 | struct ieee80211_vif *vif) |
251 | { | 251 | { |
252 | struct p54_common *priv = dev->priv; | 252 | struct p54_common *priv = dev->priv; |
253 | 253 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index a664a999b2b0..b4c6e0a6d7e0 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
@@ -1019,9 +1019,9 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb); | |||
1019 | int rt2x00mac_start(struct ieee80211_hw *hw); | 1019 | int rt2x00mac_start(struct ieee80211_hw *hw); |
1020 | void rt2x00mac_stop(struct ieee80211_hw *hw); | 1020 | void rt2x00mac_stop(struct ieee80211_hw *hw); |
1021 | int rt2x00mac_add_interface(struct ieee80211_hw *hw, | 1021 | int rt2x00mac_add_interface(struct ieee80211_hw *hw, |
1022 | struct ieee80211_if_init_conf *conf); | 1022 | struct ieee80211_vif *vif); |
1023 | void rt2x00mac_remove_interface(struct ieee80211_hw *hw, | 1023 | void rt2x00mac_remove_interface(struct ieee80211_hw *hw, |
1024 | struct ieee80211_if_init_conf *conf); | 1024 | struct ieee80211_vif *vif); |
1025 | int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed); | 1025 | int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed); |
1026 | void rt2x00mac_configure_filter(struct ieee80211_hw *hw, | 1026 | void rt2x00mac_configure_filter(struct ieee80211_hw *hw, |
1027 | unsigned int changed_flags, | 1027 | unsigned int changed_flags, |
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index de549c244ed8..00f1f939f1bb 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c | |||
@@ -187,10 +187,10 @@ void rt2x00mac_stop(struct ieee80211_hw *hw) | |||
187 | EXPORT_SYMBOL_GPL(rt2x00mac_stop); | 187 | EXPORT_SYMBOL_GPL(rt2x00mac_stop); |
188 | 188 | ||
189 | int rt2x00mac_add_interface(struct ieee80211_hw *hw, | 189 | int rt2x00mac_add_interface(struct ieee80211_hw *hw, |
190 | struct ieee80211_if_init_conf *conf) | 190 | struct ieee80211_vif *vif) |
191 | { | 191 | { |
192 | struct rt2x00_dev *rt2x00dev = hw->priv; | 192 | struct rt2x00_dev *rt2x00dev = hw->priv; |
193 | struct rt2x00_intf *intf = vif_to_intf(conf->vif); | 193 | struct rt2x00_intf *intf = vif_to_intf(vif); |
194 | struct data_queue *queue = rt2x00queue_get_queue(rt2x00dev, QID_BEACON); | 194 | struct data_queue *queue = rt2x00queue_get_queue(rt2x00dev, QID_BEACON); |
195 | struct queue_entry *entry = NULL; | 195 | struct queue_entry *entry = NULL; |
196 | unsigned int i; | 196 | unsigned int i; |
@@ -203,7 +203,7 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, | |||
203 | !test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags)) | 203 | !test_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags)) |
204 | return -ENODEV; | 204 | return -ENODEV; |
205 | 205 | ||
206 | switch (conf->type) { | 206 | switch (vif->type) { |
207 | case NL80211_IFTYPE_AP: | 207 | case NL80211_IFTYPE_AP: |
208 | /* | 208 | /* |
209 | * We don't support mixed combinations of | 209 | * We don't support mixed combinations of |
@@ -263,7 +263,7 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, | |||
263 | * increase interface count and start initialization. | 263 | * increase interface count and start initialization. |
264 | */ | 264 | */ |
265 | 265 | ||
266 | if (conf->type == NL80211_IFTYPE_AP) | 266 | if (vif->type == NL80211_IFTYPE_AP) |
267 | rt2x00dev->intf_ap_count++; | 267 | rt2x00dev->intf_ap_count++; |
268 | else | 268 | else |
269 | rt2x00dev->intf_sta_count++; | 269 | rt2x00dev->intf_sta_count++; |
@@ -273,16 +273,16 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, | |||
273 | mutex_init(&intf->beacon_skb_mutex); | 273 | mutex_init(&intf->beacon_skb_mutex); |
274 | intf->beacon = entry; | 274 | intf->beacon = entry; |
275 | 275 | ||
276 | if (conf->type == NL80211_IFTYPE_AP) | 276 | if (vif->type == NL80211_IFTYPE_AP) |
277 | memcpy(&intf->bssid, conf->mac_addr, ETH_ALEN); | 277 | memcpy(&intf->bssid, vif->addr, ETH_ALEN); |
278 | memcpy(&intf->mac, conf->mac_addr, ETH_ALEN); | 278 | memcpy(&intf->mac, vif->addr, ETH_ALEN); |
279 | 279 | ||
280 | /* | 280 | /* |
281 | * The MAC adddress must be configured after the device | 281 | * The MAC adddress must be configured after the device |
282 | * has been initialized. Otherwise the device can reset | 282 | * has been initialized. Otherwise the device can reset |
283 | * the MAC registers. | 283 | * the MAC registers. |
284 | */ | 284 | */ |
285 | rt2x00lib_config_intf(rt2x00dev, intf, conf->type, intf->mac, NULL); | 285 | rt2x00lib_config_intf(rt2x00dev, intf, vif->type, intf->mac, NULL); |
286 | 286 | ||
287 | /* | 287 | /* |
288 | * Some filters depend on the current working mode. We can force | 288 | * Some filters depend on the current working mode. We can force |
@@ -296,10 +296,10 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw, | |||
296 | EXPORT_SYMBOL_GPL(rt2x00mac_add_interface); | 296 | EXPORT_SYMBOL_GPL(rt2x00mac_add_interface); |
297 | 297 | ||
298 | void rt2x00mac_remove_interface(struct ieee80211_hw *hw, | 298 | void rt2x00mac_remove_interface(struct ieee80211_hw *hw, |
299 | struct ieee80211_if_init_conf *conf) | 299 | struct ieee80211_vif *vif) |
300 | { | 300 | { |
301 | struct rt2x00_dev *rt2x00dev = hw->priv; | 301 | struct rt2x00_dev *rt2x00dev = hw->priv; |
302 | struct rt2x00_intf *intf = vif_to_intf(conf->vif); | 302 | struct rt2x00_intf *intf = vif_to_intf(vif); |
303 | 303 | ||
304 | /* | 304 | /* |
305 | * Don't allow interfaces to be remove while | 305 | * Don't allow interfaces to be remove while |
@@ -307,11 +307,11 @@ void rt2x00mac_remove_interface(struct ieee80211_hw *hw, | |||
307 | * no interface is present. | 307 | * no interface is present. |
308 | */ | 308 | */ |
309 | if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) || | 309 | if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags) || |
310 | (conf->type == NL80211_IFTYPE_AP && !rt2x00dev->intf_ap_count) || | 310 | (vif->type == NL80211_IFTYPE_AP && !rt2x00dev->intf_ap_count) || |
311 | (conf->type != NL80211_IFTYPE_AP && !rt2x00dev->intf_sta_count)) | 311 | (vif->type != NL80211_IFTYPE_AP && !rt2x00dev->intf_sta_count)) |
312 | return; | 312 | return; |
313 | 313 | ||
314 | if (conf->type == NL80211_IFTYPE_AP) | 314 | if (vif->type == NL80211_IFTYPE_AP) |
315 | rt2x00dev->intf_ap_count--; | 315 | rt2x00dev->intf_ap_count--; |
316 | else | 316 | else |
317 | rt2x00dev->intf_sta_count--; | 317 | rt2x00dev->intf_sta_count--; |
diff --git a/drivers/net/wireless/rtl818x/rtl8180_dev.c b/drivers/net/wireless/rtl818x/rtl8180_dev.c index f01f1ef9e3be..5a2b7199f5d5 100644 --- a/drivers/net/wireless/rtl818x/rtl8180_dev.c +++ b/drivers/net/wireless/rtl818x/rtl8180_dev.c | |||
@@ -652,7 +652,7 @@ static void rtl8180_stop(struct ieee80211_hw *dev) | |||
652 | } | 652 | } |
653 | 653 | ||
654 | static int rtl8180_add_interface(struct ieee80211_hw *dev, | 654 | static int rtl8180_add_interface(struct ieee80211_hw *dev, |
655 | struct ieee80211_if_init_conf *conf) | 655 | struct ieee80211_vif *vif) |
656 | { | 656 | { |
657 | struct rtl8180_priv *priv = dev->priv; | 657 | struct rtl8180_priv *priv = dev->priv; |
658 | 658 | ||
@@ -662,27 +662,27 @@ static int rtl8180_add_interface(struct ieee80211_hw *dev, | |||
662 | if (priv->vif) | 662 | if (priv->vif) |
663 | return -EBUSY; | 663 | return -EBUSY; |
664 | 664 | ||
665 | switch (conf->type) { | 665 | switch (vif->type) { |
666 | case NL80211_IFTYPE_STATION: | 666 | case NL80211_IFTYPE_STATION: |
667 | break; | 667 | break; |
668 | default: | 668 | default: |
669 | return -EOPNOTSUPP; | 669 | return -EOPNOTSUPP; |
670 | } | 670 | } |
671 | 671 | ||
672 | priv->vif = conf->vif; | 672 | priv->vif = vif; |
673 | 673 | ||
674 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); | 674 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); |
675 | rtl818x_iowrite32(priv, (__le32 __iomem *)&priv->map->MAC[0], | 675 | rtl818x_iowrite32(priv, (__le32 __iomem *)&priv->map->MAC[0], |
676 | le32_to_cpu(*(__le32 *)conf->mac_addr)); | 676 | le32_to_cpu(*(__le32 *)vif->addr)); |
677 | rtl818x_iowrite16(priv, (__le16 __iomem *)&priv->map->MAC[4], | 677 | rtl818x_iowrite16(priv, (__le16 __iomem *)&priv->map->MAC[4], |
678 | le16_to_cpu(*(__le16 *)(conf->mac_addr + 4))); | 678 | le16_to_cpu(*(__le16 *)(vif->addr + 4))); |
679 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); | 679 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); |
680 | 680 | ||
681 | return 0; | 681 | return 0; |
682 | } | 682 | } |
683 | 683 | ||
684 | static void rtl8180_remove_interface(struct ieee80211_hw *dev, | 684 | static void rtl8180_remove_interface(struct ieee80211_hw *dev, |
685 | struct ieee80211_if_init_conf *conf) | 685 | struct ieee80211_vif *vif) |
686 | { | 686 | { |
687 | struct rtl8180_priv *priv = dev->priv; | 687 | struct rtl8180_priv *priv = dev->priv; |
688 | priv->vif = NULL; | 688 | priv->vif = NULL; |
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c index 1cb0eff46223..f336c63053c1 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_dev.c +++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c | |||
@@ -1018,7 +1018,7 @@ static void rtl8187_stop(struct ieee80211_hw *dev) | |||
1018 | } | 1018 | } |
1019 | 1019 | ||
1020 | static int rtl8187_add_interface(struct ieee80211_hw *dev, | 1020 | static int rtl8187_add_interface(struct ieee80211_hw *dev, |
1021 | struct ieee80211_if_init_conf *conf) | 1021 | struct ieee80211_vif *vif) |
1022 | { | 1022 | { |
1023 | struct rtl8187_priv *priv = dev->priv; | 1023 | struct rtl8187_priv *priv = dev->priv; |
1024 | int i; | 1024 | int i; |
@@ -1028,7 +1028,7 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev, | |||
1028 | if (priv->vif) | 1028 | if (priv->vif) |
1029 | goto exit; | 1029 | goto exit; |
1030 | 1030 | ||
1031 | switch (conf->type) { | 1031 | switch (vif->type) { |
1032 | case NL80211_IFTYPE_STATION: | 1032 | case NL80211_IFTYPE_STATION: |
1033 | break; | 1033 | break; |
1034 | default: | 1034 | default: |
@@ -1036,12 +1036,12 @@ static int rtl8187_add_interface(struct ieee80211_hw *dev, | |||
1036 | } | 1036 | } |
1037 | 1037 | ||
1038 | ret = 0; | 1038 | ret = 0; |
1039 | priv->vif = conf->vif; | 1039 | priv->vif = vif; |
1040 | 1040 | ||
1041 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); | 1041 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); |
1042 | for (i = 0; i < ETH_ALEN; i++) | 1042 | for (i = 0; i < ETH_ALEN; i++) |
1043 | rtl818x_iowrite8(priv, &priv->map->MAC[i], | 1043 | rtl818x_iowrite8(priv, &priv->map->MAC[i], |
1044 | ((u8 *)conf->mac_addr)[i]); | 1044 | ((u8 *)vif->addr)[i]); |
1045 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); | 1045 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); |
1046 | 1046 | ||
1047 | exit: | 1047 | exit: |
@@ -1050,7 +1050,7 @@ exit: | |||
1050 | } | 1050 | } |
1051 | 1051 | ||
1052 | static void rtl8187_remove_interface(struct ieee80211_hw *dev, | 1052 | static void rtl8187_remove_interface(struct ieee80211_hw *dev, |
1053 | struct ieee80211_if_init_conf *conf) | 1053 | struct ieee80211_vif *vif) |
1054 | { | 1054 | { |
1055 | struct rtl8187_priv *priv = dev->priv; | 1055 | struct rtl8187_priv *priv = dev->priv; |
1056 | mutex_lock(&priv->conf_mutex); | 1056 | mutex_lock(&priv->conf_mutex); |
diff --git a/drivers/net/wireless/wl12xx/wl1251_main.c b/drivers/net/wireless/wl12xx/wl1251_main.c index 6aeffbe9e401..4e373f3dbc43 100644 --- a/drivers/net/wireless/wl12xx/wl1251_main.c +++ b/drivers/net/wireless/wl12xx/wl1251_main.c | |||
@@ -511,13 +511,13 @@ static void wl1251_op_stop(struct ieee80211_hw *hw) | |||
511 | } | 511 | } |
512 | 512 | ||
513 | static int wl1251_op_add_interface(struct ieee80211_hw *hw, | 513 | static int wl1251_op_add_interface(struct ieee80211_hw *hw, |
514 | struct ieee80211_if_init_conf *conf) | 514 | struct ieee80211_vif *vif) |
515 | { | 515 | { |
516 | struct wl1251 *wl = hw->priv; | 516 | struct wl1251 *wl = hw->priv; |
517 | int ret = 0; | 517 | int ret = 0; |
518 | 518 | ||
519 | wl1251_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM", | 519 | wl1251_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM", |
520 | conf->type, conf->mac_addr); | 520 | vif->type, vif->addr); |
521 | 521 | ||
522 | mutex_lock(&wl->mutex); | 522 | mutex_lock(&wl->mutex); |
523 | if (wl->vif) { | 523 | if (wl->vif) { |
@@ -525,9 +525,9 @@ static int wl1251_op_add_interface(struct ieee80211_hw *hw, | |||
525 | goto out; | 525 | goto out; |
526 | } | 526 | } |
527 | 527 | ||
528 | wl->vif = conf->vif; | 528 | wl->vif = vif; |
529 | 529 | ||
530 | switch (conf->type) { | 530 | switch (vif->type) { |
531 | case NL80211_IFTYPE_STATION: | 531 | case NL80211_IFTYPE_STATION: |
532 | wl->bss_type = BSS_TYPE_STA_BSS; | 532 | wl->bss_type = BSS_TYPE_STA_BSS; |
533 | break; | 533 | break; |
@@ -539,8 +539,8 @@ static int wl1251_op_add_interface(struct ieee80211_hw *hw, | |||
539 | goto out; | 539 | goto out; |
540 | } | 540 | } |
541 | 541 | ||
542 | if (memcmp(wl->mac_addr, conf->mac_addr, ETH_ALEN)) { | 542 | if (memcmp(wl->mac_addr, vif->addr, ETH_ALEN)) { |
543 | memcpy(wl->mac_addr, conf->mac_addr, ETH_ALEN); | 543 | memcpy(wl->mac_addr, vif->addr, ETH_ALEN); |
544 | SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr); | 544 | SET_IEEE80211_PERM_ADDR(wl->hw, wl->mac_addr); |
545 | ret = wl1251_acx_station_id(wl); | 545 | ret = wl1251_acx_station_id(wl); |
546 | if (ret < 0) | 546 | if (ret < 0) |
@@ -553,7 +553,7 @@ out: | |||
553 | } | 553 | } |
554 | 554 | ||
555 | static void wl1251_op_remove_interface(struct ieee80211_hw *hw, | 555 | static void wl1251_op_remove_interface(struct ieee80211_hw *hw, |
556 | struct ieee80211_if_init_conf *conf) | 556 | struct ieee80211_vif *vif) |
557 | { | 557 | { |
558 | struct wl1251 *wl = hw->priv; | 558 | struct wl1251 *wl = hw->priv; |
559 | 559 | ||
diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c index 4a997381a8d0..e4867b895c43 100644 --- a/drivers/net/wireless/wl12xx/wl1271_main.c +++ b/drivers/net/wireless/wl12xx/wl1271_main.c | |||
@@ -1039,13 +1039,13 @@ static void wl1271_op_stop(struct ieee80211_hw *hw) | |||
1039 | } | 1039 | } |
1040 | 1040 | ||
1041 | static int wl1271_op_add_interface(struct ieee80211_hw *hw, | 1041 | static int wl1271_op_add_interface(struct ieee80211_hw *hw, |
1042 | struct ieee80211_if_init_conf *conf) | 1042 | struct ieee80211_vif *vif) |
1043 | { | 1043 | { |
1044 | struct wl1271 *wl = hw->priv; | 1044 | struct wl1271 *wl = hw->priv; |
1045 | int ret = 0; | 1045 | int ret = 0; |
1046 | 1046 | ||
1047 | wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM", | 1047 | wl1271_debug(DEBUG_MAC80211, "mac80211 add interface type %d mac %pM", |
1048 | conf->type, conf->mac_addr); | 1048 | vif->type, vif->addr); |
1049 | 1049 | ||
1050 | mutex_lock(&wl->mutex); | 1050 | mutex_lock(&wl->mutex); |
1051 | if (wl->vif) { | 1051 | if (wl->vif) { |
@@ -1053,9 +1053,9 @@ static int wl1271_op_add_interface(struct ieee80211_hw *hw, | |||
1053 | goto out; | 1053 | goto out; |
1054 | } | 1054 | } |
1055 | 1055 | ||
1056 | wl->vif = conf->vif; | 1056 | wl->vif = vif; |
1057 | 1057 | ||
1058 | switch (conf->type) { | 1058 | switch (vif->type) { |
1059 | case NL80211_IFTYPE_STATION: | 1059 | case NL80211_IFTYPE_STATION: |
1060 | wl->bss_type = BSS_TYPE_STA_BSS; | 1060 | wl->bss_type = BSS_TYPE_STA_BSS; |
1061 | break; | 1061 | break; |
@@ -1075,7 +1075,7 @@ out: | |||
1075 | } | 1075 | } |
1076 | 1076 | ||
1077 | static void wl1271_op_remove_interface(struct ieee80211_hw *hw, | 1077 | static void wl1271_op_remove_interface(struct ieee80211_hw *hw, |
1078 | struct ieee80211_if_init_conf *conf) | 1078 | struct ieee80211_vif *vif) |
1079 | { | 1079 | { |
1080 | struct wl1271 *wl = hw->priv; | 1080 | struct wl1271 *wl = hw->priv; |
1081 | 1081 | ||
diff --git a/drivers/net/wireless/zd1211rw/zd_mac.c b/drivers/net/wireless/zd1211rw/zd_mac.c index 8a243732c519..c4f41d0016c5 100644 --- a/drivers/net/wireless/zd1211rw/zd_mac.c +++ b/drivers/net/wireless/zd1211rw/zd_mac.c | |||
@@ -872,7 +872,7 @@ int zd_mac_rx(struct ieee80211_hw *hw, const u8 *buffer, unsigned int length) | |||
872 | } | 872 | } |
873 | 873 | ||
874 | static int zd_op_add_interface(struct ieee80211_hw *hw, | 874 | static int zd_op_add_interface(struct ieee80211_hw *hw, |
875 | struct ieee80211_if_init_conf *conf) | 875 | struct ieee80211_vif *vif) |
876 | { | 876 | { |
877 | struct zd_mac *mac = zd_hw_mac(hw); | 877 | struct zd_mac *mac = zd_hw_mac(hw); |
878 | 878 | ||
@@ -880,22 +880,22 @@ static int zd_op_add_interface(struct ieee80211_hw *hw, | |||
880 | if (mac->type != NL80211_IFTYPE_UNSPECIFIED) | 880 | if (mac->type != NL80211_IFTYPE_UNSPECIFIED) |
881 | return -EOPNOTSUPP; | 881 | return -EOPNOTSUPP; |
882 | 882 | ||
883 | switch (conf->type) { | 883 | switch (vif->type) { |
884 | case NL80211_IFTYPE_MONITOR: | 884 | case NL80211_IFTYPE_MONITOR: |
885 | case NL80211_IFTYPE_MESH_POINT: | 885 | case NL80211_IFTYPE_MESH_POINT: |
886 | case NL80211_IFTYPE_STATION: | 886 | case NL80211_IFTYPE_STATION: |
887 | case NL80211_IFTYPE_ADHOC: | 887 | case NL80211_IFTYPE_ADHOC: |
888 | mac->type = conf->type; | 888 | mac->type = vif->type; |
889 | break; | 889 | break; |
890 | default: | 890 | default: |
891 | return -EOPNOTSUPP; | 891 | return -EOPNOTSUPP; |
892 | } | 892 | } |
893 | 893 | ||
894 | return zd_write_mac_addr(&mac->chip, conf->mac_addr); | 894 | return zd_write_mac_addr(&mac->chip, vif->addr); |
895 | } | 895 | } |
896 | 896 | ||
897 | static void zd_op_remove_interface(struct ieee80211_hw *hw, | 897 | static void zd_op_remove_interface(struct ieee80211_hw *hw, |
898 | struct ieee80211_if_init_conf *conf) | 898 | struct ieee80211_vif *vif) |
899 | { | 899 | { |
900 | struct zd_mac *mac = zd_hw_mac(hw); | 900 | struct zd_mac *mac = zd_hw_mac(hw); |
901 | mac->type = NL80211_IFTYPE_UNSPECIFIED; | 901 | mac->type = NL80211_IFTYPE_UNSPECIFIED; |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 77ea34b03285..08d41357dcbe 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -702,33 +702,6 @@ static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif) | |||
702 | } | 702 | } |
703 | 703 | ||
704 | /** | 704 | /** |
705 | * struct ieee80211_if_init_conf - initial configuration of an interface | ||
706 | * | ||
707 | * @vif: pointer to a driver-use per-interface structure. The pointer | ||
708 | * itself is also used for various functions including | ||
709 | * ieee80211_beacon_get() and ieee80211_get_buffered_bc(). | ||
710 | * @type: one of &enum nl80211_iftype constants. Determines the type of | ||
711 | * added/removed interface. | ||
712 | * @mac_addr: pointer to MAC address of the interface. This pointer is valid | ||
713 | * until the interface is removed (i.e. it cannot be used after | ||
714 | * remove_interface() callback was called for this interface). | ||
715 | * | ||
716 | * This structure is used in add_interface() and remove_interface() | ||
717 | * callbacks of &struct ieee80211_hw. | ||
718 | * | ||
719 | * When you allow multiple interfaces to be added to your PHY, take care | ||
720 | * that the hardware can actually handle multiple MAC addresses. However, | ||
721 | * also take care that when there's no interface left with mac_addr != %NULL | ||
722 | * you remove the MAC address from the device to avoid acknowledging packets | ||
723 | * in pure monitor mode. | ||
724 | */ | ||
725 | struct ieee80211_if_init_conf { | ||
726 | enum nl80211_iftype type; | ||
727 | struct ieee80211_vif *vif; | ||
728 | void *mac_addr; | ||
729 | }; | ||
730 | |||
731 | /** | ||
732 | * enum ieee80211_key_alg - key algorithm | 705 | * enum ieee80211_key_alg - key algorithm |
733 | * @ALG_WEP: WEP40 or WEP104 | 706 | * @ALG_WEP: WEP40 or WEP104 |
734 | * @ALG_TKIP: TKIP | 707 | * @ALG_TKIP: TKIP |
@@ -1555,9 +1528,9 @@ struct ieee80211_ops { | |||
1555 | int (*start)(struct ieee80211_hw *hw); | 1528 | int (*start)(struct ieee80211_hw *hw); |
1556 | void (*stop)(struct ieee80211_hw *hw); | 1529 | void (*stop)(struct ieee80211_hw *hw); |
1557 | int (*add_interface)(struct ieee80211_hw *hw, | 1530 | int (*add_interface)(struct ieee80211_hw *hw, |
1558 | struct ieee80211_if_init_conf *conf); | 1531 | struct ieee80211_vif *vif); |
1559 | void (*remove_interface)(struct ieee80211_hw *hw, | 1532 | void (*remove_interface)(struct ieee80211_hw *hw, |
1560 | struct ieee80211_if_init_conf *conf); | 1533 | struct ieee80211_vif *vif); |
1561 | int (*config)(struct ieee80211_hw *hw, u32 changed); | 1534 | int (*config)(struct ieee80211_hw *hw, u32 changed); |
1562 | void (*bss_info_changed)(struct ieee80211_hw *hw, | 1535 | void (*bss_info_changed)(struct ieee80211_hw *hw, |
1563 | struct ieee80211_vif *vif, | 1536 | struct ieee80211_vif *vif, |
@@ -1845,7 +1818,7 @@ void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw, | |||
1845 | /** | 1818 | /** |
1846 | * ieee80211_beacon_get_tim - beacon generation function | 1819 | * ieee80211_beacon_get_tim - beacon generation function |
1847 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1820 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1848 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1821 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1849 | * @tim_offset: pointer to variable that will receive the TIM IE offset. | 1822 | * @tim_offset: pointer to variable that will receive the TIM IE offset. |
1850 | * Set to 0 if invalid (in non-AP modes). | 1823 | * Set to 0 if invalid (in non-AP modes). |
1851 | * @tim_length: pointer to variable that will receive the TIM IE length, | 1824 | * @tim_length: pointer to variable that will receive the TIM IE length, |
@@ -1873,7 +1846,7 @@ struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw, | |||
1873 | /** | 1846 | /** |
1874 | * ieee80211_beacon_get - beacon generation function | 1847 | * ieee80211_beacon_get - beacon generation function |
1875 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1848 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1876 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1849 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1877 | * | 1850 | * |
1878 | * See ieee80211_beacon_get_tim(). | 1851 | * See ieee80211_beacon_get_tim(). |
1879 | */ | 1852 | */ |
@@ -1886,7 +1859,7 @@ static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw, | |||
1886 | /** | 1859 | /** |
1887 | * ieee80211_rts_get - RTS frame generation function | 1860 | * ieee80211_rts_get - RTS frame generation function |
1888 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1861 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1889 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1862 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1890 | * @frame: pointer to the frame that is going to be protected by the RTS. | 1863 | * @frame: pointer to the frame that is going to be protected by the RTS. |
1891 | * @frame_len: the frame length (in octets). | 1864 | * @frame_len: the frame length (in octets). |
1892 | * @frame_txctl: &struct ieee80211_tx_info of the frame. | 1865 | * @frame_txctl: &struct ieee80211_tx_info of the frame. |
@@ -1905,7 +1878,7 @@ void ieee80211_rts_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | |||
1905 | /** | 1878 | /** |
1906 | * ieee80211_rts_duration - Get the duration field for an RTS frame | 1879 | * ieee80211_rts_duration - Get the duration field for an RTS frame |
1907 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1880 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1908 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1881 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1909 | * @frame_len: the length of the frame that is going to be protected by the RTS. | 1882 | * @frame_len: the length of the frame that is going to be protected by the RTS. |
1910 | * @frame_txctl: &struct ieee80211_tx_info of the frame. | 1883 | * @frame_txctl: &struct ieee80211_tx_info of the frame. |
1911 | * | 1884 | * |
@@ -1920,7 +1893,7 @@ __le16 ieee80211_rts_duration(struct ieee80211_hw *hw, | |||
1920 | /** | 1893 | /** |
1921 | * ieee80211_ctstoself_get - CTS-to-self frame generation function | 1894 | * ieee80211_ctstoself_get - CTS-to-self frame generation function |
1922 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1895 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1923 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1896 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1924 | * @frame: pointer to the frame that is going to be protected by the CTS-to-self. | 1897 | * @frame: pointer to the frame that is going to be protected by the CTS-to-self. |
1925 | * @frame_len: the frame length (in octets). | 1898 | * @frame_len: the frame length (in octets). |
1926 | * @frame_txctl: &struct ieee80211_tx_info of the frame. | 1899 | * @frame_txctl: &struct ieee80211_tx_info of the frame. |
@@ -1940,7 +1913,7 @@ void ieee80211_ctstoself_get(struct ieee80211_hw *hw, | |||
1940 | /** | 1913 | /** |
1941 | * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame | 1914 | * ieee80211_ctstoself_duration - Get the duration field for a CTS-to-self frame |
1942 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1915 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1943 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1916 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1944 | * @frame_len: the length of the frame that is going to be protected by the CTS-to-self. | 1917 | * @frame_len: the length of the frame that is going to be protected by the CTS-to-self. |
1945 | * @frame_txctl: &struct ieee80211_tx_info of the frame. | 1918 | * @frame_txctl: &struct ieee80211_tx_info of the frame. |
1946 | * | 1919 | * |
@@ -1956,7 +1929,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw, | |||
1956 | /** | 1929 | /** |
1957 | * ieee80211_generic_frame_duration - Calculate the duration field for a frame | 1930 | * ieee80211_generic_frame_duration - Calculate the duration field for a frame |
1958 | * @hw: pointer obtained from ieee80211_alloc_hw(). | 1931 | * @hw: pointer obtained from ieee80211_alloc_hw(). |
1959 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1932 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1960 | * @frame_len: the length of the frame. | 1933 | * @frame_len: the length of the frame. |
1961 | * @rate: the rate at which the frame is going to be transmitted. | 1934 | * @rate: the rate at which the frame is going to be transmitted. |
1962 | * | 1935 | * |
@@ -1971,7 +1944,7 @@ __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw, | |||
1971 | /** | 1944 | /** |
1972 | * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames | 1945 | * ieee80211_get_buffered_bc - accessing buffered broadcast and multicast frames |
1973 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 1946 | * @hw: pointer as obtained from ieee80211_alloc_hw(). |
1974 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 1947 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
1975 | * | 1948 | * |
1976 | * Function for accessing buffered broadcast and multicast frames. If | 1949 | * Function for accessing buffered broadcast and multicast frames. If |
1977 | * hardware/firmware does not implement buffering of broadcast/multicast | 1950 | * hardware/firmware does not implement buffering of broadcast/multicast |
@@ -2139,7 +2112,7 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); | |||
2139 | 2112 | ||
2140 | /** | 2113 | /** |
2141 | * ieee80211_start_tx_ba_cb - low level driver ready to aggregate. | 2114 | * ieee80211_start_tx_ba_cb - low level driver ready to aggregate. |
2142 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf | 2115 | * @vif: &struct ieee80211_vif pointer from the add_interface callback |
2143 | * @ra: receiver address of the BA session recipient. | 2116 | * @ra: receiver address of the BA session recipient. |
2144 | * @tid: the TID to BA on. | 2117 | * @tid: the TID to BA on. |
2145 | * | 2118 | * |
@@ -2150,7 +2123,7 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); | |||
2150 | 2123 | ||
2151 | /** | 2124 | /** |
2152 | * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. | 2125 | * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. |
2153 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf | 2126 | * @vif: &struct ieee80211_vif pointer from the add_interface callback |
2154 | * @ra: receiver address of the BA session recipient. | 2127 | * @ra: receiver address of the BA session recipient. |
2155 | * @tid: the TID to BA on. | 2128 | * @tid: the TID to BA on. |
2156 | * | 2129 | * |
@@ -2178,7 +2151,7 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid, | |||
2178 | 2151 | ||
2179 | /** | 2152 | /** |
2180 | * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate. | 2153 | * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate. |
2181 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf | 2154 | * @vif: &struct ieee80211_vif pointer from the add_interface callback |
2182 | * @ra: receiver address of the BA session recipient. | 2155 | * @ra: receiver address of the BA session recipient. |
2183 | * @tid: the desired TID to BA on. | 2156 | * @tid: the desired TID to BA on. |
2184 | * | 2157 | * |
@@ -2189,7 +2162,7 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); | |||
2189 | 2162 | ||
2190 | /** | 2163 | /** |
2191 | * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. | 2164 | * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. |
2192 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf | 2165 | * @vif: &struct ieee80211_vif pointer from the add_interface callback |
2193 | * @ra: receiver address of the BA session recipient. | 2166 | * @ra: receiver address of the BA session recipient. |
2194 | * @tid: the desired TID to BA on. | 2167 | * @tid: the desired TID to BA on. |
2195 | * | 2168 | * |
@@ -2268,7 +2241,7 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw, | |||
2268 | /** | 2241 | /** |
2269 | * ieee80211_beacon_loss - inform hardware does not receive beacons | 2242 | * ieee80211_beacon_loss - inform hardware does not receive beacons |
2270 | * | 2243 | * |
2271 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf. | 2244 | * @vif: &struct ieee80211_vif pointer from the add_interface callback. |
2272 | * | 2245 | * |
2273 | * When beacon filtering is enabled with IEEE80211_HW_BEACON_FILTERING and | 2246 | * When beacon filtering is enabled with IEEE80211_HW_BEACON_FILTERING and |
2274 | * IEEE80211_CONF_PS is set, the driver needs to inform whenever the | 2247 | * IEEE80211_CONF_PS is set, the driver needs to inform whenever the |
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h index cbe133bcdf34..bc7c8f55487a 100644 --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h | |||
@@ -36,18 +36,18 @@ static inline void drv_stop(struct ieee80211_local *local) | |||
36 | } | 36 | } |
37 | 37 | ||
38 | static inline int drv_add_interface(struct ieee80211_local *local, | 38 | static inline int drv_add_interface(struct ieee80211_local *local, |
39 | struct ieee80211_if_init_conf *conf) | 39 | struct ieee80211_vif *vif) |
40 | { | 40 | { |
41 | int ret = local->ops->add_interface(&local->hw, conf); | 41 | int ret = local->ops->add_interface(&local->hw, vif); |
42 | trace_drv_add_interface(local, vif_to_sdata(conf->vif), ret); | 42 | trace_drv_add_interface(local, vif_to_sdata(vif), ret); |
43 | return ret; | 43 | return ret; |
44 | } | 44 | } |
45 | 45 | ||
46 | static inline void drv_remove_interface(struct ieee80211_local *local, | 46 | static inline void drv_remove_interface(struct ieee80211_local *local, |
47 | struct ieee80211_if_init_conf *conf) | 47 | struct ieee80211_vif *vif) |
48 | { | 48 | { |
49 | local->ops->remove_interface(&local->hw, conf); | 49 | local->ops->remove_interface(&local->hw, vif); |
50 | trace_drv_remove_interface(local, vif_to_sdata(conf->vif)); | 50 | trace_drv_remove_interface(local, vif_to_sdata(vif)); |
51 | } | 51 | } |
52 | 52 | ||
53 | static inline int drv_config(struct ieee80211_local *local, u32 changed) | 53 | static inline int drv_config(struct ieee80211_local *local, u32 changed) |
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 7d410f15281a..00a1f4ccdaf1 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -96,7 +96,6 @@ static int ieee80211_open(struct net_device *dev) | |||
96 | struct ieee80211_sub_if_data *nsdata; | 96 | struct ieee80211_sub_if_data *nsdata; |
97 | struct ieee80211_local *local = sdata->local; | 97 | struct ieee80211_local *local = sdata->local; |
98 | struct sta_info *sta; | 98 | struct sta_info *sta; |
99 | struct ieee80211_if_init_conf conf; | ||
100 | u32 changed = 0; | 99 | u32 changed = 0; |
101 | int res; | 100 | int res; |
102 | u32 hw_reconf_flags = 0; | 101 | u32 hw_reconf_flags = 0; |
@@ -248,10 +247,7 @@ static int ieee80211_open(struct net_device *dev) | |||
248 | ieee80211_configure_filter(local); | 247 | ieee80211_configure_filter(local); |
249 | break; | 248 | break; |
250 | default: | 249 | default: |
251 | conf.vif = &sdata->vif; | 250 | res = drv_add_interface(local, &sdata->vif); |
252 | conf.type = sdata->vif.type; | ||
253 | conf.mac_addr = sdata->vif.addr; | ||
254 | res = drv_add_interface(local, &conf); | ||
255 | if (res) | 251 | if (res) |
256 | goto err_stop; | 252 | goto err_stop; |
257 | 253 | ||
@@ -334,7 +330,7 @@ static int ieee80211_open(struct net_device *dev) | |||
334 | 330 | ||
335 | return 0; | 331 | return 0; |
336 | err_del_interface: | 332 | err_del_interface: |
337 | drv_remove_interface(local, &conf); | 333 | drv_remove_interface(local, &sdata->vif); |
338 | err_stop: | 334 | err_stop: |
339 | if (!local->open_count) | 335 | if (!local->open_count) |
340 | drv_stop(local); | 336 | drv_stop(local); |
@@ -349,7 +345,6 @@ static int ieee80211_stop(struct net_device *dev) | |||
349 | { | 345 | { |
350 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 346 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
351 | struct ieee80211_local *local = sdata->local; | 347 | struct ieee80211_local *local = sdata->local; |
352 | struct ieee80211_if_init_conf conf; | ||
353 | struct sta_info *sta; | 348 | struct sta_info *sta; |
354 | unsigned long flags; | 349 | unsigned long flags; |
355 | struct sk_buff *skb, *tmp; | 350 | struct sk_buff *skb, *tmp; |
@@ -533,12 +528,9 @@ static int ieee80211_stop(struct net_device *dev) | |||
533 | BSS_CHANGED_BEACON_ENABLED); | 528 | BSS_CHANGED_BEACON_ENABLED); |
534 | } | 529 | } |
535 | 530 | ||
536 | conf.vif = &sdata->vif; | ||
537 | conf.type = sdata->vif.type; | ||
538 | conf.mac_addr = sdata->vif.addr; | ||
539 | /* disable all keys for as long as this netdev is down */ | 531 | /* disable all keys for as long as this netdev is down */ |
540 | ieee80211_disable_keys(sdata); | 532 | ieee80211_disable_keys(sdata); |
541 | drv_remove_interface(local, &conf); | 533 | drv_remove_interface(local, &sdata->vif); |
542 | } | 534 | } |
543 | 535 | ||
544 | sdata->bss = NULL; | 536 | sdata->bss = NULL; |
diff --git a/net/mac80211/pm.c b/net/mac80211/pm.c index 913dc7e3b29e..47f818959ad7 100644 --- a/net/mac80211/pm.c +++ b/net/mac80211/pm.c | |||
@@ -10,7 +10,6 @@ int __ieee80211_suspend(struct ieee80211_hw *hw) | |||
10 | { | 10 | { |
11 | struct ieee80211_local *local = hw_to_local(hw); | 11 | struct ieee80211_local *local = hw_to_local(hw); |
12 | struct ieee80211_sub_if_data *sdata; | 12 | struct ieee80211_sub_if_data *sdata; |
13 | struct ieee80211_if_init_conf conf; | ||
14 | struct sta_info *sta; | 13 | struct sta_info *sta; |
15 | unsigned long flags; | 14 | unsigned long flags; |
16 | 15 | ||
@@ -100,10 +99,7 @@ int __ieee80211_suspend(struct ieee80211_hw *hw) | |||
100 | ieee80211_bss_info_change_notify(sdata, | 99 | ieee80211_bss_info_change_notify(sdata, |
101 | BSS_CHANGED_BEACON_ENABLED); | 100 | BSS_CHANGED_BEACON_ENABLED); |
102 | 101 | ||
103 | conf.vif = &sdata->vif; | 102 | drv_remove_interface(local, &sdata->vif); |
104 | conf.type = sdata->vif.type; | ||
105 | conf.mac_addr = sdata->vif.addr; | ||
106 | drv_remove_interface(local, &conf); | ||
107 | } | 103 | } |
108 | 104 | ||
109 | /* stop hardware - this must stop RX */ | 105 | /* stop hardware - this must stop RX */ |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 1fdb80ff9241..4b930308b1fb 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -1075,7 +1075,6 @@ int ieee80211_reconfig(struct ieee80211_local *local) | |||
1075 | { | 1075 | { |
1076 | struct ieee80211_hw *hw = &local->hw; | 1076 | struct ieee80211_hw *hw = &local->hw; |
1077 | struct ieee80211_sub_if_data *sdata; | 1077 | struct ieee80211_sub_if_data *sdata; |
1078 | struct ieee80211_if_init_conf conf; | ||
1079 | struct sta_info *sta; | 1078 | struct sta_info *sta; |
1080 | unsigned long flags; | 1079 | unsigned long flags; |
1081 | int res; | 1080 | int res; |
@@ -1094,12 +1093,8 @@ int ieee80211_reconfig(struct ieee80211_local *local) | |||
1094 | list_for_each_entry(sdata, &local->interfaces, list) { | 1093 | list_for_each_entry(sdata, &local->interfaces, list) { |
1095 | if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && | 1094 | if (sdata->vif.type != NL80211_IFTYPE_AP_VLAN && |
1096 | sdata->vif.type != NL80211_IFTYPE_MONITOR && | 1095 | sdata->vif.type != NL80211_IFTYPE_MONITOR && |
1097 | ieee80211_sdata_running(sdata)) { | 1096 | ieee80211_sdata_running(sdata)) |
1098 | conf.vif = &sdata->vif; | 1097 | res = drv_add_interface(local, &sdata->vif); |
1099 | conf.type = sdata->vif.type; | ||
1100 | conf.mac_addr = sdata->vif.addr; | ||
1101 | res = drv_add_interface(local, &conf); | ||
1102 | } | ||
1103 | } | 1098 | } |
1104 | 1099 | ||
1105 | /* add STAs back */ | 1100 | /* add STAs back */ |