diff --git a/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.c b/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.c new file mode 100644 index 0000000000..877ebc97e6 --- /dev/null +++ b/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.c @@ -0,0 +1,85 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. + +Module Name: + + BaseCustomDecompressLibNull.c + +Abstract: + + NULL Custom Decompress Library + +--*/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +RETURN_STATUS +EFIAPI +CustomDecompressGetInfo ( + IN CONST VOID *Source, + IN UINT32 SourceSize, + OUT UINT32 *DestinationSize, + OUT UINT32 *ScratchSize + ) +/*++ + +Routine Description: + + The internal implementation of *_DECOMPRESS_PROTOCOL.GetInfo(). + +Arguments: + + Source - The source buffer containing the compressed data. + SourceSize - The size of source buffer + DestinationSize - The size of destination buffer. + ScratchSize - The size of scratch buffer. + +Returns: + + RETURN_SUCCESS - The size of destination buffer and the size of scratch buffer are successull retrieved. + RETURN_INVALID_PARAMETER - The source data is corrupted + +--*/ +{ + return RETURN_UNSUPPORTED; +} + +RETURN_STATUS +EFIAPI +CustomDecompress ( + IN CONST VOID *Source, + IN OUT VOID *Destination, + IN OUT VOID *Scratch + ) +/*++ + +Routine Description: + + The internal implementation of *_DECOMPRESS_PROTOCOL.Decompress(). + +Arguments: + + Source - The source buffer containing the compressed data. + Destination - The destination buffer to store the decompressed data + Scratch - The buffer used internally by the decompress routine. This buffer is needed to store intermediate data. + +Returns: + + RETURN_SUCCESS - Decompression is successfull + RETURN_INVALID_PARAMETER - The source data is corrupted + +--*/ +{ + return RETURN_UNSUPPORTED; +} diff --git a/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.inf b/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.inf new file mode 100644 index 0000000000..df8d92e766 --- /dev/null +++ b/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.inf @@ -0,0 +1,59 @@ +#/** @file +# Base Custom Decompression Library +# +# Customer Decompress Library with NULL implementation. +# Copyright (c) 2006 - 2007, Intel Corporation. +# +# All rights reserved. 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. +# +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = BaseCustomDecompressLibNull + FILE_GUID = e5566134-c75e-4ace-bad1-e23a3b335e30 + MODULE_TYPE = BASE + VERSION_STRING = 1.0 + LIBRARY_CLASS = CustomDecompressLib + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +################################################################################ +# +# Sources Section - list of files that are required for the build to succeed. +# +################################################################################ + +[Sources.common] + BaseCustomDecompressLibNull.c + CommonHeader.h + + +################################################################################ +# +# Package Dependency Section - list of Package files that are required for +# this module. +# +################################################################################ + +[Packages] + MdePkg/MdePkg.dec + diff --git a/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.msa b/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.msa new file mode 100644 index 0000000000..f224cab515 --- /dev/null +++ b/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.msa @@ -0,0 +1,40 @@ + + + + BaseCustomDecompressLibNull + BASE + e5566134-c75e-4ace-bad1-e23a3b335e30 + 1.0 + Base Custom Decompression Library + Customer Decompress Library with NULL implementation. + Copyright (c) 2006 - 2007, Intel Corporation. + All rights reserved. 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + BaseCustomDecompressLibNull + + + + CustomDecompressLib + + + + BaseCustomDecompressLibNull.c + + + + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + \ No newline at end of file diff --git a/MdePkg/Library/BaseCustomDecompressLibNull/CommonHeader.h b/MdePkg/Library/BaseCustomDecompressLibNull/CommonHeader.h new file mode 100644 index 0000000000..eedb273912 --- /dev/null +++ b/MdePkg/Library/BaseCustomDecompressLibNull/CommonHeader.h @@ -0,0 +1,28 @@ +/**@file + Common header file shared by all source files. + + This file includes package header files, library classes and protocol, PPI & GUID definitions. + + Copyright (c) 2006 - 2007, Intel Corporation. + All rights reserved. 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 __COMMON_HEADER_H_ +#define __COMMON_HEADER_H_ + + +// +// The package level header files this module uses +// +#include +// +// The Library classes this module consumes +// +#include + +#endif diff --git a/MdePkg/Library/DxeDebugLibSerialPort/CommonHeader.h b/MdePkg/Library/DxeDebugLibSerialPort/CommonHeader.h new file mode 100644 index 0000000000..88e494fda5 --- /dev/null +++ b/MdePkg/Library/DxeDebugLibSerialPort/CommonHeader.h @@ -0,0 +1,33 @@ +/**@file + Common header file shared by all source files. + + This file includes package header files, library classes and protocol, PPI & GUID definitions. + + Copyright (c) 2006 - 2007, Intel Corporation. + All rights reserved. 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 __COMMON_HEADER_H_ +#define __COMMON_HEADER_H_ + + +// +// The package level header files this module uses +// +#include +// +// The Library classes this module consumes +// +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MdePkg/Library/DxeDebugLibSerialPort/DebugLib.c b/MdePkg/Library/DxeDebugLibSerialPort/DebugLib.c new file mode 100644 index 0000000000..0f3c390965 --- /dev/null +++ b/MdePkg/Library/DxeDebugLibSerialPort/DebugLib.c @@ -0,0 +1,248 @@ +/** @file + UEFI Debug Library that uses PrintLib to send messages to CONOUT. + + Copyright (c) 2006, Intel Corporation
+ All rights reserved. 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. + +**/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +// +// Define the maximum debug and assert message length that this library supports +// +#define MAX_DEBUG_MESSAGE_LENGTH 0x100 + + +/** + + Prints a debug message to the debug output device if the specified error level is enabled. + + If any bit in ErrorLevel is also set in PcdDebugPrintErrorLevel, then print + the message specified by Format and the associated variable argument list to + the debug output device. + + If Format is NULL, then ASSERT(). + + @param ErrorLevel The error level of the debug message. + @param Format Format string for the debug message to print. + +**/ +VOID +EFIAPI +DebugPrint ( + IN UINTN ErrorLevel, + IN CONST CHAR8 *Format, + ... + ) +{ + CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH]; + VA_LIST Marker; + + // + // If Format is NULL, then ASSERT(). + // + ASSERT (Format != NULL); + + // + // Check driver debug mask value and global mask + // + if ((ErrorLevel & PcdGet32(PcdDebugPrintErrorLevel)) == 0) { + return; + } + + // + // Convert the DEBUG() message to an ASCII String + // + VA_START (Marker, Format); + AsciiVSPrint (Buffer, sizeof (Buffer), Format, Marker); + VA_END (Marker); + + // + // Send the print string to a Serial Port + // + SerialPortWrite ((UINT8 *) Buffer, AsciiStrLen(Buffer)); +} + + +/** + + Prints an assert message containing a filename, line number, and description. + This may be followed by a breakpoint or a dead loop. + + Print a message of the form "ASSERT (): \n" + to the debug output device. If DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED bit of + PcdDebugProperyMask is set then CpuBreakpoint() is called. Otherwise, if + DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED bit of PcdDebugProperyMask is set then + CpuDeadLoop() is called. If neither of these bits are set, then this function + returns immediately after the message is printed to the debug output device. + DebugAssert() must actively prevent recusrsion. If DebugAssert() is called while + processing another DebugAssert(), then DebugAssert() must return immediately. + + If FileName is NULL, then a string of "(NULL) Filename" is printed. + + If Description is NULL, then a string of "(NULL) Description" is printed. + + @param FileName Pointer to the name of the source file that generated the assert condition. + @param LineNumber The line number in the source file that generated the assert condition + @param Description Pointer to the description of the assert condition. + +**/ +VOID +EFIAPI +DebugAssert ( + IN CONST CHAR8 *FileName, + IN UINTN LineNumber, + IN CONST CHAR8 *Description + ) +{ + CHAR8 Buffer[MAX_DEBUG_MESSAGE_LENGTH]; + + // + // Generate the ASSERT() message in Unicode format + // + AsciiSPrint (Buffer, sizeof (Buffer), "ASSERT %a(%d): %a\n", FileName, LineNumber, Description); + + // + // Send the print string to the Console Output device + // + SerialPortWrite ((UINT8 *) Buffer, AsciiStrLen(Buffer)); + + // + // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings + // + if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) { + CpuBreakpoint (); + } else if ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) { + CpuDeadLoop (); + } +} + + +/** + + Fills a target buffer with PcdDebugClearMemoryValue, and returns the target buffer. + + This function fills Length bytes of Buffer with the value specified by + PcdDebugClearMemoryValue, and returns Buffer. + + If Buffer is NULL, then ASSERT(). + + If Length is greater than (MAX_ADDRESS ? Buffer + 1), then ASSERT(). + + @param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue. + @param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue. + + @return Buffer + +**/ +VOID * +EFIAPI +DebugClearMemory ( + OUT VOID *Buffer, + IN UINTN Length + ) +{ + // + // If Buffer is NULL, then ASSERT(). + // + ASSERT (Buffer != NULL); + + // + // SetMem() checks for the the ASSERT() condition on Length and returns Buffer + // + return SetMem (Buffer, Length, PcdGet8(PcdDebugClearMemoryValue)); +} + + +/** + + Returns TRUE if ASSERT() macros are enabled. + + This function returns TRUE if the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of + PcdDebugProperyMask is set. Otherwise FALSE is returned. + + @retval TRUE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set. + @retval FALSE The DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is clear. + +**/ +BOOLEAN +EFIAPI +DebugAssertEnabled ( + VOID + ) +{ + return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED) != 0); +} + + +/** + + Returns TRUE if DEBUG()macros are enabled. + + This function returns TRUE if the DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of + PcdDebugProperyMask is set. Otherwise FALSE is returned. + + @retval TRUE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is set. + @retval FALSE The DEBUG_PROPERTY_DEBUG_PRINT_ENABLED bit of PcdDebugProperyMask is clear. + +**/ +BOOLEAN +EFIAPI +DebugPrintEnabled ( + VOID + ) +{ + return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_PRINT_ENABLED) != 0); +} + + +/** + + Returns TRUE if DEBUG_CODE()macros are enabled. + + This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of + PcdDebugProperyMask is set. Otherwise FALSE is returned. + + @retval TRUE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is set. + @retval FALSE The DEBUG_PROPERTY_DEBUG_CODE_ENABLED bit of PcdDebugProperyMask is clear. + +**/ +BOOLEAN +EFIAPI +DebugCodeEnabled ( + VOID + ) +{ + return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_DEBUG_CODE_ENABLED) != 0); +} + + +/** + + Returns TRUE if DEBUG_CLEAR_MEMORY()macro is enabled. + + This function returns TRUE if the DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of + PcdDebugProperyMask is set. Otherwise FALSE is returned. + + @retval TRUE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is set. + @retval FALSE The DEBUG_PROPERTY_DEBUG_CLEAR_MEMORY_ENABLED bit of PcdDebugProperyMask is clear. + +**/ +BOOLEAN +EFIAPI +DebugClearMemoryEnabled ( + VOID + ) +{ + return (BOOLEAN) ((PcdGet8(PcdDebugPropertyMask) & DEBUG_PROPERTY_CLEAR_MEMORY_ENABLED) != 0); +} diff --git a/MdePkg/Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.inf b/MdePkg/Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.inf new file mode 100644 index 0000000000..b1aeff14f0 --- /dev/null +++ b/MdePkg/Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.inf @@ -0,0 +1,95 @@ +#/** @file +# Debug Library for Dxe drivers +# +# Library to abstract Framework extensions that conflict with UEFI 2.0 Specification +# Copyright (c) 2006 - 2007, Intel Corporation. +# +# All rights reserved. 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. +# +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = DxeDebugLibSerialPort + FILE_GUID = BB83F95F-EDBC-4884-A520-CD42AF388FAE + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = DebugLib + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +################################################################################ +# +# Sources Section - list of files that are required for the build to succeed. +# +################################################################################ + +[Sources.common] + DebugLib.c + CommonHeader.h + + +################################################################################ +# +# Package Dependency Section - list of Package files that are required for +# this module. +# +################################################################################ + +[Packages] + MdePkg/MdePkg.dec + + +################################################################################ +# +# Library Class Section - list of Library Classes that are required for +# this module. +# +################################################################################ + +[LibraryClasses] + SerialPortLib + BaseMemoryLib + PcdLib + PrintLib + BaseLib + + +################################################################################ +# +# Pcd FIXED_AT_BUILD - list of PCDs that this module is coded for. +# +################################################################################ + +[PcdsFixedAtBuild.common] + PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid + PcdDebugPropertyMask|gEfiMdePkgTokenSpaceGuid + + +################################################################################ +# +# Pcd DYNAMIC - list of PCDs that this module is coded for. +# +################################################################################ + +[PcdsDynamic.common] + PcdDebugPrintErrorLevel|gEfiMdePkgTokenSpaceGuid + diff --git a/MdePkg/Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.msa b/MdePkg/Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.msa new file mode 100644 index 0000000000..8c9dd5b5ec --- /dev/null +++ b/MdePkg/Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.msa @@ -0,0 +1,76 @@ + + + + DxeDebugLibSerialPort + DXE_DRIVER + BB83F95F-EDBC-4884-A520-CD42AF388FAE + 1.0 + Debug Library for UEFI drivers + Library to abstract Framework extensions that conflict with UEFI 2.0 Specification + Copyright (c) 2006 - 2007, Intel Corporation. + All rights reserved. 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + DxeDebugLibSerialPort + + + + DebugLib + + + BaseLib + + + PrintLib + + + PcdLib + + + BaseMemoryLib + + + SerialPortLib + + + + DebugLib.c + + + + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + + + PcdDebugPropertyMask + gEfiMdePkgTokenSpaceGuid + The bitmask of flags that specify the enable/disable of Debug + Assert, Debug Print, Debug Code, Clear Memory, Assert + Breakpoint and Assert Deadloop. + + + PcdDebugClearMemoryValue + gEfiMdePkgTokenSpaceGuid + The value used by DebugClearMemory () to fill a certain range + of memory. + + + PcdDebugPrintErrorLevel + gEfiMdePkgTokenSpaceGuid + The bitmask of flags that specify the kind of debug message + output when Debug Print is enabled. + + + \ No newline at end of file diff --git a/MdePkg/Library/UefiUsbLib/CommonHeader.h b/MdePkg/Library/UefiUsbLib/CommonHeader.h new file mode 100644 index 0000000000..83a6a4301f --- /dev/null +++ b/MdePkg/Library/UefiUsbLib/CommonHeader.h @@ -0,0 +1,29 @@ +/**@file + Common header file shared by all source files. + + This file includes package header files, library classes and protocol, PPI & GUID definitions. + + Copyright (c) 2006, Intel Corporation. + All rights reserved. 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 __COMMON_HEADER_H_ +#define __COMMON_HEADER_H_ + + +// +// The package level header files this module uses +// +#include +// +// The Library classes this module consumes +// +#include +#include + +#endif diff --git a/MdePkg/Library/UefiUsbLib/UefiUsbLib.inf b/MdePkg/Library/UefiUsbLib/UefiUsbLib.inf new file mode 100644 index 0000000000..e0c46aeb59 --- /dev/null +++ b/MdePkg/Library/UefiUsbLib/UefiUsbLib.inf @@ -0,0 +1,71 @@ +#/** @file +# Component description file for UefiUsb library. +# +# This library provides supports for common USB functions. +# Copyright (c) 2006, Intel Corporation. +# +# All rights reserved. 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. +# +# +#**/ + +################################################################################ +# +# Defines Section - statements that will be processed to create a Makefile. +# +################################################################################ +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = UefiUsbLib + FILE_GUID = 87eb5df9-722a-4241-ad7f-370d0b3a56d7 + MODULE_TYPE = UEFI_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = UsbLib|DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 IPF EBC +# + +################################################################################ +# +# Sources Section - list of files that are required for the build to succeed. +# +################################################################################ + +[Sources.common] + hid.c + UsbDxeLib.c + CommonHeader.h + + +################################################################################ +# +# Package Dependency Section - list of Package files that are required for +# this module. +# +################################################################################ + +[Packages] + MdePkg/MdePkg.dec + + +################################################################################ +# +# Library Class Section - list of Library Classes that are required for +# this module. +# +################################################################################ + +[LibraryClasses] + BaseMemoryLib + diff --git a/MdePkg/Library/UefiUsbLib/UefiUsbLib.msa b/MdePkg/Library/UefiUsbLib/UefiUsbLib.msa new file mode 100644 index 0000000000..d552426156 --- /dev/null +++ b/MdePkg/Library/UefiUsbLib/UefiUsbLib.msa @@ -0,0 +1,44 @@ + + + + UefiUsbLib + DXE_DRIVER + 87eb5df9-722a-4241-ad7f-370d0b3a56d7 + 1.0 + Component description file for UsbDxeLib module + This library provides supports for common USB functions. + Copyright (c) 2006, Intel Corporation. + All rights reserved. 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. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + UefiUsbLib + + + + UefiUsbLib + + + BaseMemoryLib + + + + UsbDxeLib.c + hid.c + + + + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + \ No newline at end of file diff --git a/MdePkg/Library/UefiUsbLib/UsbDxeLib.c b/MdePkg/Library/UefiUsbLib/UsbDxeLib.c new file mode 100644 index 0000000000..6686291aa2 --- /dev/null +++ b/MdePkg/Library/UefiUsbLib/UsbDxeLib.c @@ -0,0 +1,704 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. + + Module Name: + + UsbDxeLib.c + + Abstract: + + Common Dxe Libarary for USB + + Revision History + +--*/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +// +// Get Device Descriptor +// +EFI_STATUS +UsbGetDescriptor ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT16 Value, + IN UINT16 Index, + IN UINT16 DescriptorLength, + OUT VOID *Descriptor, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Get Descriptor + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + Value - Device Request Value + Index - Device Request Index + DescriptorLength - Descriptor Length + Descriptor - Descriptor buffer to contain result + Status - Transfer Status +Returns: + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + DevReq.RequestType = USB_DEV_GET_DESCRIPTOR_REQ_TYPE; + DevReq.Request = USB_DEV_GET_DESCRIPTOR; + DevReq.Value = Value; + DevReq.Index = Index; + DevReq.Length = DescriptorLength; + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbDataIn, + TIMEOUT_VALUE, + Descriptor, + DescriptorLength, + Status + ); +} +// +// Set Device Descriptor +// +EFI_STATUS +UsbSetDescriptor ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT16 Value, + IN UINT16 Index, + IN UINT16 DescriptorLength, + IN VOID *Descriptor, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Set Descriptor + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + Value - Device Request Value + Index - Device Request Index + DescriptorLength - Descriptor Length + Descriptor - Descriptor buffer to set + Status - Transfer Status +Returns: + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + DevReq.RequestType = USB_DEV_SET_DESCRIPTOR_REQ_TYPE; + DevReq.Request = USB_DEV_SET_DESCRIPTOR; + DevReq.Value = Value; + DevReq.Index = Index; + DevReq.Length = DescriptorLength; + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbDataOut, + TIMEOUT_VALUE, + Descriptor, + DescriptorLength, + Status + ); +} + +// +// Get device Interface +// +EFI_STATUS +UsbGetDeviceInterface ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT16 Index, + OUT UINT8 *AltSetting, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Get Device Interface + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + Index - Interface index value + AltSetting - Alternate setting + Status - Trasnsfer status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + DevReq.RequestType = USB_DEV_GET_INTERFACE_REQ_TYPE; + DevReq.Request = USB_DEV_GET_INTERFACE; + DevReq.Index = Index; + DevReq.Length = 1; + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbDataIn, + TIMEOUT_VALUE, + AltSetting, + 1, + Status + ); +} +// +// Set device interface +// +EFI_STATUS +UsbSetDeviceInterface ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT16 InterfaceNo, + IN UINT16 AltSetting, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Set Device Interface + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + InterfaceNo - Interface Number + AltSetting - Alternate setting + Status - Trasnsfer status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + DevReq.RequestType = USB_DEV_SET_INTERFACE_REQ_TYPE; + DevReq.Request = USB_DEV_SET_INTERFACE; + DevReq.Value = AltSetting; + DevReq.Index = InterfaceNo; + + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + Status + ); +} +// +// Get device configuration +// +EFI_STATUS +UsbGetDeviceConfiguration ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + OUT UINT8 *ConfigValue, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Get Device Configuration + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + ConfigValue - Config Value + Status - Transfer Status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + DevReq.RequestType = USB_DEV_GET_CONFIGURATION_REQ_TYPE; + DevReq.Request = USB_DEV_GET_CONFIGURATION; + DevReq.Length = 1; + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbDataIn, + TIMEOUT_VALUE, + ConfigValue, + 1, + Status + ); +} +// +// Set device configuration +// +EFI_STATUS +UsbSetDeviceConfiguration ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT16 Value, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Set Device Configuration + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + Value - Configuration Value to set + Status - Transfer status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + DevReq.RequestType = USB_DEV_SET_CONFIGURATION_REQ_TYPE; + DevReq.Request = USB_DEV_SET_CONFIGURATION; + DevReq.Value = Value; + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + Status + ); +} +// +// Set Device Feature +// +EFI_STATUS +UsbSetDeviceFeature ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN EFI_USB_RECIPIENT Recipient, + IN UINT16 Value, + IN UINT16 Target, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Set Device Feature + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + Recipient - Interface/Device/Endpoint + Value - Request value + Target - Request Index + Status - Transfer status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + switch (Recipient) { + + case EfiUsbDevice: + DevReq.RequestType = 0x00; + break; + + case EfiUsbInterface: + DevReq.RequestType = 0x01; + break; + + case EfiUsbEndpoint: + DevReq.RequestType = 0x02; + break; + } + // + // Fill device request, see USB1.1 spec + // + DevReq.Request = USB_DEV_SET_FEATURE; + DevReq.Value = Value; + DevReq.Index = Target; + + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + Status + ); +} +// +// Clear Device Feature +// +EFI_STATUS +UsbClearDeviceFeature ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN EFI_USB_RECIPIENT Recipient, + IN UINT16 Value, + IN UINT16 Target, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Clear Device Feature + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + Recipient - Interface/Device/Endpoint + Value - Request value + Target - Request Index + Status - Transfer status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + switch (Recipient) { + + case EfiUsbDevice: + DevReq.RequestType = 0x00; + break; + + case EfiUsbInterface: + DevReq.RequestType = 0x01; + break; + + case EfiUsbEndpoint: + DevReq.RequestType = 0x02; + break; + } + // + // Fill device request, see USB1.1 spec + // + DevReq.Request = USB_DEV_CLEAR_FEATURE; + DevReq.Value = Value; + DevReq.Index = Target; + + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + Status + ); +} +// +// Get Device Status +// +EFI_STATUS +UsbGetDeviceStatus ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN EFI_USB_RECIPIENT Recipient, + IN UINT16 Target, + OUT UINT16 *DevStatus, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Get Device Status + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + Recipient - Interface/Device/Endpoint + Target - Request index + DevStatus - Device status + Status - Transfer status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + EFI_USB_DEVICE_REQUEST DevReq; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + + ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST)); + + switch (Recipient) { + + case EfiUsbDevice: + DevReq.RequestType = 0x80; + break; + + case EfiUsbInterface: + DevReq.RequestType = 0x81; + break; + + case EfiUsbEndpoint: + DevReq.RequestType = 0x82; + break; + } + // + // Fill device request, see USB1.1 spec + // + DevReq.Request = USB_DEV_GET_STATUS; + DevReq.Value = 0; + DevReq.Index = Target; + DevReq.Length = 2; + + return UsbIo->UsbControlTransfer ( + UsbIo, + &DevReq, + EfiUsbDataIn, + TIMEOUT_VALUE, + DevStatus, + 2, + Status + ); +} +// +// Usb Get String +// +EFI_STATUS +UsbGetString ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT16 LangID, + IN UINT8 Index, + IN VOID *Buf, + IN UINTN BufSize, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Usb Get String + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + LangID - Language ID + Index - Request index + Buf - Buffer to store string + BufSize - Buffer size + Status - Transfer status + +Returns: + + EFI_INVALID_PARAMETER - Parameter is error + EFI_SUCCESS - Success + EFI_TIMEOUT - Device has no response + +--*/ +{ + UINT16 Value; + + if (UsbIo == NULL) { + return EFI_INVALID_PARAMETER; + } + // + // Fill value, see USB1.1 spec + // + Value = (UINT16) ((USB_DT_STRING << 8) | Index); + + return UsbGetDescriptor ( + UsbIo, + Value, + LangID, + (UINT16) BufSize, + Buf, + Status + ); +} + +EFI_STATUS +UsbClearEndpointHalt ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 EndpointNo, + OUT UINT32 *Status + ) +/*++ + +Routine Description: + + Clear endpoint stall + +Arguments: + + UsbIo - EFI_USB_IO_PROTOCOL + EndpointNo - Endpoint Number + Status - Transfer Status + +Returns: + + EFI_NOT_FOUND - Can't find the Endpoint + EFI_DEVICE_ERROR - Hardware error + EFI_SUCCESS - Success + +--*/ +{ + EFI_STATUS Result; + EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; + EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor; + UINT8 Index; + + ZeroMem (&EndpointDescriptor, sizeof (EFI_USB_ENDPOINT_DESCRIPTOR)); + // + // First seach the endpoint descriptor for that endpoint addr + // + Result = UsbIo->UsbGetInterfaceDescriptor ( + UsbIo, + &InterfaceDescriptor + ); + if (EFI_ERROR (Result)) { + return Result; + } + + for (Index = 0; Index < InterfaceDescriptor.NumEndpoints; Index++) { + Result = UsbIo->UsbGetEndpointDescriptor ( + UsbIo, + Index, + &EndpointDescriptor + ); + if (EFI_ERROR (Result)) { + continue; + } + + if (EndpointDescriptor.EndpointAddress == EndpointNo) { + break; + } + } + + if (Index == InterfaceDescriptor.NumEndpoints) { + // + // No such endpoint + // + return EFI_NOT_FOUND; + } + + Result = UsbClearDeviceFeature ( + UsbIo, + EfiUsbEndpoint, + EfiUsbEndpointHalt, + EndpointDescriptor.EndpointAddress, + Status + ); + + return Result; +} diff --git a/MdePkg/Library/UefiUsbLib/hid.c b/MdePkg/Library/UefiUsbLib/hid.c new file mode 100644 index 0000000000..a98fbfb9a1 --- /dev/null +++ b/MdePkg/Library/UefiUsbLib/hid.c @@ -0,0 +1,464 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. 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. + + Module Name: + + hid.c + + Abstract: + + HID class request + + Revision History + +--*/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +// +// Function to get HID descriptor +// +EFI_STATUS +UsbGetHidDescriptor ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 InterfaceNum, + OUT EFI_USB_HID_DESCRIPTOR *HidDescriptor + ) +/*++ + + Routine Description: + Get Hid Descriptor + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL + InterfaceNum - Hid interface number + HidDescriptor - Caller allocated buffer to store Usb hid descriptor + if successfully returned. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + Request.RequestType = 0x81; + Request.Request = 0x06; + Request.Value = (UINT16) (0x21 << 8); + Request.Index = InterfaceNum; + Request.Length = sizeof (EFI_USB_HID_DESCRIPTOR); + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + HidDescriptor, + sizeof (EFI_USB_HID_DESCRIPTOR), + &Status + ); + + return Result; + +} +// +// Function to get Report Class descriptor +// +EFI_STATUS +UsbGetReportDescriptor ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 InterfaceNum, + IN UINT16 DescriptorSize, + OUT UINT8 *DescriptorBuffer + ) +/*++ + + Routine Description: + get Report Class descriptor + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL. + InterfaceNum - Report interface number. + DescriptorSize - Length of DescriptorBuffer. + DescriptorBuffer - Caller allocated buffer to store Usb report descriptor + if successfully returned. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x81; + Request.Request = 0x06; + Request.Value = (UINT16) (0x22 << 8); + Request.Index = InterfaceNum; + Request.Length = DescriptorSize; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + DescriptorBuffer, + DescriptorSize, + &Status + ); + + return Result; + +} +// +// Following are HID class request +// +EFI_STATUS +UsbGetProtocolRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 *Protocol + ) +/*++ + + Routine Description: + Get Hid Protocol Request + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL + Interface - Which interface the caller wants to get protocol + Protocol - Protocol value returned. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0xa1; + // + // 10100001b; + // + Request.Request = EFI_USB_GET_PROTOCOL_REQUEST; + Request.Value = 0; + Request.Index = Interface; + Request.Length = 1; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + Protocol, + sizeof (UINT8), + &Status + ); + + return Result; +} + + +EFI_STATUS +UsbSetProtocolRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 Protocol + ) +/*++ + + Routine Description: + Set Hid Protocol Request + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL + Interface - Which interface the caller wants to set protocol + Protocol - Protocol value the caller wants to set. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x21; + // + // 00100001b; + // + Request.Request = EFI_USB_SET_PROTOCOL_REQUEST; + Request.Value = Protocol; + Request.Index = Interface; + Request.Length = 0; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + &Status + ); + return Result; +} + + +EFI_STATUS +UsbSetIdleRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + IN UINT8 Duration + ) +/*++ + + Routine Description: + Set Idel request. + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL + Interface - Which interface the caller wants to set. + ReportId - Which report the caller wants to set. + Duration - Idle rate the caller wants to set. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x21; + // + // 00100001b; + // + Request.Request = EFI_USB_SET_IDLE_REQUEST; + Request.Value = (UINT16) ((Duration << 8) | ReportId); + Request.Index = Interface; + Request.Length = 0; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbNoData, + TIMEOUT_VALUE, + NULL, + 0, + &Status + ); + return Result; +} + +EFI_STATUS +UsbGetIdleRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + OUT UINT8 *Duration + ) +/*++ + + Routine Description: + Get Idel request. + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL + Interface - Which interface the caller wants to get. + ReportId - Which report the caller wants to get. + Duration - Idle rate the caller wants to get. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0xa1; + // + // 10100001b; + // + Request.Request = EFI_USB_GET_IDLE_REQUEST; + Request.Value = ReportId; + Request.Index = Interface; + Request.Length = 1; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + Duration, + 1, + &Status + ); + + return Result; +} + + +EFI_STATUS +UsbSetReportRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + IN UINT8 ReportType, + IN UINT16 ReportLen, + IN UINT8 *Report + ) +/*++ + + Routine Description: + Hid Set Report request. + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL + Interface - Which interface the caller wants to set. + ReportId - Which report the caller wants to set. + ReportType - Type of report. + ReportLen - Length of report descriptor. + Report - Report Descriptor buffer. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0x21; + // + // 00100001b; + // + Request.Request = EFI_USB_SET_REPORT_REQUEST; + Request.Value = (UINT16) ((ReportType << 8) | ReportId); + Request.Index = Interface; + Request.Length = ReportLen; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataOut, + TIMEOUT_VALUE, + Report, + ReportLen, + &Status + ); + + return Result; +} + +EFI_STATUS +UsbGetReportRequest ( + IN EFI_USB_IO_PROTOCOL *UsbIo, + IN UINT8 Interface, + IN UINT8 ReportId, + IN UINT8 ReportType, + IN UINT16 ReportLen, + IN UINT8 *Report + ) +/*++ + + Routine Description: + Hid Set Report request. + + Arguments: + UsbIo - EFI_USB_IO_PROTOCOL + Interface - Which interface the caller wants to set. + ReportId - Which report the caller wants to set. + ReportType - Type of report. + ReportLen - Length of report descriptor. + Report - Caller allocated buffer to store Report Descriptor. + + Returns: + EFI_SUCCESS + EFI_DEVICE_ERROR + EFI_TIMEOUT + +--*/ +{ + UINT32 Status; + EFI_STATUS Result; + EFI_USB_DEVICE_REQUEST Request; + + // + // Fill Device request packet + // + Request.RequestType = 0xa1; + // + // 10100001b; + // + Request.Request = EFI_USB_GET_REPORT_REQUEST; + Request.Value = (UINT16) ((ReportType << 8) | ReportId); + Request.Index = Interface; + Request.Length = ReportLen; + + Result = UsbIo->UsbControlTransfer ( + UsbIo, + &Request, + EfiUsbDataIn, + TIMEOUT_VALUE, + Report, + ReportLen, + &Status + ); + + return Result; +} diff --git a/MdePkg/MdePkg.dsc b/MdePkg/MdePkg.dsc index 3ecf1b9a79..f04e9388d7 100644 --- a/MdePkg/MdePkg.dsc +++ b/MdePkg/MdePkg.dsc @@ -120,7 +120,9 @@ ${WORKSPACE}/MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf ${WORKSPACE}\MdePkg\Library/UefiScsiLib/UefiScsiLib.inf ${WORKSPACE}/MdePkg/Library/DxeMemoryLib/DxeMemoryLib.inf - + ${WORKSPACE}/MdePkg/Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.inf + ${WORKSPACE}/MdePkg/Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.inf + ${WORKSPACE}/MdePkg/Library/UefiUsbLib/UefiUsbLib.inf [Components.IA32] ${WORKSPACE}\MdePkg\Library/BaseMemoryLibSse2/BaseMemoryLibSse2.inf diff --git a/MdePkg/MdePkg.nspd b/MdePkg/MdePkg.nspd index 1e21a6843c..978f6febaf 100644 --- a/MdePkg/MdePkg.nspd +++ b/MdePkg/MdePkg.nspd @@ -245,6 +245,9 @@ Library/UefiDriverEntryPoint/UefiDriverEntryPoint.msa Library/UefiLib/UefiLib.msa Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.msa + Library/BaseCustomDecompressLibNull/BaseCustomDecompressLibNull.msa + Library/DxeDebugLibSerialPort/DxeDebugLibSerialPort.msa + Library/UefiUsbLib/UefiUsbLib.msa Include/Base.h