|
@@ -2064,6 +2064,7 @@ deinit:
|
|
wl->session_counter = 0;
|
|
wl->session_counter = 0;
|
|
wl->rate_set = CONF_TX_RATE_MASK_BASIC;
|
|
wl->rate_set = CONF_TX_RATE_MASK_BASIC;
|
|
wl->vif = NULL;
|
|
wl->vif = NULL;
|
|
|
|
+ wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
|
|
wl1271_free_ap_keys(wl);
|
|
wl1271_free_ap_keys(wl);
|
|
memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
|
|
memset(wl->ap_hlid_map, 0, sizeof(wl->ap_hlid_map));
|
|
wl->ap_fw_ps_map = 0;
|
|
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,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * A STA set to GEM cipher requires 2 tx spare blocks.
|
|
|
|
+ * Return to default value when GEM cipher key is removed
|
|
|
|
+ */
|
|
|
|
+ if (key_type == KEY_GEM) {
|
|
|
|
+ if (action == KEY_ADD_OR_REPLACE)
|
|
|
|
+ wl->tx_spare_blocks = 2;
|
|
|
|
+ else if (action == KEY_REMOVE)
|
|
|
|
+ wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
|
|
|
|
+ }
|
|
|
|
+
|
|
addr = sta ? sta->addr : bcast_addr;
|
|
addr = sta ? sta->addr : bcast_addr;
|
|
|
|
|
|
if (is_zero_ether_addr(addr)) {
|
|
if (is_zero_ether_addr(addr)) {
|
|
@@ -4599,6 +4611,7 @@ struct ieee80211_hw *wl1271_alloc_hw(void)
|
|
wl->sched_scanning = false;
|
|
wl->sched_scanning = false;
|
|
wl->tx_security_seq = 0;
|
|
wl->tx_security_seq = 0;
|
|
wl->tx_security_last_seq_lsb = 0;
|
|
wl->tx_security_last_seq_lsb = 0;
|
|
|
|
+ wl->tx_spare_blocks = TX_HW_BLOCK_SPARE_DEFAULT;
|
|
wl->role_id = WL12XX_INVALID_ROLE_ID;
|
|
wl->role_id = WL12XX_INVALID_ROLE_ID;
|
|
wl->system_hlid = WL12XX_SYSTEM_HLID;
|
|
wl->system_hlid = WL12XX_SYSTEM_HLID;
|
|
wl->sta_hlid = WL12XX_INVALID_LINK_ID;
|
|
wl->sta_hlid = WL12XX_INVALID_LINK_ID;
|