SVN maintenance:
Set svn:eol-style and svn:keywords for files
Set svn:ignore for directories
Modified: trunk/reactos/drivers/usb/cromwell/Makefile
Modified: trunk/reactos/drivers/usb/cromwell/core/buffer_simple.c
Modified: trunk/reactos/drivers/usb/cromwell/core/config.c
Modified: trunk/reactos/drivers/usb/cromwell/core/hcd-pci.c
Modified: trunk/reactos/drivers/usb/cromwell/core/hcd.c
Modified: trunk/reactos/drivers/usb/cromwell/core/hcd.h
Modified: trunk/reactos/drivers/usb/cromwell/core/hub.c
Modified: trunk/reactos/drivers/usb/cromwell/core/hub.h
Modified: trunk/reactos/drivers/usb/cromwell/core/makefile
Modified: trunk/reactos/drivers/usb/cromwell/core/makefile.crom
Modified: trunk/reactos/drivers/usb/cromwell/core/message.c
Modified: trunk/reactos/drivers/usb/cromwell/core/urb.c
Modified: trunk/reactos/drivers/usb/cromwell/core/usb-debug.c
Modified: trunk/reactos/drivers/usb/cromwell/core/usb.c
Modified: trunk/reactos/drivers/usb/cromwell/core/usb.h
Modified: trunk/reactos/drivers/usb/cromwell/core/usbcore.c
Modified: trunk/reactos/drivers/usb/cromwell/core/usbcore.def
Modified: trunk/reactos/drivers/usb/cromwell/core/usbcore.rc
Modified: trunk/reactos/drivers/usb/cromwell/host/makefile
Modified: trunk/reactos/drivers/usb/cromwell/host/makefile.crom
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci-dbg.c
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci-hcd.c
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci-hub.c
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci-mem.c
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci-pci.c
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci-q.c
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci.def
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci.h
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci.rc
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci_config.h
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci_main.c
Modified: trunk/reactos/drivers/usb/cromwell/host/ohci_main.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/asm/bitops.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/bitops.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/boot.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/consts.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/cromwell_types.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/errno.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/linux_wrapper.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/list.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/pci_hal.c
Modified: trunk/reactos/drivers/usb/cromwell/linux/pci_ids.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/usb.h
Modified: trunk/reactos/drivers/usb/cromwell/linux/usb_ch9.h
Modified: trunk/reactos/drivers/usb/cromwell/sys/BootUSB.c
Modified: trunk/reactos/drivers/usb/cromwell/sys/Makefile
Modified: trunk/reactos/drivers/usb/cromwell/sys/linuxwrapper.c
Modified: trunk/reactos/drivers/usb/cromwell/sys/risefall.c
Modified: trunk/reactos/drivers/usb/cromwell/sys/ros_wrapper.c
Modified: trunk/reactos/drivers/usb/cromwell/sys/usbkey.c
Modified: trunk/reactos/drivers/usb/cromwell/sys/usbwrapper.c
Modified: trunk/reactos/drivers/usb/cromwell/sys/xpad.c
Modified: trunk/reactos/drivers/usb/cromwell/sys/xremote.c
Modified: trunk/reactos/drivers/usb/cromwell/uhci/makefile
Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci.def
Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci.rc
Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci_config.h
Modified: trunk/reactos/drivers/usb/cromwell/uhci/uhci_main.c
Modified: trunk/reactos/drivers/usb/cromwell/usb_wrapper.h
Property changes on: trunk/reactos/drivers/usb/cromwell
___________________________________________________________________
Name: svn:ignore
   + *.coff
*.sym
*.o
*.a
*.dll
*.map
*.tmp
.*.d

Modified: trunk/reactos/drivers/usb/cromwell/Makefile
--- trunk/reactos/drivers/usb/cromwell/Makefile	2005-05-20 21:43:57 UTC (rev 15439)
+++ trunk/reactos/drivers/usb/cromwell/Makefile	2005-05-20 21:53:08 UTC (rev 15440)
@@ -1,50 +1,50 @@
-#
-# ReactOS USB-Cromwell Drivers
-#
-
-PATH_TO_TOP = ../../..
-
-include $(PATH_TO_TOP)/rules.mak
-
-DRIVERS = core host uhci
-
-all: $(DRIVERS)
-
-depends: 
-
-implib: $(DRIVERS:%=%_implib)
-
-clean: 	$(DRIVERS:%=%_clean)
-
-install: $(DRIVERS:%=%_install)
-
-bootcd: $(DRIVERS:%=%_bootcd)
-
-.PHONY: all depends implib clean install bootcd
-
-
-#
-# USB DRIVERS
-#
-$(DRIVERS): %:
-	$(MAKE) -C $*
-
-$(DRIVERS:%=%_implib): %_implib:
-	$(MAKE) -C $* implib
-
-$(DRIVERS:%=%_clean): %_clean:
-	$(MAKE) -C $* clean
-
-$(DRIVERS:%=%_install): %_install:
-	$(MAKE) -C $* install
-
-$(DRIVERS:%=%_bootcd): %_bootcd:
-	$(MAKE) -C $* bootcd
-
-.PHONY: $(DRIVERS) $(DRIVERS:%=%_implib) $(DRIVERS:%=%_clean) $(DRIVERS:%=%_install) $(DRIVERS:%=%_bootcd)
-
-
-etags:
-	find . -name "*.[ch]" -print | etags --language=c -
-
-# EOF
+#
+# ReactOS USB-Cromwell Drivers
+#
+
+PATH_TO_TOP = ../../..
+
+include $(PATH_TO_TOP)/rules.mak
+
+DRIVERS = core host uhci
+
+all: $(DRIVERS)
+
+depends: 
+
+implib: $(DRIVERS:%=%_implib)
+
+clean: 	$(DRIVERS:%=%_clean)
+
+install: $(DRIVERS:%=%_install)
+
+bootcd: $(DRIVERS:%=%_bootcd)
+
+.PHONY: all depends implib clean install bootcd
+
+
+#
+# USB DRIVERS
+#
+$(DRIVERS): %:
+	$(MAKE) -C $*
+
+$(DRIVERS:%=%_implib): %_implib:
+	$(MAKE) -C $* implib
+
+$(DRIVERS:%=%_clean): %_clean:
+	$(MAKE) -C $* clean
+
+$(DRIVERS:%=%_install): %_install:
+	$(MAKE) -C $* install
+
+$(DRIVERS:%=%_bootcd): %_bootcd:
+	$(MAKE) -C $* bootcd
+
+.PHONY: $(DRIVERS) $(DRIVERS:%=%_implib) $(DRIVERS:%=%_clean) $(DRIVERS:%=%_install) $(DRIVERS:%=%_bootcd)
+
+
+etags:
+	find . -name "*.[ch]" -print | etags --language=c -
+
+# EOF
Property changes on: trunk/reactos/drivers/usb/cromwell/Makefile
___________________________________________________________________
Name: svn:keywords
   + author date id revision
Name: svn:eol-style
   + native
Property changes on: trunk/reactos/drivers/usb/cromwell/core
___________________________________________________________________
Name: svn:ignore
   - *.coff
*.a
*.d
*.o
*.sym
*.sys
*.map
*.tmp
   + *.coff
*.sym
*.o
*.a
*.dll
*.map
*.tmp
.*.d

Modified: trunk/reactos/drivers/usb/cromwell/core/buffer_simple.c
--- trunk/reactos/drivers/usb/cromwell/core/buffer_simple.c	2005-05-20 21:43:57 UTC (rev 15439)
+++ trunk/reactos/drivers/usb/cromwell/core/buffer_simple.c	2005-05-20 21:53:08 UTC (rev 15440)
@@ -1,42 +1,42 @@
-/* 
- * buffer_simple.c -- replacement for usb/core/buffer.c
- *
- * (c) Georg Acher, georg@acher.org
- *
- */
-
-#include "../usb_wrapper.h"
-#define __KERNEL__
-#define CONFIG_PCI
-#include "hcd.h"
-
-/*------------------------------------------------------------------------*/ 
-int hcd_buffer_create (struct usb_hcd *hcd)
-{
-	return 0;
-}
-/*------------------------------------------------------------------------*/ 
-void hcd_buffer_destroy (struct usb_hcd *hcd)
-{
-}
-/*------------------------------------------------------------------------*/ 
-void *hcd_buffer_alloc (
-        struct usb_bus          *bus,
-        size_t                  size,
-        int                     mem_flags,
-        dma_addr_t              *dma
-)
-{
-	return kmalloc(size,0);
-}
-/*------------------------------------------------------------------------*/ 
-void hcd_buffer_free (
-        struct usb_bus          *bus,
-        size_t                  size,
-        void                    *addr,
-        dma_addr_t              dma
-)
-{
-	kfree(addr);
-}
-
+/* 
+ * buffer_simple.c -- replacement for usb/core/buffer.c
+ *
+ * (c) Georg Acher, georg@acher.org
+ *
+ */
+
+#include "../usb_wrapper.h"
+#define __KERNEL__
+#define CONFIG_PCI
+#include "hcd.h"
+
+/*------------------------------------------------------------------------*/ 
+int hcd_buffer_create (struct usb_hcd *hcd)
+{
+	return 0;
+}
+/*------------------------------------------------------------------------*/ 
+void hcd_buffer_destroy (struct usb_hcd *hcd)
+{
+}
+/*------------------------------------------------------------------------*/ 
+void *hcd_buffer_alloc (
+        struct usb_bus          *bus,
+        size_t                  size,
+        int                     mem_flags,
+        dma_addr_t              *dma
+)
+{
+	return kmalloc(size,0);
+}
+/*------------------------------------------------------------------------*/ 
+void hcd_buffer_free (
+        struct usb_bus          *bus,
+        size_t                  size,
+        void                    *addr,
+        dma_addr_t              dma
+)
+{
+	kfree(addr);
+}
+
Property changes on: trunk/reactos/drivers/usb/cromwell/core/buffer_simple.c
___________________________________________________________________
Name: svn:keywords
   + author date id revision
Name: svn:eol-style
   + native

Modified: trunk/reactos/drivers/usb/cromwell/core/config.c
--- trunk/reactos/drivers/usb/cromwell/core/config.c	2005-05-20 21:43:57 UTC (rev 15439)
+++ trunk/reactos/drivers/usb/cromwell/core/config.c	2005-05-20 21:53:08 UTC (rev 15440)
@@ -1,508 +1,508 @@
-#if 0
-#include <linux/usb.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <asm/byteorder.h>
-#else
-#include "../usb_wrapper.h"
-#endif
-
-#define USB_MAXALTSETTING		128	/* Hard limit */
-#define USB_MAXENDPOINTS		30	/* Hard limit */
-
-/* these maximums are arbitrary */
-#define USB_MAXCONFIG			8
-#define USB_ALTSETTINGALLOC		4
-#define USB_MAXINTERFACES		32
-
-static int usb_parse_endpoint(struct usb_host_endpoint *endpoint, unsigned char *buffer, int size)
-{
-	struct usb_descriptor_header *header;
-	unsigned char *begin;
-	int parsed = 0, len, numskipped;
-
-	header = (struct usb_descriptor_header *)buffer;
-
-	/* Everything should be fine being passed into here, but we sanity */
-	/*  check JIC */
-	if (header->bLength > size) {
-		err("ran out of descriptors parsing");
-		return -1;
-	}
-		
-	if (header->bDescriptorType != USB_DT_ENDPOINT) {
-		warn("unexpected descriptor 0x%X, expecting endpoint, 0x%X",
-			header->bDescriptorType, USB_DT_ENDPOINT);
-		return parsed;
-	}
-
-	if (header->bLength == USB_DT_ENDPOINT_AUDIO_SIZE)
-		memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_AUDIO_SIZE);
-	else
-		memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_SIZE);
-	
-	le16_to_cpus(&endpoint->desc.wMaxPacketSize);
-
-	buffer += header->bLength;
-	size -= header->bLength;
-	parsed += header->bLength;
-
-	/* Skip over the rest of the Class Specific or Vendor Specific */
-	/*  descriptors */
-	begin = buffer;
-	numskipped = 0;
-	while (size >= sizeof(struct usb_descriptor_header)) {
-		header = (struct usb_descriptor_header *)buffer;
-
-		if (header->bLength < 2) {
-			err("invalid descriptor length of %d", header->bLength);
-			return -1;
-		}
-
-		/* If we find another "proper" descriptor then we're done  */
-		if ((header->bDescriptorType == USB_DT_ENDPOINT) ||
-		    (header->bDescriptorType == USB_DT_INTERFACE) ||
-		    (header->bDescriptorType == USB_DT_CONFIG) ||
-		    (header->bDescriptorType == USB_DT_DEVICE))
-			break;
-
-		dbg("skipping descriptor 0x%X",
-			header->bDescriptorType);
-		numskipped++;
-
-		buffer += header->bLength;
-		size -= header->bLength;
-		parsed += header->bLength;
-	}
-	if (numskipped)
-		dbg("skipped %d class/vendor specific endpoint descriptors", numskipped);
-
-	/* Copy any unknown descriptors into a storage area for drivers */
-	/*  to later parse */
-	len = (int)(buffer - begin);
-	if (!len) {
-		endpoint->extra = NULL;
-		endpoint->extralen = 0;
-		return parsed;
-	}
-
-	endpoint->extra = kmalloc(len, GFP_KERNEL);
-
-	if (!endpoint->extra) {
-		err("couldn't allocate memory for endpoint extra descriptors");
-		endpoint->extralen = 0;
-		return parsed;
-	}
-
-	memcpy(endpoint->extra, begin, len);
-	endpoint->extralen = len;
-
-	return parsed;
-}
-
-static int usb_parse_interface(struct usb_interface *interface, unsigned char *buffer, int size)
-{
-	int i, len, numskipped, retval, parsed = 0;
-	struct usb_descriptor_header *header;
-	struct usb_host_interface *ifp;
-	unsigned char *begin;
-
-	interface->act_altsetting = 0;
-	interface->num_altsetting = 0;
-	interface->max_altsetting = USB_ALTSETTINGALLOC;
-	device_initialize(&interface->dev);
-
-	interface->altsetting = kmalloc(sizeof(*interface->altsetting) * interface->max_altsetting,
-					GFP_KERNEL);
-	
-	if (!interface->altsetting) {
-		err("couldn't kmalloc interface->altsetting");
-		return -1;
-	}
-
-	while (size > 0) {
-		struct usb_interface_descriptor	*d;
-	
-		if (interface->num_altsetting >= interface->max_altsetting) {
-			struct usb_host_interface *ptr;
-			int oldmas;
-
-			oldmas = interface->max_altsetting;
-			interface->max_altsetting += USB_ALTSETTINGALLOC;
-			if (interface->max_altsetting > USB_MAXALTSETTING) {
-				warn("too many alternate settings (incr %d max %d)\n",
-					USB_ALTSETTINGALLOC, USB_MAXALTSETTING);
-				return -1;
-			}
-
-			ptr = kmalloc(sizeof(*ptr) * interface->max_altsetting, GFP_KERNEL);
-			if (ptr == NULL) {
-				err("couldn't kmalloc interface->altsetting");
-				return -1;
-			}
-			memcpy(ptr, interface->altsetting, sizeof(*interface->altsetting) * oldmas);
-			kfree(interface->altsetting);
-			interface->altsetting = ptr;
-		}
-
-		ifp = interface->altsetting + interface->num_altsetting;
-		ifp->endpoint = NULL;
-		ifp->extra = NULL;
-		ifp->extralen = 0;
-		interface->num_altsetting++;
-
-		memcpy(ifp, buffer, USB_DT_INTERFACE_SIZE);
-
-		/* Skip over the interface */
-		buffer += ifp->desc.bLength;
-		parsed += ifp->desc.bLength;
-		size -= ifp->desc.bLength;
-
-		begin = buffer;
-		numskipped = 0;
-
-		/* Skip over any interface, class or vendor descriptors */
-		while (size >= sizeof(struct usb_descriptor_header)) {
-			header = (struct usb_descriptor_header *)buffer;
-
-			if (header->bLength < 2) {
-				err("invalid descriptor length of %d", header->bLength);
-				return -1;
-			}
-
-			/* If we find another "proper" descriptor then we're done  */
-			if ((header->bDescriptorType == USB_DT_INTERFACE) ||
-			    (header->bDescriptorType == USB_DT_ENDPOINT) ||
-			    (header->bDescriptorType == USB_DT_CONFIG) ||
-			    (header->bDescriptorType == USB_DT_DEVICE))
-				break;
-
-			numskipped++;
-
-			buffer += header->bLength;
-			parsed += header->bLength;
-			size -= header->bLength;
-		}
-
-		if (numskipped)
-			dbg("skipped %d class/vendor specific interface descriptors", numskipped);
-
-		/* Copy any unknown descriptors into a storage area for */
-		/*  drivers to later parse */
-		len = (int)(buffer - begin);
-		if (len) {
-			ifp->extra = kmalloc(len, GFP_KERNEL);
-
-			if (!ifp->extra) {
-				err("couldn't allocate memory for interface extra descriptors");
-				ifp->extralen = 0;
-				return -1;
-			}
-			memcpy(ifp->extra, begin, len);
-			ifp->extralen = len;
-		}
-
-		/* Did we hit an unexpected descriptor? */
-		header = (struct usb_descriptor_header *)buffer;
-		if ((size >= sizeof(struct usb_descriptor_header)) &&
-		    ((header->bDescriptorType == USB_DT_CONFIG) ||
-		     (header->bDescriptorType == USB_DT_DEVICE)))
-			return parsed;
-
-		if (ifp->desc.bNumEndpoints > USB_MAXENDPOINTS) {
-			warn("too many endpoints");
-			return -1;
-		}
-
-		ifp->endpoint = (struct usb_host_endpoint *)
-			kmalloc(ifp->desc.bNumEndpoints *
-			sizeof(struct usb_host_endpoint), GFP_KERNEL);
-		if (!ifp->endpoint) {
-			err("out of memory");
-			return -1;	
-		}
-
-		memset(ifp->endpoint, 0, ifp->desc.bNumEndpoints *
-			sizeof(struct usb_host_endpoint));
-	
-		for (i = 0; i < ifp->desc.bNumEndpoints; i++) {
-			header = (struct usb_descriptor_header *)buffer;
-
-			if (header->bLength > size) {
-				err("ran out of descriptors parsing");
-				return -1;
-			}
-		
-			retval = usb_parse_endpoint(ifp->endpoint + i, buffer, size);
-			if (retval < 0)
-				return retval;
-
-			buffer += retval;
-			parsed += retval;
-			size -= retval;
-		}
-
-		/* We check to see if it's an alternate to this one */
-		d = (struct usb_interface_descriptor *)buffer;
-		if (size < USB_DT_INTERFACE_SIZE
-				|| d->bDescriptorType != USB_DT_INTERFACE
-				|| !d->bAlternateSetting)
-			return parsed;
-	}
-
-	return parsed;
-}
-
-int usb_parse_configuration(struct usb_host_config *config, char *buffer)
-{
-	int i, retval, size;
-	struct usb_descriptor_header *header;
-
-	memcpy(&config->desc, buffer, USB_DT_CONFIG_SIZE);
-	le16_to_cpus(&config->desc.wTotalLength);
-	size = config->desc.wTotalLength;
-
-	if (config->desc.bNumInterfaces > USB_MAXINTERFACES) {
-		warn("too many interfaces");
-		return -1;
-	}
-
-	config->interface = (struct usb_interface *)
-		kmalloc(config->desc.bNumInterfaces *
-		sizeof(struct usb_interface), GFP_KERNEL);
-	dbg("kmalloc IF %p, numif %i", config->interface, config->desc.bNumInterfaces);
-	if (!config->interface) {
-		err("out of memory");
-		return -1;	
-	}
-
-	memset(config->interface, 0,
-	       config->desc.bNumInterfaces * sizeof(struct usb_interface));
-
-	buffer += config->desc.bLength;
-	size -= config->desc.bLength;
-	
-	config->extra = NULL;
-	config->extralen = 0;
-
-	for (i = 0; i < config->desc.bNumInterfaces; i++) {
-		int numskipped, len;
-		char *begin;
-
-		/* Skip over the rest of the Class Specific or Vendor */
-		/*  Specific descriptors */
-		begin = buffer;
-		numskipped = 0;
-		while (size >= sizeof(struct usb_descriptor_header)) {
-			header = (struct usb_descriptor_header *)buffer;
-
-			if ((header->bLength > size) || (header->bLength < 2)) {
-				err("invalid descriptor length of %d", header->bLength);
-				return -1;
-			}
-
-			/* If we find another "proper" descriptor then we're done  */
-			if ((header->bDescriptorType == USB_DT_ENDPOINT) ||
-			    (header->bDescriptorType == USB_DT_INTERFACE) ||
-			    (header->bDescriptorType == USB_DT_CONFIG) ||
-			    (header->bDescriptorType == USB_DT_DEVICE))
-				break;
-
-			dbg("skipping descriptor 0x%X", header->bDescriptorType);
-			numskipped++;
-
-			buffer += header->bLength;
-			size -= header->bLength;
-		}
-		if (numskipped)
-			dbg("skipped %d class/vendor specific endpoint descriptors", numskipped);
-
-		/* Copy any unknown descriptors into a storage area for */
-		/*  drivers to later parse */
-		len = (int)(buffer - begin);
-		if (len) {
-			if (config->extralen) {
-				warn("extra config descriptor");
-			} else {
-				config->extra = kmalloc(len, GFP_KERNEL);
-				if (!config->extra) {
-					err("couldn't allocate memory for config extra descriptors");
-					config->extralen = 0;
-					return -1;
-				}
-
-				memcpy(config->extra, begin, len);
-				config->extralen = len;
-			}
-		}
-
-		retval = usb_parse_interface(config->interface + i, buffer, size);
-		if (retval < 0)
-			return retval;
-
-		buffer += retval;
-		size -= retval;
-	}
-
-	return size;
-}
-
-// hub-only!! ... and only exported for reset/reinit path.
-// otherwise used internally on disconnect/destroy path
-void usb_destroy_configuration(struct usb_device *dev)
-{
-	int c, i, j, k;
-	
-	if (!dev->config)
-		return;
-
-	if (dev->rawdescriptors) {
-		for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
-			kfree(dev->rawdescriptors[i]);
-
-		kfree(dev->rawdescriptors);
-	}
-
-	for (c = 0; c < dev->descriptor.bNumConfigurations; c++) {
-		struct usb_host_config *cf = &dev->config[c];
-
-		if (!cf->interface)
-			break;
-
-		for (i = 0; i < cf->desc.bNumInterfaces; i++) {
-			struct usb_interface *ifp =
-				&cf->interface[i];
-				
-			if (!ifp->altsetting)
-				break;
-
-			for (j = 0; j < ifp->num_altsetting; j++) {
-				struct usb_host_interface *as =
-					&ifp->altsetting[j];
-					
-				if(as->extra) {
-					kfree(as->extra);
-				}
-
-				if (!as->endpoint)
-					break;
-					
-				for(k = 0; k < as->desc.bNumEndpoints; k++) {
-					if(as->endpoint[k].extra) {
-						kfree(as->endpoint[k].extra);
-					}
-				}	
-				kfree(as->endpoint);
-			}
-
-			kfree(ifp->altsetting);
-		}
-		kfree(cf->interface);
-	}
-	kfree(dev->config);
-}
-
-
-// hub-only!! ... and only in reset path, or usb_new_device()
-// (used by real hubs and virtual root hubs)
-int usb_get_configuration(struct usb_device *dev)
-{
-	int result;
-	unsigned int cfgno, length;
-	unsigned char *buffer;
-	unsigned char *bigbuffer;
- 	struct usb_config_descriptor *desc;
-
-	if (dev->descriptor.bNumConfigurations > USB_MAXCONFIG) {
-		warn("too many configurations");
-		return -EINVAL;
-	}
-
-	if (dev->descriptor.bNumConfigurations < 1) {
-		warn("not enough configurations");
-		return -EINVAL;
-	}
-
-	dev->config = (struct usb_host_config *)
-		kmalloc(dev->descriptor.bNumConfigurations *
-		sizeof(struct usb_host_config), GFP_KERNEL);
-	if (!dev->config) {
-		err("out of memory");
-		return -ENOMEM;	
-	}
-	memset(dev->config, 0, dev->descriptor.bNumConfigurations *
-		sizeof(struct usb_host_config));
-
-	dev->rawdescriptors = (char **)kmalloc(sizeof(char *) *
-		dev->descriptor.bNumConfigurations, GFP_KERNEL);
-	if (!dev->rawdescriptors) {
-		err("out of memory");
-		return -ENOMEM;
-	}
-
-	buffer = kmalloc(8, GFP_KERNEL);
-	if (!buffer) {
-		err("unable to allocate memory for configuration descriptors");
-		return -ENOMEM;
-	}
-	desc = (struct usb_config_descriptor *)buffer;
-
-	for (cfgno = 0; cfgno < dev->descriptor.bNumConfigurations; cfgno++) {
-		/* We grab the first 8 bytes so we know how long the whole */
-		/*  configuration is */
-		result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, 8);
-		if (result < 8) {
-			if (result < 0)
-				err("unable to get descriptor");
-			else {
-				err("config descriptor too short (expected %i, got %i)", 8, result);
-				result = -EINVAL;
-			}
-			goto err;
-		}
-
-  	  	/* Get the full buffer */
-		length = le16_to_cpu(desc->wTotalLength);
-
-		bigbuffer = kmalloc(length, GFP_KERNEL);
-		if (!bigbuffer) {
-			err("unable to allocate memory for configuration descriptors");
-			result = -ENOMEM;
-			goto err;
-		}
-
-		/* Now that we know the length, get the whole thing */
-		result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, bigbuffer, length);
-		if (result < 0) {
-			err("couldn't get all of config descriptors");
-			kfree(bigbuffer);
-			goto err;
-		}	
-	
-		if (result < length) {
-			err("config descriptor too short (expected %i, got %i)", length, result);
-			result = -EINVAL;
-			kfree(bigbuffer);
-			goto err;
-		}
-
-		dev->rawdescriptors[cfgno] = bigbuffer;
-
-		result = usb_parse_configuration(&dev->config[cfgno], bigbuffer);
-		if (result > 0)
-			dbg("descriptor data left");
-		else if (result < 0) {
-			result = -EINVAL;
-			goto err;
-		}
-	}
-
-	kfree(buffer);
-	return 0;
-err:
-	kfree(buffer);
-	dev->descriptor.bNumConfigurations = cfgno;
-	return result;
-}
-
+#if 0
+#include <linux/usb.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <asm/byteorder.h>
+#else
+#include "../usb_wrapper.h"
+#endif
+
+#define USB_MAXALTSETTING		128	/* Hard limit */
+#define USB_MAXENDPOINTS		30	/* Hard limit */
+
+/* these maximums are arbitrary */
+#define USB_MAXCONFIG			8
+#define USB_ALTSETTINGALLOC		4
+#define USB_MAXINTERFACES		32
+
+static int usb_parse_endpoint(struct usb_host_endpoint *endpoint, unsigned char *buffer, int size)
+{
+	struct usb_descriptor_header *header;
+	unsigned char *begin;
+	int parsed = 0, len, numskipped;
+
+	header = (struct usb_descriptor_header *)buffer;
+
+	/* Everything should be fine being passed into here, but we sanity */
+	/*  check JIC */
+	if (header->bLength > size) {
+		err("ran out of descriptors parsing");
+		return -1;
+	}
+		
+	if (header->bDescriptorType != USB_DT_ENDPOINT) {
+		warn("unexpected descriptor 0x%X, expecting endpoint, 0x%X",
+			header->bDescriptorType, USB_DT_ENDPOINT);
+		return parsed;
+	}
+
+	if (header->bLength == USB_DT_ENDPOINT_AUDIO_SIZE)
+		memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_AUDIO_SIZE);
+	else
+		memcpy(&endpoint->desc, buffer, USB_DT_ENDPOINT_SIZE);
+	
+	le16_to_cpus(&endpoint->desc.wMaxPacketSize);
+
+	buffer += header->bLength;
+	size -= header->bLength;
+	parsed += header->bLength;
+
+	/* Skip over the rest of the Class Specific or Vendor Specific */
+	/*  descriptors */
+	begin = buffer;
+	numskipped = 0;
+	while (size >= sizeof(struct usb_descriptor_header)) {
+		header = (struct usb_descriptor_header *)buffer;
+
+		if (header->bLength < 2) {
+			err("invalid descriptor length of %d", header->bLength);
+			return -1;
+		}
+
+		/* If we find another "proper" descriptor then we're done  */
+		if ((header->bDescriptorType == USB_DT_ENDPOINT) ||
+		    (header->bDescriptorType == USB_DT_INTERFACE) ||
+		    (header->bDescriptorType == USB_DT_CONFIG) ||
+		    (header->bDescriptorType == USB_DT_DEVICE))
+			break;
+
+		dbg("skipping descriptor 0x%X",
+			header->bDescriptorType);
+		numskipped++;
+
+		buffer += header->bLength;
+		size -= header->bLength;
+		parsed += header->bLength;
+	}
+	if (numskipped)
+		dbg("skipped %d class/vendor specific endpoint descriptors", numskipped);
+
+	/* Copy any unknown descriptors into a storage area for drivers */
+	/*  to later parse */
+	len = (int)(buffer - begin);
+	if (!len) {
+		endpoint->extra = NULL;
+		endpoint->extralen = 0;
+		return parsed;
+	}
+
+	endpoint->extra = kmalloc(len, GFP_KERNEL);
+
+	if (!endpoint->extra) {
+		err("couldn't allocate memory for endpoint extra descriptors");
+		endpoint->extralen = 0;
+		return parsed;
+	}
+
+	memcpy(endpoint->extra, begin, len);
+	endpoint->extralen = len;
+
+	return parsed;
+}
+
+static int usb_parse_interface(struct usb_interface *interface, unsigned char *buffer, int size)
+{
+	int i, len, numskipped, retval, parsed = 0;
+	struct usb_descriptor_header *header;
+	struct usb_host_interface *ifp;
+	unsigned char *begin;
+
+	interface->act_altsetting = 0;
+	interface->num_altsetting = 0;
+	interface->max_altsetting = USB_ALTSETTINGALLOC;
+	device_initialize(&interface->dev);
+
+	interface->altsetting = kmalloc(sizeof(*interface->altsetting) * interface->max_altsetting,
+					GFP_KERNEL);
+	
+	if (!interface->altsetting) {
+		err("couldn't kmalloc interface->altsetting");
+		return -1;
+	}
+
+	while (size > 0) {
+		struct usb_interface_descriptor	*d;
+	
+		if (interface->num_altsetting >= interface->max_altsetting) {
+			struct usb_host_interface *ptr;
+			int oldmas;
+
+			oldmas = interface->max_altsetting;
+			interface->max_altsetting += USB_ALTSETTINGALLOC;
+			if (interface->max_altsetting > USB_MAXALTSETTING) {
+				warn("too many alternate settings (incr %d max %d)\n",
+					USB_ALTSETTINGALLOC, USB_MAXALTSETTING);
+				return -1;
+			}
+
+			ptr = kmalloc(sizeof(*ptr) * interface->max_altsetting, GFP_KERNEL);
+			if (ptr == NULL) {
+				err("couldn't kmalloc interface->altsetting");
+				return -1;
+			}
+			memcpy(ptr, interface->altsetting, sizeof(*interface->altsetting) * oldmas);
+			kfree(interface->altsetting);
+			interface->altsetting = ptr;
+		}
+
+		ifp = interface->altsetting + interface->num_altsetting;
+		ifp->endpoint = NULL;
+		ifp->extra = NULL;
+		ifp->extralen = 0;
+		interface->num_altsetting++;
+
+		memcpy(ifp, buffer, USB_DT_INTERFACE_SIZE);
+
+		/* Skip over the interface */
+		buffer += ifp->desc.bLength;
+		parsed += ifp->desc.bLength;
+		size -= ifp->desc.bLength;
+
+		begin = buffer;
+		numskipped = 0;
+
+		/* Skip over any interface, class or vendor descriptors */
+		while (size >= sizeof(struct usb_descriptor_header)) {
+			header = (struct usb_descriptor_header *)buffer;
+
+			if (header->bLength < 2) {
+				err("invalid descriptor length of %d", header->bLength);
+				return -1;
+			}
+
+			/* If we find another "proper" descriptor then we're done  */
+			if ((header->bDescriptorType == USB_DT_INTERFACE) ||
+			    (header->bDescriptorType == USB_DT_ENDPOINT) ||
+			    (header->bDescriptorType == USB_DT_CONFIG) ||
+			    (header->bDescriptorType == USB_DT_DEVICE))
+				break;
+
+			numskipped++;
+
+			buffer += header->bLength;
+			parsed += header->bLength;
+			size -= header->bLength;
+		}
+
+		if (numskipped)
+			dbg("skipped %d class/vendor specific interface descriptors", numskipped);
+
+		/* Copy any unknown descriptors into a storage area for */
+		/*  drivers to later parse */
+		len = (int)(buffer - begin);
+		if (len) {
+			ifp->extra = kmalloc(len, GFP_KERNEL);
+
+			if (!ifp->extra) {
+				err("couldn't allocate memory for interface extra descriptors");
+				ifp->extralen = 0;
+				return -1;
+			}
+			memcpy(ifp->extra, begin, len);
+			ifp->extralen = len;
+		}
+
+		/* Did we hit an unexpected descriptor? */
+		header = (struct usb_descriptor_header *)buffer;
+		if ((size >= sizeof(struct usb_descriptor_header)) &&
+		    ((header->bDescriptorType == USB_DT_CONFIG) ||
+		     (header->bDescriptorType == USB_DT_DEVICE)))
+			return parsed;
+
+		if (ifp->desc.bNumEndpoints > USB_MAXENDPOINTS) {
+			warn("too many endpoints");
+			return -1;
+		}
+
+		ifp->endpoint = (struct usb_host_endpoint *)
+			kmalloc(ifp->desc.bNumEndpoints *
+			sizeof(struct usb_host_endpoint), GFP_KERNEL);
+		if (!ifp->endpoint) {
+			err("out of memory");
+			return -1;	
+		}
+
+		memset(ifp->endpoint, 0, ifp->desc.bNumEndpoints *
+			sizeof(struct usb_host_endpoint));
+	
+		for (i = 0; i < ifp->desc.bNumEndpoints; i++) {
+			header = (struct usb_descriptor_header *)buffer;
+
+			if (header->bLength > size) {
+				err("ran out of descriptors parsing");
+				return -1;
+			}
+		
+			retval = usb_parse_endpoint(ifp->endpoint + i, buffer, size);
+			if (retval < 0)
+				return retval;
+
+			buffer += retval;
+			parsed += retval;
+			size -= retval;
+		}
+
+		/* We check to see if it's an alternate to this one */
+		d = (struct usb_interface_descriptor *)buffer;
+		if (size < USB_DT_INTERFACE_SIZE
+				|| d->bDescriptorType != USB_DT_INTERFACE
+				|| !d->bAlternateSetting)
+			return parsed;
[truncated at 1000 lines; 33775 more skipped]