4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsb Peim definition.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncare licensed and made available under the terms and conditions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncof the BSD License which accompanies this distribution. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncfull text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _PEI_USB_PEIM_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _PEI_USB_PEIM_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <PiPei.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Ppi/UsbIo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Ppi/UsbHostController.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Ppi/BlockIo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PcdLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <IndustryStandard/Usb.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAX_ROOT_PORT 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MAX_ENDPOINT 16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_SLOW_SPEED_DEVICE 0x01
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define USB_FULL_SPEED_DEVICE 0x02
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PEI_USB_DEVICE_SIGNATURE SIGNATURE_32 ('U', 's', 'b', 'D')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PEI_USB_IO_PPI UsbIoPpi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PEI_PPI_DESCRIPTOR UsbIoPpiList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DeviceAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MaxPacketSize0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DeviceSpeed;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DataToggle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 IsHub;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 DownStreamPortNo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Reserved[2]; // Padding for IPF
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN AllocateAddress;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PEI_USB_HOST_CONTROLLER_PPI *UsbHcPpi;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 ConfigurationData[1024];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_CONFIG_DESCRIPTOR *ConfigDesc;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_INTERFACE_DESCRIPTOR *InterfaceDesc;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_ENDPOINT_DESCRIPTOR *EndpointDesc[MAX_ENDPOINT];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PEI_USB_DEVICE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PEI_USB_DEVICE_FROM_THIS(a) CR (a, PEI_USB_DEVICE, UsbIoPpi, PEI_USB_DEVICE_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submits control transfer to a target USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PeiServices The pointer of EFI_PEI_SERVICES.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This The pointer of PEI_USB_IO_PPI.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Request USB device request to send.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Direction Specifies the data direction for the data stage.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Timeout Indicates the maximum timeout, in millisecond.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data Data buffer to be transmitted or received from USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DataLength The size (in bytes) of the data buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Transfer was completed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resources.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Some parameters are invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT Transfer failed due to timeout.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR Transfer failed due to host controller or device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPeiUsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PEI_USB_IO_PPI *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_DEVICE_REQUEST *Request,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_DATA_DIRECTION Direction,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Timeout,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *Data, OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN DataLength OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submits bulk transfer to a bulk endpoint of a USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PeiServices The pointer of EFI_PEI_SERVICES.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This The pointer of PEI_USB_IO_PPI.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceEndpoint Endpoint number and its direction in bit 7.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Data A pointer to the buffer of data to transmit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from or receive into.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DataLength The lenght of the data buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Timeout Indicates the maximum time, in millisecond, which the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transfer is allowed to complete.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The transfer was completed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The transfer failed due to lack of resource.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Parameters are invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT The transfer failed due to timeout.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The transfer failed due to host controller error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPeiUsbBulkTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PEI_USB_IO_PPI *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 DeviceEndpoint,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *Data,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *DataLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Timeout
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the usb interface descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PeiServices General-purpose services that are available to every PEIM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Indicates the PEI_USB_IO_PPI instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param InterfaceDescriptor Request interface descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Usb interface descriptor is obtained successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPeiUsbGetInterfaceDescriptor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PEI_USB_IO_PPI *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_USB_INTERFACE_DESCRIPTOR **InterfaceDescriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the usb endpoint descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PeiServices General-purpose services that are available to every PEIM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Indicates the PEI_USB_IO_PPI instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EndpointIndex The valid index of the specified endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param EndpointDescriptor Request endpoint descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Usb endpoint descriptor is obtained successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND Usb endpoint descriptor is NOT found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPeiUsbGetEndpointDescriptor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PEI_USB_IO_PPI *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 EndpointIndex,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_USB_ENDPOINT_DESCRIPTOR **EndpointDescriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Reset the port and re-configure the usb device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param PeiServices General-purpose services that are available to every PEIM.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This Indicates the PEI_USB_IO_PPI instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Usb device is reset and configured successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others Other failure occurs.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncPeiUsbPortReset (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PEI_SERVICES **PeiServices,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PEI_USB_IO_PPI *This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif