aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/wl12xx/main.c
diff options
context:
space:
mode:
authorGuy Eilam <guy@wizery.com>2011-08-16 12:49:12 -0400
committerLuciano Coelho <coelho@ti.com>2011-08-25 03:10:41 -0400
commite9eb8cbe77139470651c858b8b7a3d20d332cf47 (patch)
tree28b83a2cf3365db633608c3baf32c9a7741a862a /drivers/net/wireless/wl12xx/main.c
parent04b4d69c89593d907d81a4aa33e4e42a632fe436 (diff)
wl12xx: use 2 spare TX blocks for GEM cipher
Add tx_spare_blocks member to the wl1271 struct for more generic configuration of the amount of spare TX blocks that should be used. The default value is 1. In case GEM cipher is used by the STA, we need 2 spare TX blocks instead of just 1. Signed-off-by: Guy Eilam <guy@wizery.com> Acked-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx/main.c')
-rw-r--r--drivers/net/wireless/wl12xx/main.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c
index 82f4408e89ad..20e7bc78a7fe 100644
--- a/drivers/net/wireless/wl12xx/main.c
+++ b/drivers/net/wireless/wl12xx/main.c
@@ -2064,6 +2064,7 @@ deinit:
2064 wl->session_counter = 0; 2064 wl->session_counter = 0;
2065 wl->rate_set = CONF_TX_RATE_MASK_BASIC; 2065 wl->rate_set = CONF_TX_RATE_MASK_BASIC;
2066 wl->vif = NULL; 2066 wl->vif = NULL;
2067 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
2067 wl1271_free_ap_keys(wl); 2068 wl1271_free_ap_keys(wl);
2068 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map)); 2069 memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
2069 wl->ap_fw_ps_map = 0; 2070 wl->ap_fw_ps_map = 0;
@@ -2653,6 +2654,17 @@ static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
2653 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 2654 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
2654 }; 2655 };
2655 2656
2657 /*
2658 * A STA set to GEM cipher requires 2 tx spare blocks.
2659 * Return to default value when GEM cipher key is removed
2660 */
2661 if (key_type == KEY_GEM) {
2662 if (action == KEY_ADD_OR_REPLACE)
2663 wl->tx_spare_blocks = 2;
2664 else if (action == KEY_REMOVE)
2665 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
2666 }
2667
2656 addr = sta ? sta->addr : bcast_addr; 2668 addr = sta ? sta->addr : bcast_addr;
2657 2669
2658 if (is_zero_ether_addr(addr)) { 2670 if (is_zero_ether_addr(addr)) {
@@ -4599,6 +4611,7 @@ struct ieee80211_hw *wl1271_alloc_hw(void)
4599 wl->sched_scanning = false; 4611 wl->sched_scanning = false;
4600 wl->tx_security_seq = 0; 4612 wl->tx_security_seq = 0;
4601 wl->tx_security_last_seq_lsb = 0; 4613 wl->tx_security_last_seq_lsb = 0;
4614 wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
4602 wl->role_id = WL12XX_INVALID_ROLE_ID; 4615 wl->role_id = WL12XX_INVALID_ROLE_ID;
4603 wl->system_hlid = WL12XX_SYSTEM_HLID; 4616 wl->system_hlid = WL12XX_SYSTEM_HLID;
4604 wl->sta_hlid = WL12XX_INVALID_LINK_ID; 4617 wl->sta_hlid = WL12XX_INVALID_LINK_ID;