|
@@ -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);
|
|
|
}
|
|
|
|