upgrade to fedora-2.6.12-1.1398.FC4 + vserver 2.0.rc7
[linux-2.6.git] / drivers / usb / core / config.c
index 33c5171..99595e0 100644 (file)
@@ -10,7 +10,8 @@
 #include <linux/slab.h>
 #include <linux/device.h>
 #include <asm/byteorder.h>
-
+#include "usb.h"
+#include "hcd.h"
 
 #define USB_MAXALTSETTING              128     /* Hard limit */
 #define USB_MAXENDPOINTS               30      /* Hard limit */
@@ -87,7 +88,7 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
        ++ifp->desc.bNumEndpoints;
 
        memcpy(&endpoint->desc, d, n);
-       le16_to_cpus(&endpoint->desc.wMaxPacketSize);
+       INIT_LIST_HEAD(&endpoint->urb_list);
 
        /* Skip over any Class Specific or Vendor Specific descriptors;
         * find the next endpoint or interface descriptor */
@@ -221,7 +222,7 @@ skip_to_next_interface_descriptor:
        return buffer - buffer0 + i;
 }
 
-int usb_parse_configuration(struct device *ddev, int cfgidx,
+static int usb_parse_configuration(struct device *ddev, int cfgidx,
     struct usb_host_config *config, unsigned char *buffer, int size)
 {
        unsigned char *buffer0 = buffer;
@@ -319,7 +320,7 @@ int usb_parse_configuration(struct device *ddev, int cfgidx,
 
        }       /* for ((buffer2 = buffer, size2 = size); ...) */
        size = buffer2 - buffer;
-       config->desc.wTotalLength = buffer2 - buffer0;
+       config->desc.wTotalLength = cpu_to_le16(buffer2 - buffer0);
 
        if (n != nintf)
                dev_warn(ddev, "config %d has %d interface%s, different from "
@@ -420,6 +421,9 @@ void usb_destroy_configuration(struct usb_device *dev)
        for (c = 0; c < dev->descriptor.bNumConfigurations; c++) {
                struct usb_host_config *cf = &dev->config[c];
 
+               kfree(cf->string);
+               cf->string = NULL;
+
                for (i = 0; i < cf->desc.bNumInterfaces; i++) {
                        if (cf->intf_cache[i])
                                kref_put(&cf->intf_cache[i]->ref,