upload android base code part6

This commit is contained in:
August 2018-08-08 17:48:24 +08:00
parent 421e214c7d
commit 4e516ec6ed
35396 changed files with 9188716 additions and 0 deletions

View file

@ -0,0 +1,162 @@
/** @file
Define the PPI to abstract the functions that enable IDE and SATA channels, and to retrieve
the base I/O port address for each of the enabled IDE and SATA channels.
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PEI_ATA_CONTROLLER_PPI_H_
#define _PEI_ATA_CONTROLLER_PPI_H_
///
/// Global ID for the PEI_ATA_CONTROLLER_PPI.
///
#define PEI_ATA_CONTROLLER_PPI_GUID \
{ \
0xa45e60d1, 0xc719, 0x44aa, {0xb0, 0x7a, 0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d } \
}
///
/// Forward declaration for the PEI_ATA_CONTROLLER_PPI.
///
typedef struct _PEI_ATA_CONTROLLER_PPI PEI_ATA_CONTROLLER_PPI;
///
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
/// disable the IDE channels.
/// This is designed for old generation chipset with PATA/SATA controllers.
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
///
#define PEI_ICH_IDE_NONE 0x00
///
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
/// enable the Primary IDE channel.
/// This is designed for old generation chipset with PATA/SATA controllers.
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
///
#define PEI_ICH_IDE_PRIMARY 0x01
///
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
/// enable the Secondary IDE channel.
/// This is designed for old generation chipset with PATA/SATA controllers.
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
///
#define PEI_ICH_IDE_SECONDARY 0x02
///
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
/// disable the SATA channel.
/// This is designed for old generation chipset with PATA/SATA controllers.
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
///
#define PEI_ICH_SATA_NONE 0x04
///
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
/// enable the Primary SATA channel.
/// This is designed for old generation chipset with PATA/SATA controllers.
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
///
#define PEI_ICH_SATA_PRIMARY 0x08
///
/// This bit is used in the ChannelMask parameter of EnableAtaChannel() to
/// enable the Secondary SATA channel.
/// This is designed for old generation chipset with PATA/SATA controllers.
/// It may be ignored in PPI implementation for new generation chipset without PATA controller.
///
#define PEI_ICH_SATA_SECONDARY 0x010
///
/// Structure that contains the base addresses for the IDE registers
///
typedef struct {
///
/// Base I/O port address of the IDE controller's command block
///
UINT16 CommandBlockBaseAddr;
///
/// Base I/O port address of the IDE controller's control block
///
UINT16 ControlBlockBaseAddr;
} IDE_REGS_BASE_ADDR;
/**
Sets IDE and SATA channels to an enabled or disabled state.
This service enables or disables the IDE and SATA channels specified by ChannelMask.
It may ignore ChannelMask setting to enable or disable IDE and SATA channels based on the platform policy.
The number of the enabled channels will be returned by GET_IDE_REGS_BASE_ADDR() function.
If the new state is set, then EFI_SUCCESS is returned. If the new state can
not be set, then EFI_DEVICE_ERROR is returned.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_ATA_CONTROLLER_PPI.
@param[in] ChannelMask The bitmask that identifies the IDE and SATA channels to
enable or disable. This paramter is optional.
@retval EFI_SUCCESS The IDE or SATA channels were enabled or disabled successfully.
@retval EFI_DEVICE_ERROR The IDE or SATA channels could not be enabled or disabled.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_ENABLE_ATA)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_ATA_CONTROLLER_PPI *This,
IN UINT8 ChannelMask
);
/**
Retrieves the I/O port base addresses for command and control registers of the
enabled IDE/SATA channels.
This service fills in the structure poionted to by IdeRegsBaseAddr with the I/O
port base addresses for the command and control registers of the IDE and SATA
channels that were previously enabled in EnableAtaChannel(). The number of
enabled IDE and SATA channels is returned.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_ATA_CONTROLLER_PPI.
@param[out] IdeRegsBaseAddr The pointer to caller allocated space to return the
I/O port base addresses of the IDE and SATA channels
that were previosuly enabled with EnableAtaChannel().
@return The number of enabled IDE and SATA channels in the platform.
**/
typedef
UINT32
(EFIAPI *GET_IDE_REGS_BASE_ADDR)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_ATA_CONTROLLER_PPI *This,
OUT IDE_REGS_BASE_ADDR *IdeRegsBaseAddr
);
///
/// This PPI contains services to enable and disable IDE and SATA channels and
/// retrieves the base I/O port addresses to the enabled IDE and SATA channels.
///
struct _PEI_ATA_CONTROLLER_PPI {
PEI_ENABLE_ATA EnableAtaChannel;
GET_IDE_REGS_BASE_ADDR GetIdeRegsBaseAddr;
};
extern EFI_GUID gPeiAtaControllerPpiGuid;
#endif

View file

@ -0,0 +1,65 @@
/** @file
Ppi for Ipmi of SMS.
Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _IPMI_PPI_H_
#define _IPMI_PPI_H_
typedef struct _PEI_IPMI_PPI PEI_IPMI_PPI;
#define PEI_IPMI_PPI_GUID \
{ \
0xa9731431, 0xd968, 0x4277, 0xb7, 0x52, 0xa3, 0xa9, 0xa6, 0xae, 0x18, 0x98 \
}
/**
This service enables submitting commands via Ipmi.
@param[in] This This point for PEI_IPMI_PPI structure.
@param[in] NetFunction Net function of the command.
@param[in] Command IPMI Command.
@param[in] RequestData Command Request Data.
@param[in] RequestDataSize Size of Command Request Data.
@param[out] ResponseData Command Response Data. The completion code is the first byte of response data.
@param[in, out] ResponseDataSize Size of Command Response Data.
@retval EFI_SUCCESS The command byte stream was successfully submit to the device and a response was successfully received.
@retval EFI_NOT_FOUND The command was not successfully sent to the device or a response was not successfully received from the device.
@retval EFI_NOT_READY Ipmi Device is not ready for Ipmi command access.
@retval EFI_DEVICE_ERROR Ipmi Device hardware error.
@retval EFI_TIMEOUT The command time out.
@retval EFI_UNSUPPORTED The command was not successfully sent to the device.
@retval EFI_OUT_OF_RESOURCES The resource allcation is out of resource or data size error.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_IPMI_SUBMIT_COMMAND) (
IN PEI_IPMI_PPI *This,
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData,
IN OUT UINT32 *ResponseDataSize
);
//
// IPMI PPI
//
struct _PEI_IPMI_PPI {
PEI_IPMI_SUBMIT_COMMAND IpmiSubmitCommand;
};
extern EFI_GUID gPeiIpmiPpiGuid;
#endif

View file

@ -0,0 +1,27 @@
/** @file
POST BootScript Table PPI definition.
This PPI is used to be notification after boot script table execution.
Copyright (c) 2010, Intel Corporation. All rights reserved. <BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PEI_POST_BOOT_SCRIPT_TABLE_H_
#define _PEI_POST_BOOT_SCRIPT_TABLE_H_
#define PEI_POST_BOOT_SCRIPT_TABLE_PPI_GUID \
{0x88c9d306, 0x900, 0x4eb5, 0x82, 0x60, 0x3e, 0x2d, 0xbe, 0xda, 0x1f, 0x89};
extern EFI_GUID gPeiPostScriptTablePpiGuid;
#endif

View file

@ -0,0 +1,67 @@
/** @file
Defines the interface to convey performance information from SEC phase to PEI.
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PEI_SEC_PERFORMANCE_PPI_H_
#define _PEI_SEC_PERFORMANCE_PPI_H_
#define PEI_SEC_PERFORMANCE_PPI_GUID \
{ \
0x0ecc666b, 0x4662, 0x47f9, {0x9d, 0xd5, 0xd0, 0x96, 0xff, 0x7d, 0xa4, 0x9e } \
}
typedef struct _PEI_SEC_PERFORMANCE_PPI PEI_SEC_PERFORMANCE_PPI;
///
/// Performance data collected in SEC phase.
///
typedef struct {
UINT64 ResetEnd; ///< Timer value logged at the beginning of firmware image execution, in unit of nanosecond.
} FIRMWARE_SEC_PERFORMANCE;
/**
This interface conveys performance information out of the Security (SEC) phase into PEI.
This service is published by the SEC phase. The SEC phase handoff has an optional
EFI_PEI_PPI_DESCRIPTOR list as its final argument when control is passed from SEC into the
PEI Foundation. As such, if the platform supports collecting performance data in SEC,
this information is encapsulated into the data structure abstracted by this service.
This information is collected for the boot-strap processor (BSP) on IA-32.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_SEC_PERFORMANCE_PPI.
@param[out] Performance The pointer to performance data collected in SEC phase.
@retval EFI_SUCCESS The performance data was successfully returned.
**/
typedef
EFI_STATUS
(EFIAPI *GET_SEC_PERFORMANCE) (
IN CONST EFI_PEI_SERVICES **PeiServices,
IN PEI_SEC_PERFORMANCE_PPI *This,
OUT FIRMWARE_SEC_PERFORMANCE *Performance
);
///
/// This PPI provides function to get performance data collected in SEC phase.
///
struct _PEI_SEC_PERFORMANCE_PPI {
GET_SEC_PERFORMANCE GetPerformance;
};
extern EFI_GUID gPeiSecPerformancePpiGuid;
#endif

View file

@ -0,0 +1,26 @@
/** @file
PPI that is installed after the initialization of a serial stream device
is complete.
Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef __PEI_SERIAL_PORT_PPI_H__
#define __PEI_SERIAL_PORT_PPI_H__
#define PEI_SERIAL_PORT_PPI \
{ \
0x490e9d85, 0x8aef, 0x4193, { 0x8e, 0x56, 0xf7, 0x34, 0xa9, 0xff, 0xac, 0x8b } \
}
extern EFI_GUID gPeiSerialPortPpiGuid;
#endif

View file

@ -0,0 +1,145 @@
/** @file
EFI SMM Access PPI definition.
This PPI is used to control the visibility of the SMRAM on the platform.
It abstracts the location and characteristics of SMRAM. The expectation is
that the north bridge or memory controller would publish this PPI.
The principal functionality found in the memory controller includes the following:
- Exposing the SMRAM to all non-SMM agents, or the "open" state
- Shrouding the SMRAM to all but the SMM agents, or the "closed" state
- Preserving the system integrity, or "locking" the SMRAM, such that the settings cannot be
perturbed by either boot service or runtime agents
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SMM_ACCESS_PPI_H_
#define _SMM_ACCESS_PPI_H_
#define PEI_SMM_ACCESS_PPI_GUID \
{ 0x268f33a9, 0xcccd, 0x48be, { 0x88, 0x17, 0x86, 0x5, 0x3a, 0xc3, 0x2e, 0xd6 }}
typedef struct _PEI_SMM_ACCESS_PPI PEI_SMM_ACCESS_PPI;
/**
Opens the SMRAM area to be accessible by a PEIM driver.
This function "opens" SMRAM so that it is visible while not inside of SMM. The function should
return EFI_UNSUPPORTED if the hardware does not support hiding of SMRAM. The function
should return EFI_DEVICE_ERROR if the SMRAM configuration is locked.
@param PeiServices General purpose services available to every PEIM.
@param This The pointer to the SMM Access Interface.
@param DescriptorIndex The region of SMRAM to Open.
@retval EFI_SUCCESS The region was successfully opened.
@retval EFI_DEVICE_ERROR The region could not be opened because locked by chipset.
@retval EFI_INVALID_PARAMETER The descriptor index was out of bounds.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_OPEN)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN UINTN DescriptorIndex
);
/**
Inhibits access to the SMRAM.
This function "closes" SMRAM so that it is not visible while outside of SMM. The function should
return EFI_UNSUPPORTED if the hardware does not support hiding of SMRAM.
@param PeiServices General purpose services available to every PEIM.
@param This The pointer to the SMM Access Interface.
@param DescriptorIndex The region of SMRAM to Close.
@retval EFI_SUCCESS The region was successfully closed.
@retval EFI_DEVICE_ERROR The region could not be closed because locked by chipset.
@retval EFI_INVALID_PARAMETER The descriptor index was out of bounds.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_CLOSE)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN UINTN DescriptorIndex
);
/**
Inhibits access to the SMRAM.
This function prohibits access to the SMRAM region. This function is usually implemented such
that it is a write-once operation.
@param PeiServices General purpose services available to every PEIM.
@param This The pointer to the SMM Access Interface.
@param DescriptorIndex The region of SMRAM to Close.
@retval EFI_SUCCESS The region was successfully locked.
@retval EFI_DEVICE_ERROR The region could not be locked because at least
one range is still open.
@retval EFI_INVALID_PARAMETER The descriptor index was out of bounds.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_LOCK)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN UINTN DescriptorIndex
);
/**
Queries the memory controller for the possible regions that will support SMRAM.
@param PeiServices General purpose services available to every PEIM.
@param This The pointer to the SmmAccessPpi Interface.
@param SmramMapSize The pointer to the variable containing size of the
buffer to contain the description information.
@param SmramMap The buffer containing the data describing the Smram
region descriptors.
@retval EFI_BUFFER_TOO_SMALL The user did not provide a sufficient buffer.
@retval EFI_SUCCESS The user provided a sufficiently-sized buffer.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_CAPABILITIES)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_ACCESS_PPI *This,
IN OUT UINTN *SmramMapSize,
IN OUT EFI_SMRAM_DESCRIPTOR *SmramMap
);
///
/// EFI SMM Access PPI is used to control the visibility of the SMRAM on the platform.
/// It abstracts the location and characteristics of SMRAM. The expectation is
/// that the north bridge or memory controller would publish this PPI.
///
struct _PEI_SMM_ACCESS_PPI {
PEI_SMM_OPEN Open;
PEI_SMM_CLOSE Close;
PEI_SMM_LOCK Lock;
PEI_SMM_CAPABILITIES GetCapabilities;
BOOLEAN LockState;
BOOLEAN OpenState;
};
extern EFI_GUID gPeiSmmAccessPpiGuid;
#endif

View file

@ -0,0 +1,64 @@
/** @file
EFI SMM Communication PPI definition.
This Ppi provides a means of communicating between PEIM and SMI
handlers inside of SMM.
This Ppi is produced and consumed only in S3 resume boot path.
It is NOT available in normal boot path.
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SMM_COMMUNICATION_PPI_H_
#define _SMM_COMMUNICATION_PPI_H_
#define EFI_PEI_SMM_COMMUNICATION_PPI_GUID \
{ \
0xae933e1c, 0xcc47, 0x4e38, { 0x8f, 0xe, 0xe2, 0xf6, 0x1d, 0x26, 0x5, 0xdf } \
}
typedef struct _EFI_PEI_SMM_COMMUNICATION_PPI EFI_PEI_SMM_COMMUNICATION_PPI;
/**
Communicates with a registered handler.
This function provides a service to send and receive messages from a registered UEFI service.
@param[in] This The EFI_PEI_SMM_COMMUNICATION_PPI instance.
@param[in] CommBuffer A pointer to the buffer to convey into SMRAM.
@param[in] CommSize The size of the data buffer being passed in.On exit, the size of data
being returned. Zero if the handler does not wish to reply with any data.
@retval EFI_SUCCESS The message was successfully posted.
@retval EFI_INVALID_PARAMETER The CommBuffer was NULL.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_PEI_SMM_COMMUNICATE)(
IN CONST EFI_PEI_SMM_COMMUNICATION_PPI *This,
IN OUT VOID *CommBuffer,
IN OUT UINTN *CommSize
);
///
/// EFI SMM Communication Protocol provides runtime services for communicating
/// between DXE drivers and a registered SMI handler.
///
struct _EFI_PEI_SMM_COMMUNICATION_PPI {
EFI_PEI_SMM_COMMUNICATE Communicate;
};
extern EFI_GUID gEfiPeiSmmCommunicationPpiGuid;
#endif

View file

@ -0,0 +1,96 @@
/** @file
EFI SMM Control PPI definition.
This PPI is used to initiate SMI/PMI activations. This protocol could be published by either:
- A processor driver to abstract the SMI/PMI IPI
- The driver that abstracts the ASIC that is supporting the APM port, such as the ICH in an
Intel chipset
Because of the possibility of performing SMI or PMI IPI transactions, the ability to generate this
event from a platform chipset agent is an optional capability for both IA-32 and Itanium-based
systems.
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SMM_CONTROL_PPI_H_
#define _SMM_CONTROL_PPI_H_
#define PEI_SMM_CONTROL_PPI_GUID \
{ 0x61c68702, 0x4d7e, 0x4f43, 0x8d, 0xef, 0xa7, 0x43, 0x5, 0xce, 0x74, 0xc5 }
typedef struct _PEI_SMM_CONTROL_PPI PEI_SMM_CONTROL_PPI;
/**
Invokes SMI activation from either the preboot or runtime environment.
@param PeiServices General purpose services available to every PEIM.
@param This The PEI_SMM_CONTROL_PPI instance.
@param ArgumentBuffer The optional sized data to pass into the protocol activation.
@param ArgumentBufferSize The optional size of the data.
@param Periodic An optional mechanism to periodically repeat activation.
@param ActivationInterval An optional parameter to repeat at this period one
time or, if the Periodic Boolean is set, periodically.
@retval EFI_SUCCESS The SMI/PMI has been engendered.
@retval EFI_DEVICE_ERROR The timing is unsupported.
@retval EFI_INVALID_PARAMETER The activation period is unsupported.
@retval EFI_NOT_STARTED The SMM base service has not been initialized.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_ACTIVATE) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_CONTROL_PPI * This,
IN OUT INT8 *ArgumentBuffer OPTIONAL,
IN OUT UINTN *ArgumentBufferSize OPTIONAL,
IN BOOLEAN Periodic OPTIONAL,
IN UINTN ActivationInterval OPTIONAL
);
/**
Clears any system state that was created in response to the Active call.
@param PeiServices General purpose services available to every PEIM.
@param This The PEI_SMM_CONTROL_PPI instance.
@param Periodic Optional parameter to repeat at this period one
time or, if the Periodic Boolean is set, periodically.
@retval EFI_SUCCESS The SMI/PMI has been engendered.
@retval EFI_DEVICE_ERROR The source could not be cleared.
@retval EFI_INVALID_PARAMETER The service did not support the Periodic input argument.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_SMM_DEACTIVATE) (
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_SMM_CONTROL_PPI * This,
IN BOOLEAN Periodic OPTIONAL
);
///
/// PEI SMM Control PPI is used to initiate SMI/PMI activations. This protocol could be published by either:
/// - A processor driver to abstract the SMI/PMI IPI
/// - The driver that abstracts the ASIC that is supporting the APM port, such as the ICH in an
/// Intel chipset
///
struct _PEI_SMM_CONTROL_PPI {
PEI_SMM_ACTIVATE Trigger;
PEI_SMM_DEACTIVATE Clear;
};
extern EFI_GUID gPeiSmmControlPpiGuid;
#endif

View file

@ -0,0 +1,60 @@
/** @file
Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _EDKII_PEI_UFS_HOST_CONTROLLER_PPI_H_
#define _EDKII_PEI_UFS_HOST_CONTROLLER_PPI_H_
///
/// Global ID for the EDKII_UFS_HOST_CONTROLLER_PPI.
///
#define EDKII_UFS_HOST_CONTROLLER_PPI_GUID \
{ \
0xdc54b283, 0x1a77, 0x4cd6, { 0x83, 0xbb, 0xfd, 0xda, 0x46, 0x9a, 0x2e, 0xc6 } \
}
///
/// Forward declaration for the UFS_HOST_CONTROLLER_PPI.
///
typedef struct _EDKII_UFS_HOST_CONTROLLER_PPI EDKII_UFS_HOST_CONTROLLER_PPI;
/**
Get the MMIO base address of UFS host controller.
@param[in] This The protocol instance pointer.
@param[in] ControllerId The ID of the UFS host controller.
@param[out] MmioBar Pointer to the UFS host controller MMIO base address.
@retval EFI_SUCCESS The operation succeeds.
@retval EFI_INVALID_PARAMETER The parameters are invalid.
**/
typedef
EFI_STATUS
(EFIAPI *EDKII_UFS_HC_GET_MMIO_BAR)(
IN EDKII_UFS_HOST_CONTROLLER_PPI *This,
IN UINT8 ControllerId,
OUT UINTN *MmioBar
);
///
/// This PPI contains a set of services to interact with the UFS host controller.
///
struct _EDKII_UFS_HOST_CONTROLLER_PPI {
EDKII_UFS_HC_GET_MMIO_BAR GetUfsHcMmioBar;
};
extern EFI_GUID gEdkiiPeiUfsHostControllerPpiGuid;
#endif

View file

@ -0,0 +1,269 @@
/** @file
Defines the USB Host Controller PPI that provides I/O services for a USB Host
Controller that may be used to access recovery devices. These interfaces are
modeled on the UEFI 2.3 specification EFI_USB2_HOST_CONTROLLER_PROTOCOL.
Refer to section 16.1 of the UEFI 2.3 Specification for more information on
these interfaces.
Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved. <BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PEI_USB2_HOST_CONTROLLER_PPI_H_
#define _PEI_USB2_HOST_CONTROLLER_PPI_H_
#include <Protocol/Usb2HostController.h>
///
/// Global ID for the PEI_USB2_HOST_CONTROLLER_PPI.
///
#define PEI_USB2_HOST_CONTROLLER_PPI_GUID \
{ \
0xa7d09fe1, 0x74d4, 0x4ba5, { 0x84, 0x7c, 0x12, 0xed, 0x5b, 0x19, 0xad, 0xe4 } \
}
///
/// Forward declaration for the PEI_USB2_HOST_CONTROLLER_PPI.
///
typedef struct _PEI_USB2_HOST_CONTROLLER_PPI PEI_USB2_HOST_CONTROLLER_PPI;
/**
Initiate a USB control transfer using a specific USB Host controller on the USB bus.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB2_HOST_CONTROLLER_PPI.
@param[in] DeviceAddress Represents the address of the target device
on the USB.
@param[in] DeviceSpeed Indicates device speed.
@param[in] MaximumPacketLength Indicates the maximum packet size that the
default control transfer
endpoint is capable of sending or receiving.
@param[in] Request A pointer to the USB device request that
will be sent to the USB device.
@param[in] TransferDirection Specifies the data direction for the transfer.
There are three values available:
EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
@param[in,out] Data A pointer to the buffer of data that will
be transmitted to USB device or
received from USB device.
@param[in,out] DataLength On input, indicates the size, in bytes, of
the data buffer specified by Data.
On output, indicates the amount of data
actually transferred.
@param[in] TimeOut Indicates the maximum time, in milliseconds,
that the transfer is allowed to complete.
If Timeout is 0, then the caller must wait for
the function to be completed until EFI_SUCCESS
or EFI_DEVICE_ERROR is returned.
@param[in] Translator A pointer to the transaction translator data.
@param[out] TransferResult A pointer to the detailed result information
generated by this control transfer.
@retval EFI_SUCCESS The control transfer was completed successfully.
@retval EFI_DEVICE_ERROR The control transfer failed due to host controller
or device error.
@retval EFI_INVALID_PARAMETER Some parameters are invalid.
@retval EFI_OUT_OF_RESOURCES The control transfer could not be completed due to a lack of resources.
@retval EFI_TIMEOUT The control transfer failed due to timeout.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB2_HOST_CONTROLLER_CONTROL_TRANSFER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB2_HOST_CONTROLLER_PPI *This,
IN UINT8 DeviceAddress,
IN UINT8 DeviceSpeed,
IN UINTN MaximumPacketLength,
IN USB_DEVICE_REQUEST *Request,
IN EFI_USB_DATA_DIRECTION TransferDirection,
IN OUT VOID *Data OPTIONAL,
IN OUT UINTN *DataLength OPTIONAL,
IN UINTN TimeOut,
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
OUT UINT32 *TransferResult
);
/**
Initiate a USB bulk transfer using a specific USB Host controller on the USB bus.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB2_HOST_CONTROLLER_PPI.
@param[in] DeviceAddress Represents the address of the target device
on the USB.
@param[in] EndPointAddress The combination of an endpoint number and
an endpoint direction of the target USB device.
@param[in] DeviceSpeed Indicates device speed.
@param[in] MaximumPacketLength Indicates the maximum packet size the target
endpoint is capable of sending or receiving.
@param[in,out] Data Array of pointers to the buffers of data
that will be transmitted to USB device or
received from USB device.
@param[in,out] DataLength When input, indicates the size, in bytes, of
the data buffers specified by Data. When output,
indicates the data size actually transferred.
@param[in,out] DataToggle A pointer to the data toggle value.
@param[in] TimeOut Indicates the maximum time, in milliseconds,
in which the transfer is allowed to complete.
If Timeout is 0, then the caller must wait for
the function to be completed until EFI_SUCCESS
or EFI_DEVICE_ERROR is returned.
@param[in] Translator A pointer to the transaction translator data.
@param[out] TransferResult A pointer to the detailed result information
of the bulk transfer.
@retval EFI_SUCCESS The bulk transfer was completed successfully.
@retval EFI_DEVICE_ERROR The bulk transfer failed due to host controller or device error.
Caller should check TransferResult for detailed error information.
@retval EFI_INVALID_PARAMETER Some parameters are invalid.
@retval EFI_OUT_OF_RESOURCES The bulk transfer could not be submitted due to a lack of resources.
@retval EFI_TIMEOUT The bulk transfer failed due to timeout.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB2_HOST_CONTROLLER_BULK_TRANSFER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB2_HOST_CONTROLLER_PPI *This,
IN UINT8 DeviceAddress,
IN UINT8 EndPointAddress,
IN UINT8 DeviceSpeed,
IN UINTN MaximumPacketLength,
IN OUT VOID *Data[EFI_USB_MAX_BULK_BUFFER_NUM],
IN OUT UINTN *DataLength,
IN OUT UINT8 *DataToggle,
IN UINTN TimeOut,
IN EFI_USB2_HC_TRANSACTION_TRANSLATOR *Translator,
OUT UINT32 *TransferResult
);
/**
Retrieves the number of root hub ports.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB2_HOST_CONTROLLER_PPI.
@param[out] PortNumber The pointer to the number of the root hub ports.
@retval EFI_SUCCESS The port number was retrieved successfully.
@retval EFI_INVALID_PARAMETER PortNumber is NULL.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_NUMBER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB2_HOST_CONTROLLER_PPI *This,
OUT UINT8 *PortNumber
);
/**
Retrieves the current status of a USB root hub port.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB2_HOST_CONTROLLER_PPI.
@param[in] PortNumber Specifies the root hub port from which the status is
to be retrieved.
This value is zero based.
@param[out] PortStatus A pointer to the current port status bits and port
status change bits.
@retval EFI_SUCCESS The status of the USB root hub port specified by
PortNumber was returned in PortStatus.
@retval EFI_INVALID_PARAMETER PortNumber is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_STATUS)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB2_HOST_CONTROLLER_PPI *This,
IN UINT8 PortNumber,
OUT EFI_USB_PORT_STATUS *PortStatus
);
/**
Sets a feature for the specified root hub port.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB2_HOST_CONTROLLER_PPI.
@param[in] PortNumber Specifies the root hub port whose feature is requested
to be set. This value is zero based.
@param[in] PortFeature Indicates the feature selector associated with the feature
set request.
@retval EFI_SUCCESS The feature specified by PortFeature was set for
the USB root hub port specified by PortNumber.
@retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid
for this function.
@retval EFI_TIMEOUT The time out occurred
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB2_HOST_CONTROLLER_SET_ROOTHUB_PORT_FEATURE)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB2_HOST_CONTROLLER_PPI *This,
IN UINT8 PortNumber,
IN EFI_USB_PORT_FEATURE PortFeature
);
/**
Clears a feature for the specified root hub port.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB2_HOST_CONTROLLER_PPI.
@param[in] PortNumber Specifies the root hub port whose feature is
requested to be cleared.
@param[in] PortFeature Indicates the feature selector associated with the
feature clear request.
@return EFI_SUCCESS The feature specified by PortFeature was cleared
for the USB root hub port specified by PortNumber.
@return EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB2_HOST_CONTROLLER_CLEAR_ROOTHUB_PORT_FEATURE)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB2_HOST_CONTROLLER_PPI *This,
IN UINT8 PortNumber,
IN EFI_USB_PORT_FEATURE PortFeature
);
///
/// This PPI contains a set of services to interact with the USB host controller.
/// These interfaces are modeled on the UEFI 2.3 specification protocol
/// EFI_USB2_HOST_CONTROLLER_PROTOCOL. Refer to section 16.1 of the UEFI 2.3
/// Specification for more information on these interfaces.
///
struct _PEI_USB2_HOST_CONTROLLER_PPI {
PEI_USB2_HOST_CONTROLLER_CONTROL_TRANSFER ControlTransfer;
PEI_USB2_HOST_CONTROLLER_BULK_TRANSFER BulkTransfer;
PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_NUMBER GetRootHubPortNumber;
PEI_USB2_HOST_CONTROLLER_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus;
PEI_USB2_HOST_CONTROLLER_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature;
PEI_USB2_HOST_CONTROLLER_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature;
};
extern EFI_GUID gPeiUsb2HostControllerPpiGuid;
#endif

View file

@ -0,0 +1,94 @@
/** @file
Define APIs to retrieve USB Host Controller Info such as controller type and
I/O Port Base Address.
Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PEI_USB_CONTROLLER_PPI_H_
#define _PEI_USB_CONTROLLER_PPI_H_
///
/// Global ID for the PEI_USB_CONTROLLER_PPI.
///
#define PEI_USB_CONTROLLER_PPI_GUID \
{ \
0x3bc1f6de, 0x693e, 0x4547,{ 0xa3, 0x0, 0x21, 0x82, 0x3c, 0xa4, 0x20, 0xb2} \
}
///
/// Forward declaration for the PEI_USB_CONTROLLER_PPI.
///
typedef struct _PEI_USB_CONTROLLER_PPI PEI_USB_CONTROLLER_PPI;
///
/// This bit is used in the ControllerType return parameter of GetUsbController()
/// to identify the USB Host Controller type as UHCI
///
#define PEI_UHCI_CONTROLLER 0x01
///
/// This bit is used in the ControllerType return parameter of GetUsbController()
/// to identify the USB Host Controller type as OHCI
///
#define PEI_OHCI_CONTROLLER 0x02
///
/// This bit is used in the ControllerType return parameter of GetUsbController()
/// to identify the USB Host Controller type as EHCI
///
#define PEI_EHCI_CONTROLLER 0x03
///
/// This bit is used in the ControllerType return parameter of GetUsbController()
/// to identify the USB Host Controller type as XHCI
///
#define PEI_XHCI_CONTROLLER 0x04
/**
Retrieve USB Host Controller Info such as controller type and I/O Base Address.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_USB_CONTROLLER_PPI.
@param[in] ControllerId The ID of the USB controller.
@param[out] ControllerType On output, returns the type of the USB controller.
@param[out] BaseAddress On output, returns the base address of UHCI's I/O ports
if UHCI is enabled or the base address of EHCI's MMIO
if EHCI is enabled.
@retval EFI_SUCCESS USB controller attributes were returned successfully.
@retval EFI_INVALID_PARAMETER ControllerId is greater than the maximum number
of USB controller supported by this platform.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_GET_USB_CONTROLLER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_CONTROLLER_PPI *This,
IN UINT8 UsbControllerId,
OUT UINTN *ControllerType,
OUT UINTN *BaseAddress
);
///
/// This PPI contains a single service to retrieve the USB Host Controller type
/// and the base address of the I/O ports used to access the USB Host Controller.
///
struct _PEI_USB_CONTROLLER_PPI {
PEI_GET_USB_CONTROLLER GetUsbController;
};
extern EFI_GUID gPeiUsbControllerPpiGuid;
#endif

View file

@ -0,0 +1,257 @@
/** @file
Defines the USB Host Controller PPI that provides I/O services for a USB Host
Controller that may be used to access recovery devices. These interfaces are
modeled on the UEFI 2.3 specification EFI_USB2_HOST_CONTROLLER_PROTOCOL.
Refer to section 16.1 of the UEFI 2.3 Specification for more information on
these interfaces.
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PEI_USB_HOST_CONTROLLER_PPI_H_
#define _PEI_USB_HOST_CONTROLLER_PPI_H_
#include <Protocol/Usb2HostController.h>
///
/// Global ID for the PEI_USB_HOST_CONTROLLER_PPI.
///
#define PEI_USB_HOST_CONTROLLER_PPI_GUID \
{ \
0x652b38a9, 0x77f4, 0x453f, { 0x89, 0xd5, 0xe7, 0xbd, 0xc3, 0x52, 0xfc, 0x53} \
}
///
/// Forward declaration for the PEI_USB_HOST_CONTROLLER_PPI.
///
typedef struct _PEI_USB_HOST_CONTROLLER_PPI PEI_USB_HOST_CONTROLLER_PPI;
/**
Initiate a USB control transfer using a specific USB Host controller on the USB bus.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB_HOST_CONTROLLER_PPI.
@param[in] DeviceAddress Represents the address of the target device
on the USB.
@param[in] DeviceSpeed Indicates device speed.
@param[in] MaximumPacketLength Indicates the maximum packet size that the
default control transfer
endpoint is capable of sending or receiving.
@param[in] Request A pointer to the USB device request that
will be sent to the USB device.
@param[in] TransferDirection Specifies the data direction for the transfer.
There are three values available:
EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
@param[in,out] Data A pointer to the buffer of data that will
be transmitted to USB device or
received from USB device.
@param[in,out] DataLength On input, indicates the size, in bytes, of
the data buffer specified by Data.
On output, indicates the amount of data
actually transferred.
@param[in] TimeOut Indicates the maximum time, in milliseconds,
that the transfer is allowed to complete.
If Timeout is 0, then the caller must wait for
the function to be completed until EFI_SUCCESS
or EFI_DEVICE_ERROR is returned.
@param[out] TransferResult A pointer to the detailed result information
generated by this control transfer.
@retval EFI_DEVICE_ERROR The control transfer failed due to host controller
or device error.
@retval EFI_SUCCESS The control transfer was completed successfully.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_HOST_CONTROLLER_CONTROL_TRANSFER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_HOST_CONTROLLER_PPI *This,
IN UINT8 DeviceAddress,
IN UINT8 DeviceSpeed,
IN UINT8 MaximumPacketLength,
IN USB_DEVICE_REQUEST *Request,
IN EFI_USB_DATA_DIRECTION TransferDirection,
IN OUT VOID *Data OPTIONAL,
IN OUT UINTN *DataLength OPTIONAL,
IN UINTN TimeOut,
OUT UINT32 *TransferResult
);
/**
Initiate a USB bulk transfer using a specific USB Host controller on the USB bus.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB_HOST_CONTROLLER_PPI.
@param[in] DeviceAddress Represents the address of the target device
on the USB.
@param[in] EndPointAddress The combination of an endpoint number and
an endpoint direction of the target USB device.
@param[in] MaximumPacketLength Indicates the maximum packet size the target
endpoint is capable of sending or receiving.
@param[in,out] Data Array of pointers to the buffers of data
that will be transmitted to USB device or
received from USB device.
@param[in,out] DataLength When input, indicates the size, in bytes, of
the data buffers specified by Data. When output,
indicates the data size actually transferred.
@param[in,out] DataToggle A pointer to the data toggle value.
@param[in] TimeOut Indicates the maximum time, in milliseconds,
in which the transfer is allowed to complete.
If Timeout is 0, then the caller must wait for
the function to be completed until EFI_SUCCESS
or EFI_DEVICE_ERROR is returned.
@param[out] TransferResult A pointer to the detailed result information
of the bulk transfer.
@retval EFI_SUCCESS The bulk transfer was completed successfully.
@retval EFI_DEVICE_ERROR The bulk transfer failed due to host controller or device error.
Caller should check TransferResult for detailed error information.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_HOST_CONTROLLER_BULK_TRANSFER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_HOST_CONTROLLER_PPI *This,
IN UINT8 DeviceAddress,
IN UINT8 EndPointAddress,
IN UINT8 MaximumPacketLength,
IN OUT VOID *Data,
IN OUT UINTN *DataLength,
IN OUT UINT8 *DataToggle,
IN UINTN TimeOut,
OUT UINT32 *TransferResult
);
/**
Retrieves the number of root hub ports.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB_HOST_CONTROLLER_PPI.
@param[out] PortNumber The pointer to the number of the root hub ports.
@retval EFI_SUCCESS The port number was retrieved successfully.
@retval EFI_DEVICE_ERROR An error was encountered while attempting to retrieve
the port number.
@retval EFI_INVALID_PARAMETER PortNumber is NULL.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_HOST_CONTROLLER_GET_ROOTHUB_PORT_NUMBER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_HOST_CONTROLLER_PPI *This,
OUT UINT8 *PortNumber
);
/**
Retrieves the current status of a USB root hub port.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB_HOST_CONTROLLER_PPI.
@param[in] PortNumber Specifies the root hub port from which the status is
to be retrieved.
This value is zero based.
@param[out] PortStatus A pointer to the current port status bits and port
status change bits.
@retval EFI_SUCCESS The status of the USB root hub port specified by
PortNumber was returned in PortStatus.
@retval EFI_INVALID_PARAMETER PortNumber is invalid.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_HOST_CONTROLLER_GET_ROOTHUB_PORT_STATUS)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_HOST_CONTROLLER_PPI *This,
IN UINT8 PortNumber,
OUT EFI_USB_PORT_STATUS *PortStatus
);
/**
Sets a feature for the specified root hub port.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB_HOST_CONTROLLER_PPI.
@param[in] PortNumber Specifies the root hub port whose feature is requested
to be set. This value is zero based.
@param[in] PortFeature Indicates the feature selector associated with the feature
set request.
@retval EFI_SUCCESS The feature specified by PortFeature was set for
the USB root hub port specified by PortNumber.
@retval EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid
for this function.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_HOST_CONTROLLER_SET_ROOTHUB_PORT_FEATURE)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_HOST_CONTROLLER_PPI *This,
IN UINT8 PortNumber,
IN EFI_USB_PORT_FEATURE PortFeature
);
/**
Clears a feature for the specified root hub port.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the
PEI_USB_HOST_CONTROLLER_PPI.
@param[in] PortNumber Specifies the root hub port whose feature is
requested to be cleared.
@param[in] PortFeature Indicates the feature selector associated with the
feature clear request.
@return EFI_SUCCESS The feature specified by PortFeature was cleared
for the USB root hub port specified by PortNumber.
@return EFI_INVALID_PARAMETER PortNumber is invalid or PortFeature is invalid.
@return EFI_DEVICE_ERROR Can't read the register.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_HOST_CONTROLLER_CLEAR_ROOTHUB_PORT_FEATURE)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_HOST_CONTROLLER_PPI *This,
IN UINT8 PortNumber,
IN EFI_USB_PORT_FEATURE PortFeature
);
///
/// This PPI contains a set of services to interact with the USB host controller.
/// These interfaces are modeled on the UEFI 2.3 specification protocol
/// EFI_USB2_HOST_CONTROLLER_PROTOCOL. Refer to section 16.1 of the UEFI 2.3
/// Specification for more information on these interfaces.
///
struct _PEI_USB_HOST_CONTROLLER_PPI {
PEI_USB_HOST_CONTROLLER_CONTROL_TRANSFER ControlTransfer;
PEI_USB_HOST_CONTROLLER_BULK_TRANSFER BulkTransfer;
PEI_USB_HOST_CONTROLLER_GET_ROOTHUB_PORT_NUMBER GetRootHubPortNumber;
PEI_USB_HOST_CONTROLLER_GET_ROOTHUB_PORT_STATUS GetRootHubPortStatus;
PEI_USB_HOST_CONTROLLER_SET_ROOTHUB_PORT_FEATURE SetRootHubPortFeature;
PEI_USB_HOST_CONTROLLER_CLEAR_ROOTHUB_PORT_FEATURE ClearRootHubPortFeature;
};
extern EFI_GUID gPeiUsbHostControllerPpiGuid;
#endif

View file

@ -0,0 +1,196 @@
/** @file
Defines the PEI_USB_IO_PPI that the USB-related PEIM can use for I/O operations
on the USB BUS. This interface enables recovery from a
USB-class storage device, such as USB CD/DVD, USB hard drive, or USB FLASH
drive. These interfaces are modeled on the UEFI 2.3 specification EFI_USB_IO_PROTOCOL.
Refer to section 16.2.4 of the UEFI 2.3 Specification for more information on
these interfaces.
Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions
of the BSD License which accompanies this distribution. The
full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _PEI_USB_IO_PPI_H_
#define _PEI_USB_IO_PPI_H_
#include <Protocol/Usb2HostController.h>
///
/// Global ID for the PEI_USB_IO_PPI.
///
#define PEI_USB_IO_PPI_GUID \
{ \
0x7c29785c, 0x66b9, 0x49fc, { 0xb7, 0x97, 0x1c, 0xa5, 0x55, 0xe, 0xf2, 0x83} \
}
///
/// Forward declaration for the PEI_USB_IO_PPI.
///
typedef struct _PEI_USB_IO_PPI PEI_USB_IO_PPI;
/**
Submits control transfer to a target USB device.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_USB_IO_PPI.
@param[in] Request A pointer to the USB device request that will be
sent to the USB device.
@param[in] Direction Specifies the data direction for the transfer. There
are three values available:
EfiUsbDataIn, EfiUsbDataOut and EfiUsbNoData.
@param[in] Timeout Indicates the maximum time, in milliseconds, that
the transfer is allowed to complete.
If Timeout is 0, then the caller must wait for the
function to be completed until EFI_SUCCESS or
EFI_DEVICE_ERROR is returned.
@param[in,out] Data A pointer to the buffer of data that will be
transmitted to or received from the USB device.
@param[in] DataLength On input, indicates the size, in bytes, of the data
buffer specified by Data.
@retval EFI_SUCCESS The control transfer was completed successfully.
@retval EFI_INVALID_PARAMETER Some parameters are invalid.
@retval EFI_OUT_OF_RESOURCES The control transfer could not be completed due
to a lack of resources.
@retval EFI_TIMEOUT The control transfer failed due to timeout.
@retval EFI_DEVICE_ERROR The control transfer failed due to host controller
or device error.
Caller should check TransferResult for detailed
error information.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_CONTROL_TRANSFER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_IO_PPI *This,
IN EFI_USB_DEVICE_REQUEST *Request,
IN EFI_USB_DATA_DIRECTION Direction,
IN UINT32 Timeout,
IN OUT VOID *Data OPTIONAL,
IN UINTN DataLength OPTIONAL
);
/**
Submits bulk transfer to a target USB device.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_USB_IO_PPI.
@param[in] DeviceEndpoint The endpoint address.
@param[in] Data The data buffer to be transfered.
@param[in] DataLength The length of data buffer.
@param[in] Timeout The timeout for the transfer, in milliseconds.
If Timeout is 0, then the caller must wait for the
function to be completed until EFI_SUCCESS or
EFI_DEVICE_ERROR is returned.
@retval EFI_SUCCESS The bulk transfer completed successfully.
@retval EFI_INVALID_PARAMETER Some parameters are invalid.
@retval EFI_OUT_OF_RESOURCES The bulk transfer could not be completed due to
a lack of resources.
@retval EFI_TIMEOUT The bulk transfer failed due to timeout.
@retval EFI_DEVICE_ERROR The bulk transfer failed due to host controller
or device error.
Caller should check TransferResult for detailed
error information.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_BULK_TRANSFER)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_IO_PPI *This,
IN UINT8 DeviceEndpoint,
IN OUT VOID *Data,
IN OUT UINTN *DataLength,
IN UINTN Timeout
);
/**
Get interface descriptor from a USB device.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_USB_IO_PPI.
@param[in] InterfaceDescriptor The interface descriptor.
@retval EFI_SUCCESS The interface descriptor was returned.
@retval EFI_INVALID_PARAMETER Some parameters are invalid.
@retval EFI_DEVICE_ERROR A device error occurred, the function failed to
get the interface descriptor.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_GET_INTERFACE_DESCRIPTOR)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_IO_PPI *This,
IN EFI_USB_INTERFACE_DESCRIPTOR **InterfaceDescriptor
);
/**
Get endpoint descriptor from a USB device.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_USB_IO_PPI.
@param[in] EndPointIndex The index of the end point.
@param[in] EndpointDescriptor The endpoint descriptor.
@retval EFI_SUCCESS The endpoint descriptor was returned.
@retval EFI_INVALID_PARAMETER Some parameters are invalid.
@retval EFI_DEVICE_ERROR A device error occurred, the function failed to
get the endpoint descriptor.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_GET_ENDPOINT_DESCRIPTOR)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_IO_PPI *This,
IN UINT8 EndpointIndex,
IN EFI_USB_ENDPOINT_DESCRIPTOR **EndpointDescriptor
);
/**
Issue a port reset to the device.
@param[in] PeiServices The pointer to the PEI Services Table.
@param[in] This The pointer to this instance of the PEI_USB_IO_PPI.
@retval EFI_SUCCESS The port reset was issued successfully.
@retval EFI_INVALID_PARAMETER Some parameters are invalid.
@retval EFI_DEVICE_ERROR Device error occurred.
**/
typedef
EFI_STATUS
(EFIAPI *PEI_USB_PORT_RESET)(
IN EFI_PEI_SERVICES **PeiServices,
IN PEI_USB_IO_PPI *This
);
///
/// This PPI contains a set of services to interact with the USB host controller.
/// These interfaces are modeled on the UEFI 2.3 specification EFI_USB_IO_PROTOCOL.
/// Refer to section 16.2.4 of the UEFI 2.3 Specification for more information on
/// these interfaces.
///
struct _PEI_USB_IO_PPI {
PEI_USB_CONTROL_TRANSFER UsbControlTransfer;
PEI_USB_BULK_TRANSFER UsbBulkTransfer;
PEI_USB_GET_INTERFACE_DESCRIPTOR UsbGetInterfaceDescriptor;
PEI_USB_GET_ENDPOINT_DESCRIPTOR UsbGetEndpointDescriptor;
PEI_USB_PORT_RESET UsbPortReset;
};
extern EFI_GUID gPeiUsbIoPpiGuid;
#endif