mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-06 05:44:20 +08:00
rsi: set_key enhancements
Broadcast bit to be set for broadcast and multicast packets. For remove_key, tx and rx mic need not be filled. Signed-off-by: Prameela Rani Garnepudi <prameela.j04cs@gmail.com> Signed-off-by: Amitkumar Karwar <amit.karwar@redpinesignals.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
a84faab0fd
commit
2a58900bf5
@ -723,38 +723,40 @@ int rsi_hal_load_key(struct rsi_common *common,
|
||||
memset(skb->data, 0, frame_len);
|
||||
set_key = (struct rsi_set_key *)skb->data;
|
||||
|
||||
if (key_type == RSI_GROUP_KEY)
|
||||
key_descriptor = RSI_KEY_TYPE_BROADCAST;
|
||||
if ((cipher == WLAN_CIPHER_SUITE_WEP40) ||
|
||||
(cipher == WLAN_CIPHER_SUITE_WEP104)) {
|
||||
key_len += 1;
|
||||
key_id = 0;
|
||||
key_descriptor |= RSI_WEP_KEY;
|
||||
if (key_len >= 13)
|
||||
key_descriptor |= RSI_WEP_KEY_104;
|
||||
} else if (cipher != KEY_TYPE_CLEAR) {
|
||||
key_descriptor |= RSI_CIPHER_WPA;
|
||||
if (key_type == RSI_PAIRWISE_KEY)
|
||||
key_id = 0;
|
||||
if (cipher == WLAN_CIPHER_SUITE_TKIP)
|
||||
key_descriptor |= RSI_CIPHER_TKIP;
|
||||
}
|
||||
key_descriptor |= (key_type | RSI_PROTECT_DATA_FRAMES | (key_id << 14));
|
||||
key_descriptor |= RSI_PROTECT_DATA_FRAMES;
|
||||
key_descriptor |= ((key_id << RSI_KEY_ID_OFFSET) & RSI_KEY_ID_MASK);
|
||||
|
||||
rsi_set_len_qno(&set_key->desc_dword0.len_qno,
|
||||
(frame_len - FRAME_DESC_SZ), RSI_WIFI_MGMT_Q);
|
||||
set_key->desc_dword0.frame_type = SET_KEY_REQ;
|
||||
set_key->key_desc = cpu_to_le16(key_descriptor);
|
||||
|
||||
if ((cipher == WLAN_CIPHER_SUITE_WEP40) ||
|
||||
(cipher == WLAN_CIPHER_SUITE_WEP104)) {
|
||||
memcpy(&set_key->key[key_id][1],
|
||||
data,
|
||||
key_len * 2);
|
||||
if (data) {
|
||||
if ((cipher == WLAN_CIPHER_SUITE_WEP40) ||
|
||||
(cipher == WLAN_CIPHER_SUITE_WEP104)) {
|
||||
memcpy(&set_key->key[key_id][1], data, key_len * 2);
|
||||
} else {
|
||||
memcpy(&set_key->key[0][0], data, key_len);
|
||||
}
|
||||
memcpy(set_key->tx_mic_key, &data[16], 8);
|
||||
memcpy(set_key->rx_mic_key, &data[24], 8);
|
||||
} else {
|
||||
memcpy(&set_key->key[0][0], data, key_len);
|
||||
memset(&set_key[FRAME_DESC_SZ], 0, frame_len - FRAME_DESC_SZ);
|
||||
}
|
||||
|
||||
memcpy(set_key->tx_mic_key, &data[16], 8);
|
||||
memcpy(set_key->rx_mic_key, &data[24], 8);
|
||||
|
||||
skb_put(skb, frame_len);
|
||||
|
||||
return rsi_send_internal_mgmt_frame(common, skb);
|
||||
|
Loading…
Reference in New Issue
Block a user