--- /dev/null
+--- AdiUsbAdslDriver.c.orig 2003-09-11 19:48:46.000000000 +0200
++++ AdiUsbAdslDriver.c 2003-09-12 12:40:54.000000000 +0200
+@@ -34,6 +34,7 @@
+ #include <linux/init.h>
+ #include <linux/proc_fs.h>
+ #include <linux/list.h>
++#include <linux/interrupt.h>
+ #include <asm/uaccess.h>
+ #include <linux/if_arp.h>
+ #include "AdiUsbAdslDriver.h"
+@@ -275,7 +276,7 @@
+ }
+
+ /* Try to select the first USB configuration: */
+- if (usb_set_configuration(usb, usb->config[0].bConfigurationValue) < 0)
++ if (usb_set_configuration(usb, usb->config[0].desc.bConfigurationValue) < 0)
+ {
+ adi_err ("adi_probe : set_configuration failed.\n");
+
+@@ -419,7 +420,7 @@
+ #ifdef USEBULK
+ pHw->pIncomingData[i] = GET_KBUFFER(INCOMING_DATA_SIZE);
+ #else
+- pHw->pUrbReadIso[i] = usb_alloc_urb(pHw->IsoFramesPerUrb);
++ pHw->pUrbReadIso[i] = usb_alloc_urb(pHw->IsoFramesPerUrb,in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
+ pHw->pIncomingData[i] = GET_KBUFFER((pHw->IsoPipeSize * pHw->IsoFramesPerUrb));
+ #endif
+ if (!pHw->pIncomingData[i])
+@@ -534,10 +535,10 @@
+ usb_driver_claim_interface(&adi_driver, &(usb->actconfig->interface[1]), pHw);
+ usb_driver_claim_interface(&adi_driver, &(usb->actconfig->interface[2]), pHw);
+ /* Get information about our endpoints*/
+- epoutidma = usb->actconfig->interface[1].altsetting[0].endpoint + 0;
+- epoutdata = usb->actconfig->interface[1].altsetting[0].endpoint + 1;
++ epoutidma = &usb->actconfig->interface[1]->altsetting[0].endpoint->desc;
++ epoutdata = &usb->actconfig->interface[1]->altsetting[0].endpoint->desc;
+ #ifdef USEBULK
+- epindata = usb->actconfig->interface[2].altsetting[0].endpoint + 0;
++ epindata = &usb->actconfig->interface[2]->altsetting[0].endpoint->desc;
+ #else /*ifdef USEBULK*/
+ /*******************************************************************************/
+ /* Need to eventually choose the alternate interface based on the train ds rate*/
+@@ -552,7 +553,7 @@
+ }
+ else
+ {
+- epindata=usb->actconfig->interface[kUSB_INTF_IN].altsetting[kFASTEST_ISO_INTF].endpoint+0;
++ epindata=usb->actconfig->interface[kUSB_INTF_IN]->altsetting[kFASTEST_ISO_INTF].endpoint+0;
+ }
+ #endif /*ifdef USEBULK else*/
+
+@@ -694,7 +695,7 @@
+ /* Unlink pending interrupt URBs: */
+ if (pHw->HasIntURB)
+ {
+- pHw->urbInt.transfer_flags &= ~USB_ASYNC_UNLINK;
++ pHw->urbInt.transfer_flags &= ~URB_ASYNC_UNLINK;
+ usb_unlink_urb(&pHw->urbInt);
+ pHw->HasIntURB = FALSE;
+ }
+@@ -1231,13 +1232,13 @@
+ {
+ /* Get the USB endpoint for IDMA uploading: */
+ struct usb_endpoint_descriptor *epint =
+- dev->actconfig->interface[0].altsetting[0].endpoint + 0;
++ &dev->actconfig->interface[0]->altsetting[0].endpoint->desc;
+ /* Install the interrupt handler to send IDMA pages to the modem
+ and handle further incoming data: */
+ usb_fill_int_urb(&pHw->urbInt, dev, pHw->pipeIntIn, pHw->pInterruptData,
+ sizeof(CDC_NOTIFY), adi_irq, pHw, epint->bInterval);
+ pHw->HasIntURB = TRUE;
+- if (usb_submit_urb(&pHw->urbInt) < 0)
++ if (usb_submit_urb(&pHw->urbInt,0) < 0)
+ {
+ adi_err ("Unable to submit interrupt URB!\n");
+
+@@ -1573,7 +1574,7 @@
+ /* Stop our outgoing data urbs */
+ if (pHw->IsWriting)
+ {
+- pHw->urbWrite.transfer_flags &= ~USB_ASYNC_UNLINK;
++ pHw->urbWrite.transfer_flags &= ~URB_ASYNC_UNLINK;
+ usb_unlink_urb(&pHw->urbWrite);
+ }
+
+@@ -1787,10 +1788,10 @@
+ URB. This will call WriteCompletion, which will call
+ netif_wakequeue:
+ */
+- pHw->urbWrite.transfer_flags |= USB_ASYNC_UNLINK;
++ pHw->urbWrite.transfer_flags |= URB_ASYNC_UNLINK;
+ usb_unlink_urb(&pHw->urbWrite);
+
+- pHw->urbOAMWrite.transfer_flags |= USB_ASYNC_UNLINK;
++ pHw->urbOAMWrite.transfer_flags |= URB_ASYNC_UNLINK;
+ usb_unlink_urb(&pHw->urbOAMWrite);
+
+ /* We must reset the transaction time to keep the watchdog quiet: */
+--- Boot.c.orig 2003-09-12 12:43:26.000000000 +0200
++++ Boot.c 2003-09-12 14:22:12.000000000 +0200
+@@ -29,7 +29,8 @@
+ #include "Util.h"
+ #include "Me.h"
+ #include "debug.h"
+-
++#define USB_ST_NOERROR 0
++#define USB_QUEUE_BULK 0x0010
+ /*********************************************************************************/
+ /* Local only prototypes */
+ /*********************************************************************************/
+@@ -465,14 +466,14 @@
+ memcpy(xfer_buf, pData, Size);
+
+ /* Get an URB and prepare it for submission*/
+- urb = usb_alloc_urb(0);
++ urb = usb_alloc_urb(0,0);
+
+ usb_fill_bulk_urb(urb, pHw->usbdev, pHw->pipeBulkIdmaOut, xfer_buf, Size, IDMACompletion, pHw);
+ urb->transfer_flags |= USB_QUEUE_BULK;
+
+ adi_dbg (DBG_BOOT,"Submitting BULK URB %p\n", urb);
+
+- ret = usb_submit_urb(urb);
++ ret = usb_submit_urb(urb,0);
+
+ IDMA_exit:
+ adi_leaves (DBG_BOOT);
+--- Me.c.orig 2003-09-12 14:56:03.000000000 +0200
++++ Me.c 2003-09-12 14:55:47.000000000 +0200
+@@ -126,7 +126,7 @@
+ #include "Sm.h"
+ #include "Msg.h"
+ #include "debug.h"
+-
++#define USB_ST_NOERROR 0
+ /***************************************************************************************/
+ /* ProcessIncomingCmv */
+ /* */
+--- Oam.c.orig 2003-09-12 14:56:41.000000000 +0200
++++ Oam.c 2003-09-12 14:57:11.000000000 +0200
+@@ -19,6 +19,7 @@
+
+ #include "Adiutil.h"
+ #include "debug.h"
++#define USB_ST_NOERROR 0
+
+ //---------------------------------------------------------------------------
+ // Some sample OAM cells from Dennis Chan ...
+@@ -547,7 +548,7 @@
+ FILL_BULK_URB(&pHw->urbOAMWrite, pHw->usbdev, pHw->pipeBulkDataOut,
+ pCell,uiTotalBytes , AmoebaCompletion, pHw);
+
+- result = usb_submit_urb(&pHw->urbOAMWrite);
++ result = usb_submit_urb(&pHw->urbOAMWrite,0);
+
+ adi_dbg (DBG_OAM,"usb_submit_urb result=%d \n",result);
+ adi_leaves (DBG_OAM);
+--- Pipes.c.orig 2003-09-12 14:27:57.000000000 +0200
++++ Pipes.c 2003-09-12 15:42:29.091320528 +0200
+@@ -49,6 +49,8 @@
+ /* the DMA of an incoming packet could be happening while the CPU is doing the */
+ /* reassembly of another packet. */
+ /**********************************************************************************/
++#define USB_ST_NOERROR 0
++#define USB_QUEUE_BULK 0x0010
+ void StartReadPipe(Hardware *pHw)
+ {
+ int result;
+@@ -92,7 +94,7 @@
+ memset(pUrb, 0, sizeof(*pUrb));
+ spin_lock_init(&pUrb->lock);
+ /*Init the URB fields per the spec*/
+- pUrb->next = pHw->pUrbReadIso[(i+1) % INCOMING_Q_SIZE];
++// pUrb->next = pHw->pUrbReadIso[(i+1) % INCOMING_Q_SIZE];
+ pUrb->dev = pHw->usbdev;
+ pUrb->pipe = pHw->pipeIsoDataIn;
+ pUrb->context = pHw;
+@@ -100,7 +102,7 @@
+ pUrb->transfer_buffer = pHw->pIncomingData[i];
+ pUrb->transfer_buffer_length = pHw->IsoPipeSize * pHw->IsoFramesPerUrb;
+ pUrb->number_of_packets = pHw->IsoFramesPerUrb;
+- pUrb->transfer_flags = USB_ISO_ASAP;
++ pUrb->transfer_flags = URB_ISO_ASAP;
+ /*
+ CC - FIXME : Voir ce que ces flags signifient avant de les activer :
+ pUrb->transfer_flags &= ~USB_DISABLE_SPD; // Curieux: cela suppose que ISO_ASAP contiendrait DISABLE_SPD ?
+@@ -119,7 +121,7 @@
+ for (i=0; i<INCOMING_Q_SIZE; i++)
+ {
+ /*Ok, data is initialized, fire off the ISO URB ring*/
+- if ((result = usb_submit_urb(pHw->pUrbReadIso[i])))
++ if ((result = usb_submit_urb(pHw->pUrbReadIso[i],0)))
+ {
+ adi_dbg (DBG_READ,"Error %d on ISO read URB submit.\n", result);
+
+@@ -232,7 +234,7 @@
+ memset(urb, 0, sizeof(*urb));
+ usb_fill_bulk_urb(urb, pHw->usbdev, pHw->pipeBulkDataIn,
+ urb->transfer_buffer, INCOMING_DATA_SIZE, ReadBulkCompletion, pHw);
+- if ((result = usb_submit_urb(urb)))
++ if ((result = usb_submit_urb(urb,0)))
+ {
+ adi_dbg (DBG_READ,"Error %d on read URB submit.\n", result);
+
+@@ -374,10 +376,10 @@
+ for (i=0; i<INCOMING_Q_SIZE; i++)
+ {
+ #ifdef USEBULK
+- pHw->urbRead[i].transfer_flags &= ~USB_ASYNC_UNLINK;
++ pHw->urbRead[i].transfer_flags &= ~URB_ASYNC_UNLINK;
+ usb_unlink_urb(&pHw->urbRead[i]);
+ #else
+- pHw->pUrbReadIso[i]->transfer_flags &= ~USB_ASYNC_UNLINK;
++ pHw->pUrbReadIso[i]->transfer_flags &= ~URB_ASYNC_UNLINK;
+ usb_unlink_urb(pHw->pUrbReadIso[i]);
+ #endif
+ }
+@@ -526,7 +528,7 @@
+ pHw->urbWrite.transfer_flags |= USB_QUEUE_BULK;
+
+ /* Send it: */
+- result = usb_submit_urb(&pHw->urbWrite);
++ result = usb_submit_urb(&pHw->urbWrite,0);
+ }
+ else
+ {
+@@ -593,7 +595,7 @@
+ -EINVAL.
+ */
+ urb->status = 0;
+- urb->transfer_flags &= ~USB_ASYNC_UNLINK;
++ urb->transfer_flags &= ~URB_ASYNC_UNLINK;
+ }
+ else
+ {
+--- Sm.c.orig 2003-09-12 14:56:18.000000000 +0200
++++ Sm.c 2003-09-12 14:56:29.000000000 +0200
+@@ -58,6 +58,7 @@
+ /* Rewrite for MAC OS, 09/2001 */
+ /* */
+ /************************************************************************************/
++#define USB_ST_NOERROR 0
+ void ModemSM(UInt16 uEventCode, Hardware *pHw, void *pData)
+ {
+ UInt32 DspStatus;
+--- Util.c.niedakh 2003-06-04 00:52:10.000000000 +0200
++++ Util.c 2003-09-12 15:53:46.430349344 +0200
+@@ -29,7 +29,7 @@
+ #include "Konst.h"
+ #include "debug.h"
+ #include "Firmware8051.h"
+-
++#define USB_ST_NOERROR 0
+ /**********************************************************************************/
+ /* Local utilities */
+ /**********************************************************************************/
+@@ -293,7 +293,7 @@
+ pdr = (devrequest *)(xfer_buf+CMV_DATA_WORDS*2);
+
+ /*Get an URB and prepare it for submission*/
+- urb = usb_alloc_urb(0);
++ urb = usb_alloc_urb(0,0);
+
+ FILL_USB_CTRL_REQUEST(pdr,
+ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+@@ -332,7 +332,7 @@
+ pdr = (devrequest *)(xfer_buf+CMV_DATA_WORDS*2);
+
+ /*Get an URB and prepare it for submission*/
+- urb = usb_alloc_urb(0);
++ urb = usb_alloc_urb(0,0);
+
+ FILL_USB_CTRL_REQUEST(pdr,
+ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+@@ -484,7 +484,7 @@
+ if ( list_was_empty )
+ {
+ adi_dbg(DBG_UTILS,"Submit urb %p immediately\n", urb);
+- ret = usb_submit_urb (urb);
++ ret = usb_submit_urb (urb,0);
+ if ( ret != 0 )
+ {
+ adi_err ("Failed to send ctrl urb (%p) with err=%d\n",
+@@ -662,7 +662,7 @@
+ adi_dbg(DBG_UTILS,"rm_queued_urb: Submitting urb %p\n",qhead->urb);
+
+
+- ret = usb_submit_urb ( qhead->urb );
++ ret = usb_submit_urb ( qhead->urb , 0);
+ if ( ret != 0 )
+ {
+ adi_err ("Failed to send pending ctrl urb (%p) with err=%d\n",
+@@ -726,7 +726,7 @@
+ }
+
+
+- ret = usb_submit_urb (pHw->ctrl_urb_failed);
++ ret = usb_submit_urb (pHw->ctrl_urb_failed,0);
+ if ( ret != 0 )
+ {
+ adi_err ("ADI: Failed to send faulty ctrl urb (%p) with err=%d\n",
+@@ -777,7 +777,7 @@
+ /* We have to unlink it */
+ qhead = list_entry ( pHw->ctrl_urb_ipg_q.next, queued_urb_t, list);
+
+- qhead->urb->transfer_flags &= ~USB_ASYNC_UNLINK;
++ qhead->urb->transfer_flags &= ~URB_ASYNC_UNLINK;
+ usb_unlink_urb(qhead->urb);
+ }
+
+--- user/Makefile.orig 2003-09-13 20:44:11.207726216 +0200
++++ user/Makefile 2003-09-13 21:21:04.834203840 +0200
+@@ -4,7 +4,7 @@
+ # Makefile for adictrl
+ #
+
+-CFLAGS=-O2 -pipe -Wall -pedantic -DLINUX -g
++CFLAGS=-O2 -I../../kern-fixed -DLINUX -Wall
+ INSTALLDIR=/usr/sbin
+ CONFIGDIR=/etc/analog
+ INSTALLER = $(shell which install)
+--- user/adictrl.c.orig 2003-09-13 21:06:07.408633264 +0200
++++ user/adictrl.c 2003-09-13 21:23:39.022763616 +0200
+@@ -31,9 +31,9 @@
+ #include <unistd.h>
+ #include <dirent.h>
+ #include <fcntl.h>
+-#include <linux/usb.h>
++#include "usb.h"
+ #include <getopt.h>
+-#include <linux/usbdevice_fs.h>
++#include "usbdevice_fs.h"
+ #include <signal.h>
+ #include <assert.h>
+
+@@ -179,7 +179,7 @@
+ * @bNumConfigurations
+ *
+ */
+-
++/*
+ typedef struct usb_device_descriptor
+ {
+ uint8_t bLength;
+@@ -197,7 +197,8 @@
+ uint8_t iSerialNumber;
+ uint8_t bNumConfigurations;
+ } __attribute__((packed)) usb_dev_desc_t;
+-
++*/
++typedef struct usb_device_descriptor __attribute__((packed)) usb_dev_desc_t;
+ /**
+ * cmv_msg_t - CMV message description.
+ * Copied and adapted from Struct.sh in order to not enter