/** @file | |
The definition for UHCI register operation routines. | |
Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#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 |