--- linux-2.3.99-pre4-5.orig/include/linux/usb.h Mon Apr 10 11:43:47 2000 +++ linux-2.3.99-pre4-5.patch/include/linux/usb.h Tue Apr 11 11:30:31 2000 @@ -539,7 +539,6 @@ atomic_t refcnt; /* Reference count */ - int maxpacketsize; /* Maximum packet size; encoded as 0,1,2,3 = 8,16,32,64 */ unsigned int toggle[2]; /* one bit for each endpoint ([0] = IN, [1] = OUT) */ unsigned int halted[2]; /* endpoint halts; one bit per endpoint # & direction; */ /* [0] = IN, [1] = OUT */ @@ -686,7 +685,7 @@ static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint) { - return (dev->devnum << 8) | (endpoint << 15) | (dev->slow << 26) | dev->maxpacketsize; + return (dev->devnum << 8) | (endpoint << 15) | (dev->slow << 26); } static inline unsigned int __default_pipe(struct usb_device *dev) --- linux-2.3.99-pre4-5.orig/drivers/usb/usb.c Mon Apr 10 11:43:44 2000 +++ linux-2.3.99-pre4-5.patch/drivers/usb/usb.c Tue Apr 11 11:28:52 2000 @@ -1718,11 +1718,15 @@ info("USB new device connect, assigned device number %d", dev->devnum); - dev->maxpacketsize = 0; /* Default to 8 byte max packet size */ + /* USB v1.1 5.5.3 */ + /* We read the first 8 bytes from the device descriptor to get to */ + /* the bMaxPacketSize0 field. Then we set the maximum packet size */ + /* for the control pipe, and retrieve the rest */ dev->epmaxpacketin [0] = 8; dev->epmaxpacketout[0] = 8; - /* We still haven't set the Address yet */ + /* Even though we have assigned an address for the device, we */ + /* haven't told it what it's address is yet */ addr = dev->devnum; dev->devnum = 0; @@ -1738,12 +1742,6 @@ } dev->epmaxpacketin [0] = dev->descriptor.bMaxPacketSize0; dev->epmaxpacketout[0] = dev->descriptor.bMaxPacketSize0; - switch (dev->descriptor.bMaxPacketSize0) { - case 8: dev->maxpacketsize = 0; break; - case 16: dev->maxpacketsize = 1; break; - case 32: dev->maxpacketsize = 2; break; - case 64: dev->maxpacketsize = 3; break; - } dev->devnum = addr;