\r
#include "uhci.h"\r
\r
-//\r
-// Prototypes\r
-// Driver model protocol interface\r
-//\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIDriverBindingSupported (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIDriverBindingStart (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIDriverBindingStop (\r
- IN EFI_DRIVER_BINDING_PROTOCOL *This,\r
- IN EFI_HANDLE Controller,\r
- IN UINTN NumberOfChildren,\r
- IN EFI_HANDLE *ChildHandleBuffer\r
- );\r
-\r
-//\r
-// UHCI interface functions\r
-//\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIReset (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT16 Attributes\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIGetState (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- OUT EFI_USB_HC_STATE *State\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCISetState (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN EFI_USB_HC_STATE State\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIControlTransfer (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT8 DeviceAddress,\r
- IN BOOLEAN IsSlowDevice,\r
- IN UINT8 MaximumPacketLength,\r
- IN EFI_USB_DEVICE_REQUEST *Request,\r
- IN EFI_USB_DATA_DIRECTION TransferDirection,\r
- IN OUT VOID *Data, OPTIONAL\r
- IN OUT UINTN *DataLength, OPTIONAL\r
- IN UINTN TimeOut,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIBulkTransfer (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 MaximumPacketLength,\r
- IN OUT VOID *Data,\r
- IN OUT UINTN *DataLength,\r
- IN OUT UINT8 *DataToggle,\r
- IN UINTN TimeOut,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIAsyncInterruptTransfer (\r
- IN EFI_USB_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN BOOLEAN IsSlowDevice,\r
- IN UINT8 MaximumPacketLength,\r
- IN BOOLEAN IsNewTransfer,\r
- IN OUT UINT8 *DataToggle,\r
- IN UINTN PollingInterval, OPTIONAL\r
- IN UINTN DataLength, OPTIONAL\r
- IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction, OPTIONAL\r
- IN VOID *Context OPTIONAL\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCISyncInterruptTransfer (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN BOOLEAN IsSlowDevice,\r
- IN UINT8 MaximumPacketLength,\r
- IN OUT VOID *Data,\r
- IN OUT UINTN *DataLength,\r
- IN OUT UINT8 *DataToggle,\r
- IN UINTN TimeOut,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIIsochronousTransfer (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 MaximumPacketLength,\r
- IN OUT VOID *Data,\r
- IN UINTN DataLength,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIAsyncIsochronousTransfer (\r
- IN EFI_USB_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 MaximumPacketLength,\r
- IN OUT VOID *Data,\r
- IN UINTN DataLength,\r
- IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,\r
- IN VOID *Context OPTIONAL\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIGetRootHubPortNumber (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- OUT UINT8 *PortNumber\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIGetRootHubPortStatus (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT8 PortNumber,\r
- OUT EFI_USB_PORT_STATUS *PortStatus\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCISetRootHubPortFeature (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT8 PortNumber,\r
- IN EFI_USB_PORT_FEATURE PortFeature\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCIClearRootHubPortFeature (\r
- IN EFI_USB_HC_PROTOCOL *This,\r
- IN UINT8 PortNumber,\r
- IN EFI_USB_PORT_FEATURE PortFeature\r
- );\r
-\r
-//\r
-// UEFI 2.0 Protocol\r
-//\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2GetCapability(\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- OUT UINT8 *MaxSpeed,\r
- OUT UINT8 *PortNumber,\r
- OUT UINT8 *Is64BitCapable\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2Reset (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT16 Attributes\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2GetState (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- OUT EFI_USB_HC_STATE * State\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2SetState (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN EFI_USB_HC_STATE State\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2ControlTransfer (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 DeviceSpeed,\r
- IN UINTN MaximumPacketLength,\r
- IN EFI_USB_DEVICE_REQUEST * Request,\r
- IN EFI_USB_DATA_DIRECTION TransferDirection,\r
- IN OUT VOID *Data, OPTIONAL\r
- IN OUT UINTN *DataLength, OPTIONAL\r
- IN UINTN TimeOut,\r
- IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2BulkTransfer (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 DeviceSpeed,\r
- IN UINTN MaximumPacketLength,\r
- IN UINT8 DataBuffersNumber,\r
- IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],\r
- IN OUT UINTN *DataLength,\r
- IN OUT UINT8 *DataToggle,\r
- IN UINTN TimeOut,\r
- IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2AsyncInterruptTransfer (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 DeviceSpeed,\r
- IN UINTN MaximumPacketLength,\r
- IN BOOLEAN IsNewTransfer,\r
- IN OUT UINT8 *DataToggle,\r
- IN UINTN PollingInterval, OPTIONAL\r
- IN UINTN DataLength, OPTIONAL\r
- IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
- IN EFI_ASYNC_USB_TRANSFER_CALLBACK CallBackFunction, OPTIONAL\r
- IN VOID *Context OPTIONAL\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2SyncInterruptTransfer (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 DeviceSpeed,\r
- IN UINTN MaximumPacketLength,\r
- IN OUT VOID *Data,\r
- IN OUT UINTN *DataLength,\r
- IN OUT UINT8 *DataToggle,\r
- IN UINTN TimeOut,\r
- IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2IsochronousTransfer (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 DeviceSpeed,\r
- IN UINTN MaximumPacketLength,\r
- IN UINT8 DataBuffersNumber,\r
- IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],\r
- IN UINTN DataLength,\r
- IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
- OUT UINT32 *TransferResult\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2AsyncIsochronousTransfer (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 DeviceAddress,\r
- IN UINT8 EndPointAddress,\r
- IN UINT8 DeviceSpeed,\r
- IN UINTN MaximumPacketLength,\r
- IN UINT8 DataBuffersNumber,\r
- IN OUT VOID *Data[EFI_USB_MAX_ISO_BUFFER_NUM],\r
- IN UINTN DataLength,\r
- IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,\r
- IN EFI_ASYNC_USB_TRANSFER_CALLBACK IsochronousCallBack,\r
- IN VOID *Context OPTIONAL\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2GetRootHubPortStatus (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 PortNumber,\r
- OUT EFI_USB_PORT_STATUS * PortStatus\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2SetRootHubPortFeature (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 PortNumber,\r
- IN EFI_USB_PORT_FEATURE PortFeature\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-UHCI2ClearRootHubPortFeature (\r
- IN EFI_USB2_HC_PROTOCOL * This,\r
- IN UINT8 PortNumber,\r
- IN EFI_USB_PORT_FEATURE PortFeature\r
- );\r
-\r
-//\r
-// Asynchronous interrupt transfer monitor function\r
-//\r
-VOID\r
-EFIAPI\r
-MonitorInterruptTrans (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- );\r
-\r
//\r
// UHCI Driver Global Variables\r
//\r
UHCIDriverBindingSupported,\r
UHCIDriverBindingStart,\r
UHCIDriverBindingStop,\r
- 0x10,\r
+ 0xa,\r
NULL,\r
NULL\r
};\r
UINTN FlBaseAddrReg; \r
EFI_PCI_IO_PROTOCOL *PciIo; \r
USB_HC_DEV *HcDev;\r
+ UINT64 Supports;\r
\r
HcDev = NULL;\r
\r
//\r
Status = PciIo->Attributes (\r
PciIo,\r
- EfiPciIoAttributeOperationEnable,\r
- EFI_PCI_DEVICE_ENABLE,\r
- NULL\r
+ EfiPciIoAttributeOperationSupported,\r
+ 0,\r
+ &Supports\r
);\r
+ if (!EFI_ERROR (Status)) {\r
+ Supports &= EFI_PCI_DEVICE_ENABLE;\r
+ Status = PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationEnable,\r
+ Supports,\r
+ NULL\r
+ );\r
+ }\r
if (EFI_ERROR (Status)) {\r
gBS->CloseProtocol (\r
Controller,\r
return EFI_SUCCESS;\r
}\r
\r
-\r
+STATIC\r
EFI_STATUS\r
UnInstallUHCInterface (\r
IN EFI_HANDLE Controller,\r
--*/\r
{\r
USB_HC_DEV *HcDev;\r
+ EFI_STATUS Status;\r
+ UINT64 Supports;\r
\r
HcDev = USB_HC_DEV_FROM_THIS (This);\r
\r
//\r
// Disable the USB Host Controller\r
//\r
- HcDev->PciIo->Attributes (\r
- HcDev->PciIo,\r
- EfiPciIoAttributeOperationDisable,\r
- EFI_PCI_DEVICE_ENABLE,\r
- NULL\r
- );\r
+ Status = HcDev->PciIo->Attributes (\r
+ HcDev->PciIo,\r
+ EfiPciIoAttributeOperationSupported,\r
+ 0,\r
+ &Supports\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ Supports &= EFI_PCI_DEVICE_ENABLE;\r
+ Status = HcDev->PciIo->Attributes (\r
+ HcDev->PciIo,\r
+ EfiPciIoAttributeOperationDisable,\r
+ Supports,\r
+ NULL\r
+ );\r
+ }\r
\r
gBS->FreePool (HcDev);\r
\r
--*/\r
{\r
USB_HC_DEV *HcDev;\r
- BOOLEAN IsSlowDevice = (EFI_USB_SPEED_LOW == DeviceSpeed) ? TRUE : FALSE;\r
+ BOOLEAN IsSlowDevice = (BOOLEAN) ((EFI_USB_SPEED_LOW == DeviceSpeed) ? TRUE : FALSE);\r
\r
HcDev = USB2_HC_DEV_FROM_THIS (This);\r
\r
--*/ \r
{\r
USB_HC_DEV *HcDev;\r
- BOOLEAN IsSlowDevice = (EFI_USB_SPEED_LOW == DeviceSpeed) ? TRUE : FALSE;\r
+ BOOLEAN IsSlowDevice = (BOOLEAN) ((EFI_USB_SPEED_LOW == DeviceSpeed) ? TRUE : FALSE);\r
\r
HcDev = USB2_HC_DEV_FROM_THIS (This);\r
return UHCIAsyncInterruptTransfer(\r
if(DeviceSpeed==EFI_USB_SPEED_HIGH)\r
return EFI_INVALID_PARAMETER;\r
\r
- IsSlowDevice = (EFI_USB_SPEED_LOW == DeviceSpeed) ? TRUE : FALSE; \r
+ IsSlowDevice = (BOOLEAN) ((EFI_USB_SPEED_LOW == DeviceSpeed) ? TRUE : FALSE); \r
HcDev = USB2_HC_DEV_FROM_THIS (This);\r
\r
return UHCISyncInterruptTransfer(\r
UINTN DataLen;\r
UINTN ActualLen;\r
UINTN ErrTDPos;\r
- UINT32 StatusAddr;\r
LIST_ENTRY *NextLink;\r
\r
HcDev = (USB_HC_DEV *) Context;\r
- StatusAddr = (UINT32) (USBSTS);\r
\r
//\r
// interrupt transfer list is empty, means that no interrupt transfer\r