usb gadget: link fixes for network gadget

Change how the Ethernet/RNDIS gadget driver builds:  don't
use separate compilation, since it works poorly when key
parts are library code (with init sections etc).  Instead
be as close as we can to "gcc --combine ...".

This is a bit more complicated than most of the others
because it had to resolve a few symbol collisions.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
David Brownell 2008-08-18 17:45:07 -07:00 committed by Greg Kroah-Hartman
parent 8a1ce2c044
commit 33376c1c04
5 changed files with 158 additions and 145 deletions

View file

@ -22,10 +22,8 @@ obj-$(CONFIG_USB_M66592) += m66592-udc.o
# #
# USB gadget drivers # USB gadget drivers
# #
C_UTILS = composite.o usbstring.o config.o epautoconf.o
g_zero-objs := zero.o g_zero-objs := zero.o
g_ether-objs := ether.o u_ether.o f_subset.o f_ecm.o $(C_UTILS) g_ether-objs := ether.o
g_serial-objs := serial.o g_serial-objs := serial.o
g_midi-objs := gmidi.o g_midi-objs := gmidi.o
gadgetfs-objs := inode.o gadgetfs-objs := inode.o
@ -33,10 +31,6 @@ g_file_storage-objs := file_storage.o
g_printer-objs := printer.o g_printer-objs := printer.o
g_cdc-objs := cdc2.o g_cdc-objs := cdc2.o
ifeq ($(CONFIG_USB_ETH_RNDIS),y)
g_ether-objs += f_rndis.o rndis.o
endif
obj-$(CONFIG_USB_ZERO) += g_zero.o obj-$(CONFIG_USB_ZERO) += g_zero.o
obj-$(CONFIG_USB_ETH) += g_ether.o obj-$(CONFIG_USB_ETH) += g_ether.o
obj-$(CONFIG_USB_GADGETFS) += gadgetfs.o obj-$(CONFIG_USB_GADGETFS) += gadgetfs.o

View file

@ -96,6 +96,28 @@ static inline bool has_rndis(void)
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
/*
* Kbuild is not very cooperative with respect to linking separately
* compiled library objects into one module. So for now we won't use
* separate compilation ... ensuring init/exit sections work to shrink
* the runtime footprint, and giving us at least some parts of what
* a "gcc --combine ... part1.c part2.c part3.c ... " build would.
*/
#include "composite.c"
#include "usbstring.c"
#include "config.c"
#include "epautoconf.c"
#include "f_ecm.c"
#include "f_subset.c"
#ifdef CONFIG_USB_ETH_RNDIS
#include "f_rndis.c"
#include "rndis.c"
#endif
#include "u_ether.c"
/*-------------------------------------------------------------------------*/
/* DO NOT REUSE THESE IDs with a protocol-incompatible driver!! Ever!! /* DO NOT REUSE THESE IDs with a protocol-incompatible driver!! Ever!!
* Instead: allocate your own, using normal USB-IF procedures. * Instead: allocate your own, using normal USB-IF procedures.
*/ */
@ -293,7 +315,8 @@ static int __init eth_bind(struct usb_composite_dev *cdev)
* but if the controller isn't recognized at all then * but if the controller isn't recognized at all then
* that assumption is a bit more likely to be wrong. * that assumption is a bit more likely to be wrong.
*/ */
WARNING(cdev, "controller '%s' not recognized; trying %s\n", dev_warn(&gadget->dev,
"controller '%s' not recognized; trying %s\n",
gadget->name, gadget->name,
eth_config_driver.label); eth_config_driver.label);
device_desc.bcdDevice = device_desc.bcdDevice =
@ -332,7 +355,8 @@ static int __init eth_bind(struct usb_composite_dev *cdev)
if (status < 0) if (status < 0)
goto fail; goto fail;
INFO(cdev, "%s, version: " DRIVER_VERSION "\n", DRIVER_DESC); dev_info(&gadget->dev, "%s, version: " DRIVER_VERSION "\n",
DRIVER_DESC);
return 0; return 0;

View file

@ -83,7 +83,7 @@ static inline struct f_ecm *func_to_ecm(struct usb_function *f)
} }
/* peak (theoretical) bulk transfer rate in bits-per-second */ /* peak (theoretical) bulk transfer rate in bits-per-second */
static inline unsigned bitrate(struct usb_gadget *g) static inline unsigned ecm_bitrate(struct usb_gadget *g)
{ {
if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH) if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
return 13 * 512 * 8 * 1000 * 8; return 13 * 512 * 8 * 1000 * 8;
@ -107,7 +107,7 @@ static inline unsigned bitrate(struct usb_gadget *g)
*/ */
#define LOG2_STATUS_INTERVAL_MSEC 5 /* 1 << 5 == 32 msec */ #define LOG2_STATUS_INTERVAL_MSEC 5 /* 1 << 5 == 32 msec */
#define STATUS_BYTECOUNT 16 /* 8 byte header + data */ #define ECM_STATUS_BYTECOUNT 16 /* 8 byte header + data */
/* interface descriptor: */ /* interface descriptor: */
@ -125,8 +125,8 @@ static struct usb_interface_descriptor ecm_control_intf __initdata = {
/* .iInterface = DYNAMIC */ /* .iInterface = DYNAMIC */
}; };
static struct usb_cdc_header_desc header_desc __initdata = { static struct usb_cdc_header_desc ecm_header_desc __initdata = {
.bLength = sizeof header_desc, .bLength = sizeof ecm_header_desc,
.bDescriptorType = USB_DT_CS_INTERFACE, .bDescriptorType = USB_DT_CS_INTERFACE,
.bDescriptorSubType = USB_CDC_HEADER_TYPE, .bDescriptorSubType = USB_CDC_HEADER_TYPE,
@ -141,8 +141,8 @@ static struct usb_cdc_union_desc ecm_union_desc __initdata = {
/* .bSlaveInterface0 = DYNAMIC */ /* .bSlaveInterface0 = DYNAMIC */
}; };
static struct usb_cdc_ether_desc ether_desc __initdata = { static struct usb_cdc_ether_desc ecm_desc __initdata = {
.bLength = sizeof ether_desc, .bLength = sizeof ecm_desc,
.bDescriptorType = USB_DT_CS_INTERFACE, .bDescriptorType = USB_DT_CS_INTERFACE,
.bDescriptorSubType = USB_CDC_ETHERNET_TYPE, .bDescriptorSubType = USB_CDC_ETHERNET_TYPE,
@ -186,17 +186,17 @@ static struct usb_interface_descriptor ecm_data_intf __initdata = {
/* full speed support: */ /* full speed support: */
static struct usb_endpoint_descriptor fs_notify_desc __initdata = { static struct usb_endpoint_descriptor fs_ecm_notify_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = USB_DIR_IN, .bEndpointAddress = USB_DIR_IN,
.bmAttributes = USB_ENDPOINT_XFER_INT, .bmAttributes = USB_ENDPOINT_XFER_INT,
.wMaxPacketSize = __constant_cpu_to_le16(STATUS_BYTECOUNT), .wMaxPacketSize = __constant_cpu_to_le16(ECM_STATUS_BYTECOUNT),
.bInterval = 1 << LOG2_STATUS_INTERVAL_MSEC, .bInterval = 1 << LOG2_STATUS_INTERVAL_MSEC,
}; };
static struct usb_endpoint_descriptor fs_in_desc __initdata = { static struct usb_endpoint_descriptor fs_ecm_in_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -204,7 +204,7 @@ static struct usb_endpoint_descriptor fs_in_desc __initdata = {
.bmAttributes = USB_ENDPOINT_XFER_BULK, .bmAttributes = USB_ENDPOINT_XFER_BULK,
}; };
static struct usb_endpoint_descriptor fs_out_desc __initdata = { static struct usb_endpoint_descriptor fs_ecm_out_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -212,34 +212,34 @@ static struct usb_endpoint_descriptor fs_out_desc __initdata = {
.bmAttributes = USB_ENDPOINT_XFER_BULK, .bmAttributes = USB_ENDPOINT_XFER_BULK,
}; };
static struct usb_descriptor_header *eth_fs_function[] __initdata = { static struct usb_descriptor_header *ecm_fs_function[] __initdata = {
/* CDC ECM control descriptors */ /* CDC ECM control descriptors */
(struct usb_descriptor_header *) &ecm_control_intf, (struct usb_descriptor_header *) &ecm_control_intf,
(struct usb_descriptor_header *) &header_desc, (struct usb_descriptor_header *) &ecm_header_desc,
(struct usb_descriptor_header *) &ecm_union_desc, (struct usb_descriptor_header *) &ecm_union_desc,
(struct usb_descriptor_header *) &ether_desc, (struct usb_descriptor_header *) &ecm_desc,
/* NOTE: status endpoint might need to be removed */ /* NOTE: status endpoint might need to be removed */
(struct usb_descriptor_header *) &fs_notify_desc, (struct usb_descriptor_header *) &fs_ecm_notify_desc,
/* data interface, altsettings 0 and 1 */ /* data interface, altsettings 0 and 1 */
(struct usb_descriptor_header *) &ecm_data_nop_intf, (struct usb_descriptor_header *) &ecm_data_nop_intf,
(struct usb_descriptor_header *) &ecm_data_intf, (struct usb_descriptor_header *) &ecm_data_intf,
(struct usb_descriptor_header *) &fs_in_desc, (struct usb_descriptor_header *) &fs_ecm_in_desc,
(struct usb_descriptor_header *) &fs_out_desc, (struct usb_descriptor_header *) &fs_ecm_out_desc,
NULL, NULL,
}; };
/* high speed support: */ /* high speed support: */
static struct usb_endpoint_descriptor hs_notify_desc __initdata = { static struct usb_endpoint_descriptor hs_ecm_notify_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
.bEndpointAddress = USB_DIR_IN, .bEndpointAddress = USB_DIR_IN,
.bmAttributes = USB_ENDPOINT_XFER_INT, .bmAttributes = USB_ENDPOINT_XFER_INT,
.wMaxPacketSize = __constant_cpu_to_le16(STATUS_BYTECOUNT), .wMaxPacketSize = __constant_cpu_to_le16(ECM_STATUS_BYTECOUNT),
.bInterval = LOG2_STATUS_INTERVAL_MSEC + 4, .bInterval = LOG2_STATUS_INTERVAL_MSEC + 4,
}; };
static struct usb_endpoint_descriptor hs_in_desc __initdata = { static struct usb_endpoint_descriptor hs_ecm_in_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -248,7 +248,7 @@ static struct usb_endpoint_descriptor hs_in_desc __initdata = {
.wMaxPacketSize = __constant_cpu_to_le16(512), .wMaxPacketSize = __constant_cpu_to_le16(512),
}; };
static struct usb_endpoint_descriptor hs_out_desc __initdata = { static struct usb_endpoint_descriptor hs_ecm_out_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -257,19 +257,19 @@ static struct usb_endpoint_descriptor hs_out_desc __initdata = {
.wMaxPacketSize = __constant_cpu_to_le16(512), .wMaxPacketSize = __constant_cpu_to_le16(512),
}; };
static struct usb_descriptor_header *eth_hs_function[] __initdata = { static struct usb_descriptor_header *ecm_hs_function[] __initdata = {
/* CDC ECM control descriptors */ /* CDC ECM control descriptors */
(struct usb_descriptor_header *) &ecm_control_intf, (struct usb_descriptor_header *) &ecm_control_intf,
(struct usb_descriptor_header *) &header_desc, (struct usb_descriptor_header *) &ecm_header_desc,
(struct usb_descriptor_header *) &ecm_union_desc, (struct usb_descriptor_header *) &ecm_union_desc,
(struct usb_descriptor_header *) &ether_desc, (struct usb_descriptor_header *) &ecm_desc,
/* NOTE: status endpoint might need to be removed */ /* NOTE: status endpoint might need to be removed */
(struct usb_descriptor_header *) &hs_notify_desc, (struct usb_descriptor_header *) &hs_ecm_notify_desc,
/* data interface, altsettings 0 and 1 */ /* data interface, altsettings 0 and 1 */
(struct usb_descriptor_header *) &ecm_data_nop_intf, (struct usb_descriptor_header *) &ecm_data_nop_intf,
(struct usb_descriptor_header *) &ecm_data_intf, (struct usb_descriptor_header *) &ecm_data_intf,
(struct usb_descriptor_header *) &hs_in_desc, (struct usb_descriptor_header *) &hs_ecm_in_desc,
(struct usb_descriptor_header *) &hs_out_desc, (struct usb_descriptor_header *) &hs_ecm_out_desc,
NULL, NULL,
}; };
@ -329,14 +329,14 @@ static void ecm_do_notify(struct f_ecm *ecm)
event->bNotificationType = USB_CDC_NOTIFY_SPEED_CHANGE; event->bNotificationType = USB_CDC_NOTIFY_SPEED_CHANGE;
event->wValue = cpu_to_le16(0); event->wValue = cpu_to_le16(0);
event->wLength = cpu_to_le16(8); event->wLength = cpu_to_le16(8);
req->length = STATUS_BYTECOUNT; req->length = ECM_STATUS_BYTECOUNT;
/* SPEED_CHANGE data is up/down speeds in bits/sec */ /* SPEED_CHANGE data is up/down speeds in bits/sec */
data = req->buf + sizeof *event; data = req->buf + sizeof *event;
data[0] = cpu_to_le32(bitrate(cdev->gadget)); data[0] = cpu_to_le32(ecm_bitrate(cdev->gadget));
data[1] = data[0]; data[1] = data[0];
DBG(cdev, "notify speed %d\n", bitrate(cdev->gadget)); DBG(cdev, "notify speed %d\n", ecm_bitrate(cdev->gadget));
ecm->notify_state = ECM_NOTIFY_NONE; ecm->notify_state = ECM_NOTIFY_NONE;
break; break;
} }
@ -628,13 +628,13 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f)
status = -ENODEV; status = -ENODEV;
/* allocate instance-specific endpoints */ /* allocate instance-specific endpoints */
ep = usb_ep_autoconfig(cdev->gadget, &fs_in_desc); ep = usb_ep_autoconfig(cdev->gadget, &fs_ecm_in_desc);
if (!ep) if (!ep)
goto fail; goto fail;
ecm->port.in_ep = ep; ecm->port.in_ep = ep;
ep->driver_data = cdev; /* claim */ ep->driver_data = cdev; /* claim */
ep = usb_ep_autoconfig(cdev->gadget, &fs_out_desc); ep = usb_ep_autoconfig(cdev->gadget, &fs_ecm_out_desc);
if (!ep) if (!ep)
goto fail; goto fail;
ecm->port.out_ep = ep; ecm->port.out_ep = ep;
@ -644,7 +644,7 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f)
* don't treat it that way. It's simpler, and some newer CDC * don't treat it that way. It's simpler, and some newer CDC
* profiles (wireless handsets) no longer treat it as optional. * profiles (wireless handsets) no longer treat it as optional.
*/ */
ep = usb_ep_autoconfig(cdev->gadget, &fs_notify_desc); ep = usb_ep_autoconfig(cdev->gadget, &fs_ecm_notify_desc);
if (!ep) if (!ep)
goto fail; goto fail;
ecm->notify = ep; ecm->notify = ep;
@ -656,47 +656,47 @@ ecm_bind(struct usb_configuration *c, struct usb_function *f)
ecm->notify_req = usb_ep_alloc_request(ep, GFP_KERNEL); ecm->notify_req = usb_ep_alloc_request(ep, GFP_KERNEL);
if (!ecm->notify_req) if (!ecm->notify_req)
goto fail; goto fail;
ecm->notify_req->buf = kmalloc(STATUS_BYTECOUNT, GFP_KERNEL); ecm->notify_req->buf = kmalloc(ECM_STATUS_BYTECOUNT, GFP_KERNEL);
if (!ecm->notify_req->buf) if (!ecm->notify_req->buf)
goto fail; goto fail;
ecm->notify_req->context = ecm; ecm->notify_req->context = ecm;
ecm->notify_req->complete = ecm_notify_complete; ecm->notify_req->complete = ecm_notify_complete;
/* copy descriptors, and track endpoint copies */ /* copy descriptors, and track endpoint copies */
f->descriptors = usb_copy_descriptors(eth_fs_function); f->descriptors = usb_copy_descriptors(ecm_fs_function);
if (!f->descriptors) if (!f->descriptors)
goto fail; goto fail;
ecm->fs.in = usb_find_endpoint(eth_fs_function, ecm->fs.in = usb_find_endpoint(ecm_fs_function,
f->descriptors, &fs_in_desc); f->descriptors, &fs_ecm_in_desc);
ecm->fs.out = usb_find_endpoint(eth_fs_function, ecm->fs.out = usb_find_endpoint(ecm_fs_function,
f->descriptors, &fs_out_desc); f->descriptors, &fs_ecm_out_desc);
ecm->fs.notify = usb_find_endpoint(eth_fs_function, ecm->fs.notify = usb_find_endpoint(ecm_fs_function,
f->descriptors, &fs_notify_desc); f->descriptors, &fs_ecm_notify_desc);
/* support all relevant hardware speeds... we expect that when /* support all relevant hardware speeds... we expect that when
* hardware is dual speed, all bulk-capable endpoints work at * hardware is dual speed, all bulk-capable endpoints work at
* both speeds * both speeds
*/ */
if (gadget_is_dualspeed(c->cdev->gadget)) { if (gadget_is_dualspeed(c->cdev->gadget)) {
hs_in_desc.bEndpointAddress = hs_ecm_in_desc.bEndpointAddress =
fs_in_desc.bEndpointAddress; fs_ecm_in_desc.bEndpointAddress;
hs_out_desc.bEndpointAddress = hs_ecm_out_desc.bEndpointAddress =
fs_out_desc.bEndpointAddress; fs_ecm_out_desc.bEndpointAddress;
hs_notify_desc.bEndpointAddress = hs_ecm_notify_desc.bEndpointAddress =
fs_notify_desc.bEndpointAddress; fs_ecm_notify_desc.bEndpointAddress;
/* copy descriptors, and track endpoint copies */ /* copy descriptors, and track endpoint copies */
f->hs_descriptors = usb_copy_descriptors(eth_hs_function); f->hs_descriptors = usb_copy_descriptors(ecm_hs_function);
if (!f->hs_descriptors) if (!f->hs_descriptors)
goto fail; goto fail;
ecm->hs.in = usb_find_endpoint(eth_hs_function, ecm->hs.in = usb_find_endpoint(ecm_hs_function,
f->hs_descriptors, &hs_in_desc); f->hs_descriptors, &hs_ecm_in_desc);
ecm->hs.out = usb_find_endpoint(eth_hs_function, ecm->hs.out = usb_find_endpoint(ecm_hs_function,
f->hs_descriptors, &hs_out_desc); f->hs_descriptors, &hs_ecm_out_desc);
ecm->hs.notify = usb_find_endpoint(eth_hs_function, ecm->hs.notify = usb_find_endpoint(ecm_hs_function,
f->hs_descriptors, &hs_notify_desc); f->hs_descriptors, &hs_ecm_notify_desc);
} }
/* NOTE: all that is done without knowing or caring about /* NOTE: all that is done without knowing or caring about
@ -795,7 +795,7 @@ int __init ecm_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN])
if (status < 0) if (status < 0)
return status; return status;
ecm_string_defs[1].id = status; ecm_string_defs[1].id = status;
ether_desc.iMACAddress = status; ecm_desc.iMACAddress = status;
} }
/* allocate and initialize one new instance */ /* allocate and initialize one new instance */

View file

@ -103,8 +103,8 @@ static struct usb_interface_descriptor subset_data_intf __initdata = {
/* .iInterface = DYNAMIC */ /* .iInterface = DYNAMIC */
}; };
static struct usb_cdc_header_desc header_desc __initdata = { static struct usb_cdc_header_desc mdlm_header_desc __initdata = {
.bLength = sizeof header_desc, .bLength = sizeof mdlm_header_desc,
.bDescriptorType = USB_DT_CS_INTERFACE, .bDescriptorType = USB_DT_CS_INTERFACE,
.bDescriptorSubType = USB_CDC_HEADER_TYPE, .bDescriptorSubType = USB_CDC_HEADER_TYPE,
@ -152,7 +152,7 @@ static struct usb_cdc_ether_desc ether_desc __initdata = {
/* full speed support: */ /* full speed support: */
static struct usb_endpoint_descriptor fs_in_desc __initdata = { static struct usb_endpoint_descriptor fs_subset_in_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -160,7 +160,7 @@ static struct usb_endpoint_descriptor fs_in_desc __initdata = {
.bmAttributes = USB_ENDPOINT_XFER_BULK, .bmAttributes = USB_ENDPOINT_XFER_BULK,
}; };
static struct usb_endpoint_descriptor fs_out_desc __initdata = { static struct usb_endpoint_descriptor fs_subset_out_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -170,18 +170,18 @@ static struct usb_endpoint_descriptor fs_out_desc __initdata = {
static struct usb_descriptor_header *fs_eth_function[] __initdata = { static struct usb_descriptor_header *fs_eth_function[] __initdata = {
(struct usb_descriptor_header *) &subset_data_intf, (struct usb_descriptor_header *) &subset_data_intf,
(struct usb_descriptor_header *) &header_desc, (struct usb_descriptor_header *) &mdlm_header_desc,
(struct usb_descriptor_header *) &mdlm_desc, (struct usb_descriptor_header *) &mdlm_desc,
(struct usb_descriptor_header *) &mdlm_detail_desc, (struct usb_descriptor_header *) &mdlm_detail_desc,
(struct usb_descriptor_header *) &ether_desc, (struct usb_descriptor_header *) &ether_desc,
(struct usb_descriptor_header *) &fs_in_desc, (struct usb_descriptor_header *) &fs_subset_in_desc,
(struct usb_descriptor_header *) &fs_out_desc, (struct usb_descriptor_header *) &fs_subset_out_desc,
NULL, NULL,
}; };
/* high speed support: */ /* high speed support: */
static struct usb_endpoint_descriptor hs_in_desc __initdata = { static struct usb_endpoint_descriptor hs_subset_in_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -189,7 +189,7 @@ static struct usb_endpoint_descriptor hs_in_desc __initdata = {
.wMaxPacketSize = __constant_cpu_to_le16(512), .wMaxPacketSize = __constant_cpu_to_le16(512),
}; };
static struct usb_endpoint_descriptor hs_out_desc __initdata = { static struct usb_endpoint_descriptor hs_subset_out_desc __initdata = {
.bLength = USB_DT_ENDPOINT_SIZE, .bLength = USB_DT_ENDPOINT_SIZE,
.bDescriptorType = USB_DT_ENDPOINT, .bDescriptorType = USB_DT_ENDPOINT,
@ -199,12 +199,12 @@ static struct usb_endpoint_descriptor hs_out_desc __initdata = {
static struct usb_descriptor_header *hs_eth_function[] __initdata = { static struct usb_descriptor_header *hs_eth_function[] __initdata = {
(struct usb_descriptor_header *) &subset_data_intf, (struct usb_descriptor_header *) &subset_data_intf,
(struct usb_descriptor_header *) &header_desc, (struct usb_descriptor_header *) &mdlm_header_desc,
(struct usb_descriptor_header *) &mdlm_desc, (struct usb_descriptor_header *) &mdlm_desc,
(struct usb_descriptor_header *) &mdlm_detail_desc, (struct usb_descriptor_header *) &mdlm_detail_desc,
(struct usb_descriptor_header *) &ether_desc, (struct usb_descriptor_header *) &ether_desc,
(struct usb_descriptor_header *) &hs_in_desc, (struct usb_descriptor_header *) &hs_subset_in_desc,
(struct usb_descriptor_header *) &hs_out_desc, (struct usb_descriptor_header *) &hs_subset_out_desc,
NULL, NULL,
}; };
@ -281,13 +281,13 @@ geth_bind(struct usb_configuration *c, struct usb_function *f)
status = -ENODEV; status = -ENODEV;
/* allocate instance-specific endpoints */ /* allocate instance-specific endpoints */
ep = usb_ep_autoconfig(cdev->gadget, &fs_in_desc); ep = usb_ep_autoconfig(cdev->gadget, &fs_subset_in_desc);
if (!ep) if (!ep)
goto fail; goto fail;
geth->port.in_ep = ep; geth->port.in_ep = ep;
ep->driver_data = cdev; /* claim */ ep->driver_data = cdev; /* claim */
ep = usb_ep_autoconfig(cdev->gadget, &fs_out_desc); ep = usb_ep_autoconfig(cdev->gadget, &fs_subset_out_desc);
if (!ep) if (!ep)
goto fail; goto fail;
geth->port.out_ep = ep; geth->port.out_ep = ep;
@ -297,9 +297,9 @@ geth_bind(struct usb_configuration *c, struct usb_function *f)
f->descriptors = usb_copy_descriptors(fs_eth_function); f->descriptors = usb_copy_descriptors(fs_eth_function);
geth->fs.in = usb_find_endpoint(fs_eth_function, geth->fs.in = usb_find_endpoint(fs_eth_function,
f->descriptors, &fs_in_desc); f->descriptors, &fs_subset_in_desc);
geth->fs.out = usb_find_endpoint(fs_eth_function, geth->fs.out = usb_find_endpoint(fs_eth_function,
f->descriptors, &fs_out_desc); f->descriptors, &fs_subset_out_desc);
/* support all relevant hardware speeds... we expect that when /* support all relevant hardware speeds... we expect that when
@ -307,18 +307,18 @@ geth_bind(struct usb_configuration *c, struct usb_function *f)
* both speeds * both speeds
*/ */
if (gadget_is_dualspeed(c->cdev->gadget)) { if (gadget_is_dualspeed(c->cdev->gadget)) {
hs_in_desc.bEndpointAddress = hs_subset_in_desc.bEndpointAddress =
fs_in_desc.bEndpointAddress; fs_subset_in_desc.bEndpointAddress;
hs_out_desc.bEndpointAddress = hs_subset_out_desc.bEndpointAddress =
fs_out_desc.bEndpointAddress; fs_subset_out_desc.bEndpointAddress;
/* copy descriptors, and track endpoint copies */ /* copy descriptors, and track endpoint copies */
f->hs_descriptors = usb_copy_descriptors(hs_eth_function); f->hs_descriptors = usb_copy_descriptors(hs_eth_function);
geth->hs.in = usb_find_endpoint(hs_eth_function, geth->hs.in = usb_find_endpoint(hs_eth_function,
f->hs_descriptors, &hs_in_desc); f->hs_descriptors, &hs_subset_in_desc);
geth->hs.out = usb_find_endpoint(hs_eth_function, geth->hs.out = usb_find_endpoint(hs_eth_function,
f->hs_descriptors, &hs_out_desc); f->hs_descriptors, &hs_subset_out_desc);
} }
/* NOTE: all that is done without knowing or caring about /* NOTE: all that is done without knowing or caring about

View file

@ -57,11 +57,6 @@ MODULE_PARM_DESC (rndis_debug, "enable debugging");
#define rndis_debug 0 #define rndis_debug 0
#endif #endif
#define DBG(str,args...) do { \
if (rndis_debug) \
pr_debug(str , ## args); \
} while (0)
#define RNDIS_MAX_CONFIGS 1 #define RNDIS_MAX_CONFIGS 1
@ -183,9 +178,9 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
if (!resp) return -ENOMEM; if (!resp) return -ENOMEM;
if (buf_len && rndis_debug > 1) { if (buf_len && rndis_debug > 1) {
DBG("query OID %08x value, len %d:\n", OID, buf_len); pr_debug("query OID %08x value, len %d:\n", OID, buf_len);
for (i = 0; i < buf_len; i += 16) { for (i = 0; i < buf_len; i += 16) {
DBG("%03d: %08x %08x %08x %08x\n", i, pr_debug("%03d: %08x %08x %08x %08x\n", i,
get_unaligned_le32(&buf[i]), get_unaligned_le32(&buf[i]),
get_unaligned_le32(&buf[i + 4]), get_unaligned_le32(&buf[i + 4]),
get_unaligned_le32(&buf[i + 8]), get_unaligned_le32(&buf[i + 8]),
@ -209,7 +204,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_SUPPORTED_LIST: case OID_GEN_SUPPORTED_LIST:
DBG("%s: OID_GEN_SUPPORTED_LIST\n", __func__); pr_debug("%s: OID_GEN_SUPPORTED_LIST\n", __func__);
length = sizeof (oid_supported_list); length = sizeof (oid_supported_list);
count = length / sizeof (u32); count = length / sizeof (u32);
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
@ -219,7 +214,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_HARDWARE_STATUS: case OID_GEN_HARDWARE_STATUS:
DBG("%s: OID_GEN_HARDWARE_STATUS\n", __func__); pr_debug("%s: OID_GEN_HARDWARE_STATUS\n", __func__);
/* Bogus question! /* Bogus question!
* Hardware must be ready to receive high level protocols. * Hardware must be ready to receive high level protocols.
* BTW: * BTW:
@ -232,14 +227,14 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_MEDIA_SUPPORTED: case OID_GEN_MEDIA_SUPPORTED:
DBG("%s: OID_GEN_MEDIA_SUPPORTED\n", __func__); pr_debug("%s: OID_GEN_MEDIA_SUPPORTED\n", __func__);
*outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium); *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium);
retval = 0; retval = 0;
break; break;
/* mandatory */ /* mandatory */
case OID_GEN_MEDIA_IN_USE: case OID_GEN_MEDIA_IN_USE:
DBG("%s: OID_GEN_MEDIA_IN_USE\n", __func__); pr_debug("%s: OID_GEN_MEDIA_IN_USE\n", __func__);
/* one medium, one transport... (maybe you do it better) */ /* one medium, one transport... (maybe you do it better) */
*outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium); *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr].medium);
retval = 0; retval = 0;
@ -247,7 +242,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_MAXIMUM_FRAME_SIZE: case OID_GEN_MAXIMUM_FRAME_SIZE:
DBG("%s: OID_GEN_MAXIMUM_FRAME_SIZE\n", __func__); pr_debug("%s: OID_GEN_MAXIMUM_FRAME_SIZE\n", __func__);
if (rndis_per_dev_params [configNr].dev) { if (rndis_per_dev_params [configNr].dev) {
*outbuf = cpu_to_le32 ( *outbuf = cpu_to_le32 (
rndis_per_dev_params [configNr].dev->mtu); rndis_per_dev_params [configNr].dev->mtu);
@ -258,7 +253,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_LINK_SPEED: case OID_GEN_LINK_SPEED:
if (rndis_debug > 1) if (rndis_debug > 1)
DBG("%s: OID_GEN_LINK_SPEED\n", __func__); pr_debug("%s: OID_GEN_LINK_SPEED\n", __func__);
if (rndis_per_dev_params [configNr].media_state if (rndis_per_dev_params [configNr].media_state
== NDIS_MEDIA_STATE_DISCONNECTED) == NDIS_MEDIA_STATE_DISCONNECTED)
*outbuf = __constant_cpu_to_le32 (0); *outbuf = __constant_cpu_to_le32 (0);
@ -270,7 +265,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_TRANSMIT_BLOCK_SIZE: case OID_GEN_TRANSMIT_BLOCK_SIZE:
DBG("%s: OID_GEN_TRANSMIT_BLOCK_SIZE\n", __func__); pr_debug("%s: OID_GEN_TRANSMIT_BLOCK_SIZE\n", __func__);
if (rndis_per_dev_params [configNr].dev) { if (rndis_per_dev_params [configNr].dev) {
*outbuf = cpu_to_le32 ( *outbuf = cpu_to_le32 (
rndis_per_dev_params [configNr].dev->mtu); rndis_per_dev_params [configNr].dev->mtu);
@ -280,7 +275,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_RECEIVE_BLOCK_SIZE: case OID_GEN_RECEIVE_BLOCK_SIZE:
DBG("%s: OID_GEN_RECEIVE_BLOCK_SIZE\n", __func__); pr_debug("%s: OID_GEN_RECEIVE_BLOCK_SIZE\n", __func__);
if (rndis_per_dev_params [configNr].dev) { if (rndis_per_dev_params [configNr].dev) {
*outbuf = cpu_to_le32 ( *outbuf = cpu_to_le32 (
rndis_per_dev_params [configNr].dev->mtu); rndis_per_dev_params [configNr].dev->mtu);
@ -290,7 +285,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_VENDOR_ID: case OID_GEN_VENDOR_ID:
DBG("%s: OID_GEN_VENDOR_ID\n", __func__); pr_debug("%s: OID_GEN_VENDOR_ID\n", __func__);
*outbuf = cpu_to_le32 ( *outbuf = cpu_to_le32 (
rndis_per_dev_params [configNr].vendorID); rndis_per_dev_params [configNr].vendorID);
retval = 0; retval = 0;
@ -298,7 +293,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_VENDOR_DESCRIPTION: case OID_GEN_VENDOR_DESCRIPTION:
DBG("%s: OID_GEN_VENDOR_DESCRIPTION\n", __func__); pr_debug("%s: OID_GEN_VENDOR_DESCRIPTION\n", __func__);
length = strlen (rndis_per_dev_params [configNr].vendorDescr); length = strlen (rndis_per_dev_params [configNr].vendorDescr);
memcpy (outbuf, memcpy (outbuf,
rndis_per_dev_params [configNr].vendorDescr, length); rndis_per_dev_params [configNr].vendorDescr, length);
@ -306,7 +301,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
break; break;
case OID_GEN_VENDOR_DRIVER_VERSION: case OID_GEN_VENDOR_DRIVER_VERSION:
DBG("%s: OID_GEN_VENDOR_DRIVER_VERSION\n", __func__); pr_debug("%s: OID_GEN_VENDOR_DRIVER_VERSION\n", __func__);
/* Created as LE */ /* Created as LE */
*outbuf = rndis_driver_version; *outbuf = rndis_driver_version;
retval = 0; retval = 0;
@ -314,14 +309,14 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_CURRENT_PACKET_FILTER: case OID_GEN_CURRENT_PACKET_FILTER:
DBG("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __func__); pr_debug("%s: OID_GEN_CURRENT_PACKET_FILTER\n", __func__);
*outbuf = cpu_to_le32 (*rndis_per_dev_params[configNr].filter); *outbuf = cpu_to_le32 (*rndis_per_dev_params[configNr].filter);
retval = 0; retval = 0;
break; break;
/* mandatory */ /* mandatory */
case OID_GEN_MAXIMUM_TOTAL_SIZE: case OID_GEN_MAXIMUM_TOTAL_SIZE:
DBG("%s: OID_GEN_MAXIMUM_TOTAL_SIZE\n", __func__); pr_debug("%s: OID_GEN_MAXIMUM_TOTAL_SIZE\n", __func__);
*outbuf = __constant_cpu_to_le32(RNDIS_MAX_TOTAL_SIZE); *outbuf = __constant_cpu_to_le32(RNDIS_MAX_TOTAL_SIZE);
retval = 0; retval = 0;
break; break;
@ -329,14 +324,14 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_MEDIA_CONNECT_STATUS: case OID_GEN_MEDIA_CONNECT_STATUS:
if (rndis_debug > 1) if (rndis_debug > 1)
DBG("%s: OID_GEN_MEDIA_CONNECT_STATUS\n", __func__); pr_debug("%s: OID_GEN_MEDIA_CONNECT_STATUS\n", __func__);
*outbuf = cpu_to_le32 (rndis_per_dev_params [configNr] *outbuf = cpu_to_le32 (rndis_per_dev_params [configNr]
.media_state); .media_state);
retval = 0; retval = 0;
break; break;
case OID_GEN_PHYSICAL_MEDIUM: case OID_GEN_PHYSICAL_MEDIUM:
DBG("%s: OID_GEN_PHYSICAL_MEDIUM\n", __func__); pr_debug("%s: OID_GEN_PHYSICAL_MEDIUM\n", __func__);
*outbuf = __constant_cpu_to_le32 (0); *outbuf = __constant_cpu_to_le32 (0);
retval = 0; retval = 0;
break; break;
@ -346,7 +341,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
* versions emit undefined RNDIS messages. DOCUMENT ALL THESE! * versions emit undefined RNDIS messages. DOCUMENT ALL THESE!
*/ */
case OID_GEN_MAC_OPTIONS: /* from WinME */ case OID_GEN_MAC_OPTIONS: /* from WinME */
DBG("%s: OID_GEN_MAC_OPTIONS\n", __func__); pr_debug("%s: OID_GEN_MAC_OPTIONS\n", __func__);
*outbuf = __constant_cpu_to_le32( *outbuf = __constant_cpu_to_le32(
NDIS_MAC_OPTION_RECEIVE_SERIALIZED NDIS_MAC_OPTION_RECEIVE_SERIALIZED
| NDIS_MAC_OPTION_FULL_DUPLEX); | NDIS_MAC_OPTION_FULL_DUPLEX);
@ -358,7 +353,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_XMIT_OK: case OID_GEN_XMIT_OK:
if (rndis_debug > 1) if (rndis_debug > 1)
DBG("%s: OID_GEN_XMIT_OK\n", __func__); pr_debug("%s: OID_GEN_XMIT_OK\n", __func__);
if (stats) { if (stats) {
*outbuf = cpu_to_le32(stats->tx_packets *outbuf = cpu_to_le32(stats->tx_packets
- stats->tx_errors - stats->tx_dropped); - stats->tx_errors - stats->tx_dropped);
@ -369,7 +364,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_RCV_OK: case OID_GEN_RCV_OK:
if (rndis_debug > 1) if (rndis_debug > 1)
DBG("%s: OID_GEN_RCV_OK\n", __func__); pr_debug("%s: OID_GEN_RCV_OK\n", __func__);
if (stats) { if (stats) {
*outbuf = cpu_to_le32(stats->rx_packets *outbuf = cpu_to_le32(stats->rx_packets
- stats->rx_errors - stats->rx_dropped); - stats->rx_errors - stats->rx_dropped);
@ -380,7 +375,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_XMIT_ERROR: case OID_GEN_XMIT_ERROR:
if (rndis_debug > 1) if (rndis_debug > 1)
DBG("%s: OID_GEN_XMIT_ERROR\n", __func__); pr_debug("%s: OID_GEN_XMIT_ERROR\n", __func__);
if (stats) { if (stats) {
*outbuf = cpu_to_le32(stats->tx_errors); *outbuf = cpu_to_le32(stats->tx_errors);
retval = 0; retval = 0;
@ -390,7 +385,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_RCV_ERROR: case OID_GEN_RCV_ERROR:
if (rndis_debug > 1) if (rndis_debug > 1)
DBG("%s: OID_GEN_RCV_ERROR\n", __func__); pr_debug("%s: OID_GEN_RCV_ERROR\n", __func__);
if (stats) { if (stats) {
*outbuf = cpu_to_le32(stats->rx_errors); *outbuf = cpu_to_le32(stats->rx_errors);
retval = 0; retval = 0;
@ -399,7 +394,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_GEN_RCV_NO_BUFFER: case OID_GEN_RCV_NO_BUFFER:
DBG("%s: OID_GEN_RCV_NO_BUFFER\n", __func__); pr_debug("%s: OID_GEN_RCV_NO_BUFFER\n", __func__);
if (stats) { if (stats) {
*outbuf = cpu_to_le32(stats->rx_dropped); *outbuf = cpu_to_le32(stats->rx_dropped);
retval = 0; retval = 0;
@ -410,7 +405,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_802_3_PERMANENT_ADDRESS: case OID_802_3_PERMANENT_ADDRESS:
DBG("%s: OID_802_3_PERMANENT_ADDRESS\n", __func__); pr_debug("%s: OID_802_3_PERMANENT_ADDRESS\n", __func__);
if (rndis_per_dev_params [configNr].dev) { if (rndis_per_dev_params [configNr].dev) {
length = ETH_ALEN; length = ETH_ALEN;
memcpy (outbuf, memcpy (outbuf,
@ -422,7 +417,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_802_3_CURRENT_ADDRESS: case OID_802_3_CURRENT_ADDRESS:
DBG("%s: OID_802_3_CURRENT_ADDRESS\n", __func__); pr_debug("%s: OID_802_3_CURRENT_ADDRESS\n", __func__);
if (rndis_per_dev_params [configNr].dev) { if (rndis_per_dev_params [configNr].dev) {
length = ETH_ALEN; length = ETH_ALEN;
memcpy (outbuf, memcpy (outbuf,
@ -434,7 +429,7 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_802_3_MULTICAST_LIST: case OID_802_3_MULTICAST_LIST:
DBG("%s: OID_802_3_MULTICAST_LIST\n", __func__); pr_debug("%s: OID_802_3_MULTICAST_LIST\n", __func__);
/* Multicast base address only */ /* Multicast base address only */
*outbuf = __constant_cpu_to_le32 (0xE0000000); *outbuf = __constant_cpu_to_le32 (0xE0000000);
retval = 0; retval = 0;
@ -442,21 +437,21 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_802_3_MAXIMUM_LIST_SIZE: case OID_802_3_MAXIMUM_LIST_SIZE:
DBG("%s: OID_802_3_MAXIMUM_LIST_SIZE\n", __func__); pr_debug("%s: OID_802_3_MAXIMUM_LIST_SIZE\n", __func__);
/* Multicast base address only */ /* Multicast base address only */
*outbuf = __constant_cpu_to_le32 (1); *outbuf = __constant_cpu_to_le32 (1);
retval = 0; retval = 0;
break; break;
case OID_802_3_MAC_OPTIONS: case OID_802_3_MAC_OPTIONS:
DBG("%s: OID_802_3_MAC_OPTIONS\n", __func__); pr_debug("%s: OID_802_3_MAC_OPTIONS\n", __func__);
break; break;
/* ieee802.3 statistics OIDs (table 4-4) */ /* ieee802.3 statistics OIDs (table 4-4) */
/* mandatory */ /* mandatory */
case OID_802_3_RCV_ERROR_ALIGNMENT: case OID_802_3_RCV_ERROR_ALIGNMENT:
DBG("%s: OID_802_3_RCV_ERROR_ALIGNMENT\n", __func__); pr_debug("%s: OID_802_3_RCV_ERROR_ALIGNMENT\n", __func__);
if (stats) { if (stats) {
*outbuf = cpu_to_le32(stats->rx_frame_errors); *outbuf = cpu_to_le32(stats->rx_frame_errors);
retval = 0; retval = 0;
@ -465,14 +460,14 @@ gen_ndis_query_resp (int configNr, u32 OID, u8 *buf, unsigned buf_len,
/* mandatory */ /* mandatory */
case OID_802_3_XMIT_ONE_COLLISION: case OID_802_3_XMIT_ONE_COLLISION:
DBG("%s: OID_802_3_XMIT_ONE_COLLISION\n", __func__); pr_debug("%s: OID_802_3_XMIT_ONE_COLLISION\n", __func__);
*outbuf = __constant_cpu_to_le32 (0); *outbuf = __constant_cpu_to_le32 (0);
retval = 0; retval = 0;
break; break;
/* mandatory */ /* mandatory */
case OID_802_3_XMIT_MORE_COLLISIONS: case OID_802_3_XMIT_MORE_COLLISIONS:
DBG("%s: OID_802_3_XMIT_MORE_COLLISIONS\n", __func__); pr_debug("%s: OID_802_3_XMIT_MORE_COLLISIONS\n", __func__);
*outbuf = __constant_cpu_to_le32 (0); *outbuf = __constant_cpu_to_le32 (0);
retval = 0; retval = 0;
break; break;
@ -504,9 +499,9 @@ static int gen_ndis_set_resp (u8 configNr, u32 OID, u8 *buf, u32 buf_len,
return -ENOMEM; return -ENOMEM;
if (buf_len && rndis_debug > 1) { if (buf_len && rndis_debug > 1) {
DBG("set OID %08x value, len %d:\n", OID, buf_len); pr_debug("set OID %08x value, len %d:\n", OID, buf_len);
for (i = 0; i < buf_len; i += 16) { for (i = 0; i < buf_len; i += 16) {
DBG("%03d: %08x %08x %08x %08x\n", i, pr_debug("%03d: %08x %08x %08x %08x\n", i,
get_unaligned_le32(&buf[i]), get_unaligned_le32(&buf[i]),
get_unaligned_le32(&buf[i + 4]), get_unaligned_le32(&buf[i + 4]),
get_unaligned_le32(&buf[i + 8]), get_unaligned_le32(&buf[i + 8]),
@ -525,7 +520,7 @@ static int gen_ndis_set_resp (u8 configNr, u32 OID, u8 *buf, u32 buf_len,
* MULTICAST, ALL_MULTICAST, BROADCAST * MULTICAST, ALL_MULTICAST, BROADCAST
*/ */
*params->filter = (u16)get_unaligned_le32(buf); *params->filter = (u16)get_unaligned_le32(buf);
DBG("%s: OID_GEN_CURRENT_PACKET_FILTER %08x\n", pr_debug("%s: OID_GEN_CURRENT_PACKET_FILTER %08x\n",
__func__, *params->filter); __func__, *params->filter);
/* this call has a significant side effect: it's /* this call has a significant side effect: it's
@ -547,7 +542,7 @@ static int gen_ndis_set_resp (u8 configNr, u32 OID, u8 *buf, u32 buf_len,
case OID_802_3_MULTICAST_LIST: case OID_802_3_MULTICAST_LIST:
/* I think we can ignore this */ /* I think we can ignore this */
DBG("%s: OID_802_3_MULTICAST_LIST\n", __func__); pr_debug("%s: OID_802_3_MULTICAST_LIST\n", __func__);
retval = 0; retval = 0;
break; break;
@ -606,7 +601,7 @@ static int rndis_query_response (int configNr, rndis_query_msg_type *buf)
rndis_resp_t *r; rndis_resp_t *r;
struct rndis_params *params = rndis_per_dev_params + configNr; struct rndis_params *params = rndis_per_dev_params + configNr;
// DBG("%s: OID = %08X\n", __func__, cpu_to_le32(buf->OID)); /* pr_debug("%s: OID = %08X\n", __func__, cpu_to_le32(buf->OID)); */
if (!params->dev) if (!params->dev)
return -ENOTSUPP; return -ENOTSUPP;
@ -659,15 +654,15 @@ static int rndis_set_response (int configNr, rndis_set_msg_type *buf)
BufOffset = le32_to_cpu (buf->InformationBufferOffset); BufOffset = le32_to_cpu (buf->InformationBufferOffset);
#ifdef VERBOSE_DEBUG #ifdef VERBOSE_DEBUG
DBG("%s: Length: %d\n", __func__, BufLength); pr_debug("%s: Length: %d\n", __func__, BufLength);
DBG("%s: Offset: %d\n", __func__, BufOffset); pr_debug("%s: Offset: %d\n", __func__, BufOffset);
DBG("%s: InfoBuffer: ", __func__); pr_debug("%s: InfoBuffer: ", __func__);
for (i = 0; i < BufLength; i++) { for (i = 0; i < BufLength; i++) {
DBG("%02x ", *(((u8 *) buf) + i + 8 + BufOffset)); pr_debug("%02x ", *(((u8 *) buf) + i + 8 + BufOffset));
} }
DBG("\n"); pr_debug("\n");
#endif #endif
resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_SET_CMPLT); resp->MessageType = __constant_cpu_to_le32 (REMOTE_NDIS_SET_CMPLT);
@ -821,14 +816,14 @@ int rndis_msg_parser (u8 configNr, u8 *buf)
/* For USB: responses may take up to 10 seconds */ /* For USB: responses may take up to 10 seconds */
switch (MsgType) { switch (MsgType) {
case REMOTE_NDIS_INITIALIZE_MSG: case REMOTE_NDIS_INITIALIZE_MSG:
DBG("%s: REMOTE_NDIS_INITIALIZE_MSG\n", pr_debug("%s: REMOTE_NDIS_INITIALIZE_MSG\n",
__func__ ); __func__ );
params->state = RNDIS_INITIALIZED; params->state = RNDIS_INITIALIZED;
return rndis_init_response (configNr, return rndis_init_response (configNr,
(rndis_init_msg_type *) buf); (rndis_init_msg_type *) buf);
case REMOTE_NDIS_HALT_MSG: case REMOTE_NDIS_HALT_MSG:
DBG("%s: REMOTE_NDIS_HALT_MSG\n", pr_debug("%s: REMOTE_NDIS_HALT_MSG\n",
__func__ ); __func__ );
params->state = RNDIS_UNINITIALIZED; params->state = RNDIS_UNINITIALIZED;
if (params->dev) { if (params->dev) {
@ -846,7 +841,7 @@ int rndis_msg_parser (u8 configNr, u8 *buf)
(rndis_set_msg_type *) buf); (rndis_set_msg_type *) buf);
case REMOTE_NDIS_RESET_MSG: case REMOTE_NDIS_RESET_MSG:
DBG("%s: REMOTE_NDIS_RESET_MSG\n", pr_debug("%s: REMOTE_NDIS_RESET_MSG\n",
__func__ ); __func__ );
return rndis_reset_response (configNr, return rndis_reset_response (configNr,
(rndis_reset_msg_type *) buf); (rndis_reset_msg_type *) buf);
@ -854,7 +849,7 @@ int rndis_msg_parser (u8 configNr, u8 *buf)
case REMOTE_NDIS_KEEPALIVE_MSG: case REMOTE_NDIS_KEEPALIVE_MSG:
/* For USB: host does this every 5 seconds */ /* For USB: host does this every 5 seconds */
if (rndis_debug > 1) if (rndis_debug > 1)
DBG("%s: REMOTE_NDIS_KEEPALIVE_MSG\n", pr_debug("%s: REMOTE_NDIS_KEEPALIVE_MSG\n",
__func__ ); __func__ );
return rndis_keepalive_response (configNr, return rndis_keepalive_response (configNr,
(rndis_keepalive_msg_type *) (rndis_keepalive_msg_type *)
@ -870,7 +865,7 @@ int rndis_msg_parser (u8 configNr, u8 *buf)
{ {
unsigned i; unsigned i;
for (i = 0; i < MsgLength; i += 16) { for (i = 0; i < MsgLength; i += 16) {
DBG("%03d: " pr_debug("%03d: "
" %02x %02x %02x %02x" " %02x %02x %02x %02x"
" %02x %02x %02x %02x" " %02x %02x %02x %02x"
" %02x %02x %02x %02x" " %02x %02x %02x %02x"
@ -905,18 +900,18 @@ int rndis_register(void (*resp_avail)(void *v), void *v)
rndis_per_dev_params [i].used = 1; rndis_per_dev_params [i].used = 1;
rndis_per_dev_params [i].resp_avail = resp_avail; rndis_per_dev_params [i].resp_avail = resp_avail;
rndis_per_dev_params [i].v = v; rndis_per_dev_params [i].v = v;
DBG("%s: configNr = %d\n", __func__, i); pr_debug("%s: configNr = %d\n", __func__, i);
return i; return i;
} }
} }
DBG("failed\n"); pr_debug("failed\n");
return -ENODEV; return -ENODEV;
} }
void rndis_deregister (int configNr) void rndis_deregister (int configNr)
{ {
DBG("%s: \n", __func__ ); pr_debug("%s: \n", __func__);
if (configNr >= RNDIS_MAX_CONFIGS) return; if (configNr >= RNDIS_MAX_CONFIGS) return;
rndis_per_dev_params [configNr].used = 0; rndis_per_dev_params [configNr].used = 0;
@ -926,7 +921,7 @@ void rndis_deregister (int configNr)
int rndis_set_param_dev(u8 configNr, struct net_device *dev, u16 *cdc_filter) int rndis_set_param_dev(u8 configNr, struct net_device *dev, u16 *cdc_filter)
{ {
DBG("%s:\n", __func__ ); pr_debug("%s:\n", __func__);
if (!dev) if (!dev)
return -EINVAL; return -EINVAL;
if (configNr >= RNDIS_MAX_CONFIGS) return -1; if (configNr >= RNDIS_MAX_CONFIGS) return -1;
@ -939,7 +934,7 @@ int rndis_set_param_dev(u8 configNr, struct net_device *dev, u16 *cdc_filter)
int rndis_set_param_vendor (u8 configNr, u32 vendorID, const char *vendorDescr) int rndis_set_param_vendor (u8 configNr, u32 vendorID, const char *vendorDescr)
{ {
DBG("%s:\n", __func__ ); pr_debug("%s:\n", __func__);
if (!vendorDescr) return -1; if (!vendorDescr) return -1;
if (configNr >= RNDIS_MAX_CONFIGS) return -1; if (configNr >= RNDIS_MAX_CONFIGS) return -1;
@ -951,7 +946,7 @@ int rndis_set_param_vendor (u8 configNr, u32 vendorID, const char *vendorDescr)
int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed) int rndis_set_param_medium (u8 configNr, u32 medium, u32 speed)
{ {
DBG("%s: %u %u\n", __func__, medium, speed); pr_debug("%s: %u %u\n", __func__, medium, speed);
if (configNr >= RNDIS_MAX_CONFIGS) return -1; if (configNr >= RNDIS_MAX_CONFIGS) return -1;
rndis_per_dev_params [configNr].medium = medium; rndis_per_dev_params [configNr].medium = medium;
@ -1114,7 +1109,7 @@ static ssize_t rndis_proc_write(struct file *file, const char __user *buffer,
break; break;
default: default:
if (fl_speed) p->speed = speed; if (fl_speed) p->speed = speed;
else DBG("%c is not valid\n", c); else pr_debug("%c is not valid\n", c);
break; break;
} }
@ -1159,12 +1154,12 @@ int __init rndis_init (void)
&rndis_proc_fops, &rndis_proc_fops,
(void *)(rndis_per_dev_params + i)))) (void *)(rndis_per_dev_params + i))))
{ {
DBG("%s :remove entries", __func__); pr_debug("%s :remove entries", __func__);
while (i) { while (i) {
sprintf (name, NAME_TEMPLATE, --i); sprintf (name, NAME_TEMPLATE, --i);
remove_proc_entry (name, NULL); remove_proc_entry (name, NULL);
} }
DBG("\n"); pr_debug("\n");
return -EIO; return -EIO;
} }
#endif #endif