diff options
author | Eliad Peller <eliad@wizery.com> | 2011-10-05 05:55:54 -0400 |
---|---|---|
committer | Luciano Coelho <coelho@ti.com> | 2011-10-07 01:32:45 -0400 |
commit | a8ab39a4b588e8523be2fa75671bdc9612d3467a (patch) | |
tree | b0c82611cc83f65131e0d9eb862675f894398d19 | |
parent | 154da67c7da14ffd8da292394f8cbc81cc5ea4e3 (diff) |
wl12xx: move ap_global_hlid and ap_bcast_hlid into wlvif
move ap_global_hlid and ap_bcast_hlid into the per-interface
data, rather than being global.
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
-rw-r--r-- | drivers/net/wireless/wl12xx/cmd.c | 28 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/cmd.h | 5 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/main.c | 34 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/tx.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/tx.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/wl12xx/wl12xx.h | 6 |
6 files changed, 50 insertions, 41 deletions
diff --git a/drivers/net/wireless/wl12xx/cmd.c b/drivers/net/wireless/wl12xx/cmd.c index 2a9a4b2032e5..d0124e63dad1 100644 --- a/drivers/net/wireless/wl12xx/cmd.c +++ b/drivers/net/wireless/wl12xx/cmd.c | |||
@@ -671,19 +671,19 @@ int wl12xx_cmd_role_start_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif) | |||
671 | goto out; | 671 | goto out; |
672 | } | 672 | } |
673 | 673 | ||
674 | ret = wl12xx_allocate_link(wl, &wl->ap_global_hlid); | 674 | ret = wl12xx_allocate_link(wl, &wlvif->ap.global_hlid); |
675 | if (ret < 0) | 675 | if (ret < 0) |
676 | goto out_free; | 676 | goto out_free; |
677 | 677 | ||
678 | ret = wl12xx_allocate_link(wl, &wl->ap_bcast_hlid); | 678 | ret = wl12xx_allocate_link(wl, &wlvif->ap.bcast_hlid); |
679 | if (ret < 0) | 679 | if (ret < 0) |
680 | goto out_free_global; | 680 | goto out_free_global; |
681 | 681 | ||
682 | cmd->role_id = wlvif->role_id; | 682 | cmd->role_id = wlvif->role_id; |
683 | cmd->ap.aging_period = cpu_to_le16(wl->conf.tx.ap_aging_period); | 683 | cmd->ap.aging_period = cpu_to_le16(wl->conf.tx.ap_aging_period); |
684 | cmd->ap.bss_index = WL1271_AP_BSS_INDEX; | 684 | cmd->ap.bss_index = WL1271_AP_BSS_INDEX; |
685 | cmd->ap.global_hlid = wl->ap_global_hlid; | 685 | cmd->ap.global_hlid = wlvif->ap.global_hlid; |
686 | cmd->ap.broadcast_hlid = wl->ap_bcast_hlid; | 686 | cmd->ap.broadcast_hlid = wlvif->ap.bcast_hlid; |
687 | cmd->ap.basic_rate_set = cpu_to_le32(wlvif->basic_rate_set); | 687 | cmd->ap.basic_rate_set = cpu_to_le32(wlvif->basic_rate_set); |
688 | cmd->ap.beacon_interval = cpu_to_le16(wl->beacon_int); | 688 | cmd->ap.beacon_interval = cpu_to_le16(wl->beacon_int); |
689 | cmd->ap.dtim_interval = bss_conf->dtim_period; | 689 | cmd->ap.dtim_interval = bss_conf->dtim_period; |
@@ -725,10 +725,10 @@ int wl12xx_cmd_role_start_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif) | |||
725 | goto out_free; | 725 | goto out_free; |
726 | 726 | ||
727 | out_free_bcast: | 727 | out_free_bcast: |
728 | wl12xx_free_link(wl, &wl->ap_bcast_hlid); | 728 | wl12xx_free_link(wl, &wlvif->ap.bcast_hlid); |
729 | 729 | ||
730 | out_free_global: | 730 | out_free_global: |
731 | wl12xx_free_link(wl, &wl->ap_global_hlid); | 731 | wl12xx_free_link(wl, &wlvif->ap.global_hlid); |
732 | 732 | ||
733 | out_free: | 733 | out_free: |
734 | kfree(cmd); | 734 | kfree(cmd); |
@@ -758,8 +758,8 @@ int wl12xx_cmd_role_stop_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif) | |||
758 | goto out_free; | 758 | goto out_free; |
759 | } | 759 | } |
760 | 760 | ||
761 | wl12xx_free_link(wl, &wl->ap_bcast_hlid); | 761 | wl12xx_free_link(wl, &wlvif->ap.bcast_hlid); |
762 | wl12xx_free_link(wl, &wl->ap_global_hlid); | 762 | wl12xx_free_link(wl, &wlvif->ap.global_hlid); |
763 | 763 | ||
764 | out_free: | 764 | out_free: |
765 | kfree(cmd); | 765 | kfree(cmd); |
@@ -1264,12 +1264,11 @@ out: | |||
1264 | return ret; | 1264 | return ret; |
1265 | } | 1265 | } |
1266 | 1266 | ||
1267 | int wl1271_cmd_set_sta_key(struct wl1271 *wl, struct ieee80211_vif *vif, | 1267 | int wl1271_cmd_set_sta_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, |
1268 | u16 action, u8 id, u8 key_type, | 1268 | u16 action, u8 id, u8 key_type, |
1269 | u8 key_size, const u8 *key, const u8 *addr, | 1269 | u8 key_size, const u8 *key, const u8 *addr, |
1270 | u32 tx_seq_32, u16 tx_seq_16) | 1270 | u32 tx_seq_32, u16 tx_seq_16) |
1271 | { | 1271 | { |
1272 | struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif); | ||
1273 | struct wl1271_cmd_set_keys *cmd; | 1272 | struct wl1271_cmd_set_keys *cmd; |
1274 | int ret = 0; | 1273 | int ret = 0; |
1275 | 1274 | ||
@@ -1334,9 +1333,10 @@ out: | |||
1334 | * TODO: merge with sta/ibss into 1 set_key function. | 1333 | * TODO: merge with sta/ibss into 1 set_key function. |
1335 | * note there are slight diffs | 1334 | * note there are slight diffs |
1336 | */ | 1335 | */ |
1337 | int wl1271_cmd_set_ap_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type, | 1336 | int wl1271_cmd_set_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, |
1338 | u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32, | 1337 | u16 action, u8 id, u8 key_type, |
1339 | u16 tx_seq_16) | 1338 | u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32, |
1339 | u16 tx_seq_16) | ||
1340 | { | 1340 | { |
1341 | struct wl1271_cmd_set_keys *cmd; | 1341 | struct wl1271_cmd_set_keys *cmd; |
1342 | int ret = 0; | 1342 | int ret = 0; |
@@ -1346,7 +1346,7 @@ int wl1271_cmd_set_ap_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type, | |||
1346 | if (!cmd) | 1346 | if (!cmd) |
1347 | return -ENOMEM; | 1347 | return -ENOMEM; |
1348 | 1348 | ||
1349 | if (hlid == wl->ap_bcast_hlid) { | 1349 | if (hlid == wlvif->ap.bcast_hlid) { |
1350 | if (key_type == KEY_WEP) | 1350 | if (key_type == KEY_WEP) |
1351 | lid_type = WEP_DEFAULT_LID_TYPE; | 1351 | lid_type = WEP_DEFAULT_LID_TYPE; |
1352 | else | 1352 | else |
diff --git a/drivers/net/wireless/wl12xx/cmd.h b/drivers/net/wireless/wl12xx/cmd.h index 25ab400f2ebd..9624828b76e8 100644 --- a/drivers/net/wireless/wl12xx/cmd.h +++ b/drivers/net/wireless/wl12xx/cmd.h | |||
@@ -70,11 +70,12 @@ int wl1271_build_qos_null_data(struct wl1271 *wl, struct ieee80211_vif *vif); | |||
70 | int wl12xx_cmd_build_klv_null_data(struct wl1271 *wl, | 70 | int wl12xx_cmd_build_klv_null_data(struct wl1271 *wl, |
71 | struct wl12xx_vif *wlvif); | 71 | struct wl12xx_vif *wlvif); |
72 | int wl12xx_cmd_set_default_wep_key(struct wl1271 *wl, u8 id, u8 hlid); | 72 | int wl12xx_cmd_set_default_wep_key(struct wl1271 *wl, u8 id, u8 hlid); |
73 | int wl1271_cmd_set_sta_key(struct wl1271 *wl, struct ieee80211_vif *vif, | 73 | int wl1271_cmd_set_sta_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, |
74 | u16 action, u8 id, u8 key_type, | 74 | u16 action, u8 id, u8 key_type, |
75 | u8 key_size, const u8 *key, const u8 *addr, | 75 | u8 key_size, const u8 *key, const u8 *addr, |
76 | u32 tx_seq_32, u16 tx_seq_16); | 76 | u32 tx_seq_32, u16 tx_seq_16); |
77 | int wl1271_cmd_set_ap_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type, | 77 | int wl1271_cmd_set_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, |
78 | u16 action, u8 id, u8 key_type, | ||
78 | u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32, | 79 | u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32, |
79 | u16 tx_seq_16); | 80 | u16 tx_seq_16); |
80 | int wl12xx_cmd_set_peer_state(struct wl1271 *wl, u8 hlid); | 81 | int wl12xx_cmd_set_peer_state(struct wl1271 *wl, u8 hlid); |
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c index 3358cfe5b019..731e34bc275a 100644 --- a/drivers/net/wireless/wl12xx/main.c +++ b/drivers/net/wireless/wl12xx/main.c | |||
@@ -1488,8 +1488,9 @@ int wl1271_plt_stop(struct wl1271 *wl) | |||
1488 | static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb) | 1488 | static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb) |
1489 | { | 1489 | { |
1490 | struct wl1271 *wl = hw->priv; | 1490 | struct wl1271 *wl = hw->priv; |
1491 | struct ieee80211_tx_info *control = IEEE80211_SKB_CB(skb); | 1491 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
1492 | struct wl12xx_vif *wlvif = wl12xx_vif_to_data(control->control.vif); | 1492 | struct ieee80211_vif *vif = info->control.vif; |
1493 | struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vif); | ||
1493 | unsigned long flags; | 1494 | unsigned long flags; |
1494 | int q, mapping; | 1495 | int q, mapping; |
1495 | u8 hlid = 0; | 1496 | u8 hlid = 0; |
@@ -1498,7 +1499,7 @@ static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
1498 | q = wl1271_tx_get_queue(mapping); | 1499 | q = wl1271_tx_get_queue(mapping); |
1499 | 1500 | ||
1500 | if (wlvif->bss_type == BSS_TYPE_AP_BSS) | 1501 | if (wlvif->bss_type == BSS_TYPE_AP_BSS) |
1501 | hlid = wl12xx_tx_get_hlid_ap(wl, skb); | 1502 | hlid = wl12xx_tx_get_hlid_ap(wl, wlvif, skb); |
1502 | 1503 | ||
1503 | spin_lock_irqsave(&wl->wl_lock, flags); | 1504 | spin_lock_irqsave(&wl->wl_lock, flags); |
1504 | 1505 | ||
@@ -1858,7 +1859,12 @@ static void wl12xx_init_vif_data(struct wl12xx_vif *wlvif) | |||
1858 | wlvif->bss_type = MAX_BSS_TYPE; | 1859 | wlvif->bss_type = MAX_BSS_TYPE; |
1859 | wlvif->role_id = WL12XX_INVALID_ROLE_ID; | 1860 | wlvif->role_id = WL12XX_INVALID_ROLE_ID; |
1860 | wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID; | 1861 | wlvif->dev_role_id = WL12XX_INVALID_ROLE_ID; |
1862 | |||
1863 | /* TODO: init union by type */ | ||
1861 | wlvif->sta.hlid = WL12XX_INVALID_LINK_ID; | 1864 | wlvif->sta.hlid = WL12XX_INVALID_LINK_ID; |
1865 | wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID; | ||
1866 | wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID; | ||
1867 | |||
1862 | wlvif->basic_rate_set = CONF_TX_RATE_MASK_BASIC; | 1868 | wlvif->basic_rate_set = CONF_TX_RATE_MASK_BASIC; |
1863 | wlvif->basic_rate = CONF_TX_RATE_MASK_BASIC; | 1869 | wlvif->basic_rate = CONF_TX_RATE_MASK_BASIC; |
1864 | wlvif->rate_set = CONF_TX_RATE_MASK_BASIC; | 1870 | wlvif->rate_set = CONF_TX_RATE_MASK_BASIC; |
@@ -2084,8 +2090,8 @@ deinit: | |||
2084 | /* clear all hlids (except system_hlid) */ | 2090 | /* clear all hlids (except system_hlid) */ |
2085 | wlvif->sta.hlid = WL12XX_INVALID_LINK_ID; | 2091 | wlvif->sta.hlid = WL12XX_INVALID_LINK_ID; |
2086 | wl->dev_hlid = WL12XX_INVALID_LINK_ID; | 2092 | wl->dev_hlid = WL12XX_INVALID_LINK_ID; |
2087 | wl->ap_bcast_hlid = WL12XX_INVALID_LINK_ID; | 2093 | wlvif->ap.bcast_hlid = WL12XX_INVALID_LINK_ID; |
2088 | wl->ap_global_hlid = WL12XX_INVALID_LINK_ID; | 2094 | wlvif->ap.global_hlid = WL12XX_INVALID_LINK_ID; |
2089 | 2095 | ||
2090 | /* | 2096 | /* |
2091 | * this must be before the cancel_work calls below, so that the work | 2097 | * this must be before the cancel_work calls below, so that the work |
@@ -2653,7 +2659,7 @@ static void wl1271_free_ap_keys(struct wl1271 *wl) | |||
2653 | } | 2659 | } |
2654 | } | 2660 | } |
2655 | 2661 | ||
2656 | static int wl1271_ap_init_hwenc(struct wl1271 *wl) | 2662 | static int wl1271_ap_init_hwenc(struct wl1271 *wl, struct wl12xx_vif *wlvif) |
2657 | { | 2663 | { |
2658 | int i, ret = 0; | 2664 | int i, ret = 0; |
2659 | struct wl1271_ap_key *key; | 2665 | struct wl1271_ap_key *key; |
@@ -2667,9 +2673,9 @@ static int wl1271_ap_init_hwenc(struct wl1271 *wl) | |||
2667 | key = wl->recorded_ap_keys[i]; | 2673 | key = wl->recorded_ap_keys[i]; |
2668 | hlid = key->hlid; | 2674 | hlid = key->hlid; |
2669 | if (hlid == WL12XX_INVALID_LINK_ID) | 2675 | if (hlid == WL12XX_INVALID_LINK_ID) |
2670 | hlid = wl->ap_bcast_hlid; | 2676 | hlid = wlvif->ap.bcast_hlid; |
2671 | 2677 | ||
2672 | ret = wl1271_cmd_set_ap_key(wl, KEY_ADD_OR_REPLACE, | 2678 | ret = wl1271_cmd_set_ap_key(wl, wlvif, KEY_ADD_OR_REPLACE, |
2673 | key->id, key->key_type, | 2679 | key->id, key->key_type, |
2674 | key->key_size, key->key, | 2680 | key->key_size, key->key, |
2675 | hlid, key->tx_seq_32, | 2681 | hlid, key->tx_seq_32, |
@@ -2683,7 +2689,7 @@ static int wl1271_ap_init_hwenc(struct wl1271 *wl) | |||
2683 | 2689 | ||
2684 | if (wep_key_added) { | 2690 | if (wep_key_added) { |
2685 | ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key, | 2691 | ret = wl12xx_cmd_set_default_wep_key(wl, wl->default_key, |
2686 | wl->ap_bcast_hlid); | 2692 | wlvif->ap.bcast_hlid); |
2687 | if (ret < 0) | 2693 | if (ret < 0) |
2688 | goto out; | 2694 | goto out; |
2689 | } | 2695 | } |
@@ -2709,7 +2715,7 @@ static int wl1271_set_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, | |||
2709 | wl_sta = (struct wl1271_station *)sta->drv_priv; | 2715 | wl_sta = (struct wl1271_station *)sta->drv_priv; |
2710 | hlid = wl_sta->hlid; | 2716 | hlid = wl_sta->hlid; |
2711 | } else { | 2717 | } else { |
2712 | hlid = wl->ap_bcast_hlid; | 2718 | hlid = wlvif->ap.bcast_hlid; |
2713 | } | 2719 | } |
2714 | 2720 | ||
2715 | if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) { | 2721 | if (!test_bit(WL1271_FLAG_AP_STARTED, &wl->flags)) { |
@@ -2725,7 +2731,7 @@ static int wl1271_set_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, | |||
2725 | key, hlid, tx_seq_32, | 2731 | key, hlid, tx_seq_32, |
2726 | tx_seq_16); | 2732 | tx_seq_16); |
2727 | } else { | 2733 | } else { |
2728 | ret = wl1271_cmd_set_ap_key(wl, action, | 2734 | ret = wl1271_cmd_set_ap_key(wl, wlvif, action, |
2729 | id, key_type, key_size, | 2735 | id, key_type, key_size, |
2730 | key, hlid, tx_seq_32, | 2736 | key, hlid, tx_seq_32, |
2731 | tx_seq_16); | 2737 | tx_seq_16); |
@@ -2769,7 +2775,7 @@ static int wl1271_set_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, | |||
2769 | wlvif->sta.hlid == WL12XX_INVALID_LINK_ID) | 2775 | wlvif->sta.hlid == WL12XX_INVALID_LINK_ID) |
2770 | return 0; | 2776 | return 0; |
2771 | 2777 | ||
2772 | ret = wl1271_cmd_set_sta_key(wl, vif, action, | 2778 | ret = wl1271_cmd_set_sta_key(wl, wlvif, action, |
2773 | id, key_type, key_size, | 2779 | id, key_type, key_size, |
2774 | key, addr, tx_seq_32, | 2780 | key, addr, tx_seq_32, |
2775 | tx_seq_16); | 2781 | tx_seq_16); |
@@ -3375,7 +3381,7 @@ static void wl1271_bss_info_changed_ap(struct wl1271 *wl, | |||
3375 | if (ret < 0) | 3381 | if (ret < 0) |
3376 | goto out; | 3382 | goto out; |
3377 | 3383 | ||
3378 | ret = wl1271_ap_init_hwenc(wl); | 3384 | ret = wl1271_ap_init_hwenc(wl, wlvif); |
3379 | if (ret < 0) | 3385 | if (ret < 0) |
3380 | goto out; | 3386 | goto out; |
3381 | 3387 | ||
@@ -4891,8 +4897,6 @@ struct ieee80211_hw *wl1271_alloc_hw(void) | |||
4891 | wl->system_hlid = WL12XX_SYSTEM_HLID; | 4897 | wl->system_hlid = WL12XX_SYSTEM_HLID; |
4892 | wl->dev_hlid = WL12XX_INVALID_LINK_ID; | 4898 | wl->dev_hlid = WL12XX_INVALID_LINK_ID; |
4893 | wl->session_counter = 0; | 4899 | wl->session_counter = 0; |
4894 | wl->ap_bcast_hlid = WL12XX_INVALID_LINK_ID; | ||
4895 | wl->ap_global_hlid = WL12XX_INVALID_LINK_ID; | ||
4896 | wl->active_sta_count = 0; | 4900 | wl->active_sta_count = 0; |
4897 | setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer, | 4901 | setup_timer(&wl->rx_streaming_timer, wl1271_rx_streaming_timer, |
4898 | (unsigned long) wl); | 4902 | (unsigned long) wl); |
diff --git a/drivers/net/wireless/wl12xx/tx.c b/drivers/net/wireless/wl12xx/tx.c index db55767d7d54..53c6451a8fde 100644 --- a/drivers/net/wireless/wl12xx/tx.c +++ b/drivers/net/wireless/wl12xx/tx.c | |||
@@ -40,7 +40,7 @@ static int wl1271_set_default_wep_key(struct wl1271 *wl, | |||
40 | 40 | ||
41 | if (is_ap) | 41 | if (is_ap) |
42 | ret = wl12xx_cmd_set_default_wep_key(wl, id, | 42 | ret = wl12xx_cmd_set_default_wep_key(wl, id, |
43 | wl->ap_bcast_hlid); | 43 | wlvif->ap.bcast_hlid); |
44 | else | 44 | else |
45 | ret = wl12xx_cmd_set_default_wep_key(wl, id, wlvif->sta.hlid); | 45 | ret = wl12xx_cmd_set_default_wep_key(wl, id, wlvif->sta.hlid); |
46 | 46 | ||
@@ -156,7 +156,8 @@ bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb) | |||
156 | return wl->dummy_packet == skb; | 156 | return wl->dummy_packet == skb; |
157 | } | 157 | } |
158 | 158 | ||
159 | u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct sk_buff *skb) | 159 | u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif, |
160 | struct sk_buff *skb) | ||
160 | { | 161 | { |
161 | struct ieee80211_tx_info *control = IEEE80211_SKB_CB(skb); | 162 | struct ieee80211_tx_info *control = IEEE80211_SKB_CB(skb); |
162 | 163 | ||
@@ -174,9 +175,9 @@ u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct sk_buff *skb) | |||
174 | 175 | ||
175 | hdr = (struct ieee80211_hdr *)skb->data; | 176 | hdr = (struct ieee80211_hdr *)skb->data; |
176 | if (ieee80211_is_mgmt(hdr->frame_control)) | 177 | if (ieee80211_is_mgmt(hdr->frame_control)) |
177 | return wl->ap_global_hlid; | 178 | return wlvif->ap.global_hlid; |
178 | else | 179 | else |
179 | return wl->ap_bcast_hlid; | 180 | return wlvif->ap.bcast_hlid; |
180 | } | 181 | } |
181 | } | 182 | } |
182 | 183 | ||
@@ -191,7 +192,7 @@ static u8 wl1271_tx_get_hlid(struct wl1271 *wl, struct ieee80211_vif *vif, | |||
191 | return wl->system_hlid; | 192 | return wl->system_hlid; |
192 | 193 | ||
193 | if (wlvif->bss_type == BSS_TYPE_AP_BSS) | 194 | if (wlvif->bss_type == BSS_TYPE_AP_BSS) |
194 | return wl12xx_tx_get_hlid_ap(wl, skb); | 195 | return wl12xx_tx_get_hlid_ap(wl, wlvif, skb); |
195 | 196 | ||
196 | wl1271_tx_update_filters(wl, wlvif, skb); | 197 | wl1271_tx_update_filters(wl, wlvif, skb); |
197 | 198 | ||
@@ -341,9 +342,9 @@ static void wl1271_tx_fill_hdr(struct wl1271 *wl, struct ieee80211_vif *vif, | |||
341 | else | 342 | else |
342 | rate_idx = ACX_TX_BASIC_RATE; | 343 | rate_idx = ACX_TX_BASIC_RATE; |
343 | } else { | 344 | } else { |
344 | if (hlid == wl->ap_global_hlid) | 345 | if (hlid == wlvif->ap.global_hlid) |
345 | rate_idx = ACX_TX_AP_MODE_MGMT_RATE; | 346 | rate_idx = ACX_TX_AP_MODE_MGMT_RATE; |
346 | else if (hlid == wl->ap_bcast_hlid) | 347 | else if (hlid == wlvif->ap.bcast_hlid) |
347 | rate_idx = ACX_TX_AP_MODE_BCST_RATE; | 348 | rate_idx = ACX_TX_AP_MODE_BCST_RATE; |
348 | else | 349 | else |
349 | rate_idx = ac; | 350 | rate_idx = ac; |
diff --git a/drivers/net/wireless/wl12xx/tx.h b/drivers/net/wireless/wl12xx/tx.h index ba9403a45404..0964c9335316 100644 --- a/drivers/net/wireless/wl12xx/tx.h +++ b/drivers/net/wireless/wl12xx/tx.h | |||
@@ -212,7 +212,8 @@ u8 wl1271_rate_to_idx(int rate, enum ieee80211_band band); | |||
212 | u32 wl1271_tx_enabled_rates_get(struct wl1271 *wl, u32 rate_set, | 212 | u32 wl1271_tx_enabled_rates_get(struct wl1271 *wl, u32 rate_set, |
213 | enum ieee80211_band rate_band); | 213 | enum ieee80211_band rate_band); |
214 | u32 wl1271_tx_min_rate_get(struct wl1271 *wl, u32 rate_set); | 214 | u32 wl1271_tx_min_rate_get(struct wl1271 *wl, u32 rate_set); |
215 | u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct sk_buff *skb); | 215 | u8 wl12xx_tx_get_hlid_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif, |
216 | struct sk_buff *skb); | ||
216 | void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid); | 217 | void wl1271_tx_reset_link_queues(struct wl1271 *wl, u8 hlid); |
217 | void wl1271_handle_tx_low_watermark(struct wl1271 *wl); | 218 | void wl1271_handle_tx_low_watermark(struct wl1271 *wl); |
218 | bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb); | 219 | bool wl12xx_is_dummy_packet(struct wl1271 *wl, struct sk_buff *skb); |
diff --git a/drivers/net/wireless/wl12xx/wl12xx.h b/drivers/net/wireless/wl12xx/wl12xx.h index a1084d1466bb..aa84899466a8 100644 --- a/drivers/net/wireless/wl12xx/wl12xx.h +++ b/drivers/net/wireless/wl12xx/wl12xx.h | |||
@@ -403,8 +403,6 @@ struct wl1271 { | |||
403 | int channel; | 403 | int channel; |
404 | u8 system_hlid; | 404 | u8 system_hlid; |
405 | u8 dev_hlid; | 405 | u8 dev_hlid; |
406 | u8 ap_global_hlid; | ||
407 | u8 ap_bcast_hlid; | ||
408 | 406 | ||
409 | unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)]; | 407 | unsigned long links_map[BITS_TO_LONGS(WL12XX_MAX_LINKS)]; |
410 | unsigned long roles_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)]; | 408 | unsigned long roles_map[BITS_TO_LONGS(WL12XX_MAX_ROLES)]; |
@@ -627,6 +625,10 @@ struct wl12xx_vif { | |||
627 | struct { | 625 | struct { |
628 | u8 hlid; | 626 | u8 hlid; |
629 | } sta; | 627 | } sta; |
628 | struct { | ||
629 | u8 global_hlid; | ||
630 | u8 bcast_hlid; | ||
631 | } ap; | ||
630 | }; | 632 | }; |
631 | 633 | ||
632 | u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; | 634 | u8 ssid[IEEE80211_MAX_SSID_LEN + 1]; |