4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The library provides the USB Standard Device Requests defined
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in Usb specification 9.4 section.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials are
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync licensed and made available under the terms and conditions of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the BSD License which accompanies this distribution. The full
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "UefiUsbLibInternal.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the descriptor of the specified USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB get descriptor request for the USB device specified by UsbIo, Value,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and Index, and return the descriptor in the buffer specified by Descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The status of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Descriptor is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Value The device request value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Index The device request index.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DescriptorLength The size, in bytes, of Descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Descriptor A pointer to the descriptor buffer to get.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The request could not be completed because the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync buffer specified by DescriptorLength and Descriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is not large enough to hold the result of the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error. The transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbGetDescriptor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Value,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Index,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 DescriptorLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID *Descriptor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Descriptor != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_GET_DESCRIPTOR_REQ_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_GET_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Value = Value;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Index = Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Length = DescriptorLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbDataIn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Descriptor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DescriptorLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the descriptor of the specified USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB set descriptor request for the USB device specified by UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Value, and Index, and set the descriptor using the buffer specified by DesriptorLength
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and Descriptor. The status of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Descriptor is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Value The device request value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Index The device request index.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DescriptorLength The size, in bytes, of Descriptor.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Descriptor A pointer to the descriptor buffer to set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbSetDescriptor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Value,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Index,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 DescriptorLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Descriptor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Descriptor != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_SET_DESCRIPTOR_REQ_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_SET_DESCRIPTOR;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Value = Value;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Index = Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Length = DescriptorLength;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbDataOut,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Descriptor,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DescriptorLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the interface setting of the specified USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB get interface request for the USB device specified by UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and Interface, and place the result in the buffer specified by AlternateSetting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The status of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If AlternateSetting is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Interface The interface index value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param AlternateSetting A pointer to the alternate setting to be retrieved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbGetInterface (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Interface,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT16 *AlternateSetting,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (AlternateSetting != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *AlternateSetting = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_GET_INTERFACE_REQ_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_GET_INTERFACE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Index = Interface;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Length = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbDataIn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AlternateSetting,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the interface setting of the specified USB device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB set interface request for the USB device specified by UsbIo, and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Interface, and set the alternate setting to the value specified by AlternateSetting.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The status of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Interface The interface index value.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param AlternateSetting The alternate setting to be set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbSetInterface (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Interface,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 AlternateSetting,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_SET_INTERFACE_REQ_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_SET_INTERFACE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Value = AlternateSetting;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Index = Interface;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbNoData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the device configuration.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB get configuration request for the USB device specified by UsbIo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and place the result in the buffer specified by ConfigurationValue. The status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If ConfigurationValue is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ConfigurationValue A pointer to the device configuration to be retrieved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbGetConfiguration (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT16 *ConfigurationValue,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (ConfigurationValue != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync *ConfigurationValue = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_GET_CONFIGURATION_REQ_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_GET_CONFIG;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Length = 1;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbDataIn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ConfigurationValue,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the device configuration.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB set configuration request for the USB device specified by UsbIo
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and set the device configuration to the value specified by ConfigurationValue.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The status of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ConfigurationValue The device configuration value to be set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbSetConfiguration (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 ConfigurationValue,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_SET_CONFIGURATION_REQ_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_SET_CONFIG;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Value = ConfigurationValue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbNoData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Set the specified feature of the specified device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB set device feature request for the USB device specified by UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Recipient, and Target to the value specified by Value. The status of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Recipient The USB data recipient type (i.e. Device, Interface, Endpoint).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Type USB_TYPES_DEFINITION is defined in the MDE Package Industry
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Standard include file Usb.h.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Value The value of the feature to be set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target The index of the device to be set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbSetFeature (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_TYPES_DEFINITION Recipient,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Value,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync switch (Recipient) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_DEVICE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_SET_FEATURE_REQ_TYPE_D;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_INTERFACE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_SET_FEATURE_REQ_TYPE_I;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_ENDPOINT:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_SET_FEATURE_REQ_TYPE_E;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync default:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Fill device request, see USB1.1 spec
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_SET_FEATURE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Value = Value;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Index = Target;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbNoData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Clear the specified feature of the specified device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB clear device feature request for the USB device specified by UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Recipient, and Target to the value specified by Value. The status of the transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Recipient The USB data recipient type (i.e. Device, Interface, Endpoint).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Type USB_TYPES_DEFINITION is defined in the MDE Package Industry Standard
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync include file Usb.h.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Value The value of the feature to be cleared.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target The index of the device to be cleared.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbClearFeature (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_TYPES_DEFINITION Recipient,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Value,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync switch (Recipient) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_DEVICE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_CLEAR_FEATURE_REQ_TYPE_D;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_INTERFACE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_CLEAR_FEATURE_REQ_TYPE_I;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_ENDPOINT:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_CLEAR_FEATURE_REQ_TYPE_E;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync default:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Fill device request, see USB1.1 spec
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_CLEAR_FEATURE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Value = Value;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Index = Target;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbNoData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Get the status of the specified device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Submit a USB device get status request for the USB device specified by UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Recipient, and Target and place the result in the buffer specified by DeviceStatus.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The status of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If DeviceStatus is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Recipient The USB data recipient type (i.e. Device, Interface, Endpoint).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Type USB_TYPES_DEFINITION is defined in the MDE Package Industry Standard
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync include file Usb.h.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target The index of the device to be get the status of.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DeviceStatus A pointer to the device status to be retrieved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbGetStatus (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN USB_TYPES_DEFINITION Recipient,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT16 *DeviceStatus,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_DEVICE_REQUEST DevReq;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (DeviceStatus != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&DevReq, sizeof (EFI_USB_DEVICE_REQUEST));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync switch (Recipient) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_DEVICE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_GET_STATUS_REQ_TYPE_D;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_INTERFACE:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_GET_STATUS_REQ_TYPE_I;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync case USB_TARGET_ENDPOINT:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.RequestType = USB_DEV_GET_STATUS_REQ_TYPE_E;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync default:
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // Fill device request, see USB1.1 spec
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Request = USB_REQ_GET_STATUS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Value = 0;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Index = Target;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevReq.Length = 2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return UsbIo->UsbControlTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &DevReq,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUsbDataIn,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PcdGet32 (PcdUsbTransferTimeoutValue),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DeviceStatus,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Clear halt feature of the specified usb endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieve the USB endpoint descriptor specified by UsbIo and EndPoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the USB endpoint descriptor can not be retrieved, then return EFI_NOT_FOUND.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the endpoint descriptor is found, then clear the halt feature of this USB endpoint.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The status of the transfer is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If UsbIo is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Status is NULL, then ASSERT().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param UsbIo A pointer to the USB I/O Protocol instance for the specific USB target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Endpoint The endpoint address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Status A pointer to the status of the transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The request executed successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred executing the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The request failed due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The transfer status is returned in Status.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The specified USB endpoint descriptor can not be found
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUsbClearEndpointHalt (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_USB_IO_PROTOCOL *UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Endpoint,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT32 *Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync{
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_STATUS Result;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_ENDPOINT_DESCRIPTOR EndpointDescriptor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Index;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (UsbIo != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ASSERT (Status != NULL);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ZeroMem (&EndpointDescriptor, sizeof (EFI_USB_ENDPOINT_DESCRIPTOR));
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // First seach the endpoint descriptor for that endpoint addr
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Result = UsbIo->UsbGetInterfaceDescriptor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &InterfaceDescriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Result)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Result;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for (Index = 0; Index < InterfaceDescriptor.NumEndpoints; Index++) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Result = UsbIo->UsbGetEndpointDescriptor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Index,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync &EndpointDescriptor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EFI_ERROR (Result)) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continue;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (EndpointDescriptor.EndpointAddress == Endpoint) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync break;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if (Index == InterfaceDescriptor.NumEndpoints) {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // No such endpoint
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return EFI_NOT_FOUND;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Result = UsbClearFeature (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UsbIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_TARGET_ENDPOINT,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync USB_FEATURE_ENDPOINT_HALT,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EndpointDescriptor.EndpointAddress,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return Result;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync}