https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			483 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			483 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  The library provides USB HID Class standard and specific requests defined
 | 
						|
  in USB HID Firmware Specification 7 section : Requests.
 | 
						|
 | 
						|
  Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include "UefiUsbLibInternal.h"
 | 
						|
 | 
						|
//
 | 
						|
//  Hid RequestType Bits specifying characteristics of request.
 | 
						|
//  Valid values are 10100001b (0xa1) or 00100001b (0x21).
 | 
						|
//  The following description:
 | 
						|
//    7 Data transfer direction
 | 
						|
//        0 = Host to device
 | 
						|
//        1 = Device to host
 | 
						|
//    6..5 Type
 | 
						|
//        1 = Class
 | 
						|
//    4..0 Recipient
 | 
						|
//        1 = Interface
 | 
						|
//
 | 
						|
 | 
						|
/**
 | 
						|
  Get the descriptor of the specified USB HID interface.
 | 
						|
 | 
						|
  Submit a USB get HID descriptor request for the USB device specified by UsbIo
 | 
						|
  and Interface and return the HID descriptor in HidDescriptor.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
  If HidDescriptor is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo          A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface      The index of the HID interface on the USB target.
 | 
						|
  @param  HidDescriptor  The pointer to the USB HID descriptor that was retrieved from
 | 
						|
                         the specified USB target and interface. Type EFI_USB_HID_DESCRIPTOR
 | 
						|
                         is defined in the MDE Package Industry Standard include file Usb.h.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS       The request executed successfully.
 | 
						|
  @retval EFI_TIMEOUT       A timeout occurred executing the request.
 | 
						|
  @retval EFI_DEVICE_ERROR  The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbGetHidDescriptor (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL        *UsbIo,
 | 
						|
  IN  UINT8                      Interface,
 | 
						|
  OUT EFI_USB_HID_DESCRIPTOR     *HidDescriptor
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT(UsbIo != NULL);
 | 
						|
  ASSERT(HidDescriptor != NULL);
 | 
						|
 | 
						|
  Request.RequestType = USB_HID_GET_DESCRIPTOR_REQ_TYPE;
 | 
						|
  Request.Request     = USB_REQ_GET_DESCRIPTOR;
 | 
						|
  Request.Value       = (UINT16) (USB_DESC_TYPE_HID << 8);
 | 
						|
  Request.Index       = Interface;
 | 
						|
  Request.Length      = (UINT16) sizeof (EFI_USB_HID_DESCRIPTOR);
 | 
						|
 | 
						|
  Result = UsbIo->UsbControlTransfer (
 | 
						|
                    UsbIo,
 | 
						|
                    &Request,
 | 
						|
                    EfiUsbDataIn,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    HidDescriptor,
 | 
						|
                    sizeof (EFI_USB_HID_DESCRIPTOR),
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
 | 
						|
  return Result;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Get the report descriptor of the specified USB HID interface.
 | 
						|
 | 
						|
  Submit a USB get HID report descriptor request for the USB device specified by
 | 
						|
  UsbIo and Interface and return the report descriptor in DescriptorBuffer.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
  If DescriptorBuffer is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo             A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface         The index of the report interface on the USB target.
 | 
						|
  @param  DescriptorLength  The size, in bytes, of DescriptorBuffer.
 | 
						|
  @param  DescriptorBuffer  A pointer to the buffer to store the report class descriptor.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The request executed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  The request could not be completed because the
 | 
						|
                                 buffer specified by DescriptorLength and DescriptorBuffer
 | 
						|
                                 is not large enough to hold the result of the request.
 | 
						|
  @retval  EFI_TIMEOUT           A timeout occurred executing the request.
 | 
						|
  @retval  EFI_DEVICE_ERROR      The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbGetReportDescriptor (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | 
						|
  IN  UINT8                   Interface,
 | 
						|
  IN  UINT16                  DescriptorLength,
 | 
						|
  OUT UINT8                   *DescriptorBuffer
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT (UsbIo != NULL);
 | 
						|
  ASSERT (DescriptorBuffer != NULL);
 | 
						|
 | 
						|
  //
 | 
						|
  // Fill Device request packet
 | 
						|
  //
 | 
						|
  Request.RequestType = USB_HID_GET_DESCRIPTOR_REQ_TYPE;
 | 
						|
  Request.Request     = USB_REQ_GET_DESCRIPTOR;
 | 
						|
  Request.Value       = (UINT16) (USB_DESC_TYPE_REPORT << 8);
 | 
						|
  Request.Index       = Interface;
 | 
						|
  Request.Length      = DescriptorLength;
 | 
						|
 | 
						|
  Result = UsbIo->UsbControlTransfer (
 | 
						|
                    UsbIo,
 | 
						|
                    &Request,
 | 
						|
                    EfiUsbDataIn,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    DescriptorBuffer,
 | 
						|
                    DescriptorLength,
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
 | 
						|
  return Result;
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
  Get the HID protocol of the specified USB HID interface.
 | 
						|
 | 
						|
  Submit a USB get HID protocol request for the USB device specified by UsbIo
 | 
						|
  and Interface and return the protocol retrieved in Protocol.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
  If Protocol is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo      A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface  The index of the report interface on the USB target.
 | 
						|
  @param  Protocol   A pointer to the protocol for the specified USB target.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS       The request executed successfully.
 | 
						|
  @retval  EFI_TIMEOUT       A timeout occurred executing the request.
 | 
						|
  @retval  EFI_DEVICE_ERROR  The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbGetProtocolRequest (
 | 
						|
  IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | 
						|
  IN UINT8                   Interface,
 | 
						|
  OUT UINT8                   *Protocol
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT (UsbIo != NULL);
 | 
						|
  ASSERT (Protocol != NULL);
 | 
						|
 | 
						|
  //
 | 
						|
  // Fill Device request packet
 | 
						|
  //
 | 
						|
  Request.RequestType = USB_HID_CLASS_GET_REQ_TYPE;
 | 
						|
  Request.Request = EFI_USB_GET_PROTOCOL_REQUEST;
 | 
						|
  Request.Value   = 0;
 | 
						|
  Request.Index   = Interface;
 | 
						|
  Request.Length  = 1;
 | 
						|
 | 
						|
  Result = UsbIo->UsbControlTransfer (
 | 
						|
                    UsbIo,
 | 
						|
                    &Request,
 | 
						|
                    EfiUsbDataIn,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    Protocol,
 | 
						|
                    sizeof (UINT8),
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
 | 
						|
  return Result;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Set the HID protocol of the specified USB HID interface.
 | 
						|
 | 
						|
  Submit a USB set HID protocol request for the USB device specified by UsbIo
 | 
						|
  and Interface and set the protocol to the value specified by Protocol.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo      A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface  The index of the report interface on the USB target.
 | 
						|
  @param  Protocol   The protocol value to set for the specified USB target.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS       The request executed successfully.
 | 
						|
  @retval  EFI_TIMEOUT       A timeout occurred executing the request.
 | 
						|
  @retval  EFI_DEVICE_ERROR  The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbSetProtocolRequest (
 | 
						|
  IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | 
						|
  IN UINT8                   Interface,
 | 
						|
  IN UINT8                   Protocol
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT (UsbIo != NULL);
 | 
						|
 | 
						|
  //
 | 
						|
  // Fill Device request packet
 | 
						|
  //
 | 
						|
  Request.RequestType = USB_HID_CLASS_SET_REQ_TYPE;
 | 
						|
  Request.Request = EFI_USB_SET_PROTOCOL_REQUEST;
 | 
						|
  Request.Value   = Protocol;
 | 
						|
  Request.Index   = Interface;
 | 
						|
  Request.Length  = 0;
 | 
						|
 | 
						|
  Result = UsbIo->UsbControlTransfer (
 | 
						|
                    UsbIo,
 | 
						|
                    &Request,
 | 
						|
                    EfiUsbNoData,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    NULL,
 | 
						|
                    0,
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
  return Result;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Set the idle rate of the specified USB HID report.
 | 
						|
 | 
						|
  Submit a USB set HID report idle request for the USB device specified by UsbIo,
 | 
						|
  Interface, and ReportId, and set the idle rate to the value specified by Duration.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo      A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface  The index of the report interface on the USB target.
 | 
						|
  @param  ReportId   The identifier of the report to retrieve.
 | 
						|
  @param  Duration   The idle rate to set for the specified USB target.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS       The request executed successfully.
 | 
						|
  @retval  EFI_TIMEOUT       A timeout occurred executing the request.
 | 
						|
  @retval  EFI_DEVICE_ERROR  The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbSetIdleRequest (
 | 
						|
  IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | 
						|
  IN UINT8                   Interface,
 | 
						|
  IN UINT8                   ReportId,
 | 
						|
  IN UINT8                   Duration
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT (UsbIo != NULL);
 | 
						|
  //
 | 
						|
  // Fill Device request packet
 | 
						|
  //
 | 
						|
  Request.RequestType = USB_HID_CLASS_SET_REQ_TYPE;
 | 
						|
  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,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    NULL,
 | 
						|
                    0,
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
  return Result;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Get the idle rate of the specified USB HID report.
 | 
						|
 | 
						|
  Submit a USB get HID report idle request for the USB device specified by UsbIo,
 | 
						|
  Interface, and ReportId, and return the ide rate in Duration.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
  If Duration is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo      A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface  The index of the report interface on the USB target.
 | 
						|
  @param  ReportId   The identifier of the report to retrieve.
 | 
						|
  @param  Duration   A pointer to the idle rate retrieved from the specified USB target.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS       The request executed successfully.
 | 
						|
  @retval  EFI_TIMEOUT       A timeout occurred executing the request.
 | 
						|
  @retval  EFI_DEVICE_ERROR  The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbGetIdleRequest (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | 
						|
  IN  UINT8                   Interface,
 | 
						|
  IN  UINT8                   ReportId,
 | 
						|
  OUT UINT8                   *Duration
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT (UsbIo != NULL);
 | 
						|
  ASSERT (Duration != NULL);
 | 
						|
  //
 | 
						|
  // Fill Device request packet
 | 
						|
  //
 | 
						|
  Request.RequestType = USB_HID_CLASS_GET_REQ_TYPE;
 | 
						|
  Request.Request = EFI_USB_GET_IDLE_REQUEST;
 | 
						|
  Request.Value   = ReportId;
 | 
						|
  Request.Index   = Interface;
 | 
						|
  Request.Length  = 1;
 | 
						|
 | 
						|
  Result = UsbIo->UsbControlTransfer (
 | 
						|
                    UsbIo,
 | 
						|
                    &Request,
 | 
						|
                    EfiUsbDataIn,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    Duration,
 | 
						|
                    1,
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
 | 
						|
  return Result;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Set the report descriptor of the specified USB HID interface.
 | 
						|
 | 
						|
  Submit a USB set HID report request for the USB device specified by UsbIo,
 | 
						|
  Interface, ReportId, and ReportType, and set the report descriptor using the
 | 
						|
  buffer specified by ReportLength and Report.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
  If Report is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo         A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface     The index of the report interface on the USB target.
 | 
						|
  @param  ReportId      The identifier of the report to retrieve.
 | 
						|
  @param  ReportType    The type of report to retrieve.
 | 
						|
  @param  ReportLength  The size, in bytes, of Report.
 | 
						|
  @param  Report        A pointer to the report descriptor buffer to set.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS       The request executed successfully.
 | 
						|
  @retval  EFI_TIMEOUT       A timeout occurred executing the request.
 | 
						|
  @retval  EFI_DEVICE_ERROR  The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbSetReportRequest (
 | 
						|
  IN EFI_USB_IO_PROTOCOL     *UsbIo,
 | 
						|
  IN UINT8                   Interface,
 | 
						|
  IN UINT8                   ReportId,
 | 
						|
  IN UINT8                   ReportType,
 | 
						|
  IN UINT16                  ReportLen,
 | 
						|
  IN UINT8                   *Report
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT (UsbIo != NULL);
 | 
						|
  ASSERT (Report != NULL);
 | 
						|
 | 
						|
  //
 | 
						|
  // Fill Device request packet
 | 
						|
  //
 | 
						|
  Request.RequestType = USB_HID_CLASS_SET_REQ_TYPE;
 | 
						|
  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,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    Report,
 | 
						|
                    ReportLen,
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
 | 
						|
  return Result;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Get the report descriptor of the specified USB HID interface.
 | 
						|
 | 
						|
  Submit a USB get HID report request for the USB device specified by UsbIo,
 | 
						|
  Interface, ReportId, and ReportType, and return the report in the buffer
 | 
						|
  specified by Report.
 | 
						|
  If UsbIo is NULL, then ASSERT().
 | 
						|
  If Report is NULL, then ASSERT().
 | 
						|
 | 
						|
  @param  UsbIo         A pointer to the USB I/O Protocol instance for the specific USB target.
 | 
						|
  @param  Interface     The index of the report interface on the USB target.
 | 
						|
  @param  ReportId      The identifier of the report to retrieve.
 | 
						|
  @param  ReportType    The type of report to retrieve.
 | 
						|
  @param  ReportLength  The size, in bytes, of Report.
 | 
						|
  @param  Report        A pointer to the buffer to store the report descriptor.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The request executed successfully.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES  The request could not be completed because the
 | 
						|
                                 buffer specified by ReportLength and Report is not
 | 
						|
                                 large enough to hold the result of the request.
 | 
						|
  @retval  EFI_TIMEOUT           A timeout occurred executing the request.
 | 
						|
  @retval  EFI_DEVICE_ERROR      The request failed due to a device error.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
UsbGetReportRequest (
 | 
						|
  IN  EFI_USB_IO_PROTOCOL     *UsbIo,
 | 
						|
  IN  UINT8                   Interface,
 | 
						|
  IN  UINT8                   ReportId,
 | 
						|
  IN  UINT8                   ReportType,
 | 
						|
  IN  UINT16                  ReportLen,
 | 
						|
  OUT UINT8                   *Report
 | 
						|
  )
 | 
						|
{
 | 
						|
  UINT32                  Status;
 | 
						|
  EFI_STATUS              Result;
 | 
						|
  EFI_USB_DEVICE_REQUEST  Request;
 | 
						|
 | 
						|
  ASSERT (UsbIo != NULL);
 | 
						|
  ASSERT (Report != NULL);
 | 
						|
 | 
						|
  //
 | 
						|
  // Fill Device request packet
 | 
						|
  //
 | 
						|
  Request.RequestType = USB_HID_CLASS_GET_REQ_TYPE;
 | 
						|
  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,
 | 
						|
                    PcdGet32 (PcdUsbTransferTimeoutValue),
 | 
						|
                    Report,
 | 
						|
                    ReportLen,
 | 
						|
                    &Status
 | 
						|
                    );
 | 
						|
 | 
						|
  return Result;
 | 
						|
}
 |