Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / usb / host / hc_crisv10.c
index 770c870..2fe7fd1 100644 (file)
@@ -14,7 +14,6 @@
 #include <linux/unistd.h>
 #include <linux/interrupt.h>
 #include <linux/init.h>
-#include <linux/version.h>
 #include <linux/list.h>
 #include <linux/spinlock.h>
 
@@ -113,17 +112,17 @@ static __u8 root_hub_dev_des[] =
 {
        0x12,  /*  __u8  bLength; */
        0x01,  /*  __u8  bDescriptorType; Device */
-       0x00,  /*  __u16 bcdUSB; v1.0 */
+       0x00,  /*  __le16 bcdUSB; v1.0 */
        0x01,
        0x09,  /*  __u8  bDeviceClass; HUB_CLASSCODE */
        0x00,  /*  __u8  bDeviceSubClass; */
        0x00,  /*  __u8  bDeviceProtocol; */
        0x08,  /*  __u8  bMaxPacketSize0; 8 Bytes */
-       0x00,  /*  __u16 idVendor; */
+       0x00,  /*  __le16 idVendor; */
        0x00,
-       0x00,  /*  __u16 idProduct; */
+       0x00,  /*  __le16 idProduct; */
        0x00,
-       0x00,  /*  __u16 bcdDevice; */
+       0x00,  /*  __le16 bcdDevice; */
        0x00,
        0x00,  /*  __u8  iManufacturer; */
        0x02,  /*  __u8  iProduct; */
@@ -136,7 +135,7 @@ static __u8 root_hub_config_des[] =
 {
        0x09,  /*  __u8  bLength; */
        0x02,  /*  __u8  bDescriptorType; Configuration */
-       0x19,  /*  __u16 wTotalLength; */
+       0x19,  /*  __le16 wTotalLength; */
        0x00,
        0x01,  /*  __u8  bNumInterfaces; */
        0x01,  /*  __u8  bConfigurationValue; */
@@ -160,7 +159,7 @@ static __u8 root_hub_config_des[] =
        0x05,  /*  __u8  ep_bDescriptorType; Endpoint */
        0x81,  /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
        0x03,  /*  __u8  ep_bmAttributes; Interrupt */
-       0x08,  /*  __u16 ep_wMaxPacketSize; 8 Bytes */
+       0x08,  /*  __le16 ep_wMaxPacketSize; 8 Bytes */
        0x00,
        0xff   /*  __u8  ep_bInterval; 255 ms */
 };
@@ -178,8 +177,8 @@ static __u8 root_hub_hub_des[] =
        0xff   /*  __u8  PortPwrCtrlMask; *** 7 ports max *** */
 };
 
-static struct timer_list bulk_start_timer = TIMER_INITIALIZER(NULL, 0, 0);
-static struct timer_list bulk_eot_timer = TIMER_INITIALIZER(NULL, 0, 0);
+static DEFINE_TIMER(bulk_start_timer, NULL, 0, 0);
+static DEFINE_TIMER(bulk_eot_timer, NULL, 0, 0);
 
 /* We want the start timer to expire before the eot timer, because the former might start
    traffic, thus making it unnecessary for the latter to time out. */
@@ -463,7 +462,8 @@ static void etrax_usb_free_epid(int epid);
 
 static int etrax_remove_from_sb_list(struct urb *urb);
 
-static void* etrax_usb_buffer_alloc(struct usb_bus* bus, size_t size, int mem_flags, dma_addr_t *dma);
+static void* etrax_usb_buffer_alloc(struct usb_bus* bus, size_t size,
+       unsigned mem_flags, dma_addr_t *dma);
 static void etrax_usb_buffer_free(struct usb_bus *bus, size_t size, void *addr, dma_addr_t dma);
 
 static void etrax_usb_add_to_bulk_sb_list(struct urb *urb, int epid);
@@ -476,11 +476,9 @@ static int etrax_usb_submit_ctrl_urb(struct urb *urb);
 static int etrax_usb_submit_intr_urb(struct urb *urb);
 static int etrax_usb_submit_isoc_urb(struct urb *urb);
 
-static int etrax_usb_submit_urb(struct urb *urb, int mem_flags);
+static int etrax_usb_submit_urb(struct urb *urb, unsigned mem_flags);
 static int etrax_usb_unlink_urb(struct urb *urb, int status);
 static int etrax_usb_get_frame_number(struct usb_device *usb_dev);
-static int etrax_usb_allocate_dev(struct usb_device *usb_dev);
-static int etrax_usb_deallocate_dev(struct usb_device *usb_dev);
 
 static irqreturn_t etrax_usb_tx_interrupt(int irq, void *vhc, struct pt_regs *regs);
 static irqreturn_t etrax_usb_rx_interrupt(int irq, void *vhc, struct pt_regs *regs);
@@ -512,8 +510,6 @@ static void etrax_usb_hc_cleanup(void);
 
 static struct usb_operations etrax_usb_device_operations =
 {
-       .allocate = etrax_usb_allocate_dev,
-       .deallocate = etrax_usb_deallocate_dev,
        .get_frame_number = etrax_usb_get_frame_number,
        .submit_urb = etrax_usb_submit_urb,
        .unlink_urb = etrax_usb_unlink_urb,
@@ -1266,7 +1262,7 @@ static int etrax_usb_allocate_epid(void)
        return -1;
 }
 
-static int etrax_usb_submit_urb(struct urb *urb, int mem_flags)
+static int etrax_usb_submit_urb(struct urb *urb, unsigned mem_flags)
 {
        etrax_hc_t *hc;
        int ret = -EINVAL;
@@ -1579,20 +1575,6 @@ static int etrax_usb_get_frame_number(struct usb_device *usb_dev)
        return (*R_USB_FM_NUMBER & 0x7ff);
 }
 
-static int etrax_usb_allocate_dev(struct usb_device *usb_dev)
-{
-       DBFENTER;
-       DBFEXIT;
-       return 0;
-}
-
-static int etrax_usb_deallocate_dev(struct usb_device *usb_dev)
-{
-       DBFENTER;
-       DBFEXIT;
-       return 0;
-}
-
 static irqreturn_t etrax_usb_tx_interrupt(int irq, void *vhc, struct pt_regs *regs)
 {
        DBFENTER;
@@ -2155,10 +2137,9 @@ static int etrax_usb_submit_bulk_urb(struct urb *urb)
        urb->status = -EINPROGRESS;
 
        /* Setup the hcpriv data. */
-       urb_priv = kmalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
+       urb_priv = kzalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
        assert(urb_priv != NULL);
        /* This sets rx_offset to 0. */
-       memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
        urb_priv->urb_state = NOT_STARTED;
        urb->hcpriv = urb_priv;
 
@@ -2493,10 +2474,9 @@ static int etrax_usb_submit_ctrl_urb(struct urb *urb)
        urb->status = -EINPROGRESS;
 
        /* Setup the hcpriv data. */
-       urb_priv = kmalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
+       urb_priv = kzalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
        assert(urb_priv != NULL);
        /* This sets rx_offset to 0. */
-       memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
        urb_priv->urb_state = NOT_STARTED;
        urb->hcpriv = urb_priv;
 
@@ -2785,9 +2765,8 @@ static void etrax_usb_add_to_intr_sb_list(struct urb *urb, int epid)
        maxlen = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
        interval = urb->interval;
 
-       urb_priv = kmalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
+       urb_priv = kzalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
        assert(urb_priv != NULL);
-       memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
        urb->hcpriv = urb_priv;
 
        first_ep = &TxIntrEPList[0];
@@ -3015,9 +2994,8 @@ static void etrax_usb_add_to_isoc_sb_list(struct urb *urb, int epid)
 
        prev_sb_desc = next_sb_desc = temp_sb_desc = NULL;
 
-       urb_priv = kmalloc(sizeof(etrax_urb_priv_t), GFP_ATOMIC);
+       urb_priv = kzalloc(sizeof(etrax_urb_priv_t), GFP_ATOMIC);
        assert(urb_priv != NULL);
-       memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
 
        urb->hcpriv = urb_priv;
        urb_priv->epid = epid;
@@ -4295,7 +4273,8 @@ etrax_usb_bulk_eot_timer_func(unsigned long dummy)
 }
 
 static void*
-etrax_usb_buffer_alloc(struct usb_bus* bus, size_t size, int mem_flags, dma_addr_t *dma)
+etrax_usb_buffer_alloc(struct usb_bus* bus, size_t size,
+       unsigned mem_flags, dma_addr_t *dma)
 {
   return kmalloc(size, mem_flags);
 }
@@ -4347,7 +4326,7 @@ static int __init etrax_usb_hc_init(void)
        bus->bus_name="ETRAX 100LX";
        bus->hcpriv = hc;
 
-       /* Initalize RH to the default address.
+       /* Initialize RH to the default address.
           And make sure that we have no status change indication */
        hc->rh.numports = 2;  /* The RH has two ports */
        hc->rh.devnum = 1;
@@ -4414,6 +4393,7 @@ static int __init etrax_usb_hc_init(void)
         device_initialize(&fake_device);
         kobject_set_name(&fake_device.kobj, "etrax_usb");
         kobject_add(&fake_device.kobj);
+       kobject_uevent(&fake_device.kobj, KOBJ_ADD);
         hc->bus->controller = &fake_device;
        usb_register_bus(hc->bus);
 
@@ -4546,7 +4526,7 @@ static int __init etrax_usb_hc_init(void)
         usb_rh->speed = USB_SPEED_FULL;
         usb_rh->devnum = 1;
         hc->bus->devnum_next = 2;
-        usb_rh->epmaxpacketin[0] = usb_rh->epmaxpacketout[0] = 64;
+        usb_rh->ep0.desc.wMaxPacketSize = __const_cpu_to_le16(64);
         usb_get_device_descriptor(usb_rh, USB_DT_DEVICE_SIZE);
        usb_new_device(usb_rh);