modify coding style to pass ecc tool and provide comments that complied with Doxgen.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5427 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
eric_tian
2008-07-08 10:26:16 +00:00
parent 38bbd3d91c
commit 78c2ffb5a7
13 changed files with 632 additions and 812 deletions

View File

@@ -1,4 +1,5 @@
/** @file /** @file
UEFI Component Name(2) protocol implementation for EHCI driver.
Copyright (c) 2006 - 2007, Intel Corporation Copyright (c) 2006 - 2007, Intel Corporation
@@ -11,13 +12,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
ComponentName.c
Abstract:
**/ **/
#include "Ehci.h" #include "Ehci.h"

View File

@@ -1,5 +1,7 @@
/** @file /** @file
The Ehci controller driver.
Copyright (c) 2006 - 2008, Intel Corporation Copyright (c) 2006 - 2008, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,15 +11,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
Ehci.c
Abstract:
Revision History
**/ **/
@@ -47,17 +40,16 @@ USB_PORT_STATE_MAP mUsbPortChangeMap[] = {
/** /**
Retrieves the capablility of root hub ports. Retrieves the capablility of root hub ports.
@param This This EFI_USB_HC_PROTOCOL instance. @param This This EFI_USB_HC_PROTOCOL instance.
@param MaxSpeed Max speed supported by the controller @param MaxSpeed Max speed supported by the controller.
@param PortNumber Number of the root hub ports. @param PortNumber Number of the root hub ports.
@param Is64BitCapable Whether the controller supports 64-bit memory @param Is64BitCapable Whether the controller supports 64-bit memory
addressing. addressing.
@return EFI_SUCCESS : host controller capability were retrieved successfully. @retval EFI_SUCCESS Host controller capability were retrieved successfully.
@return EFI_INVALID_PARAMETER : Either of the three capability pointer is NULL @retval EFI_INVALID_PARAMETER Either of the three capability pointer is NULL.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcGetCapability ( EhcGetCapability (
@@ -91,17 +83,16 @@ EhcGetCapability (
/** /**
Provides software reset for the USB host controller. Provides software reset for the USB host controller.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param Attributes A bit mask of the reset operation to perform. @param Attributes A bit mask of the reset operation to perform.
@return EFI_SUCCESS : The reset operation succeeded. @retval EFI_SUCCESS The reset operation succeeded.
@return EFI_INVALID_PARAMETER : Attributes is not valid. @retval EFI_INVALID_PARAMETER Attributes is not valid.
@return EFI_UNSUPPOURTED : The type of reset specified by Attributes is @retval EFI_UNSUPPOURTED The type of reset specified by Attributes is
@return not currently supported by the host controller. not currently supported by the host controller.
@return EFI_DEVICE_ERROR : Host controller isn't halted to reset. @retval EFI_DEVICE_ERROR Host controller isn't halted to reset.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcReset ( EhcReset (
@@ -170,17 +161,16 @@ ON_EXIT:
/** /**
Retrieve the current state of the USB host controller. Retrieve the current state of the USB host controller.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param State Variable to return the current host controller @param State Variable to return the current host controller
state. state.
@return EFI_SUCCESS : Host controller state was returned in State. @retval EFI_SUCCESS Host controller state was returned in State.
@return EFI_INVALID_PARAMETER : State is NULL. @retval EFI_INVALID_PARAMETER State is NULL.
@return EFI_DEVICE_ERROR : An error was encountered while attempting to @retval EFI_DEVICE_ERROR An error was encountered while attempting to
@return retrieve the host controller's current state. retrieve the host controller's current state.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcGetState ( EhcGetState (
@@ -214,16 +204,15 @@ EhcGetState (
/** /**
Sets the USB host controller to a specific state. Sets the USB host controller to a specific state.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param State The state of the host controller that will be set. @param State The state of the host controller that will be set.
@return EFI_SUCCESS : The USB host controller was successfully placed @retval EFI_SUCCESS The USB host controller was successfully placed
@return in the state specified by State. in the state specified by State.
@return EFI_INVALID_PARAMETER : State is invalid. @retval EFI_INVALID_PARAMETER State is invalid.
@return EFI_DEVICE_ERROR : Failed to set the state due to device error. @retval EFI_DEVICE_ERROR Failed to set the state due to device error.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcSetState ( EhcSetState (
@@ -290,18 +279,17 @@ EhcSetState (
/** /**
Retrieves the current status of a USB root hub port. Retrieves the current status of a USB root hub port.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param PortNumber The root hub port to retrieve the state from. This @param PortNumber The root hub port to retrieve the state from.
value is zero-based. This value is zero-based.
@param PortStatus Variable to receive the port state @param PortStatus Variable to receive the port state.
@return EFI_SUCCESS : The status of the USB root hub port specified @retval EFI_SUCCESS The status of the USB root hub port specified.
@return by PortNumber was returned in PortStatus. by PortNumber was returned in PortStatus.
@return EFI_INVALID_PARAMETER : PortNumber is invalid. @retval EFI_INVALID_PARAMETER PortNumber is invalid.
@return EFI_DEVICE_ERROR : Can't read register @retval EFI_DEVICE_ERROR Can't read register.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcGetRootHubPortStatus ( EhcGetRootHubPortStatus (
@@ -382,16 +370,15 @@ ON_EXIT:
/** /**
Sets a feature for the specified root hub port. Sets a feature for the specified root hub port.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param PortNumber Root hub port to set. @param PortNumber Root hub port to set.
@param PortFeature Feature to set @param PortFeature Feature to set.
@return EFI_SUCCESS : The feature specified by PortFeature was set @retval EFI_SUCCESS The feature specified by PortFeature was set.
@return EFI_INVALID_PARAMETER : PortNumber is invalid or PortFeature is invalid. @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.
@return EFI_DEVICE_ERROR : Can't read register @retval EFI_DEVICE_ERROR Can't read register.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcSetRootHubPortFeature ( EhcSetRootHubPortFeature (
@@ -490,19 +477,18 @@ ON_EXIT:
/** /**
Clears a feature for the specified root hub port. Clears a feature for the specified root hub port.
@param This A pointer to the EFI_USB2_HC_PROTOCOL instance. @param This A pointer to the EFI_USB2_HC_PROTOCOL instance.
@param PortNumber Specifies the root hub port whose feature is @param PortNumber Specifies the root hub port whose feature is
requested to be cleared. requested to be cleared.
@param PortFeature Indicates the feature selector associated with the @param PortFeature Indicates the feature selector associated with the
feature clear request. feature clear request.
@return EFI_SUCCESS : The feature specified by PortFeature was cleared @retval EFI_SUCCESS The feature specified by PortFeature was cleared
@return for the USB root hub port specified by PortNumber. for the USB root hub port specified by PortNumber.
@return EFI_INVALID_PARAMETER : PortNumber is invalid or PortFeature is invalid. @retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.
@return EFI_DEVICE_ERROR : Can't read register @retval EFI_DEVICE_ERROR Can't read register.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcClearRootHubPortFeature ( EhcClearRootHubPortFeature (
@@ -617,28 +603,27 @@ ON_EXIT:
/** /**
Submits control transfer to a target USB device. Submits control transfer to a target USB device.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param DeviceAddress The target device address @param DeviceAddress The target device address.
@param DeviceSpeed Target device speed. @param DeviceSpeed Target device speed.
@param MaximumPacketLength Maximum packet size the default control transfer @param MaximumPacketLength Maximum packet size the default control transfer
endpoint is capable of sending or receiving. endpoint is capable of sending or receiving.
@param Request USB device request to send @param Request USB device request to send.
@param TransferDirection Specifies the data direction for the data stage @param TransferDirection Specifies the data direction for the data stage
@param Data Data buffer to be transmitted or received from USB @param Data Data buffer to be transmitted or received from USB
device. device.
@param DataLength The size (in bytes) of the data buffer @param DataLength The size (in bytes) of the data buffer.
@param TimeOut Indicates the maximum timeout, in millisecond, @param TimeOut Indicates the maximum timeout, in millisecond.
@param Translator Transaction translator to be used by this device. @param Translator Transaction translator to be used by this device.
@param TransferResult Return the result of this control transfer. @param TransferResult Return the result of this control transfer.
@return EFI_SUCCESS : Transfer was completed successfully. @retval EFI_SUCCESS Transfer was completed successfully.
@return EFI_OUT_OF_RESOURCES : The transfer failed due to lack of resources. @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resources.
@return EFI_INVALID_PARAMETER : Some parameters are invalid. @retval EFI_INVALID_PARAMETER Some parameters are invalid.
@return EFI_TIMEOUT : Transfer failed due to timeout. @retval EFI_TIMEOUT Transfer failed due to timeout.
@return EFI_DEVICE_ERROR : Transfer failed due to host controller or device error. @retval EFI_DEVICE_ERROR Transfer failed due to host controller or device error.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcControlTransfer ( EhcControlTransfer (
@@ -775,35 +760,33 @@ ON_EXIT:
/** /**
Submits bulk transfer to a bulk endpoint of a USB device. Submits bulk transfer to a bulk endpoint of a USB device.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param DeviceAddress Target device address @param DeviceAddress Target device address.
@param EndPointAddress Endpoint number and its direction in bit 7. . @param EndPointAddress Endpoint number and its direction in bit 7.
@param DeviceSpeed Device speed, Low speed device doesn't support bulk @param DeviceSpeed Device speed, Low speed device doesn't support bulk
transfer. transfer.
@param MaximumPacketLength Maximum packet size the endpoint is capable of @param MaximumPacketLength Maximum packet size the endpoint is capable of
sending or receiving. sending or receiving.
@param DataBuffersNumber Number of data buffers prepared for the transfer. @param DataBuffersNumber Number of data buffers prepared for the transfer.
@param Data Array of pointers to the buffers of data to transmit @param Data Array of pointers to the buffers of data to transmit
from or receive into. from or receive into.
@param DataLength The lenght of the data buffer @param DataLength The lenght of the data buffer.
@param DataToggle On input, the initial data toggle for the transfer; @param DataToggle On input, the initial data toggle for the transfer;
On output, it is updated to to next data toggle to On output, it is updated to to next data toggle to
use of the subsequent bulk use of the subsequent bulk transfer.
transfer. @param TimeOut Indicates the maximum time, in millisecond, which
@param Translator A pointr to the transaction translator data. the transfer is allowed to complete.
@param TimeOut Indicates the maximum time, in millisecond, which @param Translator A pointr to the transaction translator data.
the transfer is allowed to complete. @param TransferResult A pointer to the detailed result information of the
@param TransferResult A pointer to the detailed result information of the bulk transfer.
bulk transfer.
@return EFI_SUCCESS : The transfer was completed successfully. @retval EFI_SUCCESS The transfer was completed successfully.
@return EFI_OUT_OF_RESOURCES : The transfer failed due to lack of resource. @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
@return EFI_INVALID_PARAMETER : Some parameters are invalid. @retval EFI_INVALID_PARAMETER Some parameters are invalid.
@return EFI_TIMEOUT : The transfer failed due to timeout. @retval EFI_TIMEOUT The transfer failed due to timeout.
@return EFI_DEVICE_ERROR : The transfer failed due to host controller error. @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcBulkTransfer ( EhcBulkTransfer (
@@ -918,32 +901,31 @@ ON_EXIT:
Submits an asynchronous interrupt transfer to an Submits an asynchronous interrupt transfer to an
interrupt endpoint of a USB device. interrupt endpoint of a USB device.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param DeviceAddress Target device address @param DeviceAddress Target device address.
@param EndPointAddress Endpoint number and its direction encoded in bit 7 @param EndPointAddress Endpoint number and its direction encoded in bit 7
@param DeviceSpeed Indicates device speed. @param DeviceSpeed Indicates device speed.
@param MaximumPacketLength Maximum packet size the target endpoint is capable @param MaximumPacketLength Maximum packet size the target endpoint is capable
@param IsNewTransfer If TRUE, to submit an new asynchronous interrupt @param IsNewTransfer If TRUE, to submit an new asynchronous interrupt
transfer If FALSE, to remove the specified transfer If FALSE, to remove the specified
asynchronous interrupt asynchronous interrupt.
@param DataToggle On input, the initial data toggle to use; on output, @param DataToggle On input, the initial data toggle to use; on output,
it is updated to indicate the next data toggle it is updated to indicate the next data toggle.
@param PollingInterval The he interval, in milliseconds, that the transfer @param PollingInterval The he interval, in milliseconds, that the transfer
is polled. is polled.
@param DataLength The length of data to receive at the rate specified @param DataLength The length of data to receive at the rate specified
by PollingInterval. by PollingInterval.
@param Translator Transaction translator to use. @param Translator Transaction translator to use.
@param CallBackFunction Function to call at the rate specified by @param CallBackFunction Function to call at the rate specified by
PollingInterval PollingInterval.
@param Context Context to CallBackFunction. @param Context Context to CallBackFunction.
@return EFI_SUCCESS : The request has been successfully submitted or canceled. @retval EFI_SUCCESS The request has been successfully submitted or canceled.
@return EFI_INVALID_PARAMETER : Some parameters are invalid. @retval EFI_INVALID_PARAMETER Some parameters are invalid.
@return EFI_OUT_OF_RESOURCES : The request failed due to a lack of resources. @retval EFI_OUT_OF_RESOURCES The request failed due to a lack of resources.
@return EFI_DEVICE_ERROR : The transfer failed due to host controller error. @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcAsyncInterruptTransfer ( EhcAsyncInterruptTransfer (
@@ -1067,30 +1049,29 @@ ON_EXIT:
Submits synchronous interrupt transfer to an interrupt endpoint Submits synchronous interrupt transfer to an interrupt endpoint
of a USB device. of a USB device.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param DeviceAddress Target device address @param DeviceAddress Target device address.
@param EndPointAddress Endpoint number and its direction encoded in bit 7 @param EndPointAddress Endpoint number and its direction encoded in bit 7
@param DeviceSpeed Indicates device speed. @param DeviceSpeed Indicates device speed.
@param MaximumPacketLength Maximum packet size the target endpoint is capable @param MaximumPacketLength Maximum packet size the target endpoint is capable
of sending or receiving. of sending or receiving.
@param Data Buffer of data that will be transmitted to USB @param Data Buffer of data that will be transmitted to USB
device or received from USB device. device or received from USB device.
@param DataLength On input, the size, in bytes, of the data buffer; On @param DataLength On input, the size, in bytes, of the data buffer; On
output, the number of bytes transferred. output, the number of bytes transferred.
@param DataToggle On input, the initial data toggle to use; on output, @param DataToggle On input, the initial data toggle to use; on output,
it is updated to indicate the next data toggle it is updated to indicate the next data toggle.
@param TimeOut Maximum time, in second, to complete @param TimeOut Maximum time, in second, to complete.
@param Translator Transaction translator to use. @param Translator Transaction translator to use.
@param TransferResult Variable to receive the transfer result @param TransferResult Variable to receive the transfer result.
@return EFI_SUCCESS : The transfer was completed successfully. @return EFI_SUCCESS The transfer was completed successfully.
@return EFI_OUT_OF_RESOURCES : The transfer failed due to lack of resource. @return EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
@return EFI_INVALID_PARAMETER : Some parameters are invalid. @return EFI_INVALID_PARAMETER Some parameters are invalid.
@return EFI_TIMEOUT : The transfer failed due to timeout. @return EFI_TIMEOUT The transfer failed due to timeout.
@return EFI_DEVICE_ERROR : The failed due to host controller or device error @return EFI_DEVICE_ERROR The failed due to host controller or device error
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcSyncInterruptTransfer ( EhcSyncInterruptTransfer (
@@ -1201,8 +1182,8 @@ ON_EXIT:
Submits isochronous transfer to a target USB device. Submits isochronous transfer to a target USB device.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param DeviceAddress Target device address @param DeviceAddress Target device address.
@param EndPointAddress End point address with its direction @param EndPointAddress End point address with its direction.
@param DeviceSpeed Device speed, Low speed device doesn't support this @param DeviceSpeed Device speed, Low speed device doesn't support this
type. type.
@param MaximumPacketLength Maximum packet size that the endpoint is capable of @param MaximumPacketLength Maximum packet size that the endpoint is capable of
@@ -1211,14 +1192,13 @@ ON_EXIT:
@param Data Array of pointers to the buffers of data that will @param Data Array of pointers to the buffers of data that will
be transmitted to USB device or received from USB be transmitted to USB device or received from USB
device. device.
@param DataLength The size, in bytes, of the data buffer @param DataLength The size, in bytes, of the data buffer.
@param Translator Transaction translator to use. @param Translator Transaction translator to use.
@param TransferResult Variable to receive the transfer result @param TransferResult Variable to receive the transfer result.
@return EFI_UNSUPPORTED : Isochronous transfer is unsupported. @return EFI_UNSUPPORTED Isochronous transfer is unsupported.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcIsochronousTransfer ( EhcIsochronousTransfer (
@@ -1242,8 +1222,8 @@ EhcIsochronousTransfer (
Submits Async isochronous transfer to a target USB device. Submits Async isochronous transfer to a target USB device.
@param This This EFI_USB2_HC_PROTOCOL instance. @param This This EFI_USB2_HC_PROTOCOL instance.
@param DeviceAddress Target device address @param DeviceAddress Target device address.
@param EndPointAddress End point address with its direction @param EndPointAddress End point address with its direction.
@param DeviceSpeed Device speed, Low speed device doesn't support this @param DeviceSpeed Device speed, Low speed device doesn't support this
type. type.
@param MaximumPacketLength Maximum packet size that the endpoint is capable of @param MaximumPacketLength Maximum packet size that the endpoint is capable of
@@ -1252,16 +1232,15 @@ EhcIsochronousTransfer (
@param Data Array of pointers to the buffers of data that will @param Data Array of pointers to the buffers of data that will
be transmitted to USB device or received from USB be transmitted to USB device or received from USB
device. device.
@param DataLength The size, in bytes, of the data buffer @param DataLength The size, in bytes, of the data buffer.
@param Translator Transaction translator to use. @param Translator Transaction translator to use.
@param IsochronousCallBack Function to be called when the transfer complete @param IsochronousCallBack Function to be called when the transfer complete.
@param Context Context passed to the call back function as @param Context Context passed to the call back function as
parameter parameter.
@return EFI_UNSUPPORTED : Isochronous transfer isn't supported @return EFI_UNSUPPORTED Isochronous transfer isn't supported.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcAsyncIsochronousTransfer ( EhcAsyncIsochronousTransfer (
@@ -1281,29 +1260,22 @@ EhcAsyncIsochronousTransfer (
return EFI_UNSUPPORTED; return EFI_UNSUPPORTED;
} }
/**
Entry point for EFI drivers.
@param ImageHandle EFI_HANDLE.
@param SystemTable EFI_SYSTEM_TABLE.
@return EFI_SUCCESS Success.
EFI_DEVICE_ERROR Fail.
**/
EFI_STATUS EFI_STATUS
EFIAPI EFIAPI
EhcDriverEntryPoint ( EhcDriverEntryPoint (
IN EFI_HANDLE ImageHandle, IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable IN EFI_SYSTEM_TABLE *SystemTable
) )
/*++
Routine Description:
Entry point for EFI drivers.
Arguments:
ImageHandle - EFI_HANDLE
SystemTable - EFI_SYSTEM_TABLE
Returns:
EFI_SUCCESS Success
EFI_DEVICE_ERROR Fail
--*/
{ {
return EfiLibInstallDriverBindingComponentName2 ( return EfiLibInstallDriverBindingComponentName2 (
ImageHandle, ImageHandle,
@@ -1322,11 +1294,11 @@ Returns:
be supported. be supported.
@param This Protocol instance pointer. @param This Protocol instance pointer.
@param Controlle Handle of device to test @param Controller Handle of device to test.
@param RemainingDevicePath Not used @param RemainingDevicePath Not used.
@return EFI_SUCCESS : This driver supports this device. @return EFI_SUCCESS This driver supports this device.
@return EFI_UNSUPPORTED : This driver does not support this device. @return EFI_UNSUPPORTED This driver does not support this device.
**/ **/
EFI_STATUS EFI_STATUS
@@ -1393,16 +1365,15 @@ ON_EXIT:
/** /**
Create and initialize a USB2_HC_DEV Create and initialize a USB2_HC_DEV.
@param PciIo The PciIo on this device @param PciIo The PciIo on this device.
@param OriginalPciAttributes Original PCI attributes @param OriginalPciAttributes Original PCI attributes.
@return The allocated and initialized USB2_HC_DEV structure @return The allocated and initialized USB2_HC_DEV structure if created,
@return if created, otherwise NULL. otherwise NULL.
**/ **/
STATIC
USB2_HC_DEV * USB2_HC_DEV *
EhcCreateUsb2Hc ( EhcCreateUsb2Hc (
IN EFI_PCI_IO_PROTOCOL *PciIo, IN EFI_PCI_IO_PROTOCOL *PciIo,
@@ -1471,16 +1442,16 @@ EhcCreateUsb2Hc (
/** /**
Starting the Usb EHCI Driver Starting the Usb EHCI Driver.
@param This Protocol instance pointer. @param This Protocol instance pointer.
@param Controller Handle of device to test @param Controller Handle of device to test.
@param RemainingDevicePath Not used @param RemainingDevicePath Not used.
@return EFI_SUCCESS : supports this device. @return EFI_SUCCESS supports this device.
@return EFI_UNSUPPORTED : do not support this device. @return EFI_UNSUPPORTED do not support this device.
@return EFI_DEVICE_ERROR : cannot be started due to device Error @return EFI_DEVICE_ERROR cannot be started due to device Error.
@return EFI_OUT_OF_RESOURCES : cannot allocate resources @return EFI_OUT_OF_RESOURCES cannot allocate resources.
**/ **/
EFI_STATUS EFI_STATUS
@@ -1668,12 +1639,12 @@ CLOSE_PCIIO:
created by this driver. created by this driver.
@param This Protocol instance pointer. @param This Protocol instance pointer.
@param Controller Handle of device to stop driver on @param Controller Handle of device to stop driver on.
@param NumberOfChildren Number of Children in the ChildHandleBuffer @param NumberOfChildren Number of Children in the ChildHandleBuffer.
@param ChildHandleBuffer List of handles for the children we need to stop. @param ChildHandleBuffer List of handles for the children we need to stop.
@return EFI_SUCCESS Success @return EFI_SUCCESS Success.
@return EFI_DEVICE_ERROR Fail @return EFI_DEVICE_ERROR Fail.
**/ **/
EFI_STATUS EFI_STATUS
@@ -1734,7 +1705,7 @@ EhcDriverBindingStop (
EhcFreeSched (Ehc); EhcFreeSched (Ehc);
if (Ehc->ControllerNameTable) { if (Ehc->ControllerNameTable != NULL) {
FreeUnicodeStringTable (Ehc->ControllerNameTable); FreeUnicodeStringTable (Ehc->ControllerNameTable);
} }

View File

@@ -1,5 +1,7 @@
/** @file /** @file
Provides some data struct used by EHCI controller driver.
Copyright (c) 2006 - 2007, Intel Corporation Copyright (c) 2006 - 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,15 +11,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
Ehci.h
Abstract:
Revision History
**/ **/
#ifndef _EFI_EHCI_H_ #ifndef _EFI_EHCI_H_
@@ -48,7 +41,7 @@ typedef struct _USB2_HC_DEV USB2_HC_DEV;
#include "EhciSched.h" #include "EhciSched.h"
#include "EhciDebug.h" #include "EhciDebug.h"
enum { typedef enum {
EHC_1_MICROSECOND = 1, EHC_1_MICROSECOND = 1,
EHC_1_MILLISECOND = 1000 * EHC_1_MICROSECOND, EHC_1_MILLISECOND = 1000 * EHC_1_MICROSECOND,
EHC_1_SECOND = 1000 * EHC_1_MILLISECOND, EHC_1_SECOND = 1000 * EHC_1_MILLISECOND,
@@ -69,16 +62,17 @@ enum {
// and the unit of Async is 100us, means 50ms as interval. // and the unit of Async is 100us, means 50ms as interval.
// //
EHC_SYNC_POLL_INTERVAL = 20 * EHC_1_MICROSECOND, EHC_SYNC_POLL_INTERVAL = 20 * EHC_1_MICROSECOND,
EHC_ASYNC_POLL_INTERVAL = 50 * 10000U, EHC_ASYNC_POLL_INTERVAL = 50 * 10000U
} EHC_TIMEOUT_EXPERIENCE_VALUE;
// //
// EHC raises TPL to TPL_NOTIFY to serialize all its operations // EHC raises TPL to TPL_NOTIFY to serialize all its operations
// to protect shared data structures. // to protect shared data structures.
// //
EHC_TPL = TPL_NOTIFY, #define EHC_TPL TPL_NOTIFY
USB2_HC_DEV_SIGNATURE = EFI_SIGNATURE_32 ('e', 'h', 'c', 'i') #define USB2_HC_DEV_SIGNATURE EFI_SIGNATURE_32 ('e', 'h', 'c', 'i')
};
// //
//Iterate through the doule linked list. NOT delete safe //Iterate through the doule linked list. NOT delete safe

View File

@@ -1,5 +1,7 @@
/** @file /** @file
This file provides the information dump support for EHCI when in debug mode.
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,30 +11,19 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciDebug.c
Abstract:
This file provides the information dump support for EHCI when in debug mode.
Revision History
**/ **/
#include "Ehci.h" #include "Ehci.h"
/** /**
Dump the status byte in QTD/QH to a more friendly Dump the status byte in QTD/QH to a more friendly format.
format
@param State The state in the QTD/QH @param State The state in the QTD/QH.
@return None @return None.
**/ **/
STATIC
VOID VOID
EhcDumpStatus ( EhcDumpStatus (
IN UINT32 State IN UINT32 State
@@ -75,10 +66,10 @@ EhcDumpStatus (
/** /**
Dump the fields of a QTD Dump the fields of a QTD.
@param Qtd The QTD to dump @param Qtd The QTD to dump.
@param Msg The message to print before the dump @param Msg The message to print before the dump.
@return None @return None
@@ -129,11 +120,11 @@ EhcDumpQtd (
/** /**
Dump the queue head Dump the queue head.
@param Qh The queue head to dump @param Qh The queue head to dump.
@param Msg The message to print before the dump @param Msg The message to print before the dump.
@param DumpBuf Whether to dump the memory buffer of the associated QTD @param DumpBuf Whether to dump the memory buffer of the associated QTD.
@return None @return None
@@ -218,12 +209,12 @@ EhcDumpQh (
/** /**
Dump the buffer in the form of hex Dump the buffer in the form of hex.
@param Buf The buffer to dump @param Buf The buffer to dump.
@param Len The length of buffer @param Len The length of buffer.
@return None @return None.
**/ **/
VOID VOID

View File

@@ -26,12 +26,12 @@ Revision History
/** /**
Dump the fields of a QTD Dump the fields of a QTD.
@param Qtd The QTD to dump @param Qtd The QTD to dump.
@param Msg The message to print before the dump @param Msg The message to print before the dump.
@return None @return None.
**/ **/
VOID VOID
@@ -44,13 +44,13 @@ EhcDumpQtd (
/** /**
Dump the queue head Dump the queue head.
@param Qh The queue head to dump @param Qh The queue head to dump.
@param Msg The message to print before the dump @param Msg The message to print before the dump.
@param DumpBuf Whether to dump the memory buffer of the associated QTD @param DumpBuf Whether to dump the memory buffer of the associated QTD.
@return None @return None.
**/ **/
VOID VOID
@@ -64,12 +64,12 @@ EhcDumpQh (
/** /**
Dump the buffer in the form of hex Dump the buffer in the form of hex.
@param Buf The buffer to dump @param Buf The buffer to dump.
@param Len The length of buffer @param Len The length of buffer.
@return None @return None.
**/ **/
VOID VOID

View File

@@ -1,5 +1,7 @@
/** @file /** @file
The EHCI register operation routines.
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,17 +11,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciReg.c
Abstract:
The EHCI register operation routines.
Revision History
**/ **/
@@ -27,12 +18,13 @@ Revision History
/** /**
Read EHCI capability register Read EHCI capability register.
@param Ehc The Ehc device @param Ehc The EHCI device.
@param Offset Capability register address @param Offset Capability register address.
@return The register content read @return The register content read.
@retval If err, return 0xffff.
**/ **/
UINT32 UINT32
@@ -63,12 +55,13 @@ EhcReadCapRegister (
/** /**
Read Ehc Operation register Read EHCI Operation register.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Offset The operation register offset @param Offset The operation register offset.
@return The register content read @return The register content read.
@retval If err, return 0xffff.
**/ **/
UINT32 UINT32
@@ -101,13 +94,13 @@ EhcReadOpReg (
/** /**
Write the data to the EHCI operation register Write the data to the EHCI operation register.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Offset EHCI operation register offset @param Offset EHCI operation register offset.
@param Data The data to write @param Data The data to write.
@return None @return None.
**/ **/
VOID VOID
@@ -137,16 +130,15 @@ EhcWriteOpReg (
/** /**
Set one bit of the operational register while keeping other bits Set one bit of the operational register while keeping other bits.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Offset The offset of the operational register @param Offset The offset of the operational register.
@param Bit The bit mask of the register to set @param Bit The bit mask of the register to set.
@return None @return None.
**/ **/
STATIC
VOID VOID
EhcSetOpRegBit ( EhcSetOpRegBit (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -163,16 +155,15 @@ EhcSetOpRegBit (
/** /**
Clear one bit of the operational register while keeping other bits Clear one bit of the operational register while keeping other bits.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Offset The offset of the operational register @param Offset The offset of the operational register.
@param Bit The bit mask of the register to clear @param Bit The bit mask of the register to clear.
@return None @return None.
**/ **/
STATIC
VOID VOID
EhcClearOpRegBit ( EhcClearOpRegBit (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -190,19 +181,18 @@ EhcClearOpRegBit (
/** /**
Wait the operation register's bit as specified by Bit Wait the operation register's bit as specified by Bit
to become set (or clear) to become set (or clear).
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Offset The offset of the operation register @param Offset The offset of the operation register.
@param Bit The bit of the register to wait for @param Bit The bit of the register to wait for.
@param WaitToSet Wait the bit to set or clear @param WaitToSet Wait the bit to set or clear.
@param Timeout The time to wait before abort (in millisecond) @param Timeout The time to wait before abort (in millisecond).
@retval EFI_SUCCESS The bit successfully changed by host controller @retval EFI_SUCCESS The bit successfully changed by host controller.
@retval EFI_TIMEOUT The time out occurred @retval EFI_TIMEOUT The time out occurred.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EhcWaitOpRegBit ( EhcWaitOpRegBit (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -228,11 +218,11 @@ EhcWaitOpRegBit (
/** /**
Add support for UEFI Over Legacy (UoL) feature, stop Add support for UEFI Over Legacy (UoL) feature, stop
the legacy USB SMI support the legacy USB SMI support.
@param Ehc The EHCI device. @param Ehc The EHCI device.
@return None @return None.
**/ **/
VOID VOID
@@ -258,7 +248,7 @@ EhcClearLegacySupport (
PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value); PciIo->Pci.Write (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value);
TimeOut = 40; TimeOut = 40;
while (TimeOut--) { while (TimeOut-- != 0) {
gBS->Stall (500); gBS->Stall (500);
PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value); PciIo->Pci.Read (PciIo, EfiPciIoWidthUint32, ExtendCap, 1, &Value);
@@ -278,11 +268,11 @@ EhcClearLegacySupport (
Set door bell and wait it to be ACKed by host controller. Set door bell and wait it to be ACKed by host controller.
This function is used to synchronize with the hardware. This function is used to synchronize with the hardware.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout The time to wait before abort (in millisecond, ms) @param Timeout The time to wait before abort (in millisecond, ms).
@return EFI_SUCCESS : Synchronized with the hardware @retval EFI_SUCCESS Synchronized with the hardware.
@return EFI_TIMEOUT : Time out happened while waiting door bell to set @retval EFI_TIMEOUT Time out happened while waiting door bell to set.
**/ **/
EFI_STATUS EFI_STATUS
@@ -314,11 +304,11 @@ EhcSetAndWaitDoorBell (
/** /**
Clear all the interrutp status bits, these bits Clear all the interrutp status bits, these bits
are Write-Clean are Write-Clean.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return None @return None.
**/ **/
VOID VOID
@@ -334,14 +324,13 @@ EhcAckAllInterrupt (
Enable the periodic schedule then wait EHC to Enable the periodic schedule then wait EHC to
actually enable it. actually enable it.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout The time to wait before abort (in millisecond, ms) @param Timeout The time to wait before abort (in millisecond, ms).
@return EFI_SUCCESS : The periodical schedule is enabled @retval EFI_SUCCESS The periodical schedule is enabled.
@return EFI_TIMEOUT : Time out happened while enabling periodic schedule @retval EFI_TIMEOUT Time out happened while enabling periodic schedule.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EhcEnablePeriodSchd ( EhcEnablePeriodSchd (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -357,15 +346,14 @@ EhcEnablePeriodSchd (
} }
/** /**
Disable periodic schedule Disable periodic schedule.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort (in millisecond, ms) @param Timeout Time to wait before abort (in millisecond, ms).
@return EFI_SUCCESS : Periodic schedule is disabled. @retval EFI_SUCCESS Periodic schedule is disabled.
@return EFI_DEVICE_ERROR : Fail to disable periodic schedule @retval EFI_DEVICE_ERROR Fail to disable periodic schedule.
**/ **/
EFI_STATUS EFI_STATUS
@@ -385,16 +373,15 @@ EhcDisablePeriodSchd (
/** /**
Enable asynchrounous schedule Enable asynchrounous schedule.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort @param Timeout Time to wait before abort.
@return EFI_SUCCESS : The EHCI asynchronous schedule is enabled @retval EFI_SUCCESS The EHCI asynchronous schedule is enabled.
@return Others : Failed to enable the asynchronous scheudle @return Others Failed to enable the asynchronous scheudle.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EhcEnableAsyncSchd ( EhcEnableAsyncSchd (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -412,13 +399,13 @@ EhcEnableAsyncSchd (
/** /**
Disable asynchrounous schedule Disable asynchrounous schedule.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort (in millisecond, ms) @param Timeout Time to wait before abort (in millisecond, ms).
@return EFI_SUCCESS : The asynchronous schedule is disabled @retval EFI_SUCCESS The asynchronous schedule is disabled.
@return Others : Failed to disable the asynchronous schedule @return Others Failed to disable the asynchronous schedule.
**/ **/
EFI_STATUS EFI_STATUS
@@ -438,12 +425,12 @@ EhcDisableAsyncSchd (
/** /**
Whether Ehc is halted Whether Ehc is halted.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return TRUE : The controller is halted @retval TRUE The controller is halted.
@return FALSE : It isn't halted @retval FALSE It isn't halted.
**/ **/
BOOLEAN BOOLEAN
@@ -456,12 +443,12 @@ EhcIsHalt (
/** /**
Whether system error occurred Whether system error occurred.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return TRUE : System error happened @return TRUE System error happened.
@return FALSE : No system error @return FALSE No system error.
**/ **/
BOOLEAN BOOLEAN
@@ -474,13 +461,13 @@ EhcIsSysError (
/** /**
Reset the host controller Reset the host controller.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort (in millisecond, ms) @param Timeout Time to wait before abort (in millisecond, ms).
@return EFI_SUCCESS : The host controller is reset @retval EFI_SUCCESS The host controller is reset.
@return Others : Failed to reset the host @return Others Failed to reset the host.
**/ **/
EFI_STATUS EFI_STATUS
@@ -509,13 +496,13 @@ EhcResetHC (
/** /**
Halt the host controller Halt the host controller.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort @param Timeout Time to wait before abort.
@return EFI_SUCCESS : The EHCI is halt @retval EFI_SUCCESS The EHCI is halt.
@return EFI_TIMEOUT : Failed to halt the controller before Timeout @retval EFI_TIMEOUT Failed to halt the controller before Timeout.
**/ **/
EFI_STATUS EFI_STATUS
@@ -533,13 +520,13 @@ EhcHaltHC (
/** /**
Set the EHCI to run Set the EHCI to run.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort @param Timeout Time to wait before abort.
@return EFI_SUCCESS : The EHCI is running @retval EFI_SUCCESS The EHCI is running.
@return Others : Failed to set the EHCI to run @return Others Failed to set the EHCI to run.
**/ **/
EFI_STATUS EFI_STATUS
@@ -558,17 +545,17 @@ EhcRunHC (
/** /**
Initialize the HC hardware. Initialize the HC hardware.
EHCI spec lists the five things to do to initialize the hardware EHCI spec lists the five things to do to initialize the hardware:
1. Program CTRLDSSEGMENT 1. Program CTRLDSSEGMENT
2. Set USBINTR to enable interrupts 2. Set USBINTR to enable interrupts
3. Set periodic list base 3. Set periodic list base
4. Set USBCMD, interrupt threshold, frame list size etc 4. Set USBCMD, interrupt threshold, frame list size etc
5. Write 1 to CONFIGFLAG to route all ports to EHCI 5. Write 1 to CONFIGFLAG to route all ports to EHCI
@param Ehc The EHCI device @param Ehc The EHCI device.
@return EFI_SUCCESS : The EHCI has come out of halt state @return EFI_SUCCESS The EHCI has come out of halt state.
@return EFI_TIMEOUT : Time out happened @return EFI_TIMEOUT Time out happened.
**/ **/
EFI_STATUS EFI_STATUS

View File

@@ -1,5 +1,7 @@
/** @file /** @file
This file contains the definination for host controller register operation routines.
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,23 +11,13 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciReg.h
Abstract:
This file contains the definination for host controller register operation routines
Revision History
**/ **/
#ifndef _EFI_EHCI_REG_H_ #ifndef _EFI_EHCI_REG_H_
#define _EFI_EHCI_REG_H_ #define _EFI_EHCI_REG_H_
enum { typedef enum {
// //
// Capability register offset // Capability register offset
// //
@@ -94,7 +86,7 @@ enum {
EHC_PCI_CLASSC = 0x09, EHC_PCI_CLASSC = 0x09,
EHC_PCI_CLASSC_PI = 0x20, EHC_PCI_CLASSC_PI = 0x20,
EHC_BAR_INDEX = 0 /* how many bytes away from USB_BASE to 0x10 */ EHC_BAR_INDEX = 0 /* how many bytes away from USB_BASE to 0x10 */
}; }EHCI_REGISTER_OFFSET;
#define EHC_LINK_TERMINATED(Link) (((Link) & 0x01) != 0) #define EHC_LINK_TERMINATED(Link) (((Link) & 0x01) != 0)
@@ -123,38 +115,30 @@ typedef struct {
} USB_CLASSC; } USB_CLASSC;
#pragma pack() #pragma pack()
/**
Read EHCI capability register.
@param Ehc The EHCI device.
@param Offset Capability register address.
@return The register content.
**/
UINT32 UINT32
EhcReadCapRegister ( EhcReadCapRegister (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
IN UINT32 Offset IN UINT32 Offset
) )
/*++
Routine Description:
Read EHCI capability register
Arguments:
Ehc - The Ehc device
Offset - Capability register address
Returns:
The register content read
--*/
; ;
/** /**
Read Ehc Operation register Read EHCI Operation register.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Offset The operation register offset @param Offset The operation register offset.
@return The register content read @return The register content.
**/ **/
UINT32 UINT32
@@ -166,13 +150,13 @@ EhcReadOpReg (
/** /**
Write the data to the EHCI operation register Write the data to the EHCI operation register.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Offset EHCI operation register offset @param Offset EHCI operation register offset.
@param Data The data to write @param Data The data to write.
@return None @return None.
**/ **/
VOID VOID
@@ -186,11 +170,11 @@ EhcWriteOpReg (
/** /**
Add support for UEFI Over Legacy (UoL) feature, stop Add support for UEFI Over Legacy (UoL) feature, stop
the legacy USB SMI support the legacy USB SMI support.
@param Ehc The EHCI device. @param Ehc The EHCI device.
@return None @return None.
**/ **/
VOID VOID
@@ -205,11 +189,11 @@ EhcClearLegacySupport (
Set door bell and wait it to be ACKed by host controller. Set door bell and wait it to be ACKed by host controller.
This function is used to synchronize with the hardware. This function is used to synchronize with the hardware.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout The time to wait before abort (in millisecond, ms) @param Timeout The time to wait before abort (in millisecond, ms).
@return EFI_SUCCESS : Synchronized with the hardware @retval EFI_SUCCESS Synchronized with the hardware.
@return EFI_TIMEOUT : Time out happened while waiting door bell to set @retval EFI_TIMEOUT Time out happened while waiting door bell to set.
**/ **/
EFI_STATUS EFI_STATUS
@@ -221,12 +205,11 @@ EhcSetAndWaitDoorBell (
/** /**
Clear all the interrutp status bits, these bits Clear all the interrutp status bits, these bits are Write-Clean.
are Write-Clean
@param Ehc The EHCI device @param Ehc The EHCI device.
@return None @return None.
**/ **/
VOID VOID
@@ -238,12 +221,12 @@ EhcAckAllInterrupt (
/** /**
Whether Ehc is halted Whether Ehc is halted.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return TRUE : The controller is halted @retval TRUE The controller is halted.
@return FALSE : It isn't halted @retval FALSE It isn't halted.
**/ **/
BOOLEAN BOOLEAN
@@ -254,12 +237,12 @@ EhcIsHalt (
/** /**
Whether system error occurred Whether system error occurred.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return TRUE : System error happened @retval TRUE System error happened.
@return FALSE : No system error @retval FALSE No system error.
**/ **/
BOOLEAN BOOLEAN
@@ -269,15 +252,14 @@ EhcIsSysError (
; ;
/** /**
Reset the host controller Reset the host controller.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort (in millisecond, ms) @param Timeout Time to wait before abort (in millisecond, ms).
@return EFI_SUCCESS : The host controller is reset @retval EFI_SUCCESS The host controller is reset.
@return Others : Failed to reset the host @return Others Failed to reset the host.
**/ **/
EFI_STATUS EFI_STATUS
@@ -288,15 +270,14 @@ EhcResetHC (
; ;
/** /**
Halt the host controller Halt the host controller.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort @param Timeout Time to wait before abort.
@return EFI_SUCCESS : The EHCI is halt @return EFI_SUCCESS The EHCI is halt.
@return EFI_TIMEOUT : Failed to halt the controller before Timeout @return EFI_TIMEOUT Failed to halt the controller before Timeout.
**/ **/
EFI_STATUS EFI_STATUS
@@ -307,15 +288,14 @@ EhcHaltHC (
; ;
/** /**
Set the EHCI to run Set the EHCI to run.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Timeout Time to wait before abort @param Timeout Time to wait before abort.
@return EFI_SUCCESS : The EHCI is running @return EFI_SUCCESS The EHCI is running.
@return Others : Failed to set the EHCI to run @return Others Failed to set the EHCI to run.
**/ **/
EFI_STATUS EFI_STATUS
@@ -329,17 +309,17 @@ EhcRunHC (
/** /**
Initialize the HC hardware. Initialize the HC hardware.
EHCI spec lists the five things to do to initialize the hardware EHCI spec lists the five things to do to initialize the hardware:
1. Program CTRLDSSEGMENT 1. Program CTRLDSSEGMENT
2. Set USBINTR to enable interrupts 2. Set USBINTR to enable interrupts
3. Set periodic list base 3. Set periodic list base
4. Set USBCMD, interrupt threshold, frame list size etc 4. Set USBCMD, interrupt threshold, frame list size etc
5. Write 1 to CONFIGFLAG to route all ports to EHCI 5. Write 1 to CONFIGFLAG to route all ports to EHCI
@param Ehc The EHCI device @param Ehc The EHCI device.
@return EFI_SUCCESS : The EHCI has come out of halt state @return EFI_SUCCESS The EHCI has come out of halt state.
@return EFI_TIMEOUT : Time out happened @return EFI_TIMEOUT Time out happened.
**/ **/
EFI_STATUS EFI_STATUS

View File

@@ -1,5 +1,7 @@
/** @file /** @file
EHCI transfer scheduling routines.
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,31 +11,20 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciSched.c
Abstract:
EHCI transfer scheduling routines
Revision History
**/ **/
#include "Ehci.h" #include "Ehci.h"
/** /**
Create helper QTD/QH for the EHCI device Create helper QTD/QH for the EHCI device.
@param Ehc The EHCI device @param Ehc The EHCI device.
@retval EFI_OUT_OF_RESOURCES Failed to allocate resource for helper QTD/QH @retval EFI_OUT_OF_RESOURCES Failed to allocate resource for helper QTD/QH.
@retval EFI_SUCCESS Helper QH/QTD are created @retval EFI_SUCCESS Helper QH/QTD are created.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EhcCreateHelpQ ( EhcCreateHelpQ (
IN USB2_HC_DEV *Ehc IN USB2_HC_DEV *Ehc
@@ -102,14 +93,13 @@ EhcCreateHelpQ (
} }
/** /**
Initialize the schedule data structure such as frame list Initialize the schedule data structure such as frame list.
@param Ehc The EHCI device to init schedule data for @param Ehc The EHCI device to init schedule data.
@retval EFI_OUT_OF_RESOURCES Failed to allocate resource to init schedule data @retval EFI_OUT_OF_RESOURCES Failed to allocate resource to init schedule data.
@retval EFI_SUCCESS The schedule data is initialized @retval EFI_SUCCESS The schedule data is initialized.
**/ **/
EFI_STATUS EFI_STATUS
@@ -213,13 +203,12 @@ EhcInitSched (
} }
/** /**
Free the schedule data. It may be partially initialized. Free the schedule data. It may be partially initialized.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return None @return None.
**/ **/
VOID VOID
@@ -269,7 +258,6 @@ EhcFreeSched (
} }
/** /**
Link the queue head to the asynchronous schedule list. Link the queue head to the asynchronous schedule list.
UEFI only supports one CTRL/BULK transfer at a time UEFI only supports one CTRL/BULK transfer at a time
@@ -277,10 +265,10 @@ EhcFreeSched (
management: A reclamation header is always linked to management: A reclamation header is always linked to
the AsyncListAddr, the only active QH is appended to it. the AsyncListAddr, the only active QH is appended to it.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to link @param Qh The queue head to link.
@return None @return None.
**/ **/
VOID VOID
@@ -308,12 +296,12 @@ EhcLinkQhToAsync (
/** /**
Unlink a queue head from the asynchronous schedule list. Unlink a queue head from the asynchronous schedule list.
Need to synchronize with hardware Need to synchronize with hardware.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to unlink @param Qh The queue head to unlink.
@return None @return None.
**/ **/
VOID VOID
@@ -355,10 +343,10 @@ EhcUnlinkQhFromAsync (
schedule frame list. This code is very much the same as schedule frame list. This code is very much the same as
that in UHCI. that in UHCI.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to link @param Qh The queue head to link.
@return None @return None.
**/ **/
VOID VOID
@@ -454,12 +442,12 @@ EhcLinkQhToPeriod (
/** /**
Unlink an interrupt queue head from the periodic Unlink an interrupt queue head from the periodic
schedule frame list schedule frame list.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to unlink @param Qh The queue head to unlink.
@return None @return None.
**/ **/
VOID VOID
@@ -514,18 +502,16 @@ EhcUnlinkQhFromPeriod (
} }
/** /**
Check the URB's execution result and update the URB's Check the URB's execution result and update the URB's
result accordingly. result accordingly.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Urb The URB to check result @param Urb The URB to check result.
@return Whether the result of URB transfer is finialized. @return Whether the result of URB transfer is finialized.
**/ **/
STATIC
BOOLEAN BOOLEAN
EhcCheckUrbResult ( EhcCheckUrbResult (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -637,13 +623,13 @@ ON_EXIT:
/** /**
Execute the transfer by polling the URB. This is a synchronous operation. Execute the transfer by polling the URB. This is a synchronous operation.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Urb The URB to execute @param Urb The URB to execute.
@param TimeOut The time to wait before abort, in millisecond. @param TimeOut The time to wait before abort, in millisecond.
@return EFI_DEVICE_ERROR : The transfer failed due to transfer error @return EFI_DEVICE_ERROR The transfer failed due to transfer error.
@return EFI_TIMEOUT : The transfer failed due to time out @return EFI_TIMEOUT The transfer failed due to time out.
@return EFI_SUCCESS : The transfer finished OK @return EFI_SUCCESS The transfer finished OK.
**/ **/
EFI_STATUS EFI_STATUS
@@ -691,15 +677,15 @@ EhcExecTransfer (
/** /**
Delete a single asynchronous interrupt transfer for Delete a single asynchronous interrupt transfer for
the device and endpoint the device and endpoint.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param DevAddr The address of the target device @param DevAddr The address of the target device.
@param EpNum The endpoint of the target @param EpNum The endpoint of the target.
@param DataToggle Return the next data toggle to use @param DataToggle Return the next data toggle to use.
@retval EFI_SUCCESS An asynchronous transfer is removed @retval EFI_SUCCESS An asynchronous transfer is removed.
@retval EFI_NOT_FOUND No transfer for the device is found @retval EFI_NOT_FOUND No transfer for the device is found.
**/ **/
EFI_STATUS EFI_STATUS
@@ -715,7 +701,7 @@ EhciDelAsyncIntTransfer (
URB *Urb; URB *Urb;
EFI_USB_DATA_DIRECTION Direction; EFI_USB_DATA_DIRECTION Direction;
Direction = ((EpNum & 0x80) ? EfiUsbDataIn : EfiUsbDataOut); Direction = (((EpNum & 0x80) != 0) ? EfiUsbDataIn : EfiUsbDataOut);
EpNum &= 0x0F; EpNum &= 0x0F;
EFI_LIST_FOR_EACH_SAFE (Entry, Next, &Ehc->AsyncIntTransfers) { EFI_LIST_FOR_EACH_SAFE (Entry, Next, &Ehc->AsyncIntTransfers) {
@@ -744,11 +730,11 @@ EhciDelAsyncIntTransfer (
/** /**
Remove all the asynchronous interrutp transfers Remove all the asynchronous interrutp transfers.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return None @return None.
**/ **/
VOID VOID
@@ -771,30 +757,23 @@ EhciDelAllAsyncIntTransfers (
} }
} }
STATIC
/**
Flush data from PCI controller specific address to mapped system
memory address.
@param Ehc The EHCI device.
@param Urb The URB to unmap.
@retval EFI_SUCCESS Success to flush data to mapped system memory.
@retval EFI_DEVICE_ERROR Fail to flush data to mapped system memory.
**/
EFI_STATUS EFI_STATUS
EhcFlushAsyncIntMap ( EhcFlushAsyncIntMap (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
IN URB *Urb IN URB *Urb
) )
/*++
Routine Description:
Flush data from PCI controller specific address to mapped system
memory address.
Arguments:
Ehc - The EHCI device
Urb - The URB to unmap
Returns:
EFI_SUCCESS - Success to flush data to mapped system memory
EFI_DEVICE_ERROR - Fail to flush data to mapped system memory
--*/
{ {
EFI_STATUS Status; EFI_STATUS Status;
EFI_PHYSICAL_ADDRESS PhyAddr; EFI_PHYSICAL_ADDRESS PhyAddr;
@@ -833,16 +812,14 @@ ON_ERROR:
} }
/** /**
Update the queue head for next round of asynchronous transfer Update the queue head for next round of asynchronous transfer.
@param Urb The URB to update @param Urb The URB to update.
@return None @return None.
**/ **/
STATIC
VOID VOID
EhcUpdateAsyncRequest ( EhcUpdateAsyncRequest (
IN URB *Urb IN URB *Urb
@@ -913,12 +890,12 @@ EhcUpdateAsyncRequest (
/** /**
Interrupt transfer periodic check handler Interrupt transfer periodic check handler.
@param Event Interrupt event @param Event Interrupt event.
@param Context Pointer to USB2_HC_DEV @param Context Pointer to USB2_HC_DEV.
@return None @return None.
**/ **/
VOID VOID

View File

@@ -1,5 +1,7 @@
/** @file /** @file
This file contains the definination for host controller schedule routines.
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,49 +11,32 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciSched.h
Abstract:
This file contains the definination for host controller schedule routines
Revision History
**/ **/
#ifndef _EFI_EHCI_SCHED_H_ #ifndef _EFI_EHCI_SCHED_H_
#define _EFI_EHCI_SCHED_H_ #define _EFI_EHCI_SCHED_H_
/**
Initialize the schedule data structure such as frame list.
@param Ehc The EHCI device to init schedule data for.
@retval EFI_OUT_OF_RESOURCES Failed to allocate resource to init schedule data.
@retval EFI_SUCCESS The schedule data is initialized.
**/
EFI_STATUS EFI_STATUS
EhcInitSched ( EhcInitSched (
IN USB2_HC_DEV *Ehc IN USB2_HC_DEV *Ehc
) )
/*++
Routine Description:
Initialize the schedule data structure such as frame list
Arguments:
Ehc - The EHCI device to init schedule data for
Returns:
EFI_OUT_OF_RESOURCES - Failed to allocate resource to init schedule data
EFI_SUCCESS - The schedule data is initialized
--*/
; ;
/** /**
Free the schedule data. It may be partially initialized. Free the schedule data. It may be partially initialized.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return None @return None
@@ -63,7 +48,6 @@ EhcFreeSched (
; ;
/** /**
Link the queue head to the asynchronous schedule list. Link the queue head to the asynchronous schedule list.
UEFI only supports one CTRL/BULK transfer at a time UEFI only supports one CTRL/BULK transfer at a time
@@ -71,10 +55,10 @@ EhcFreeSched (
management: A reclamation header is always linked to management: A reclamation header is always linked to
the AsyncListAddr, the only active QH is appended to it. the AsyncListAddr, the only active QH is appended to it.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to link @param Qh The queue head to link.
@return None @return None.
**/ **/
VOID VOID
@@ -87,12 +71,12 @@ EhcLinkQhToAsync (
/** /**
Unlink a queue head from the asynchronous schedule list. Unlink a queue head from the asynchronous schedule list.
Need to synchronize with hardware Need to synchronize with hardware.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to unlink @param Qh The queue head to unlink.
@return None @return None.
**/ **/
VOID VOID
@@ -108,10 +92,10 @@ EhcUnlinkQhFromAsync (
schedule frame list. This code is very much the same as schedule frame list. This code is very much the same as
that in UHCI. that in UHCI.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to link @param Qh The queue head to link.
@return None @return None.
**/ **/
VOID VOID
@@ -124,12 +108,12 @@ EhcLinkQhToPeriod (
/** /**
Unlink an interrupt queue head from the periodic Unlink an interrupt queue head from the periodic
schedule frame list schedule frame list.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qh The queue head to unlink @param Qh The queue head to unlink.
@return None @return None.
**/ **/
VOID VOID
@@ -144,13 +128,13 @@ EhcUnlinkQhFromPeriod (
/** /**
Execute the transfer by polling the URB. This is a synchronous operation. Execute the transfer by polling the URB. This is a synchronous operation.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Urb The URB to execute @param Urb The URB to execute.
@param TimeOut The time to wait before abort, in millisecond. @param TimeOut The time to wait before abort, in millisecond.
@return EFI_DEVICE_ERROR : The transfer failed due to transfer error @retval EFI_DEVICE_ERROR The transfer failed due to transfer error.
@return EFI_TIMEOUT : The transfer failed due to time out @retval EFI_TIMEOUT The transfer failed due to time out.
@return EFI_SUCCESS : The transfer finished OK @retval EFI_SUCCESS The transfer finished OK.
**/ **/
EFI_STATUS EFI_STATUS
@@ -164,15 +148,15 @@ EhcExecTransfer (
/** /**
Delete a single asynchronous interrupt transfer for Delete a single asynchronous interrupt transfer for
the device and endpoint the device and endpoint.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param DevAddr The address of the target device @param DevAddr The address of the target device.
@param EpNum The endpoint of the target @param EpNum The endpoint of the target.
@param DataToggle Return the next data toggle to use @param DataToggle Return the next data toggle to use.
@retval EFI_SUCCESS An asynchronous transfer is removed @retval EFI_SUCCESS An asynchronous transfer is removed.
@retval EFI_NOT_FOUND No transfer for the device is found @retval EFI_NOT_FOUND No transfer for the device is found.
**/ **/
EFI_STATUS EFI_STATUS
@@ -186,11 +170,11 @@ EhciDelAsyncIntTransfer (
/** /**
Remove all the asynchronous interrutp transfers Remove all the asynchronous interrutp transfers.
@param Ehc The EHCI device @param Ehc The EHCI device.
@return None @return None.
**/ **/
VOID VOID
@@ -200,14 +184,13 @@ EhciDelAllAsyncIntTransfers (
; ;
/** /**
Interrupt transfer periodic check handler Interrupt transfer periodic check handler.
@param Event Interrupt event @param Event Interrupt event.
@param Context Pointer to USB2_HC_DEV @param Context Pointer to USB2_HC_DEV.
@return None @return None.
**/ **/
VOID VOID

View File

@@ -1,5 +1,8 @@
/** @file /** @file
This file contains URB request, each request is warpped in a
URB (Usb Request Block).
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,33 +12,22 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciUrb.c
Abstract:
This file contains URB request, each request is warpped in a
URB (Usb Request Block)
Revision History
**/ **/
#include "Ehci.h" #include "Ehci.h"
/** /**
Create a single QTD to hold the data Create a single QTD to hold the data.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Data Current data not associated with a QTD @param Data Current data not associated with a QTD.
@param DataLen The length of the data @param DataLen The length of the data.
@param PktId Packet ID to use in the QTD @param PktId Packet ID to use in the QTD.
@param Toggle Data toggle to use in the QTD @param Toggle Data toggle to use in the QTD.
@param MaxPacket Maximu packet length of the endpoint @param MaxPacket Maximu packet length of the endpoint.
@return Created QTD or NULL if failed to create one @return Created QTD or NULL if failed to create one.
**/ **/
EHC_QTD * EHC_QTD *
@@ -130,13 +122,12 @@ EhcCreateQtd (
2. Microframe S-mask 2. Microframe S-mask
3. Microframe C-mask 3. Microframe C-mask
@param Ep The queue head's related endpoint @param Ep The queue head's related endpoint.
@param QhHw The queue head to initialize @param QhHw The queue head to initialize.
@return None @return None.
**/ **/
STATIC
VOID VOID
EhcInitIntQh ( EhcInitIntQh (
IN USB_ENDPOINT *Ep, IN USB_ENDPOINT *Ep,
@@ -173,12 +164,12 @@ EhcInitIntQh (
/** /**
Allocate and initialize a EHCI queue head Allocate and initialize a EHCI queue head.
@param Ehci The EHCI device @param Ehci The EHCI device.
@param Ep The endpoint to create queue head for @param Ep The endpoint to create queue head for.
@return Created queue head or NULL if failed to create one @return Created queue head or NULL if failed to create one.
**/ **/
EHC_QH * EHC_QH *
@@ -258,21 +249,19 @@ EhcCreateQh (
} }
/** /**
Convert the poll interval from application to that Convert the poll interval from application to that
be used by EHCI interface data structure. Only need be used by EHCI interface data structure. Only need
to get the max 2^n that is less than interval. UEFI to get the max 2^n that is less than interval. UEFI
can't support high speed endpoint with a interval less can't support high speed endpoint with a interval less
than 8 microframe because interval is specified in than 8 microframe because interval is specified in
the unit of ms (millisecond) the unit of ms (millisecond).
@param Interval The interval to convert @param Interval The interval to convert.
@return The converted interval @return The converted interval.
**/ **/
STATIC
UINTN UINTN
EhcConvertPollRate ( EhcConvertPollRate (
IN UINTN Interval IN UINTN Interval
@@ -298,17 +287,15 @@ EhcConvertPollRate (
} }
/** /**
Free a list of QTDs Free a list of QTDs.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Qtds The list head of the QTD @param Qtds The list head of the QTD.
@return None @return None.
**/ **/
STATIC
VOID VOID
EhcFreeQtds ( EhcFreeQtds (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -331,10 +318,10 @@ EhcFreeQtds (
/** /**
Free an allocated URB. It is possible for it to be partially inited. Free an allocated URB. It is possible for it to be partially inited.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Urb The URB to free @param Urb The URB to free.
@return None @return None.
**/ **/
VOID VOID
@@ -368,18 +355,16 @@ EhcFreeUrb (
} }
/** /**
Create a list of QTDs for the URB Create a list of QTDs for the URB.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Urb The URB to create QTDs for @param Urb The URB to create QTDs for.
@retval EFI_OUT_OF_RESOURCES Failed to allocate resource for QTD @retval EFI_OUT_OF_RESOURCES Failed to allocate resource for QTD.
@retval EFI_SUCCESS The QTDs are allocated for the URB @retval EFI_SUCCESS The QTDs are allocated for the URB.
**/ **/
STATIC
EFI_STATUS EFI_STATUS
EhcCreateQtds ( EhcCreateQtds (
IN USB2_HC_DEV *Ehc, IN USB2_HC_DEV *Ehc,
@@ -530,24 +515,24 @@ ON_ERROR:
/** /**
Create a new URB and its associated QTD Create a new URB and its associated QTD.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param DevAddr The device address @param DevAddr The device address.
@param EpAddr Endpoint addrress & its direction @param EpAddr Endpoint addrress & its direction.
@param DevSpeed The device speed @param DevSpeed The device speed.
@param Toggle Initial data toggle to use @param Toggle Initial data toggle to use.
@param MaxPacket The max packet length of the endpoint @param MaxPacket The max packet length of the endpoint.
@param Hub The transaction translator to use @param Hub The transaction translator to use.
@param Type The transaction type @param Type The transaction type.
@param Request The standard USB request for control transfer @param Request The standard USB request for control transfer.
@param Data The user data to transfer @param Data The user data to transfer.
@param DataLen The length of data buffer @param DataLen The length of data buffer.
@param Callback The function to call when data is transferred @param Callback The function to call when data is transferred.
@param Context The context to the callback @param Context The context to the callback.
@param Interval The interval for interrupt transfer @param Interval The interval for interrupt transfer.
@return Created URB or NULL @return Created URB or NULL.
**/ **/
URB * URB *
@@ -589,7 +574,7 @@ EhcCreateUrb (
Ep = &Urb->Ep; Ep = &Urb->Ep;
Ep->DevAddr = DevAddr; Ep->DevAddr = DevAddr;
Ep->EpAddr = (UINT8) (EpAddr & 0x0F); Ep->EpAddr = (UINT8) (EpAddr & 0x0F);
Ep->Direction = ((EpAddr & 0x80) ? EfiUsbDataIn : EfiUsbDataOut); Ep->Direction = (((EpAddr & 0x80) != 0) ? EfiUsbDataIn : EfiUsbDataOut);
Ep->DevSpeed = DevSpeed; Ep->DevSpeed = DevSpeed;
Ep->MaxPacket = MaxPacket; Ep->MaxPacket = MaxPacket;

View File

@@ -1,5 +1,8 @@
/** @file /** @file
This file contains URB request, each request is warpped in a
URB (Usb Request Block).
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,17 +12,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciUrb.h
Abstract:
This file contains URB request, each request is warpped in a
URB (Usb Request Block)
Revision History
**/ **/
#ifndef _EFI_EHCI_URB_H_ #ifndef _EFI_EHCI_URB_H_
@@ -30,7 +22,7 @@ typedef struct _EHC_QTD EHC_QTD;
typedef struct _EHC_QH EHC_QH; typedef struct _EHC_QH EHC_QH;
typedef struct _URB URB; typedef struct _URB URB;
enum { typedef enum {
// //
// Transfer types, used in URB to identify the transfer type // Transfer types, used in URB to identify the transfer type
// //
@@ -84,7 +76,7 @@ enum {
QH_MICROFRAME_7 = 0x80, QH_MICROFRAME_7 = 0x80,
USB_ERR_SHORT_PACKET = 0x200 USB_ERR_SHORT_PACKET = 0x200
}; }EHCI_URB_FLAG_VALUE;
// //
// Fill in the hardware link point: pass in a EHC_QH/QH_HW // Fill in the hardware link point: pass in a EHC_QH/QH_HW
@@ -249,16 +241,16 @@ struct _URB {
/** /**
Create a single QTD to hold the data Create a single QTD to hold the data.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Data Current data not associated with a QTD @param Data Current data not associated with a QTD.
@param DataLen The length of the data @param DataLen The length of the data.
@param PktId Packet ID to use in the QTD @param PktId Packet ID to use in the QTD.
@param Toggle Data toggle to use in the QTD @param Toggle Data toggle to use in the QTD.
@param MaxPacket Maximu packet length of the endpoint @param MaxPacket Maximu packet length of the endpoint.
@return Created QTD or NULL if failed to create one @return Created QTD or NULL if failed to create one.
**/ **/
EHC_QTD * EHC_QTD *
@@ -275,12 +267,12 @@ EhcCreateQtd (
/** /**
Allocate and initialize a EHCI queue head Allocate and initialize a EHCI queue head.
@param Ehci The EHCI device @param Ehci The EHCI device.
@param Ep The endpoint to create queue head for @param Ep The endpoint to create queue head for.
@return Created queue head or NULL if failed to create one @return Created queue head or NULL if failed to create one.
**/ **/
EHC_QH * EHC_QH *
@@ -294,10 +286,10 @@ EhcCreateQh (
/** /**
Free an allocated URB. It is possible for it to be partially inited. Free an allocated URB. It is possible for it to be partially inited.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param Urb The URB to free @param Urb The URB to free.
@return None @return None.
**/ **/
VOID VOID
@@ -309,24 +301,24 @@ EhcFreeUrb (
/** /**
Create a new URB and its associated QTD Create a new URB and its associated QTD.
@param Ehc The EHCI device @param Ehc The EHCI device.
@param DevAddr The device address @param DevAddr The device address.
@param EpAddr Endpoint addrress & its direction @param EpAddr Endpoint addrress & its direction.
@param DevSpeed The device speed @param DevSpeed The device speed.
@param Toggle Initial data toggle to use @param Toggle Initial data toggle to use.
@param MaxPacket The max packet length of the endpoint @param MaxPacket The max packet length of the endpoint.
@param Hub The transaction translator to use @param Hub The transaction translator to use.
@param Type The transaction type @param Type The transaction type.
@param Request The standard USB request for control transfer @param Request The standard USB request for control transfer.
@param Data The user data to transfer @param Data The user data to transfer.
@param DataLen The length of data buffer @param DataLen The length of data buffer.
@param Callback The function to call when data is transferred @param Callback The function to call when data is transferred.
@param Context The context to the callback @param Context The context to the callback.
@param Interval The interval for interrupt transfer @param Interval The interval for interrupt transfer.
@return Created URB or NULL @return Created URB or NULL.
**/ **/
URB * URB *

View File

@@ -1,5 +1,7 @@
/** @file /** @file
Routine procedures for memory allocate/free.
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,15 +11,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciMem.c
Abstract:
Revision History
**/ **/
@@ -25,15 +18,14 @@ Revision History
/** /**
Allocate a block of memory to be used by the buffer pool Allocate a block of memory to be used by the buffer pool.
@param Pool The buffer pool to allocate memory for @param Pool The buffer pool to allocate memory for.
@param Pages How many pages to allocate @param Pages How many pages to allocate.
@return The allocated memory block or NULL if failed @return The allocated memory block or NULL if failed.
**/ **/
STATIC
USBHC_MEM_BLOCK * USBHC_MEM_BLOCK *
UsbHcAllocMemBlock ( UsbHcAllocMemBlock (
IN USBHC_MEM_POOL *Pool, IN USBHC_MEM_POOL *Pool,
@@ -127,15 +119,14 @@ FREE_BITARRAY:
/** /**
Free the memory block from the memory pool Free the memory block from the memory pool.
@param Pool The memory pool to free the block from @param Pool The memory pool to free the block from.
@param Block The memory block to free @param Block The memory block to free.
@return VOID @return None.
**/ **/
STATIC
VOID VOID
UsbHcFreeMemBlock ( UsbHcFreeMemBlock (
IN USBHC_MEM_POOL *Pool, IN USBHC_MEM_POOL *Pool,
@@ -160,17 +151,15 @@ UsbHcFreeMemBlock (
/** /**
Alloc some memory from the block Alloc some memory from the block.
@param Block The memory block to allocate memory from @param Block The memory block to allocate memory from.
@param Mem The variable to store the memory allocated @param Units Number of memory units to allocate.
@param Units Number of memory units to allocate
@return EFI_SUCCESS : The needed memory is allocated @return The pointer to the allocated memory. If couldn't allocate the needed memory,
@return EFI_NOT_FOUND : Can't find the free memory the return value is NULL.
**/ **/
STATIC
VOID * VOID *
UsbHcAllocMemFromBlock ( UsbHcAllocMemFromBlock (
IN USBHC_MEM_BLOCK *Block, IN USBHC_MEM_BLOCK *Block,
@@ -236,15 +225,14 @@ UsbHcAllocMemFromBlock (
/** /**
Insert the memory block to the pool's list of the blocks Insert the memory block to the pool's list of the blocks.
@param Head The head of the memory pool's block list @param Head The head of the memory pool's block list.
@param Block The memory block to insert @param Block The memory block to insert.
@return VOID @return None.
**/ **/
STATIC
VOID VOID
UsbHcInsertMemBlockToPool ( UsbHcInsertMemBlockToPool (
IN USBHC_MEM_BLOCK *Head, IN USBHC_MEM_BLOCK *Head,
@@ -260,13 +248,12 @@ UsbHcInsertMemBlockToPool (
/** /**
Is the memory block empty? Is the memory block empty?
@param Block The memory block to check @param Block The memory block to check.
@return TRUE : The memory block is empty @retval TRUE The memory block is empty.
@return FALSE : The memory block isn't empty @retval FALSE The memory block isn't empty.
**/ **/
STATIC
BOOLEAN BOOLEAN
UsbHcIsMemBlockEmpty ( UsbHcIsMemBlockEmpty (
IN USBHC_MEM_BLOCK *Block IN USBHC_MEM_BLOCK *Block
@@ -285,15 +272,14 @@ UsbHcIsMemBlockEmpty (
/** /**
Unlink the memory block from the pool's list Unlink the memory block from the pool's list.
@param Head The block list head of the memory's pool @param Head The block list head of the memory's pool.
@param BlockToUnlink The memory block to unlink. @param BlockToUnlink The memory block to unlink.
@return VOID @return None.
**/ **/
STATIC
VOID VOID
UsbHcUnlinkMemBlock ( UsbHcUnlinkMemBlock (
IN USBHC_MEM_BLOCK *Head, IN USBHC_MEM_BLOCK *Head,
@@ -315,16 +301,15 @@ UsbHcUnlinkMemBlock (
/** /**
Initialize the memory management pool for the host controller Initialize the memory management pool for the host controller.
@param Pool The USB memory pool to initialize @param PciIo The PciIo that can be used to access the host controller.
@param PciIo The PciIo that can be used to access the host controller @param Check4G Whether the host controller requires allocated memory
@param Check4G Whether the host controller requires allocated memory from one 4G address space.
from one 4G address space. @param Which4G The 4G memory area each memory allocated should be from.
@param Which4G The 4G memory area each memory allocated should be from
@return EFI_SUCCESS : The memory pool is initialized @retval EFI_SUCCESS The memory pool is initialized.
@return EFI_OUT_OF_RESOURCE : Fail to init the memory pool @retval EFI_OUT_OF_RESOURCE Fail to init the memory pool.
**/ **/
USBHC_MEM_POOL * USBHC_MEM_POOL *
@@ -357,12 +342,12 @@ UsbHcInitMemPool (
/** /**
Release the memory management pool Release the memory management pool.
@param Pool The USB memory pool to free @param Pool The USB memory pool to free.
@return EFI_SUCCESS : The memory pool is freed @retval EFI_SUCCESS The memory pool is freed.
@return EFI_DEVICE_ERROR : Failed to free the memory pool @retval EFI_DEVICE_ERROR Failed to free the memory pool.
**/ **/
EFI_STATUS EFI_STATUS
@@ -394,10 +379,10 @@ UsbHcFreeMemPool (
Allocate some memory from the host controller's memory pool Allocate some memory from the host controller's memory pool
which can be used to communicate with host controller. which can be used to communicate with host controller.
@param Pool The host controller's memory pool @param Pool The host controller's memory pool.
@param Size Size of the memory to allocate @param Size Size of the memory to allocate.
@return The allocated memory or NULL @return The allocated memory or NULL.
**/ **/
VOID * VOID *
@@ -468,13 +453,13 @@ UsbHcAllocateMem (
/** /**
Free the allocated memory back to the memory pool Free the allocated memory back to the memory pool.
@param Pool The memory pool of the host controller @param Pool The memory pool of the host controller.
@param Mem The memory to free @param Mem The memory to free.
@param Size The size of the memory to free @param Size The size of the memory to free.
@return VOID @return None.
**/ **/
VOID VOID

View File

@@ -1,5 +1,7 @@
/** @file /** @file
This file contains the definination for host controller memory management routines.
Copyright (c) 2007, Intel Corporation Copyright (c) 2007, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@@ -9,16 +11,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
Module Name:
EhciMem.h
Abstract:
This file contains the definination for host controller memory management routines
Revision History
**/ **/
#ifndef _EFI_EHCI_MEM_H_ #ifndef _EFI_EHCI_MEM_H_
@@ -59,12 +51,12 @@ typedef struct _USBHC_MEM_POOL {
USBHC_MEM_BLOCK *Head; USBHC_MEM_BLOCK *Head;
} USBHC_MEM_POOL; } USBHC_MEM_POOL;
enum { typedef enum {
USBHC_MEM_UNIT = 64, // Memory allocation unit, must be 2^n, n>4 USBHC_MEM_UNIT = 64, // Memory allocation unit, must be 2^n, n>4
USBHC_MEM_UNIT_MASK = USBHC_MEM_UNIT - 1, USBHC_MEM_UNIT_MASK = USBHC_MEM_UNIT - 1,
USBHC_MEM_DEFAULT_PAGES = 16 USBHC_MEM_DEFAULT_PAGES = 16
}; } USBHC_MEM_UNIT_DATA;
#define USBHC_MEM_ROUND(Len) (((Len) + USBHC_MEM_UNIT_MASK) & (~USBHC_MEM_UNIT_MASK)) #define USBHC_MEM_ROUND(Len) (((Len) + USBHC_MEM_UNIT_MASK) & (~USBHC_MEM_UNIT_MASK))
@@ -82,43 +74,34 @@ enum {
/**
Initialize the memory management pool for the host controller.
@param PciIo The PciIo that can be used to access the host controller.
@param Check4G Whether the host controller requires allocated memory
from one 4G address space.
@param Which4G The 4G memory area each memory allocated should be from.
@retval EFI_SUCCESS The memory pool is initialized.
@retval EFI_OUT_OF_RESOURCE Fail to init the memory pool.
**/
USBHC_MEM_POOL * USBHC_MEM_POOL *
UsbHcInitMemPool ( UsbHcInitMemPool (
IN EFI_PCI_IO_PROTOCOL *PciIo, IN EFI_PCI_IO_PROTOCOL *PciIo,
IN BOOLEAN Check4G, IN BOOLEAN Check4G,
IN UINT32 Which4G IN UINT32 Which4G
) )
/*++
Routine Description:
Initialize the memory management pool for the host controller
Arguments:
Pool - The USB memory pool to initialize
PciIo - The PciIo that can be used to access the host controller
Check4G - Whether the host controller requires allocated memory
from one 4G address space.
Which4G - The 4G memory area each memory allocated should be from
Returns:
EFI_SUCCESS : The memory pool is initialized
EFI_OUT_OF_RESOURCE : Fail to init the memory pool
--*/
; ;
/** /**
Release the memory management pool Release the memory management pool.
@param Pool The USB memory pool to free @param Pool The USB memory pool to free.
@return EFI_SUCCESS : The memory pool is freed @retval EFI_SUCCESS The memory pool is freed.
@return EFI_DEVICE_ERROR : Failed to free the memory pool @retval EFI_DEVICE_ERROR Failed to free the memory pool.
**/ **/
EFI_STATUS EFI_STATUS
@@ -128,15 +111,14 @@ UsbHcFreeMemPool (
; ;
/** /**
Allocate some memory from the host controller's memory pool Allocate some memory from the host controller's memory pool
which can be used to communicate with host controller. which can be used to communicate with host controller.
@param Pool The host controller's memory pool @param Pool The host controller's memory pool.
@param Size Size of the memory to allocate @param Size Size of the memory to allocate.
@return The allocated memory or NULL @return The allocated memory or NULL.
**/ **/
VOID * VOID *
@@ -147,15 +129,14 @@ UsbHcAllocateMem (
; ;
/** /**
Free the allocated memory back to the memory pool Free the allocated memory back to the memory pool.
@param Pool The memory pool of the host controller @param Pool The memory pool of the host controller.
@param Mem The memory to free @param Mem The memory to free.
@param Size The size of the memory to free @param Size The size of the memory to free.
@return VOID @return None.
**/ **/
VOID VOID