Home | History | Annotate | Download | only in UsbMassStorageDxe
      1 /** @file
      2   Defination for the USB mass storage Control/Bulk/Interrupt (CBI) transport,
      3   according to USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport, Revision 1.1.
      4 
      5 Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 #ifndef _EFI_USBMASS_CBI_H_
     17 #define _EFI_USBMASS_CBI_H_
     18 
     19 extern USB_MASS_TRANSPORT mUsbCbi0Transport;
     20 extern USB_MASS_TRANSPORT mUsbCbi1Transport;
     21 
     22 #define USB_CBI_MAX_PACKET_NUM        16
     23 #define USB_CBI_RESET_CMD_LEN         12
     24 //
     25 // USB CBI retry C/B/I transport times, set by experience
     26 //
     27 #define USB_CBI_MAX_RETRY             3
     28 //
     29 // Time to wait for USB CBI reset to complete, set by experience
     30 //
     31 #define USB_CBI_RESET_DEVICE_STALL    (50 * USB_MASS_1_MILLISECOND)
     32 //
     33 // USB CBI transport timeout, set by experience
     34 //
     35 #define USB_CBI_RESET_DEVICE_TIMEOUT  (1 * USB_MASS_1_SECOND)
     36 
     37 typedef struct {
     38   //
     39   // Put Interface at the first field to make it easy to distinguish BOT/CBI Protocol instance
     40   //
     41   EFI_USB_INTERFACE_DESCRIPTOR  Interface;
     42   EFI_USB_ENDPOINT_DESCRIPTOR   *BulkInEndpoint;
     43   EFI_USB_ENDPOINT_DESCRIPTOR   *BulkOutEndpoint;
     44   EFI_USB_ENDPOINT_DESCRIPTOR   *InterruptEndpoint;
     45   EFI_USB_IO_PROTOCOL           *UsbIo;
     46 } USB_CBI_PROTOCOL;
     47 
     48 #pragma pack(1)
     49 typedef struct {
     50   UINT8               Type;
     51   UINT8               Value;
     52 } USB_CBI_STATUS;
     53 #pragma pack()
     54 
     55 /**
     56   Initializes USB CBI protocol.
     57 
     58   This function initializes the USB mass storage class CBI protocol.
     59   It will save its context which is a USB_CBI_PROTOCOL structure
     60   in the Context if Context isn't NULL.
     61 
     62   @param  UsbIo                 The USB I/O Protocol instance
     63   @param  Context               The buffer to save the context to
     64 
     65   @retval EFI_SUCCESS           The device is successfully initialized.
     66   @retval EFI_UNSUPPORTED       The transport protocol doesn't support the device.
     67   @retval Other                 The USB CBI initialization fails.
     68 
     69 **/
     70 EFI_STATUS
     71 UsbCbiInit (
     72   IN  EFI_USB_IO_PROTOCOL   *UsbIo,
     73   OUT VOID                  **Context       OPTIONAL
     74   );
     75 
     76 /**
     77   Execute USB mass storage command through the CBI0/CBI1 transport protocol.
     78 
     79   @param  Context               The USB CBI Protocol.
     80   @param  Cmd                   The command to transfer to device
     81   @param  CmdLen                The length of the command
     82   @param  DataDir               The direction of data transfer
     83   @param  Data                  The buffer to hold the data
     84   @param  DataLen               The length of the buffer
     85   @param  Lun                   Should be 0, this field for bot only
     86   @param  Timeout               The time to wait
     87   @param  CmdStatus             The result of the command execution
     88 
     89   @retval EFI_SUCCESS           The command is executed successfully.
     90   @retval Other                 Failed to execute the command
     91 
     92 **/
     93 EFI_STATUS
     94 UsbCbiExecCommand (
     95   IN  VOID                    *Context,
     96   IN  VOID                    *Cmd,
     97   IN  UINT8                   CmdLen,
     98   IN  EFI_USB_DATA_DIRECTION  DataDir,
     99   IN  VOID                    *Data,
    100   IN  UINT32                  DataLen,
    101   IN  UINT8                   Lun,
    102   IN  UINT32                  Timeout,
    103   OUT UINT32                  *CmdStatus
    104   );
    105 
    106 /**
    107   Reset the USB mass storage device by CBI protocol.
    108 
    109   This function resets the USB mass storage device by CBI protocol.
    110   The reset is defined as a non-data command. Don't use UsbCbiExecCommand
    111   to send the command to device because that may introduce recursive loop.
    112 
    113   @param  Context               The USB CBI protocol
    114   @param  ExtendedVerification  The flag controlling the rule of reset.
    115                                 Not used here.
    116 
    117   @retval EFI_SUCCESS           The device is reset.
    118   @retval Others                Failed to reset the device.
    119 
    120 **/
    121 EFI_STATUS
    122 UsbCbiResetDevice (
    123   IN  VOID                    *Context,
    124   IN  BOOLEAN                  ExtendedVerification
    125   );
    126 
    127 /**
    128   Clean up the CBI protocol's resource.
    129 
    130   @param  Context               The instance of CBI protocol.
    131 
    132   @retval EFI_SUCCESS           The resource is cleaned up.
    133 
    134 **/
    135 EFI_STATUS
    136 UsbCbiCleanUp (
    137   IN  VOID                   *Context
    138   );
    139 
    140 #endif
    141