Skip to content

Commit

Permalink
tbs-usb: Use heap buffer for USB I/O.
Browse files Browse the repository at this point in the history
  • Loading branch information
crazycat69 committed Mar 20, 2017
1 parent 7b1ae21 commit c96944e
Show file tree
Hide file tree
Showing 13 changed files with 95 additions and 44 deletions.
7 changes: 6 additions & 1 deletion drivers/media/usb/dvb-usb/tbs-qbox.c
Expand Up @@ -47,19 +47,24 @@ static int tbsqboxs1_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBSQBOX_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBSQBOX_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;

u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBSQBOX_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == TBSQBOX_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
7 changes: 6 additions & 1 deletion drivers/media/usb/dvb-usb/tbs-qbox2.c
Expand Up @@ -48,19 +48,24 @@ static int tbsqbox2_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBSQBOX_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBSQBOX_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;

u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBSQBOX_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == TBSQBOX_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
9 changes: 7 additions & 2 deletions drivers/media/usb/dvb-usb/tbs-qbox22.c
Expand Up @@ -54,19 +54,24 @@ static int tbsqbox22_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBSQBOX_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBSQBOX_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;

u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBSQBOX_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index, u8buf, len, 2000);
value, index , u8buf, len, 2000);

if (flags == TBSQBOX_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
16 changes: 10 additions & 6 deletions drivers/media/usb/dvb-usb/tbs-qbox2ci.c
Expand Up @@ -50,20 +50,24 @@ static int tbsqbox2ci_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBSQBOX_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBSQBOX_READ_MSG) ? USB_DIR_IN :
USB_DIR_OUT;
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBSQBOX_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;

u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBSQBOX_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type |
USB_TYPE_VENDOR, value, index , u8buf, len, 2000);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == TBSQBOX_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
9 changes: 7 additions & 2 deletions drivers/media/usb/dvb-usb/tbs-qboxs2.c
Expand Up @@ -50,19 +50,24 @@ static int tbsqboxs2_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBSQBOX_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBSQBOX_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;

u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBSQBOX_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index, u8buf, len, 2000);
value, index , u8buf, len, 2000);

if (flags == TBSQBOX_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
13 changes: 8 additions & 5 deletions drivers/media/usb/dvb-usb/tbs5220.c
Expand Up @@ -37,20 +37,23 @@ static int tbs5220_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBS5220_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBS5220_READ_MSG) ? USB_DIR_IN :
USB_DIR_OUT;
u8 request_type = (flags == TBS5220_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBS5220_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type |
USB_TYPE_VENDOR, value, index , u8buf, len, 2000);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == TBS5220_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
13 changes: 8 additions & 5 deletions drivers/media/usb/dvb-usb/tbs5520.c
Expand Up @@ -40,20 +40,23 @@ static int tbs5520_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 *data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == tbs5520_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == tbs5520_READ_MSG) ? USB_DIR_IN :
USB_DIR_OUT;
u8 request_type = (flags == tbs5520_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == tbs5520_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type |
USB_TYPE_VENDOR, value, index , u8buf, len, 2000);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == tbs5520_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
13 changes: 8 additions & 5 deletions drivers/media/usb/dvb-usb/tbs5520se.c
Expand Up @@ -45,20 +45,23 @@ static int tbs5520se_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBS5520se_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBS5520se_READ_MSG) ? USB_DIR_IN :
USB_DIR_OUT;
u8 request_type = (flags == TBS5520se_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBS5520se_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type |
USB_TYPE_VENDOR, value, index , u8buf, len, 2000);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == TBS5520se_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
13 changes: 8 additions & 5 deletions drivers/media/usb/dvb-usb/tbs5880.c
Expand Up @@ -48,20 +48,23 @@ static int tbs5880_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBS5880_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBS5880_READ_MSG) ? USB_DIR_IN :
USB_DIR_OUT;
u8 request_type = (flags == TBS5880_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBS5880_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type |
USB_TYPE_VENDOR, value, index , u8buf, len, 2000);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == TBS5880_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
13 changes: 8 additions & 5 deletions drivers/media/usb/dvb-usb/tbs5881.c
Expand Up @@ -46,20 +46,23 @@ static int tbs5881_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBS5881_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBS5881_READ_MSG) ? USB_DIR_IN :
USB_DIR_OUT;
u8 request_type = (flags == TBS5881_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBS5881_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type |
USB_TYPE_VENDOR, value, index , u8buf, len, 2000);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index , u8buf, len, 2000);

if (flags == TBS5881_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
10 changes: 7 additions & 3 deletions drivers/media/usb/dvb-usb/tbs5922se.c
Expand Up @@ -54,19 +54,23 @@ static int tbs5922se_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBS5922SE_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBS5922SE_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBS5922SE_WRITE_MSG)
memcpy(u8buf, data, len);
ret = usb_control_msg(dev, pipe, request, request_type | USB_TYPE_VENDOR,
value, index, u8buf, len, 2000);
value, index , u8buf, len, 2000);

if (flags == TBS5922SE_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
8 changes: 6 additions & 2 deletions drivers/media/usb/dvb-usb/tbs5925.c
Expand Up @@ -45,11 +45,14 @@ static int tbs5925_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBS5925_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBS5925_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBS5925_WRITE_MSG)
memcpy(u8buf, data, len);
Expand All @@ -58,6 +61,7 @@ static int tbs5925_op_rw(struct usb_device *dev, u8 request, u16 value,

if (flags == TBS5925_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down
8 changes: 6 additions & 2 deletions drivers/media/usb/dvb-usb/tbs5927.c
Expand Up @@ -43,11 +43,14 @@ static int tbs5927_op_rw(struct usb_device *dev, u8 request, u16 value,
u16 index, u8 * data, u16 len, int flags)
{
int ret;
u8 u8buf[len];
void *u8buf;

unsigned int pipe = (flags == TBS5927_READ_MSG) ?
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
usb_rcvctrlpipe(dev, 0) : usb_sndctrlpipe(dev, 0);
u8 request_type = (flags == TBS5927_READ_MSG) ? USB_DIR_IN : USB_DIR_OUT;
u8buf = kmalloc(len, GFP_KERNEL);
if (!u8buf)
return -ENOMEM;

if (flags == TBS5927_WRITE_MSG)
memcpy(u8buf, data, len);
Expand All @@ -56,6 +59,7 @@ static int tbs5927_op_rw(struct usb_device *dev, u8 request, u16 value,

if (flags == TBS5927_READ_MSG)
memcpy(data, u8buf, len);
kfree(u8buf);
return ret;
}

Expand Down

0 comments on commit c96944e

Please sign in to comment.