ChangeSet 1.1595.7.2, 2003/07/29 11:40:03-07:00, [EMAIL PROTECTED]

[PATCH] USB: core cleanups for struct usb_interface changes

Also set usb_device.dev.release right after initialization to catch any
early devices being destroyed.  I still think there's a few error paths
to correct, but this catches a lot of previous errors.


 drivers/usb/core/devices.c |    2 -
 drivers/usb/core/devio.c   |   10 +++---
 drivers/usb/core/hub.c     |    6 ++--
 drivers/usb/core/message.c |    2 -
 drivers/usb/core/usb.c     |   65 ++++++++++++++++++++++-----------------------
 5 files changed, 42 insertions(+), 43 deletions(-)


diff -Nru a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
--- a/drivers/usb/core/devices.c        Fri Aug  1 10:56:57 2003
+++ b/drivers/usb/core/devices.c        Fri Aug  1 10:56:57 2003
@@ -309,7 +309,7 @@
                return start + sprintf(start, "(null Cfg. desc.)\n");
        start = usb_dump_config_descriptor(start, end, &config->desc, active);
        for (i = 0; i < config->desc.bNumInterfaces; i++) {
-               interface = config->interface + i;
+               interface = config->interface[i];
                if (!interface)
                        break;
                for (j = 0; j < interface->num_altsetting; j++) {
diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
--- a/drivers/usb/core/devio.c  Fri Aug  1 10:56:57 2003
+++ b/drivers/usb/core/devio.c  Fri Aug  1 10:56:57 2003
@@ -360,7 +360,7 @@
        /* already claimed */
        if (test_bit(intf, &ps->ifclaimed))
                return 0;
-       iface = &dev->actconfig->interface[intf];
+       iface = dev->actconfig->interface[intf];
        err = -EBUSY;
        lock_kernel();
        if (!usb_interface_claimed(iface)) {
@@ -384,7 +384,7 @@
        dev = ps->dev;
        down(&dev->serialize);
        if (dev && test_and_clear_bit(intf, &ps->ifclaimed)) {
-               iface = &dev->actconfig->interface[intf];
+               iface = dev->actconfig->interface[intf];
                usb_driver_release_interface(&usbdevfs_driver, iface);
                err = 0;
        }
@@ -414,7 +414,7 @@
        if (ep & ~(USB_DIR_IN|0xf))
                return -EINVAL;
        for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
-               iface = &dev->actconfig->interface[i];
+               iface = dev->actconfig->interface[i];
                for (j = 0; j < iface->num_altsetting; j++) {
                         alts = &iface->altsetting[j];
                        for (e = 0; e < alts->desc.bNumEndpoints; e++) {
@@ -436,7 +436,7 @@
        if (ifn & ~0xff)
                return -EINVAL;
        for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
-               iface = &dev->actconfig->interface[i];
+               iface = dev->actconfig->interface[i];
                for (j = 0; j < iface->num_altsetting; j++) {
                         alts = &iface->altsetting[j];
                        if (alts->desc.bInterfaceNumber == ifn)
@@ -718,7 +718,7 @@
                return ret;
 
        for (i = 0; i < ps->dev->actconfig->desc.bNumInterfaces; i++) {
-               struct usb_interface *intf = &ps->dev->actconfig->interface[i];
+               struct usb_interface *intf = ps->dev->actconfig->interface[i];
 
                /* Don't simulate interfaces we've claimed */
                if (test_bit(i, &ps->ifclaimed))
diff -Nru a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
--- a/drivers/usb/core/hub.c    Fri Aug  1 10:56:57 2003
+++ b/drivers/usb/core/hub.c    Fri Aug  1 10:56:57 2003
@@ -60,7 +60,7 @@
 /* for dev_info, dev_dbg, etc */
 static inline struct device *hubdev (struct usb_device *dev)
 {
-       return &dev->actconfig->interface [0].dev;
+       return &dev->actconfig->interface[0]->dev;
 }
 
 /* USB 2.0 spec Section 11.24.4.5 */
@@ -691,7 +691,7 @@
 static int hub_port_status(struct usb_device *dev, int port,
                               u16 *status, u16 *change)
 {
-       struct usb_hub *hub = usb_get_intfdata (dev->actconfig->interface);
+       struct usb_hub *hub = usb_get_intfdata(dev->actconfig->interface[0]);
        int ret;
 
        ret = get_port_status(dev, port + 1, &hub->status->port);
@@ -1340,7 +1340,7 @@
        }
 
        for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
-               struct usb_interface *intf = &dev->actconfig->interface[i];
+               struct usb_interface *intf = dev->actconfig->interface[i];
                struct usb_interface_descriptor *as;
 
                as = &intf->altsetting[intf->act_altsetting].desc;
diff -Nru a/drivers/usb/core/message.c b/drivers/usb/core/message.c
--- a/drivers/usb/core/message.c        Fri Aug  1 10:56:57 2003
+++ b/drivers/usb/core/message.c        Fri Aug  1 10:56:57 2003
@@ -675,7 +675,7 @@
 
        /* NOTE:  affects all endpoints _except_ ep0 */
        for (i=0; i<dev->actconfig->desc.bNumInterfaces; i++) {
-               struct usb_interface *ifp = dev->actconfig->interface + i;
+               struct usb_interface *ifp = dev->actconfig->interface[i];
                struct usb_host_interface *as = ifp->altsetting + ifp->act_altsetting;
                struct usb_host_endpoint *ep = as->endpoint;
                int e;
diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
--- a/drivers/usb/core/usb.c    Fri Aug  1 10:56:57 2003
+++ b/drivers/usb/core/usb.c    Fri Aug  1 10:56:57 2003
@@ -229,9 +229,9 @@
        int i;
 
        for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
-               if (dev->actconfig->interface[i].altsetting[0]
+               if (dev->actconfig->interface[i]->altsetting[0]
                                .desc.bInterfaceNumber == ifnum)
-                       return &dev->actconfig->interface[i];
+                       return dev->actconfig->interface[i];
 
        return NULL;
 }
@@ -256,14 +256,14 @@
        int i, j, k;
 
        for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++)
-               for (j = 0; j < dev->actconfig->interface[i].num_altsetting; j++)
-                       for (k = 0; k < dev->actconfig->interface[i]
-                               .altsetting[j].desc.bNumEndpoints; k++)
-                               if (epnum == dev->actconfig->interface[i]
-                                               .altsetting[j].endpoint[k]
+               for (j = 0; j < dev->actconfig->interface[i]->num_altsetting; j++)
+                       for (k = 0; k < dev->actconfig->interface[i]->
+                               altsetting[j].desc.bNumEndpoints; k++)
+                               if (epnum == dev->actconfig->interface[i]->
+                                               altsetting[j].endpoint[k]
                                                .desc.bEndpointAddress)
-                                       return &dev->actconfig->interface[i]
-                                               .altsetting[j].endpoint[k]
+                                       return &dev->actconfig->interface[i]->
+                                               altsetting[j].endpoint[k]
                                                .desc;
 
        return NULL;
@@ -654,6 +654,26 @@
 #endif /* CONFIG_HOTPLUG */
 
 /**
+ * usb_release_dev - free a usb device structure when all users of it are finished.
+ * @dev: device that's been disconnected
+ *
+ * Will be called only by the device core when all users of this usb device are
+ * done.
+ */
+static void usb_release_dev(struct device *dev)
+{
+       struct usb_device *udev;
+
+       udev = to_usb_device(dev);
+
+       if (udev->bus && udev->bus->op && udev->bus->op->deallocate)
+               udev->bus->op->deallocate(udev);
+       usb_destroy_configuration(udev);
+       usb_bus_put(udev->bus);
+       kfree (udev);
+}
+
+/**
  * usb_alloc_dev - allocate a usb device structure (usbcore-internal)
  * @parent: hub to which device is connected
  * @bus: bus used to access the device
@@ -681,6 +701,7 @@
        }
 
        device_initialize(&dev->dev);
+       dev->dev.release = usb_release_dev;
        dev->state = USB_STATE_ATTACHED;
 
        if (!parent)
@@ -736,27 +757,6 @@
                put_device(&dev->dev);
 }
 
-/**
- * usb_release_dev - free a usb device structure when all users of it are finished.
- * @dev: device that's been disconnected
- *
- * Will be called only by the device core when all users of this usb device are
- * done.
- */
-static void usb_release_dev(struct device *dev)
-{
-       struct usb_device *udev;
-
-       udev = to_usb_device(dev);
-
-       if (udev->bus && udev->bus->op && udev->bus->op->deallocate)
-               udev->bus->op->deallocate(udev);
-       usb_destroy_configuration (udev);
-       usb_bus_put (udev->bus);
-       kfree (udev);
-}
-
-
 static struct usb_device *match_device(struct usb_device *dev,
                                       u16 vendor_id, u16 product_id)
 {
@@ -926,7 +926,7 @@
                        struct usb_interface    *interface;
 
                        /* remove this interface */
-                       interface = &dev->actconfig->interface[i];
+                       interface = dev->actconfig->interface[i];
                        device_unregister(&interface->dev);
                }
        }
@@ -1090,7 +1090,6 @@
        dev->dev.parent = parent;
        dev->dev.driver = &usb_generic_driver;
        dev->dev.bus = &usb_bus_type;
-       dev->dev.release = usb_release_dev;
        dev->dev.driver_data = &usb_generic_driver_data;
        usb_get_dev(dev);
        if (dev->dev.bus_id[0] == 0)
@@ -1216,7 +1215,7 @@
        /* Register all of the interfaces for this device with the driver core.
         * Remember, interfaces get bound to drivers, not devices. */
        for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
-               struct usb_interface *interface = &dev->actconfig->interface[i];
+               struct usb_interface *interface = dev->actconfig->interface[i];
                struct usb_interface_descriptor *desc;
 
                desc = &interface->altsetting [interface->act_altsetting].desc;



-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to