Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions mt76x02_mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ struct mt76x02_tx_status {
u16 rate;
} __packed __aligned(2);

#define MT_VIF_WCID(_n) (254 - ((_n) & 7))
#define MT_MAX_VIFS 8
#define MT_VIF_WCID(_n) (254 - ((_n) & 0xf))
#define MT_MAX_VIFS 16

#define MT_PKTID_RATE GENMASK(4, 0)
#define MT_PKTID_AC GENMASK(6, 5)
Expand Down
7 changes: 6 additions & 1 deletion mt76x2/mcu.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,13 @@ int mt76x2_mcu_set_channel(struct mt76x02_dev *dev, u8 channel, u8 bw,
.chainmask = cpu_to_le16(dev->chainmask),
};

int ret;

/* first set the channel without the extension channel info */
mt76_mcu_send_msg(dev, CMD_SWITCH_CHANNEL_OP, &msg, sizeof(msg), true);
ret = mt76_mcu_send_msg(dev, CMD_SWITCH_CHANNEL_OP, &msg, sizeof(msg),
true);
if (ret)
return ret;

usleep_range(5000, 10000);

Expand Down
24 changes: 12 additions & 12 deletions mt76x2/pci_mcu.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ mt76pci_load_firmware(struct mt76x02_dev *dev)
{
const struct firmware *fw;
const struct mt76x02_fw_header *hdr;
int len, ret;
int ret;
u32 ilm_len, dlm_len;
__le32 *cur;
u32 offset, val;

Expand All @@ -95,11 +96,13 @@ mt76pci_load_firmware(struct mt76x02_dev *dev)

hdr = (const struct mt76x02_fw_header *)fw->data;

len = sizeof(*hdr);
len += le32_to_cpu(hdr->ilm_len);
len += le32_to_cpu(hdr->dlm_len);
ilm_len = le32_to_cpu(hdr->ilm_len);
dlm_len = le32_to_cpu(hdr->dlm_len);

if (fw->size != len)
if (ilm_len > INT_MAX || dlm_len > INT_MAX ||
(ilm_len | dlm_len) & 3 ||
ilm_len > fw->size - sizeof(*hdr) ||
dlm_len != fw->size - sizeof(*hdr) - ilm_len)
goto error;

val = le16_to_cpu(hdr->fw_ver);
Expand All @@ -111,21 +114,19 @@ mt76pci_load_firmware(struct mt76x02_dev *dev)
dev_info(dev->mt76.dev, "Build Time: %.16s\n", hdr->build_time);

cur = (__le32 *)(fw->data + sizeof(*hdr));
len = le32_to_cpu(hdr->ilm_len);

mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, MT_MCU_ILM_OFFSET);
mt76_wr_copy(dev, MT_MCU_ILM_ADDR, cur, len);
mt76_wr_copy(dev, MT_MCU_ILM_ADDR, cur, ilm_len);

cur += len / sizeof(*cur);
len = le32_to_cpu(hdr->dlm_len);
cur += ilm_len / sizeof(*cur);

if (mt76xx_rev(dev) >= MT76XX_REV_E3)
offset = MT_MCU_DLM_ADDR_E3;
else
offset = MT_MCU_DLM_ADDR;

mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, MT_MCU_DLM_OFFSET);
mt76_wr_copy(dev, offset, cur, len);
mt76_wr_copy(dev, offset, cur, dlm_len);

mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, 0);

Expand Down Expand Up @@ -192,6 +193,5 @@ int mt76x2_mcu_init(struct mt76x02_dev *dev)
if (ret)
return ret;

mt76x02_mcu_function_select(dev, Q_SELECT, 1);
return 0;
return mt76x02_mcu_function_select(dev, Q_SELECT, 1);
}
9 changes: 6 additions & 3 deletions mt76x2/usb_mcu.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,8 @@ static int mt76x2u_mcu_load_firmware(struct mt76x02_dev *dev)
{
u32 val, dlm_offset = MT76U_MCU_DLM_OFFSET;
const struct mt76x02_fw_header *hdr;
int err, len, ilm_len, dlm_len;
int err;
u32 ilm_len, dlm_len;
const struct firmware *fw;

err = request_firmware(&fw, MT7662_FIRMWARE, dev->mt76.dev);
Expand All @@ -160,8 +161,10 @@ static int mt76x2u_mcu_load_firmware(struct mt76x02_dev *dev)
hdr = (const struct mt76x02_fw_header *)fw->data;
ilm_len = le32_to_cpu(hdr->ilm_len);
dlm_len = le32_to_cpu(hdr->dlm_len);
len = sizeof(*hdr) + ilm_len + dlm_len;
if (fw->size != len) {

if (ilm_len > INT_MAX || dlm_len > INT_MAX ||
ilm_len > fw->size - sizeof(*hdr) ||
dlm_len != fw->size - sizeof(*hdr) - ilm_len) {
err = -EINVAL;
goto out;
}
Expand Down