/*++

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:

    UsbAtapi.h
    
Abstract:

    EFI Atapi Protocol definition.

Revision History

--*/

#ifndef _EFI_USB_ATAPI_H
#define _EFI_USB_ATAPI_H

//
// Transfer protocol types
//
#define BOT    0x50
#define CBI0  0x00
#define CBI1  0x01

//
// SubClass Code (defines command set)
//
#define EFI_USB_SUBCLASS_RBC            0x01
#define EFI_USB_SUBCLASS_ATAPI          0x02
#define EFI_USB_SUBCLASS_QIC_157        0x03
#define EFI_USB_SUBCLASS_UFI            0x04
#define EFI_USB_SUBCLASS_SFF_8070i      0x05
#define EFI_USB_SUBCLASS_SCSI           0x06
#define EFI_USB_SUBCLASS_RESERVED_LOW   0x07
#define EFI_USB_SUBCLASS_RESERVED_HIGH  0xff
//
// Global GUID for transfer protocol interface
//
#define EFI_USB_ATAPI_PROTOCOL_GUID \
    { 0x2B2F68DA, 0x0CD2, 0x44cf, {0x8E, 0x8B, 0xBB, 0xA2, 0x0B, 0x1B, 0x5B, 0x75 } }

typedef struct _EFI_USB_ATAPI_PROTOCOL EFI_USB_ATAPI_PROTOCOL;

typedef
EFI_STATUS
(EFIAPI *EFI_USB_ATAPI_PACKET_CMD) (
  IN EFI_USB_ATAPI_PROTOCOL  *This,
  IN  VOID                            *Command,
  IN  UINT8                            CommandSize,
  IN  VOID                            *DataBuffer,
  IN  UINT32                          BufferLength,
  IN  EFI_USB_DATA_DIRECTION          Direction,
  IN  UINT16                          TimeOutInMilliSeconds
);    

typedef
EFI_STATUS
(EFIAPI *EFI_USB_MASS_STORAGE_RESET) (
  IN EFI_USB_ATAPI_PROTOCOL  *This,
  IN  BOOLEAN                         ExtendedVerification
);

//
//  Protocol Interface Structure
//
struct _EFI_USB_ATAPI_PROTOCOL {
  EFI_USB_ATAPI_PACKET_CMD        UsbAtapiPacketCmd;
  EFI_USB_MASS_STORAGE_RESET      UsbAtapiReset;
  UINT32                          CommandProtocol;
};

extern EFI_GUID gEfiUsbAtapiProtocolGuid;

#endif
