]> git.sur5r.net Git - u-boot/blobdiff - board/mpl/common/usb_uhci.c
Fix spelling of "transferred".
[u-boot] / board / mpl / common / usb_uhci.c
index 83624a9dae76ffd9e9ed4d77b49eed5cd3101740..839940763183f4d221ed59757b48b5915dc665b4 100644 (file)
@@ -1,27 +1,27 @@
 /*
- * (C) Copyright 2001
- * Denis Peter, MPL AG Switzerland
+ * Part of this code has been derived from linux:
+ * Universal Host Controller Interface driver for USB (take II).
  *
- * See file CREDITS for list of people who contributed to this
- * project.
+ * (c) 1999-2001 Georg Acher, acher@in.tum.de (executive slave) (base guitar)
+ *               Deti Fliegl, deti@fliegl.de (executive slave) (lead voice)
+ *               Thomas Sailer, sailer@ife.ee.ethz.ch (chief consultant) (cheer leader)
+ *               Roman Weissgaerber, weissg@vienna.at (virt root hub) (studio porter)
+ * (c) 2000      Yggdrasil Computing, Inc. (port of new PCI interface support
+ *               from usb-ohci.c by Adam Richter, adam@yggdrasil.com).
+ * (C) 2000      David Brownell, david-b@pacbell.net (usb-ohci.c)
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
+ * HW-initalization based on material of
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * (C) Copyright 1999 Linus Torvalds
+ * (C) Copyright 1999 Johannes Erdfelt
+ * (C) Copyright 1999 Randy Dunlap
+ * (C) Copyright 1999 Gregory P. Smith
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
  *
- * Note: Part of this code has been derived from linux
+ * Adapted for U-Boot:
+ * (C) Copyright 2001 Denis Peter, MPL AG Switzerland
  *
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /**********************************************************************
  *
  * Interrupt Transfers.
  * --------------------
- * For Interupt transfers USB_MAX_TEMP_INT_TD Transfer descriptor are available. They
+ * For Interrupt transfers USB_MAX_TEMP_INT_TD Transfer descriptor are available. They
  * will be inserted after the appropriate (depending the interval setting) skeleton TD.
  * If an interrupt has been detected the dev->irqhandler is called. The status and number
- * of transfered bytes is stored in dev->irq_status resp. dev->irq_act_len. If the
+ * of transferred bytes is stored in dev->irq_status resp. dev->irq_act_len. If the
  * dev->irqhandler returns 0, the interrupt TD is removed and disabled. If an 1 is returned,
  * the interrupt TD will be reactivated.
  *
@@ -156,7 +156,7 @@ unsigned long usb_uhci_td_stat(unsigned long status)
        return result;
 }
 
-/* get the status and the transfered len of a td chain.
+/* get the status and the transferred len of a td chain.
  * called from the completion handler
  */
 int usb_get_td_status(uhci_td_t *td,struct usb_device *dev)
@@ -177,7 +177,7 @@ int usb_get_td_status(uhci_td_t *td,struct usb_device *dev)
                                (((info >> 21) & 0x7ff)!= 0x7ff) &&
                                (temp & 0x7FF)!=0x7ff)
                {  /* if not setup and not null data pack */
-                       dev->act_len+=(temp & 0x7FF) + 1; /* the transfered len is act_len + 1 */
+                       dev->act_len+=(temp & 0x7FF) + 1; /* the transferred len is act_len + 1 */
                }
                if(stat) {           /* status no ok */
                        dev->status=stat;
@@ -417,9 +417,9 @@ void reset_hc(void)
        out16r( usb_base_addr + USBCMD,USBCMD_GRESET | USBCMD_RS);
        /* Turn off all interrupts */
        out16r(usb_base_addr + USBINTR,0);
-       wait_ms(50);
+       mdelay(50);
        out16r( usb_base_addr + USBCMD,0);
-       wait_ms(10);
+       mdelay(10);
 }
 
 void start_hc(void)
@@ -518,11 +518,11 @@ void usb_check_int_chain(void)
        uhci_td_t *td,*prevtd;
 
        for(i=0;i<8;i++) {
-               prevtd=&td_int[i]; /* the first previous td is the skeleton td */
+               prevtd = &td_int[i]; /* the first previous td is the skeleton td */
                link=swap_32(td_int[i].link) & 0xfffffff0; /* next in chain */
                td=(uhci_td_t *)link; /* assign it */
                /* all interrupt TDs are finally linked to the td_int[0].
-                * so we process all until we find the td_int[0].
+                * so we process all until we find the td_int[0].
                 * if int0 chain points to a QH, we're also done
           */
                while(((i>0) && (link != (unsigned long)&td_int[0])) ||
@@ -533,7 +533,7 @@ void usb_check_int_chain(void)
                        if((td->dev_ptr!=0L) && !(status & TD_CTRL_ACTIVE)) {
                                /* td is not active and a device is assigned -> call irqhandler */
                                dev=(struct usb_device *)td->dev_ptr;
-                               dev->irq_act_len=((status & 0x7FF)==0x7FF) ? 0 : (status & 0x7FF) + 1; /* transfered length */
+                               dev->irq_act_len=((status & 0x7FF)==0x7FF) ? 0 : (status & 0x7FF) + 1; /* transferred length */
                                dev->irq_status=usb_uhci_td_stat(status); /* get status */
                                res=dev->irq_handle(dev); /* call irqhandler */
                                if(res==1) {
@@ -584,7 +584,7 @@ void handle_usb_interrupt(void)
 
 /* init uhci
  */
-int usb_lowlevel_init(void)
+int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
 {
        unsigned char temp;
        int     busdevfunc;
@@ -603,7 +603,7 @@ int usb_lowlevel_init(void)
        pci_read_config_dword(busdevfunc,PCI_BASE_ADDRESS_4,&usb_base_addr);
        USB_UHCI_PRINTF("IO Base Address = 0x%lx\n",usb_base_addr);
        usb_base_addr&=0xFFFFFFF0;
-       usb_base_addr+=CFG_ISA_IO_BASE_ADDRESS;
+       usb_base_addr+=CONFIG_SYS_ISA_IO_BASE_ADDRESS;
        rh.devnum = 0;
        usb_init_skel();
        reset_hc();
@@ -614,13 +614,13 @@ int usb_lowlevel_init(void)
 
 /* stop uhci
  */
-int usb_lowlevel_stop(void)
+int usb_lowlevel_stop(int index)
 {
        if(irqvec==-1)
                return 1;
        irq_free_handler(irqvec);
        reset_hc();
-       irqvec=-1;
+       irqvec = -1;
        return 0;
 }
 
@@ -640,118 +640,9 @@ static void usb_display_wValue(unsigned short wValue,unsigned short wIndex) {}
 static void usb_display_Req(unsigned short req) {}
 #endif
 
-static unsigned char root_hub_dev_des[] =
-{
-       0x12,                   /*  __u8  bLength; */
-       0x01,                   /*  __u8  bDescriptorType; Device */
-       0x00,                   /*  __u16 bcdUSB; v1.0 */
-       0x01,
-       0x09,                   /*  __u8  bDeviceClass; HUB_CLASSCODE */
-       0x00,                   /*  __u8  bDeviceSubClass; */
-       0x00,                   /*  __u8  bDeviceProtocol; */
-       0x08,                   /*  __u8  bMaxPacketSize0; 8 Bytes */
-       0x00,                   /*  __u16 idVendor; */
-       0x00,
-       0x00,                   /*  __u16 idProduct; */
-       0x00,
-       0x00,                   /*  __u16 bcdDevice; */
-       0x00,
-       0x01,                   /*  __u8  iManufacturer; */
-       0x00,                   /*  __u8  iProduct; */
-       0x00,                   /*  __u8  iSerialNumber; */
-       0x01                    /*  __u8  bNumConfigurations; */
-};
-
-
-/* Configuration descriptor */
-static unsigned char root_hub_config_des[] =
-{
-       0x09,                   /*  __u8  bLength; */
-       0x02,                   /*  __u8  bDescriptorType; Configuration */
-       0x19,                   /*  __u16 wTotalLength; */
-       0x00,
-       0x01,                   /*  __u8  bNumInterfaces; */
-       0x01,                   /*  __u8  bConfigurationValue; */
-       0x00,                   /*  __u8  iConfiguration; */
-       0x40,                   /*  __u8  bmAttributes;
-                                  Bit 7: Bus-powered, 6: Self-powered, 5 Remote-wakwup, 4..0: resvd */
-       0x00,                   /*  __u8  MaxPower; */
-
-     /* interface */
-       0x09,                   /*  __u8  if_bLength; */
-       0x04,                   /*  __u8  if_bDescriptorType; Interface */
-       0x00,                   /*  __u8  if_bInterfaceNumber; */
-       0x00,                   /*  __u8  if_bAlternateSetting; */
-       0x01,                   /*  __u8  if_bNumEndpoints; */
-       0x09,                   /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
-       0x00,                   /*  __u8  if_bInterfaceSubClass; */
-       0x00,                   /*  __u8  if_bInterfaceProtocol; */
-       0x00,                   /*  __u8  if_iInterface; */
-
-     /* endpoint */
-       0x07,                   /*  __u8  ep_bLength; */
-       0x05,                   /*  __u8  ep_bDescriptorType; Endpoint */
-       0x81,                   /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
-       0x03,                   /*  __u8  ep_bmAttributes; Interrupt */
-       0x08,                   /*  __u16 ep_wMaxPacketSize; 8 Bytes */
-       0x00,
-       0xff                    /*  __u8  ep_bInterval; 255 ms */
-};
-
-
-static unsigned char root_hub_hub_des[] =
-{
-       0x09,                   /*  __u8  bLength; */
-       0x29,                   /*  __u8  bDescriptorType; Hub-descriptor */
-       0x02,                   /*  __u8  bNbrPorts; */
-       0x00,                   /* __u16  wHubCharacteristics; */
-       0x00,
-       0x01,                   /*  __u8  bPwrOn2pwrGood; 2ms */
-       0x00,                   /*  __u8  bHubContrCurrent; 0 mA */
-       0x00,                   /*  __u8  DeviceRemovable; *** 7 Ports max *** */
-       0xff                    /*  __u8  PortPwrCtrlMask; *** 7 ports max *** */
-};
-
-static unsigned char root_hub_str_index0[] =
-{
-       0x04,                   /*  __u8  bLength; */
-       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
-       0x09,                   /*  __u8  lang ID */
-       0x04,                   /*  __u8  lang ID */
-};
-
-static unsigned char root_hub_str_index1[] =
-{
-       28,                     /*  __u8  bLength; */
-       0x03,                   /*  __u8  bDescriptorType; String-descriptor */
-       'U',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'H',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'C',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'I',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       ' ',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'R',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'o',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'o',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       't',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       ' ',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'H',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'u',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-       'b',                    /*  __u8  Unicode */
-       0,                              /*  __u8  Unicode */
-};
-
+#define WANT_USB_ROOT_HUB_HUB_DES
+#include <usbroothubdes.h>
+#undef WANT_USB_ROOT_HUB_HUB_DES
 
 /*
  * Root Hub Control Pipe (interrupt Pipes are not supported)
@@ -774,7 +665,7 @@ int uhci_submit_rh_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
        unsigned short wIndex;
        unsigned short wLength;
 
-       if ((pipe & PIPE_INTERRUPT) == PIPE_INTERRUPT) {
+       if (usb_pipeint(pipe)) {
                printf("Root-Hub submit IRQ: NOT implemented\n");
 #if 0
                uhci->rh.urb = urb;
@@ -908,13 +799,13 @@ int uhci_submit_rh_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
                        status = in16r(usb_base_addr+USBPORTSC1+2*(wIndex-1));
                        status = (status & 0xfff5) | USBPORTSC_PR;
                        out16r(usb_base_addr+USBPORTSC1+2*(wIndex-1),status);
-                       wait_ms(10);
+                       mdelay(10);
                        status = (status & 0xfff5) & ~USBPORTSC_PR;
                        out16r(usb_base_addr+USBPORTSC1+2*(wIndex-1),status);
                        udelay(10);
                        status = (status & 0xfff5) | USBPORTSC_PE;
                        out16r(usb_base_addr+USBPORTSC1+2*(wIndex-1),status);
-                       wait_ms(10);
+                       mdelay(10);
                        status = (status & 0xfff5) | 0xa;
                        out16r(usb_base_addr+USBPORTSC1+2*(wIndex-1),status);
                        len=0;
@@ -1088,7 +979,6 @@ static void usb_display_wValue(unsigned short wValue,unsigned short wIndex)
 #endif
 
 
-
 #ifdef USB_UHCI_DEBUG
 
 static int usb_display_td(uhci_td_t *td)