“0699afb112355f7e0a08b05030bb7fe613554d81”上不存在“python/paddle/git@gitcode.net:paddlepaddle/Paddle.git”
提交 94462486 编写于 作者: M Markus Theil 提交者: Felix Fietkau

mt76: speed up usb bulk copy

Use larger batches for usb copy to speed this operation up. Otherwise it
would be too slow for copying new beacons or broadcast frames over usb.
Assure, that always a multiple of 4 Bytes is copied, as outlined in
850e8f6f "mt76: round up length on mt76_wr_copy" from Felix Fietkau.
Signed-off-by: NMarkus Theil <markus.theil@tu-ilmenau.de>
Signed-off-by: NFelix Fietkau <nbd@nbd.name>
上级 5c48e60e
......@@ -389,7 +389,7 @@ enum mt76u_out_ep {
struct mt76_usb {
struct mutex usb_ctrl_mtx;
union {
u8 data[32];
u8 data[128];
__le32 reg_val;
};
......
......@@ -149,18 +149,30 @@ static void mt76u_copy(struct mt76_dev *dev, u32 offset,
const void *data, int len)
{
struct mt76_usb *usb = &dev->usb;
const u32 *val = data;
int i, ret;
const u8 *val = data;
int ret;
int current_batch_size;
int i = 0;
/* Assure that always a multiple of 4 bytes are copied,
* otherwise beacons can be corrupted.
* See: "mt76: round up length on mt76_wr_copy"
* Commit 850e8f6fbd5d0003b0
*/
len = round_up(len, 4);
mutex_lock(&usb->usb_ctrl_mtx);
for (i = 0; i < DIV_ROUND_UP(len, 4); i++) {
put_unaligned(val[i], (u32 *)usb->data);
while (i < len) {
current_batch_size = min_t(int, sizeof(usb->data), len - i);
memcpy(usb->data, val + i, current_batch_size);
ret = __mt76u_vendor_request(dev, MT_VEND_MULTI_WRITE,
USB_DIR_OUT | USB_TYPE_VENDOR,
0, offset + i * 4, usb->data,
sizeof(u32));
0, offset + i, usb->data,
current_batch_size);
if (ret < 0)
break;
i += current_batch_size;
}
mutex_unlock(&usb->usb_ctrl_mtx);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
新手
引导
客服 返回
顶部