git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10420 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			249 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   The definition for UHCI register operation routines.
 | |
| 
 | |
| Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
 | |
| This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions of the BSD License
 | |
| which accompanies this distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _EFI_UHCI_REG_H_
 | |
| #define _EFI_UHCI_REG_H_
 | |
| 
 | |
| //
 | |
| // UHCI register offset
 | |
| //
 | |
| 
 | |
| #define UHCI_FRAME_NUM        1024
 | |
| 
 | |
| //
 | |
| // Register offset and PCI related staff
 | |
| //
 | |
| #define USB_BAR_INDEX         4
 | |
| 
 | |
| #define USBCMD_OFFSET         0
 | |
| #define USBSTS_OFFSET         2
 | |
| #define USBINTR_OFFSET        4
 | |
| #define USBPORTSC_OFFSET      0x10
 | |
| #define USB_FRAME_NO_OFFSET   6
 | |
| #define USB_FRAME_BASE_OFFSET 8
 | |
| #define USB_EMULATION_OFFSET  0xC0
 | |
| 
 | |
| //
 | |
| // Packet IDs
 | |
| //
 | |
| #define SETUP_PACKET_ID       0x2D
 | |
| #define INPUT_PACKET_ID       0x69
 | |
| #define OUTPUT_PACKET_ID      0xE1
 | |
| #define ERROR_PACKET_ID       0x55
 | |
| 
 | |
| //
 | |
| // USB port status and control bit definition.
 | |
| //
 | |
| #define USBPORTSC_CCS         BIT0  // Current Connect Status
 | |
| #define USBPORTSC_CSC         BIT1  // Connect Status Change
 | |
| #define USBPORTSC_PED         BIT2  // Port Enable / Disable
 | |
| #define USBPORTSC_PEDC        BIT3  // Port Enable / Disable Change
 | |
| #define USBPORTSC_LSL         BIT4  // Line Status Low BIT
 | |
| #define USBPORTSC_LSH         BIT5  // Line Status High BIT
 | |
| #define USBPORTSC_RD          BIT6  // Resume Detect
 | |
| #define USBPORTSC_LSDA        BIT8  // Low Speed Device Attached
 | |
| #define USBPORTSC_PR          BIT9  // Port Reset
 | |
| #define USBPORTSC_SUSP        BIT12 // Suspend
 | |
| 
 | |
| //
 | |
| // UHCI Spec said it must implement 2 ports each host at least,
 | |
| // and if more, check whether the bit7 of PORTSC is always 1.
 | |
| // So here assume the max of port number each host is 16.
 | |
| //
 | |
| #define USB_MAX_ROOTHUB_PORT  0x0F
 | |
| 
 | |
| //
 | |
| // Command register bit definitions
 | |
| //
 | |
| #define USBCMD_RS             BIT0  // Run/Stop
 | |
| #define USBCMD_HCRESET        BIT1  // Host reset
 | |
| #define USBCMD_GRESET         BIT2  // Global reset
 | |
| #define USBCMD_EGSM           BIT3  // Global Suspend Mode
 | |
| #define USBCMD_FGR            BIT4  // Force Global Resume
 | |
| #define USBCMD_SWDBG          BIT5  // SW Debug mode
 | |
| #define USBCMD_CF             BIT6  // Config Flag (sw only)
 | |
| #define USBCMD_MAXP           BIT7  // Max Packet (0 = 32, 1 = 64)
 | |
| 
 | |
| //
 | |
| // USB Status register bit definitions
 | |
| //
 | |
| #define USBSTS_USBINT         BIT0  // Interrupt due to IOC
 | |
| #define USBSTS_ERROR          BIT1  // Interrupt due to error
 | |
| #define USBSTS_RD             BIT2  // Resume Detect
 | |
| #define USBSTS_HSE            BIT3  // Host System Error
 | |
| #define USBSTS_HCPE           BIT4  // Host Controller Process Error
 | |
| #define USBSTS_HCH            BIT5  // HC Halted
 | |
| 
 | |
| #define USBTD_ACTIVE          BIT7  // TD is still active
 | |
| #define USBTD_STALLED         BIT6  // TD is stalled
 | |
| #define USBTD_BUFFERR         BIT5  // Buffer underflow or overflow
 | |
| #define USBTD_BABBLE          BIT4  // Babble condition
 | |
| #define USBTD_NAK             BIT3  // NAK is received
 | |
| #define USBTD_CRC             BIT2  // CRC/Time out error
 | |
| #define USBTD_BITSTUFF        BIT1  // Bit stuff error
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Read a UHCI register.
 | |
| 
 | |
|   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
 | |
|   @param  Offset       Register offset to USB_BAR_INDEX.
 | |
| 
 | |
|   @return Content of register.
 | |
| 
 | |
| **/
 | |
| UINT16
 | |
| UhciReadReg (
 | |
|   IN EFI_PCI_IO_PROTOCOL     *PciIo,
 | |
|   IN UINT32                  Offset
 | |
|   );
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Write data to UHCI register.
 | |
| 
 | |
|   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
 | |
|   @param  Offset       Register offset to USB_BAR_INDEX.
 | |
|   @param  Data         Data to write.
 | |
| 
 | |
|   @return None.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| UhciWriteReg (
 | |
|   IN EFI_PCI_IO_PROTOCOL     *PciIo,
 | |
|   IN UINT32                  Offset,
 | |
|   IN UINT16                  Data
 | |
|   );
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Set a bit of the UHCI Register.
 | |
| 
 | |
|   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
 | |
|   @param  Offset       Register offset to USB_BAR_INDEX.
 | |
|   @param  Bit          The bit to set.
 | |
| 
 | |
|   @return None.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| UhciSetRegBit (
 | |
|   IN EFI_PCI_IO_PROTOCOL     *PciIo,
 | |
|   IN UINT32                  Offset,
 | |
|   IN UINT16                  Bit
 | |
|   );
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Clear a bit of the UHCI Register.
 | |
| 
 | |
|   @param  PciIo        The PCI_IO protocol to access the PCI.
 | |
|   @param  Offset       Register offset to USB_BAR_INDEX.
 | |
|   @param  Bit          The bit to clear.
 | |
| 
 | |
|   @return None.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| UhciClearRegBit (
 | |
|   IN EFI_PCI_IO_PROTOCOL     *PciIo,
 | |
|   IN UINT32                  Offset,
 | |
|   IN UINT16                  Bit
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Clear all the interrutp status bits, these bits
 | |
|   are Write-Clean.
 | |
| 
 | |
|   @param  Uhc          The UHCI device.
 | |
| 
 | |
|   @return None.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| UhciAckAllInterrupt (
 | |
|   IN  USB_HC_DEV          *Uhc
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Stop the host controller.
 | |
| 
 | |
|   @param  Uhc          The UHCI device.
 | |
|   @param  Timeout      Max time allowed.
 | |
| 
 | |
|   @retval EFI_SUCCESS  The host controller is stopped.
 | |
|   @retval EFI_TIMEOUT  Failed to stop the host controller.
 | |
| 
 | |
| **/
 | |
| EFI_STATUS
 | |
| UhciStopHc (
 | |
|   IN USB_HC_DEV         *Uhc,
 | |
|   IN UINTN              Timeout
 | |
|   );
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Check whether the host controller operates well.
 | |
| 
 | |
|   @param  PciIo        The PCI_IO protocol to use.
 | |
| 
 | |
|   @retval TRUE         Host controller is working.
 | |
|   @retval FALSE        Host controller is halted or system error.
 | |
| 
 | |
| **/
 | |
| BOOLEAN
 | |
| UhciIsHcWorking (
 | |
|   IN EFI_PCI_IO_PROTOCOL     *PciIo
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Set the UHCI frame list base address. It can't use
 | |
|   UhciWriteReg which access memory in UINT16.
 | |
| 
 | |
|   @param  PciIo        The EFI_PCI_IO_PROTOCOL to use.
 | |
|   @param  Addr         Address to set.
 | |
| 
 | |
|   @return None.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| UhciSetFrameListBaseAddr (
 | |
|   IN EFI_PCI_IO_PROTOCOL     *PciIo,
 | |
|   IN VOID                    *Addr
 | |
|   );
 | |
| 
 | |
| 
 | |
| /**
 | |
|   Disable USB Emulation.
 | |
| 
 | |
|   @param  PciIo        The EFI_PCI_IO_PROTOCOL protocol to use.
 | |
| 
 | |
|   @return None.
 | |
| 
 | |
| **/
 | |
| VOID
 | |
| UhciTurnOffUsbEmulation (
 | |
|   IN EFI_PCI_IO_PROTOCOL     *PciIo
 | |
|   );
 | |
| #endif
 |