Home | History | Annotate | Download | only in UhciDxe
      1 /** @file
      2 
      3   The definition for UHCI register operation routines.
      4 
      5 Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef _EFI_UHCI_REG_H_
     17 #define _EFI_UHCI_REG_H_
     18 
     19 //
     20 // UHCI register offset
     21 //
     22 
     23 #define UHCI_FRAME_NUM        1024
     24 
     25 //
     26 // Register offset and PCI related staff
     27 //
     28 #define USB_BAR_INDEX         4
     29 
     30 #define USBCMD_OFFSET         0
     31 #define USBSTS_OFFSET         2
     32 #define USBINTR_OFFSET        4
     33 #define USBPORTSC_OFFSET      0x10
     34 #define USB_FRAME_NO_OFFSET   6
     35 #define USB_FRAME_BASE_OFFSET 8
     36 #define USB_EMULATION_OFFSET  0xC0
     37 
     38 //
     39 // Packet IDs
     40 //
     41 #define SETUP_PACKET_ID       0x2D
     42 #define INPUT_PACKET_ID       0x69
     43 #define OUTPUT_PACKET_ID      0xE1
     44 #define ERROR_PACKET_ID       0x55
     45 
     46 //
     47 // USB port status and control bit definition.
     48 //
     49 #define USBPORTSC_CCS         BIT0  // Current Connect Status
     50 #define USBPORTSC_CSC         BIT1  // Connect Status Change
     51 #define USBPORTSC_PED         BIT2  // Port Enable / Disable
     52 #define USBPORTSC_PEDC        BIT3  // Port Enable / Disable Change
     53 #define USBPORTSC_LSL         BIT4  // Line Status Low BIT
     54 #define USBPORTSC_LSH         BIT5  // Line Status High BIT
     55 #define USBPORTSC_RD          BIT6  // Resume Detect
     56 #define USBPORTSC_LSDA        BIT8  // Low Speed Device Attached
     57 #define USBPORTSC_PR          BIT9  // Port Reset
     58 #define USBPORTSC_SUSP        BIT12 // Suspend
     59 
     60 //
     61 // UHCI Spec said it must implement 2 ports each host at least,
     62 // and if more, check whether the bit7 of PORTSC is always 1.
     63 // So here assume the max of port number each host is 16.
     64 //
     65 #define USB_MAX_ROOTHUB_PORT  0x0F
     66 
     67 //
     68 // Command register bit definitions
     69 //
     70 #define USBCMD_RS             BIT0  // Run/Stop
     71 #define USBCMD_HCRESET        BIT1  // Host reset
     72 #define USBCMD_GRESET         BIT2  // Global reset
     73 #define USBCMD_EGSM           BIT3  // Global Suspend Mode
     74 #define USBCMD_FGR            BIT4  // Force Global Resume
     75 #define USBCMD_SWDBG          BIT5  // SW Debug mode
     76 #define USBCMD_CF             BIT6  // Config Flag (sw only)
     77 #define USBCMD_MAXP           BIT7  // Max Packet (0 = 32, 1 = 64)
     78 
     79 //
     80 // USB Status register bit definitions
     81 //
     82 #define USBSTS_USBINT         BIT0  // Interrupt due to IOC
     83 #define USBSTS_ERROR          BIT1  // Interrupt due to error
     84 #define USBSTS_RD             BIT2  // Resume Detect
     85 #define USBSTS_HSE            BIT3  // Host System Error
     86 #define USBSTS_HCPE           BIT4  // Host Controller Process Error
     87 #define USBSTS_HCH            BIT5  // HC Halted
     88 
     89 #define USBTD_ACTIVE          BIT7  // TD is still active
     90 #define USBTD_STALLED         BIT6  // TD is stalled
     91 #define USBTD_BUFFERR         BIT5  // Buffer underflow or overflow
     92 #define USBTD_BABBLE          BIT4  // Babble condition
     93 #define USBTD_NAK             BIT3  // NAK is received
     94 #define USBTD_CRC             BIT2  // CRC/Time out error
     95 #define USBTD_BITSTUFF        BIT1  // Bit stuff error
     96 
     97 
     98 /**
     99   Read a UHCI register.
    100 
    101   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
    102   @param  Offset       Register offset to USB_BAR_INDEX.
    103 
    104   @return Content of register.
    105 
    106 **/
    107 UINT16
    108 UhciReadReg (
    109   IN EFI_PCI_IO_PROTOCOL     *PciIo,
    110   IN UINT32                  Offset
    111   );
    112 
    113 
    114 
    115 /**
    116   Write data to UHCI register.
    117 
    118   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
    119   @param  Offset       Register offset to USB_BAR_INDEX.
    120   @param  Data         Data to write.
    121 
    122   @return None.
    123 
    124 **/
    125 VOID
    126 UhciWriteReg (
    127   IN EFI_PCI_IO_PROTOCOL     *PciIo,
    128   IN UINT32                  Offset,
    129   IN UINT16                  Data
    130   );
    131 
    132 
    133 
    134 /**
    135   Set a bit of the UHCI Register.
    136 
    137   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
    138   @param  Offset       Register offset to USB_BAR_INDEX.
    139   @param  Bit          The bit to set.
    140 
    141   @return None.
    142 
    143 **/
    144 VOID
    145 UhciSetRegBit (
    146   IN EFI_PCI_IO_PROTOCOL     *PciIo,
    147   IN UINT32                  Offset,
    148   IN UINT16                  Bit
    149   );
    150 
    151 
    152 
    153 /**
    154   Clear a bit of the UHCI Register.
    155 
    156   @param  PciIo        The PCI_IO protocol to access the PCI.
    157   @param  Offset       Register offset to USB_BAR_INDEX.
    158   @param  Bit          The bit to clear.
    159 
    160   @return None.
    161 
    162 **/
    163 VOID
    164 UhciClearRegBit (
    165   IN EFI_PCI_IO_PROTOCOL     *PciIo,
    166   IN UINT32                  Offset,
    167   IN UINT16                  Bit
    168   );
    169 
    170 
    171 /**
    172   Clear all the interrutp status bits, these bits
    173   are Write-Clean.
    174 
    175   @param  Uhc          The UHCI device.
    176 
    177   @return None.
    178 
    179 **/
    180 VOID
    181 UhciAckAllInterrupt (
    182   IN  USB_HC_DEV          *Uhc
    183   );
    184 
    185 
    186 /**
    187   Stop the host controller.
    188 
    189   @param  Uhc          The UHCI device.
    190   @param  Timeout      Max time allowed.
    191 
    192   @retval EFI_SUCCESS  The host controller is stopped.
    193   @retval EFI_TIMEOUT  Failed to stop the host controller.
    194 
    195 **/
    196 EFI_STATUS
    197 UhciStopHc (
    198   IN USB_HC_DEV         *Uhc,
    199   IN UINTN              Timeout
    200   );
    201 
    202 
    203 
    204 /**
    205   Check whether the host controller operates well.
    206 
    207   @param  PciIo        The PCI_IO protocol to use.
    208 
    209   @retval TRUE         Host controller is working.
    210   @retval FALSE        Host controller is halted or system error.
    211 
    212 **/
    213 BOOLEAN
    214 UhciIsHcWorking (
    215   IN EFI_PCI_IO_PROTOCOL     *PciIo
    216   );
    217 
    218 
    219 /**
    220   Set the UHCI frame list base address. It can't use
    221   UhciWriteReg which access memory in UINT16.
    222 
    223   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
    224   @param  Addr         Address to set.
    225 
    226   @return None.
    227 
    228 **/
    229 VOID
    230 UhciSetFrameListBaseAddr (
    231   IN EFI_PCI_IO_PROTOCOL     *PciIo,
    232   IN VOID                    *Addr
    233   );
    234 
    235 
    236 /**
    237   Disable USB Emulation.
    238 
    239   @param  PciIo        The EFI_PCI_IO_PROTOCOL protocol to use.
    240 
    241   @return None.
    242 
    243 **/
    244 VOID
    245 UhciTurnOffUsbEmulation (
    246   IN EFI_PCI_IO_PROTOCOL     *PciIo
    247   );
    248 #endif
    249