/*++

Copyright (c) 2006 - 2007, 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
