mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
wifi: mt76: mt7921: fix country count limitation for CLC
[ Upstream commitfa6ad88e02] Due to the increase in the number of power tables for 6Ghz on CLC, the variable nr_country is no longer sufficient to represent the total quantity. Therefore, we have switched to calculating the length of clc buf to obtain the correct power table. Additionally, the version number has been incremented to 1. Fixes:23bdc5d8ca("wifi: mt76: mt7921: introduce Country Location Control support") Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
f8fa25bf66
commit
15173a1697
|
|
@ -1136,22 +1136,27 @@ int __mt7921_mcu_set_clc(struct mt792x_dev *dev, u8 *alpha2,
|
|||
u8 type[2];
|
||||
u8 rsvd[64];
|
||||
} __packed req = {
|
||||
.ver = 1,
|
||||
.idx = idx,
|
||||
.env = env_cap,
|
||||
.acpi_conf = mt792x_acpi_get_flags(&dev->phy),
|
||||
};
|
||||
int ret, valid_cnt = 0;
|
||||
u8 i, *pos;
|
||||
u16 buf_len = 0;
|
||||
u8 *pos;
|
||||
|
||||
if (!clc)
|
||||
return 0;
|
||||
|
||||
buf_len = le16_to_cpu(clc->len) - sizeof(*clc);
|
||||
pos = clc->data;
|
||||
for (i = 0; i < clc->nr_country; i++) {
|
||||
while (buf_len > 16) {
|
||||
struct mt7921_clc_rule *rule = (struct mt7921_clc_rule *)pos;
|
||||
u16 len = le16_to_cpu(rule->len);
|
||||
u16 offset = len + sizeof(*rule);
|
||||
|
||||
pos += len + sizeof(*rule);
|
||||
pos += offset;
|
||||
buf_len -= offset;
|
||||
if (rule->alpha2[0] != alpha2[0] ||
|
||||
rule->alpha2[1] != alpha2[1])
|
||||
continue;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user