git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			242 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*++
 | |
| 
 | |
| 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:
 | |
| 
 | |
|   ScsiIo.h
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
|   SCSI I/O protocol.
 | |
| 
 | |
| --*/
 | |
| 
 | |
| #ifndef __SCSI_IO_H__
 | |
| #define __SCSI_IO_H__
 | |
| 
 | |
| #define EFI_SCSI_IO_PROTOCOL_GUID \
 | |
|   { 0x403cd195, 0xf233, 0x48ec, {0x84, 0x55, 0xb2, 0xe5, 0x2f, 0x1d, 0x9e, 0x2  } }
 | |
| 
 | |
| //
 | |
| // Forward reference for pure ANSI compatability
 | |
| //
 | |
| typedef struct _EFI_SCSI_IO_PROTOCOL  EFI_SCSI_IO_PROTOCOL;
 | |
| 
 | |
| //
 | |
| // SCSI Host Adapter Status definition
 | |
| //
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_OK                     0x00
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT_COMMAND        0x09    // timeout when processing the command
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT                0x0b    // timeout when waiting for the command processing
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_MESSAGE_REJECT         0x0d    // a message reject was received when processing command
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_RESET              0x0e    // a bus reset was detected
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_PARITY_ERROR           0x0f
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_REQUEST_SENSE_FAILED   0x10    // the adapter failed in issuing request sense command
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT      0x11    // selection timeout
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN  0x12    // data overrun or data underrun
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_FREE               0x13    // Unexepected bus free
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_PHASE_ERROR            0x14    // Target bus phase sequence failure
 | |
| #define EFI_SCSI_IO_STATUS_HOST_ADAPTER_OTHER                  0x7f
 | |
| 
 | |
| 
 | |
| //
 | |
| // SCSI Target Status definition
 | |
| //
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_GOOD                         0x00
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_CHECK_CONDITION              0x02    // check condition
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_CONDITION_MET                0x04    // condition met
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_BUSY                         0x08    // busy
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE                 0x10    // intermediate
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE_CONDITION_MET   0x14    // intermediate-condition met
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_RESERVATION_CONFLICT         0x18    // reservation conflict
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_COMMOND_TERMINATED           0x22    // command terminated
 | |
| #define EFI_SCSI_IO_STATUS_TARGET_QUEUE_FULL                   0x28    // queue full
 | |
| 
 | |
| typedef struct {
 | |
|   UINT64      Timeout;
 | |
|   VOID        *DataBuffer;
 | |
|   VOID        *SenseData;
 | |
|   VOID        *Cdb;
 | |
|   UINT32      TransferLength;
 | |
|   UINT8       CdbLength;
 | |
|   UINT8       DataDirection;
 | |
|   UINT8       HostAdapterStatus;
 | |
|   UINT8       TargetStatus;
 | |
|   UINT8       SenseDataLength;
 | |
| }EFI_SCSI_IO_SCSI_REQUEST_PACKET;
 | |
| 
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SCSI_IO_PROTOCOL_GET_DEVICE_TYPE) (
 | |
|   IN EFI_SCSI_IO_PROTOCOL     *This,
 | |
|   OUT UINT8                           *DeviceType
 | |
|   )
 | |
| /*++
 | |
| 
 | |
|   Routine Description:
 | |
|     Retrieves the device type information of the SCSI Controller.
 | |
|     
 | |
|   Arguments:
 | |
|     This                  - Protocol instance pointer.
 | |
|     DeviceType            - A pointer to the device type information
 | |
|                             retrieved from the SCSI Controller. 
 | |
| 
 | |
|   Returns:
 | |
|     EFI_SUCCESS            - Retrieves the device type information successfully.
 | |
|     EFI_INVALID_PARAMETER  - The DeviceType is NULL.
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SCSI_IO_PROTOCOL_GET_DEVICE_LOCATION) (
 | |
|   IN EFI_SCSI_IO_PROTOCOL   *This,
 | |
|   OUT UINT32                        *Target,
 | |
|   OUT UINT64                        *Lun
 | |
|   )
 | |
| /*++
 | |
|   Routine Description:
 | |
|     Retrieves the device location in the SCSI channel.
 | |
|     
 | |
|   Arguments:
 | |
|     This                  - Protocol instance pointer.
 | |
|     Target                - A pointer to the Target ID of a SCSI device 
 | |
|                             on the SCSI channel. 
 | |
|     Lun                    - A pointer to the LUN of the SCSI device on 
 | |
|                             the SCSI channel.
 | |
| 
 | |
|   Returns:
 | |
|     EFI_SUCCESS            - Retrieves the device location successfully.
 | |
|     EFI_INVALID_PARAMETER  - The Target or Lun is NULL.
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SCSI_IO_PROTOCOL_RESET_BUS) (
 | |
|   IN EFI_SCSI_IO_PROTOCOL     *This
 | |
|   )
 | |
| /*++
 | |
| 
 | |
|   Routine Description:
 | |
|     Resets the SCSI Bus that the SCSI Controller is attached to.
 | |
|     
 | |
|   Arguments:
 | |
|     This                  - Protocol instance pointer.
 | |
| 
 | |
|   Returns:
 | |
|     EFI_SUCCESS            - The SCSI bus is reset successfully.
 | |
|     EFI_DEVICE_ERROR      - Errors encountered when resetting the SCSI bus.
 | |
|     EFI_UNSUPPORTED        - The bus reset operation is not supported by the
 | |
|                             SCSI Host Controller.
 | |
|     EFI_TIMEOUT            - A timeout occurred while attempting to reset 
 | |
|                             the SCSI bus.
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SCSI_IO_PROTOCOL_RESET_DEVICE) (
 | |
|   IN EFI_SCSI_IO_PROTOCOL     *This
 | |
|   )
 | |
| /*++
 | |
| 
 | |
|   Routine Description:
 | |
|     Resets the SCSI Controller that the device handle specifies.
 | |
|     
 | |
|   Arguments:
 | |
|     This                  - Protocol instance pointer.
 | |
|     
 | |
| 
 | |
|   Returns:
 | |
|     EFI_SUCCESS            - Reset the SCSI controller successfully.
 | |
|     EFI_DEVICE_ERROR      - Errors are encountered when resetting the
 | |
|                             SCSI Controller.
 | |
|     EFI_UNSUPPORTED        - The SCSI bus does not support a device 
 | |
|                             reset operation.
 | |
|     EFI_TIMEOUT            - A timeout occurred while attempting to 
 | |
|                             reset the SCSI Controller.
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| 
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_SCSI_IO_PROTOCOL_EXEC_SCSI_CMD) (
 | |
|   IN EFI_SCSI_IO_PROTOCOL           *This,
 | |
|   IN OUT  EFI_SCSI_IO_SCSI_REQUEST_PACKET   *Packet,
 | |
|   IN EFI_EVENT                              Event  OPTIONAL
 | |
|   )
 | |
| /*++
 | |
| 
 | |
|   Routine Description:
 | |
|     Sends a SCSI Request Packet to the SCSI Controller for execution.
 | |
|     
 | |
|   Arguments:
 | |
|     This                  - Protocol instance pointer.
 | |
|     Packet                - The SCSI request packet to send to the SCSI 
 | |
|                             Controller specified by the device handle.
 | |
|     Event                  - If the SCSI bus where the SCSI device is attached
 | |
|                             does not support non-blocking I/O, then Event is 
 | |
|                             ignored, and blocking I/O is performed.  
 | |
|                             If Event is NULL, then blocking I/O is performed.
 | |
|                             If Event is not NULL and non-blocking I/O is 
 | |
|                             supported, then non-blocking I/O is performed,
 | |
|                             and Event will be signaled when the SCSI Request
 | |
|                             Packet completes.
 | |
|   Returns:
 | |
|     EFI_SUCCESS            - The SCSI Request Packet was sent by the host 
 | |
|                             successfully, and TransferLength bytes were 
 | |
|                             transferred to/from DataBuffer.See 
 | |
|                             HostAdapterStatus, TargetStatus, 
 | |
|                             SenseDataLength, and SenseData in that order
 | |
|                             for additional status information.
 | |
|     EFI_WARN_BUFFER_TOO_SMALL  - The SCSI Request Packet was executed, 
 | |
|                             but the entire DataBuffer could not be transferred.
 | |
|                             The actual number of bytes transferred is returned
 | |
|                             in TransferLength. See HostAdapterStatus, 
 | |
|                             TargetStatus, SenseDataLength, and SenseData in 
 | |
|                             that order for additional status information.
 | |
|     EFI_NOT_READY          - The SCSI Request Packet could not be sent because 
 | |
|                             there are too many SCSI Command Packets already 
 | |
|                             queued.The caller may retry again later.
 | |
|     EFI_DEVICE_ERROR      - A device error occurred while attempting to send 
 | |
|                             the SCSI Request Packet. See HostAdapterStatus, 
 | |
|                             TargetStatus, SenseDataLength, and SenseData in 
 | |
|                             that order for additional status information.
 | |
|     EFI_INVALID_PARAMETER  - The contents of CommandPacket are invalid.  
 | |
|                             The SCSI Request Packet was not sent, so no 
 | |
|                             additional status information is available.
 | |
|     EFI_UNSUPPORTED        - The command described by the SCSI Request Packet
 | |
|                             is not supported by the SCSI initiator(i.e., SCSI 
 | |
|                             Host Controller). The SCSI Request Packet was not
 | |
|                             sent, so no additional status information is 
 | |
|                             available.
 | |
|     EFI_TIMEOUT            - A timeout occurred while waiting for the SCSI 
 | |
|                             Request Packet to execute. See HostAdapterStatus,
 | |
|                             TargetStatus, SenseDataLength, and SenseData in 
 | |
|                             that order for additional status information.
 | |
| --*/
 | |
| ;
 | |
| 
 | |
| struct _EFI_SCSI_IO_PROTOCOL {
 | |
|     EFI_SCSI_IO_PROTOCOL_GET_DEVICE_TYPE      GetDeviceType;
 | |
|     EFI_SCSI_IO_PROTOCOL_GET_DEVICE_LOCATION  GetDeviceLocation;
 | |
|     EFI_SCSI_IO_PROTOCOL_RESET_BUS            ResetBus;
 | |
|     EFI_SCSI_IO_PROTOCOL_RESET_DEVICE         ResetDevice;
 | |
|     EFI_SCSI_IO_PROTOCOL_EXEC_SCSI_CMD        ExecuteSCSICommand;    
 | |
| };
 | |
| 
 | |
| extern EFI_GUID gEfiScsiIoProtocolGuid;
 | |
| 
 | |
| #endif
 | |
| 
 |