Home | History | Annotate | Download | only in Protocol
      1 /** @file
      2 
      3   Copyright (c) 2013-2014, ARM Ltd. All rights reserved.<BR>
      4 
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 #ifndef __USB_DEVICE_PROTOCOL_H__
     16 #define __USB_DEVICE_PROTOCOL_H__
     17 
     18 #include <IndustryStandard/Usb.h>
     19 
     20 extern EFI_GUID gUsbDeviceProtocolGuid;
     21 
     22 /*
     23  * Note: This Protocol is just  the bare minimum for Android Fastboot. It
     24  * only makes sense for devices that only do Bulk Transfers and only have one
     25  * endpoint.
     26  */
     27 
     28 /*
     29   Callback to be called when data is received.
     30   Buffer is callee-allocated and it's the caller's responsibility to free it with
     31   FreePool.
     32 
     33   @param[in] Size        Size in bytes of data.
     34   @param[in] Buffer      Pointer to data.
     35 */
     36 typedef
     37 VOID
     38 (*USB_DEVICE_RX_CALLBACK) (
     39   IN UINTN    Size,
     40   IN VOID    *Buffer
     41   );
     42 
     43 /*
     44   Callback to be called when the host asks for data by sending an IN token
     45   (excluding during the data stage of a control transfer).
     46   When this function is called, data previously buffered by calling Send() has
     47   been sent.
     48 
     49   @param[in]Endpoint    Endpoint index, as specified in endpoint descriptors, of
     50                         the endpoint the IN token was sent to.
     51 */
     52 typedef
     53 VOID
     54 (*USB_DEVICE_TX_CALLBACK) (
     55   IN UINT8    EndpointIndex
     56   );
     57 
     58 /*
     59   Put data in the Tx buffer to be sent on the next IN token.
     60   Don't call this function again until the TxCallback has been called.
     61 
     62   @param[in]Endpoint    Endpoint index, as specified in endpoint descriptors, of
     63                         the endpoint to send the data from.
     64   @param[in]Size        Size in bytes of data.
     65   @param[in]Buffer      Pointer to data.
     66 
     67   @retval EFI_SUCCESS           The data was queued successfully.
     68   @retval EFI_INVALID_PARAMETER There was an error sending the data.
     69 */
     70 typedef
     71 EFI_STATUS
     72 (*USB_DEVICE_SEND) (
     73   IN       UINT8    EndpointIndex,
     74   IN       UINTN    Size,
     75   IN CONST VOID    *Buffer
     76   );
     77 
     78 /*
     79   Restart the USB peripheral controller and respond to enumeration.
     80 
     81   @param[in] DeviceDescriptor   pointer to device descriptor
     82   @param[in] Descriptors        Array of pointers to buffers, where
     83                                 Descriptors[n] contains the response to a
     84                                 GET_DESCRIPTOR request for configuration n. From
     85                                 USB Spec section 9.4.3:
     86                                 "The first interface descriptor follows the
     87                                 configuration descriptor. The endpoint
     88                                 descriptors for the first interface follow the
     89                                 first interface descriptor. If there are
     90                                 additional interfaces, their interface
     91                                 descriptor and endpoint descriptors follow the
     92                                 first interfaces endpoint descriptors".
     93 
     94                                 The size of each buffer is the TotalLength
     95                                 member of the Configuration Descriptor.
     96 
     97                                 The size of the array is
     98                                 DeviceDescriptor->NumConfigurations.
     99   @param[in]RxCallback          See USB_DEVICE_RX_CALLBACK
    100   @param[in]TxCallback          See USB_DEVICE_TX_CALLBACK
    101 */
    102 typedef
    103 EFI_STATUS
    104 (*USB_DEVICE_START) (
    105   IN USB_DEVICE_DESCRIPTOR     *DeviceDescriptor,
    106   IN VOID                     **Descriptors,
    107   IN USB_DEVICE_RX_CALLBACK     RxCallback,
    108   IN USB_DEVICE_TX_CALLBACK     TxCallback
    109   );
    110 
    111 typedef
    112 EFI_STATUS
    113 (*USB_DEVICE_REQUEST_RECEIVE) (
    114   IN UINTN  BufferSize
    115   );
    116 
    117 struct _USB_DEVICE_PROTOCOL {
    118   USB_DEVICE_START Start;
    119   USB_DEVICE_SEND  Send;
    120   USB_DEVICE_REQUEST_RECEIVE  Request;
    121 };
    122 
    123 typedef struct _USB_DEVICE_PROTOCOL USB_DEVICE_PROTOCOL;
    124 
    125 #endif //ifndef __USB_DEVICE_PROTOCOL_H__
    126