mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-11 14:28:08 +01:00
190 lines
7.5 KiB
C
190 lines
7.5 KiB
C
|
/** @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 - 2018, Intel Corporation. All rights reserved.<BR>
|
||
|
|
||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||
|
|
||
|
**/
|
||
|
|
||
|
#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
|