13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
2f57387d54bd8f2c0261834b2ad16155f1db63291hhtian  Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
3f57387d54bd8f2c0261834b2ad16155f1db63291hhtian  This program and the accompanying materials
43eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  are licensed and made available under the terms and conditions of the BSD License
53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  which accompanies this distribution.  The full text of the license may be found at
63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  http://opensource.org/licenses/bsd-license.php
73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name:
123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    ScsiIo.h
143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract:
163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_SCSI_IO_PROTOCOL as defined in UEFI 2.0.
173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRevision History
193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifndef __EFI_SCSI_IO_PROTOCOL_H__
233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define __EFI_SCSI_IO_PROTOCOL_H__
243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_PROTOCOL_GUID \
263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  { \
273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    0x932f47e6, 0x2362, 0x4002, {0x80, 0x3e, 0x3c, 0xd5, 0x4b, 0x13, 0x8f, 0x85 } \
283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  }
293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Forward reference for pure ANSI compatability
323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct _EFI_SCSI_IO_PROTOCOL EFI_SCSI_IO_PROTOCOL;
343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// SCSI Data Direction definition
373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_DATA_DIRECTION_READ                        0
393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_DATA_DIRECTION_WRITE                       1
403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_DATA_DIRECTION_BIDIRECTIONAL               2
413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// SCSI Host Adapter Status definition
443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_OK                     0x00
463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT_COMMAND        0x09    // timeout when processing the command
473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT                0x0b    // timeout when waiting for the command processing
483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_MESSAGE_REJECT         0x0d    // a message reject was received when processing command
493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_RESET              0x0e    // a bus reset was detected
503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_PARITY_ERROR           0x0f
513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_REQUEST_SENSE_FAILED   0x10    // the adapter failed in issuing request sense command
523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT      0x11    // selection timeout
533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN  0x12    // data overrun or data underrun
543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_FREE               0x13    // Unexepected bus free
553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_PHASE_ERROR            0x14    // Target bus phase sequence failure
563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_OTHER                  0x7f
573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// SCSI Target Status definition
613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_GOOD                         0x00
633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_CHECK_CONDITION              0x02    // check condition
643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_CONDITION_MET                0x04    // condition met
653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_BUSY                         0x08    // busy
663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE                 0x10    // intermediate
673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE_CONDITION_MET   0x14    // intermediate-condition met
683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_RESERVATION_CONFLICT         0x18    // reservation conflict
693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_COMMOND_TERMINATED           0x22    // command terminated
703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_SCSI_IO_STATUS_TARGET_QUEUE_FULL                   0x28    // queue full
713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct {
733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT64                              Timeout;
743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VOID                                *InDataBuffer;
753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VOID                                *OutDataBuffer;
763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VOID                                *SenseData;
773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  VOID                                *Cdb;
783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                              InTransferLength;
793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                              OutTransferLength;
803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                               CdbLength;
813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                               DataDirection;
823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                               HostAdapterStatus;
833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                               TargetStatus;
843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8                               SenseDataLength;
853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_SCSI_IO_SCSI_REQUEST_PACKET;
863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_SCSI_IO_PROTOCOL_GET_DEVICE_TYPE) (
903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  EFI_SCSI_IO_PROTOCOL            *This,
913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT8                           *DeviceType
923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Retrieves the device type information of the SCSI Controller.
973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This       - Protocol instance pointer.
1003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    DeviceType - A pointer to the device type information
1013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                 retrieved from the SCSI Controller.
1023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
1043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS           - Retrieves the device type information successfully.
1053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_INVALID_PARAMETER - The DeviceType is NULL.
1063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
1093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
1113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_SCSI_IO_PROTOCOL_GET_DEVICE_LOCATION) (
1133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_SCSI_IO_PROTOCOL           *This,
1143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT UINT8                      **Target,
1153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT64                        *Lun
1163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
1203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Retrieves the device location in the SCSI channel.
1213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
1233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This    - Protocol instance pointer.
1243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Target  - A pointer to the Target Array which represents ID of a SCSI device
1253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              on the SCSI channel.
1263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Lun     - A pointer to the LUN of the SCSI device on
1273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              the SCSI channel.
1283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
1303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS           - Retrieves the device location successfully.
1313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_INVALID_PARAMETER - The Target or Lun is NULL.
1323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
1353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
1373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_SCSI_IO_PROTOCOL_RESET_BUS) (
1393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_SCSI_IO_PROTOCOL     *This
1403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
1443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Resets the SCSI Bus that the SCSI Controller is attached to.
1453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
1473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This  - This Protocol instance pointer.
1483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
1503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS      - The SCSI bus is reset successfully.
1513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_DEVICE_ERROR - Errors encountered when resetting the SCSI bus.
1523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_UNSUPPORTED  - The bus reset operation is not supported by the
1533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                       SCSI Host Controller.
1543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_TIMEOUT      - A timeout occurred while attempting to reset
1553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                       the SCSI bus.
1563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
1593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
1613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_SCSI_IO_PROTOCOL_RESET_DEVICE) (
1633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_SCSI_IO_PROTOCOL     *This
1643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
1683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Resets the SCSI Controller that the device handle specifies.
1693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
1713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This - Protocol instance pointer.
1723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
1743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS       - Reset the SCSI controller successfully.
1753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_DEVICE_ERROR  - Errors are encountered when resetting the
1763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                        SCSI Controller.
1773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_UNSUPPORTED   - The SCSI bus does not support a device
1783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                        reset operation.
1793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_TIMEOUT       - A timeout occurred while attempting to
1803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                        reset the SCSI Controller.
1813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
1843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
1863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_SCSI_IO_PROTOCOL_EXEC_SCSI_COMMAND) (
1883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_SCSI_IO_PROTOCOL                   *This,
1893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN OUT  EFI_SCSI_IO_SCSI_REQUEST_PACKET   *Packet,
1903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_EVENT                              Event  OPTIONAL
1913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
1953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Sends a SCSI Request Packet to the SCSI Controller for execution.
1963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
1983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This    - Protocol instance pointer.
1993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Packet  - The SCSI request packet to send to the SCSI
2003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              Controller specified by the device handle.
2013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Event   - If the SCSI bus where the SCSI device is attached
2023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              does not support non-blocking I/O, then Event is
2033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              ignored, and blocking I/O is performed.
2043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              If Event is NULL, then blocking I/O is performed.
2053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              If Event is not NULL and non-blocking I/O is
2063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              supported, then non-blocking I/O is performed,
2073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              and Event will be signaled when the SCSI Request
2083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang              Packet completes.
2093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
2113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS                - The SCSI Request Packet was sent by the host
2123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 successfully, and TransferLength bytes were
2133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 transferred to/from DataBuffer.See
2143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 HostAdapterStatus, TargetStatus,
2153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 SenseDataLength, and SenseData in that order
2163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 for additional status information.
2173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_BAD_BUFFER_SIZE        - The SCSI Request Packet was executed,
2183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 but the entire DataBuffer could not be transferred.
2193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 The actual number of bytes transferred is returned
2203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 in TransferLength. See HostAdapterStatus,
2213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 TargetStatus, SenseDataLength, and SenseData in
2223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 that order for additional status information.
2233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_NOT_READY              - The SCSI Request Packet could not be sent because
2243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 there are too many SCSI Command Packets already
2253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 queued.The caller may retry again later.
2263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_DEVICE_ERROR           - A device error occurred while attempting to send
2273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 the SCSI Request Packet. See HostAdapterStatus,
2283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 TargetStatus, SenseDataLength, and SenseData in
2293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 that order for additional status information.
2303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_INVALID_PARAMETER      - The contents of CommandPacket are invalid.
2313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 The SCSI Request Packet was not sent, so no
2323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 additional status information is available.
2333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_UNSUPPORTED            - The command described by the SCSI Request Packet
2343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 is not supported by the SCSI initiator(i.e., SCSI
2353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 Host Controller). The SCSI Request Packet was not
2363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 sent, so no additional status information is
2373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 available.
2383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_TIMEOUT                - A timeout occurred while waiting for the SCSI
2393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 Request Packet to execute. See HostAdapterStatus,
2403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 TargetStatus, SenseDataLength, and SenseData in
2413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                                 that order for additional status information.
2423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
2433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
2443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangstruct _EFI_SCSI_IO_PROTOCOL {
2463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_SCSI_IO_PROTOCOL_GET_DEVICE_TYPE      GetDeviceType;
2473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_SCSI_IO_PROTOCOL_GET_DEVICE_LOCATION  GetDeviceLocation;
2483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_SCSI_IO_PROTOCOL_RESET_BUS            ResetBus;
2493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_SCSI_IO_PROTOCOL_RESET_DEVICE         ResetDevice;
2503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_SCSI_IO_PROTOCOL_EXEC_SCSI_COMMAND    ExecuteScsiCommand;
2513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32                                    IoAlign;
2523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang};
2533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangextern EFI_GUID gEfiScsiIoProtocolGuid;
2553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
257