]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/usb/host/ohci-hcd.c
usb: ohci: Move the ohci_dev struct to inside the main ohci struct
[karo-tx-uboot.git] / drivers / usb / host / ohci-hcd.c
index 22c7b1810aea0aa49aaa9d69a1ac557bc34c24cf..745825cd3206bc27824d327df19a81f418b4fd11 100644 (file)
@@ -109,8 +109,6 @@ static ohci_t gohci;
 struct ohci_hcca ghcca[1];
 /* a pointer to the aligned storage */
 struct ohci_hcca *phcca;
-/* this allocates EDs for all possible endpoints */
-struct ohci_device ohci_dev;
 
 static inline u32 roothub_a(struct ohci *hc)
        { return ohci_readl(&hc->regs->roothub.a); }
@@ -389,7 +387,8 @@ static void ohci_dump(ohci_t *controller, int verbose)
 
 /* get a transfer request */
 
-int sohci_submit_job(ohci_t *ohci, urb_priv_t *urb, struct devrequest *setup)
+int sohci_submit_job(ohci_t *ohci, ohci_dev_t *ohci_dev, urb_priv_t *urb,
+                    struct devrequest *setup)
 {
        ed_t *ed;
        urb_priv_t *purb_priv = urb;
@@ -412,7 +411,7 @@ int sohci_submit_job(ohci_t *ohci, urb_priv_t *urb, struct devrequest *setup)
        urb->finished = 0;
 
        /* every endpoint has a ed, locate and fill it */
-       ed = ep_add_ed(dev, pipe, interval, 1);
+       ed = ep_add_ed(ohci_dev, dev, pipe, interval, 1);
        if (!ed) {
                err("sohci_submit_job: ENOMEM");
                return -1;
@@ -743,14 +742,14 @@ static int ep_unlink(ohci_t *ohci, ed_t *edi)
  * info fields are setted anyway even though most of them should not
  * change
  */
-static ed_t *ep_add_ed(struct usb_device *usb_dev, unsigned long pipe,
-                       int interval, int load)
+static ed_t *ep_add_ed(ohci_dev_t *ohci_dev, struct usb_device *usb_dev,
+                      unsigned long pipe, int interval, int load)
 {
        td_t *td;
        ed_t *ed_ret;
        volatile ed_t *ed;
 
-       ed = ed_ret = &ohci_dev.ed[(usb_pipeendpoint(pipe) << 1) |
+       ed = ed_ret = &ohci_dev->ed[(usb_pipeendpoint(pipe) << 1) |
                        (usb_pipecontrol(pipe)? 0: usb_pipeout(pipe))];
 
        if ((ed->state & ED_DEL) || (ed->state & ED_URB_DEL)) {
@@ -766,7 +765,7 @@ static ed_t *ep_add_ed(struct usb_device *usb_dev, unsigned long pipe,
                ed->hwHeadP = ed->hwTailP;
                ed->state = ED_UNLINK;
                ed->type = usb_pipetype(pipe);
-               ohci_dev.ed_cnt++;
+               ohci_dev->ed_cnt++;
        }
 
        ed->hwINFO = m32_swap(usb_pipedevice(pipe)
@@ -1386,7 +1385,7 @@ static int submit_common_msg(ohci_t *ohci, struct usb_device *dev,
                return -1;
        }
 
-       if (sohci_submit_job(ohci, urb, setup) < 0) {
+       if (sohci_submit_job(ohci, &ohci->ohci_dev, urb, setup) < 0) {
                err("sohci_submit_job failed");
                return -1;
        }
@@ -1763,11 +1762,6 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
        }
        phcca = &ghcca[0];
        info("aligned ghcca %p", phcca);
-       memset(&ohci_dev, 0, sizeof(struct ohci_device));
-       if ((__u32)&ohci_dev.ed[0] & 0x7) {
-               err("EDs not aligned!!");
-               return -1;
-       }
        memset(gtd, 0, sizeof(td_t) * (NUM_TD + 1));
        if ((__u32)gtd & 0x7) {
                err("TDs not aligned!!");