mirror of https://gitee.com/openkylin/linux.git
mt76: mt76x02: when setting a key, use PN from mac80211
Preparation for full device restart support Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
fc78010217
commit
de3c2af15f
|
@ -73,6 +73,7 @@ int mt76x02_mac_wcid_set_key(struct mt76x02_dev *dev, u8 idx,
|
|||
enum mt76x02_cipher_type cipher;
|
||||
u8 key_data[32];
|
||||
u8 iv_data[8];
|
||||
u64 pn;
|
||||
|
||||
cipher = mt76x02_mac_get_key_info(key, key_data);
|
||||
if (cipher == MT_CIPHER_NONE && key)
|
||||
|
@ -85,9 +86,22 @@ int mt76x02_mac_wcid_set_key(struct mt76x02_dev *dev, u8 idx,
|
|||
if (key) {
|
||||
mt76_rmw_field(dev, MT_WCID_ATTR(idx), MT_WCID_ATTR_PAIRWISE,
|
||||
!!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE));
|
||||
|
||||
pn = atomic64_read(&key->tx_pn);
|
||||
|
||||
iv_data[3] = key->keyidx << 6;
|
||||
if (cipher >= MT_CIPHER_TKIP)
|
||||
if (cipher >= MT_CIPHER_TKIP) {
|
||||
iv_data[3] |= 0x20;
|
||||
put_unaligned_le32(pn >> 16, &iv_data[4]);
|
||||
}
|
||||
|
||||
if (cipher == MT_CIPHER_TKIP) {
|
||||
iv_data[0] = (pn >> 8) & 0xff;
|
||||
iv_data[1] = (iv_data[0] | 0x20) & 0x7f;
|
||||
iv_data[2] = pn & 0xff;
|
||||
} else if (cipher >= MT_CIPHER_AES_CCMP) {
|
||||
put_unaligned_le16((pn & 0xffff), &iv_data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
mt76_wr_copy(dev, MT_WCID_IV(idx), iv_data, sizeof(iv_data));
|
||||
|
|
Loading…
Reference in New Issue