rndis_host: pass buffer length to rndis_command
Pass buffer length to rndis_command so that rndis_command can read full response buffer from device instead of max CONTROL_BUFFER_SIZE bytes. Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
committed by
Jeff Garzik
parent
0caa11663c
commit
818727badc
@@ -74,7 +74,7 @@ EXPORT_SYMBOL_GPL(rndis_status);
|
||||
* Call context is likely probe(), before interface name is known,
|
||||
* which is why we won't try to use it in the diagnostics.
|
||||
*/
|
||||
int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf)
|
||||
int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)
|
||||
{
|
||||
struct cdc_state *info = (void *) &dev->data;
|
||||
int master_ifnum;
|
||||
@@ -121,7 +121,7 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf)
|
||||
USB_CDC_GET_ENCAPSULATED_RESPONSE,
|
||||
USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||
0, master_ifnum,
|
||||
buf, CONTROL_BUFFER_SIZE,
|
||||
buf, buflen,
|
||||
RNDIS_CONTROL_TIMEOUT_MS);
|
||||
if (likely(retval >= 8)) {
|
||||
msg_len = le32_to_cpu(buf->msg_len);
|
||||
@@ -239,7 +239,7 @@ static int rndis_query(struct usbnet *dev, struct usb_interface *intf,
|
||||
u.get->len = cpu_to_le32(in_len);
|
||||
u.get->offset = ccpu2(20);
|
||||
|
||||
retval = rndis_command(dev, u.header);
|
||||
retval = rndis_command(dev, u.header, CONTROL_BUFFER_SIZE);
|
||||
if (unlikely(retval < 0)) {
|
||||
dev_err(&intf->dev, "RNDIS_MSG_QUERY(0x%08x) failed, %d\n",
|
||||
oid, retval);
|
||||
@@ -328,7 +328,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
|
||||
u.init->max_transfer_size = cpu_to_le32(dev->rx_urb_size);
|
||||
|
||||
net->change_mtu = NULL;
|
||||
retval = rndis_command(dev, u.header);
|
||||
retval = rndis_command(dev, u.header, CONTROL_BUFFER_SIZE);
|
||||
if (unlikely(retval < 0)) {
|
||||
/* it might not even be an RNDIS device!! */
|
||||
dev_err(&intf->dev, "RNDIS init failed, %d\n", retval);
|
||||
@@ -409,7 +409,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
|
||||
u.set->offset = ccpu2((sizeof *u.set) - 8);
|
||||
*(__le32 *)(u.buf + sizeof *u.set) = RNDIS_DEFAULT_FILTER;
|
||||
|
||||
retval = rndis_command(dev, u.header);
|
||||
retval = rndis_command(dev, u.header, CONTROL_BUFFER_SIZE);
|
||||
if (unlikely(retval < 0)) {
|
||||
dev_err(&intf->dev, "rndis set packet filter, %d\n", retval);
|
||||
goto halt_fail_and_release;
|
||||
@@ -424,7 +424,7 @@ halt_fail_and_release:
|
||||
memset(u.halt, 0, sizeof *u.halt);
|
||||
u.halt->msg_type = RNDIS_MSG_HALT;
|
||||
u.halt->msg_len = ccpu2(sizeof *u.halt);
|
||||
(void) rndis_command(dev, (void *)u.halt);
|
||||
(void) rndis_command(dev, (void *)u.halt, CONTROL_BUFFER_SIZE);
|
||||
fail_and_release:
|
||||
usb_set_intfdata(info->data, NULL);
|
||||
usb_driver_release_interface(driver_of(intf), info->data);
|
||||
@@ -449,7 +449,7 @@ void rndis_unbind(struct usbnet *dev, struct usb_interface *intf)
|
||||
if (halt) {
|
||||
halt->msg_type = RNDIS_MSG_HALT;
|
||||
halt->msg_len = ccpu2(sizeof *halt);
|
||||
(void) rndis_command(dev, (void *)halt);
|
||||
(void) rndis_command(dev, (void *)halt, CONTROL_BUFFER_SIZE);
|
||||
kfree(halt);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user