/** @file\r
EFI_SCSI_IO_PROTOCOL as defined in UEFI 2.0.\r
- This protocol is used by code, typically drivers, running in the EFI boot \r
- services environment to access SCSI devices. In particular, functions for \r
+ This protocol is used by code, typically drivers, running in the EFI boot\r
+ services environment to access SCSI devices. In particular, functions for\r
managing devices on SCSI buses are defined here.\r
\r
- Copyright (c) 2006 - 2008, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+ Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
#define EFI_SCSI_IO_PROTOCOL_GUID \\r
{ \\r
- 0x932f4736, 0x2362, 0x4002, {0x80, 0x3e, 0x3c, 0xd5, 0x4b, 0x13, 0x8f, 0x85 } \\r
+ 0x932f47e6, 0x2362, 0x4002, {0x80, 0x3e, 0x3c, 0xd5, 0x4b, 0x13, 0x8f, 0x85 } \\r
}\r
\r
///\r
///\r
typedef struct _EFI_SCSI_IO_PROTOCOL EFI_SCSI_IO_PROTOCOL;\r
\r
+//\r
+// SCSI Device type information, defined in the SCSI Primary Commands standard (e.g., SPC-4)\r
+//\r
+#define EFI_SCSI_IO_TYPE_DISK 0x00 ///< Disk device\r
+#define EFI_SCSI_IO_TYPE_TAPE 0x01 ///< Tape device\r
+#define EFI_SCSI_IO_TYPE_PRINTER 0x02 ///< Printer\r
+#define EFI_SCSI_IO_TYPE_PROCESSOR 0x03 ///< Processor\r
+#define EFI_SCSI_IO_TYPE_WORM 0x04 ///< Write-once read-multiple\r
+#define EFI_SCSI_IO_TYPE_CDROM 0x05 ///< CD or DVD device\r
+#define EFI_SCSI_IO_TYPE_SCANNER 0x06 ///< Scanner device\r
+#define EFI_SCSI_IO_TYPE_OPTICAL 0x07 ///< Optical memory device\r
+#define EFI_SCSI_IO_TYPE_MEDIUMCHANGER 0x08 ///< Medium Changer device\r
+#define EFI_SCSI_IO_TYPE_COMMUNICATION 0x09 ///< Communications device\r
+#define MFI_SCSI_IO_TYPE_A 0x0A ///< Obsolete\r
+#define MFI_SCSI_IO_TYPE_B 0x0B ///< Obsolete\r
+#define MFI_SCSI_IO_TYPE_RAID 0x0C ///< Storage array controller device (e.g., RAID)\r
+#define MFI_SCSI_IO_TYPE_SES 0x0D ///< Enclosure services device\r
+#define MFI_SCSI_IO_TYPE_RBC 0x0E ///< Simplified direct-access device (e.g., magnetic disk)\r
+#define MFI_SCSI_IO_TYPE_OCRW 0x0F ///< Optical card reader/writer device\r
+#define MFI_SCSI_IO_TYPE_BRIDGE 0x10 ///< Bridge Controller Commands\r
+#define MFI_SCSI_IO_TYPE_OSD 0x11 ///< Object-based Storage Device\r
+#define EFI_SCSI_IO_TYPE_RESERVED_LOW 0x12 ///< Reserved (low)\r
+#define EFI_SCSI_IO_TYPE_RESERVED_HIGH 0x1E ///< Reserved (high)\r
+#define EFI_SCSI_IO_TYPE_UNKNOWN 0x1F ///< Unknown no device type\r
+\r
//\r
// SCSI Data Direction definition\r
//\r
// SCSI Host Adapter Status definition\r
//\r
#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_OK 0x00\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT_COMMAND 0x09 // timeout when processing the command\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT 0x0b // timeout when waiting for the command processing\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_MESSAGE_REJECT 0x0d // a message reject was received when processing command\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_RESET 0x0e // a bus reset was detected\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT_COMMAND 0x09 ///< timeout when processing the command\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_TIMEOUT 0x0b ///< timeout when waiting for the command processing\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_MESSAGE_REJECT 0x0d ///< a message reject was received when processing command\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_RESET 0x0e ///< a bus reset was detected\r
#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_PARITY_ERROR 0x0f\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_REQUEST_SENSE_FAILED 0x10 // the adapter failed in issuing request sense command\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT 0x11 // selection timeout\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN 0x12 // data overrun or data underrun\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_FREE 0x13 // Unexepected bus free\r
-#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_PHASE_ERROR 0x14 // Target bus phase sequence failure\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_REQUEST_SENSE_FAILED 0x10 ///< the adapter failed in issuing request sense command\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_SELECTION_TIMEOUT 0x11 ///< selection timeout\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN 0x12 ///< data overrun or data underrun\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_BUS_FREE 0x13 ///< Unexepected bus free\r
+#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_PHASE_ERROR 0x14 ///< Target bus phase sequence failure\r
#define EFI_SCSI_IO_STATUS_HOST_ADAPTER_OTHER 0x7f\r
\r
\r
// SCSI Target Status definition\r
//\r
#define EFI_SCSI_IO_STATUS_TARGET_GOOD 0x00\r
-#define EFI_SCSI_IO_STATUS_TARGET_CHECK_CONDITION 0x02 // check condition\r
-#define EFI_SCSI_IO_STATUS_TARGET_CONDITION_MET 0x04 // condition met\r
-#define EFI_SCSI_IO_STATUS_TARGET_BUSY 0x08 // busy\r
-#define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE 0x10 // intermediate\r
-#define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE_CONDITION_MET 0x14 // intermediate-condition met\r
-#define EFI_SCSI_IO_STATUS_TARGET_RESERVATION_CONFLICT 0x18 // reservation conflict\r
-#define EFI_SCSI_IO_STATUS_TARGET_COMMOND_TERMINATED 0x22 // command terminated\r
-#define EFI_SCSI_IO_STATUS_TARGET_QUEUE_FULL 0x28 // queue full\r
+#define EFI_SCSI_IO_STATUS_TARGET_CHECK_CONDITION 0x02 ///< check condition\r
+#define EFI_SCSI_IO_STATUS_TARGET_CONDITION_MET 0x04 ///< condition met\r
+#define EFI_SCSI_IO_STATUS_TARGET_BUSY 0x08 ///< busy\r
+#define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE 0x10 ///< intermediate\r
+#define EFI_SCSI_IO_STATUS_TARGET_INTERMEDIATE_CONDITION_MET 0x14 ///< intermediate-condition met\r
+#define EFI_SCSI_IO_STATUS_TARGET_RESERVATION_CONFLICT 0x18 ///< reservation conflict\r
+#define EFI_SCSI_IO_STATUS_TARGET_COMMOND_TERMINATED 0x22 ///< command terminated\r
+#define EFI_SCSI_IO_STATUS_TARGET_QUEUE_FULL 0x28 ///< queue full\r
\r
typedef struct {\r
+ ///\r
+ /// The timeout, in 100 ns units, to use for the execution of this SCSI\r
+ /// Request Packet. A Timeout value of 0 means that this function\r
+ /// will wait indefinitely for the SCSI Request Packet to execute. If\r
+ /// Timeout is greater than zero, then this function will return\r
+ /// EFI_TIMEOUT if the time required to execute the SCSI Request\r
+ /// Packet is greater than Timeout.\r
+ ///\r
UINT64 Timeout;\r
+ ///\r
+ /// A pointer to the data buffer to transfer between the SCSI\r
+ /// controller and the SCSI device for SCSI READ command\r
+ ///\r
VOID *InDataBuffer;\r
+ ///\r
+ /// A pointer to the data buffer to transfer between the SCSI\r
+ /// controller and the SCSI device for SCSI WRITE command.\r
+ ///\r
VOID *OutDataBuffer;\r
+ ///\r
+ /// A pointer to the sense data that was generated by the execution of\r
+ /// the SCSI Request Packet.\r
+ ///\r
VOID *SenseData;\r
+ ///\r
+ /// A pointer to buffer that contains the Command Data Block to\r
+ /// send to the SCSI device.\r
+ ///\r
VOID *Cdb;\r
+ ///\r
+ /// On Input, the size, in bytes, of InDataBuffer. On output, the\r
+ /// number of bytes transferred between the SCSI controller and the SCSI device.\r
+ ///\r
UINT32 InTransferLength;\r
+ ///\r
+ /// On Input, the size, in bytes of OutDataBuffer. On Output, the\r
+ /// Number of bytes transferred between SCSI Controller and the SCSI device.\r
+ ///\r
UINT32 OutTransferLength;\r
+ ///\r
+ /// The length, in bytes, of the buffer Cdb. The standard values are\r
+ /// 6, 10, 12, and 16, but other values are possible if a variable length CDB is used.\r
+ ///\r
UINT8 CdbLength;\r
+ ///\r
+ /// The direction of the data transfer. 0 for reads, 1 for writes. A\r
+ /// value of 2 is Reserved for Bi-Directional SCSI commands.\r
+ ///\r
UINT8 DataDirection;\r
+ ///\r
+ /// The status of the SCSI Host Controller that produces the SCSI\r
+ /// bus where the SCSI device attached when the SCSI Request\r
+ /// Packet was executed on the SCSI Controller.\r
+ ///\r
UINT8 HostAdapterStatus;\r
+ ///\r
+ /// The status returned by the SCSI device when the SCSI Request\r
+ /// Packet was executed.\r
+ ///\r
UINT8 TargetStatus;\r
+ ///\r
+ /// On input, the length in bytes of the SenseData buffer. On\r
+ /// output, the number of bytes written to the SenseData buffer.\r
+ ///\r
UINT8 SenseDataLength;\r
} EFI_SCSI_IO_SCSI_REQUEST_PACKET;\r
\r
@param DeviceType A pointer to the device type information\r
retrieved from the SCSI Controller.\r
\r
- @retval EFI_SUCCESS Retrieves the device type information successfully.\r
+ @retval EFI_SUCCESS Retrieved the device type information successfully.\r
@retval EFI_INVALID_PARAMETER The DeviceType is NULL.\r
\r
**/\r
@param This Protocol instance pointer.\r
\r
@retval EFI_SUCCESS Reset the SCSI controller successfully.\r
- @retval EFI_DEVICE_ERROR Errors are encountered when resetting the\r
+ @retval EFI_DEVICE_ERROR Errors were encountered when resetting the\r
SCSI Controller.\r
@retval EFI_UNSUPPORTED The SCSI bus does not support a device\r
reset operation.\r
@param This Protocol instance pointer.\r
@param Packet The SCSI request packet to send to the SCSI\r
Controller specified by the device handle.\r
- @param Event If the SCSI bus where the SCSI device is attached\r
+ @param Event If the SCSI bus to which the SCSI device is attached\r
does not support non-blocking I/O, then Event is\r
ignored, and blocking I/O is performed.\r
If Event is NULL, then blocking I/O is performed.\r
\r
@retval EFI_SUCCESS The SCSI Request Packet was sent by the host\r
successfully, and TransferLength bytes were\r
- transferred to/from DataBuffer.See\r
+ transferred to/from DataBuffer. See\r
HostAdapterStatus, TargetStatus,\r
SenseDataLength, and SenseData in that order\r
for additional status information.\r
IN EFI_EVENT Event OPTIONAL\r
);\r
\r
-/** \r
- @par Protocol Description:\r
- Provides services to manage and communicate with SCSI devices.\r
-\r
- @param GetDeviceType\r
- Retrieves the information of the device type which the SCSI device belongs to. \r
-\r
- @param GetDeviceLocation\r
- Retrieves the device location information in the SCSI bus. \r
-\r
- @param ResetBus\r
- Resets the entire SCSI bus the SCSI device attaches to. \r
-\r
- @param ResetDevice\r
- Resets the SCSI Device that is specified by the device handle the SCSI I/O \r
- protocol attaches. \r
-\r
- @param ExecuteScsiCommand\r
- Sends a SCSI command to the SCSI device and waits for the execution completion \r
- until an exit condition is met, or a timeout occurs. \r
-\r
- @param IoAlign\r
- Supplies the alignment requirement for any buffer used in a data transfer. \r
- IoAlign values of 0 and 1 mean that the buffer can be placed anywhere in memory. \r
- Otherwise, IoAlign must be a power of 2, and the requirement is that the \r
- start address of a buffer must be evenly divisible by IoAlign with no remainder.\r
-\r
-**/\r
+///\r
+/// Provides services to manage and communicate with SCSI devices.\r
+///\r
struct _EFI_SCSI_IO_PROTOCOL {\r
EFI_SCSI_IO_PROTOCOL_GET_DEVICE_TYPE GetDeviceType;\r
EFI_SCSI_IO_PROTOCOL_GET_DEVICE_LOCATION GetDeviceLocation;\r
EFI_SCSI_IO_PROTOCOL_RESET_BUS ResetBus;\r
EFI_SCSI_IO_PROTOCOL_RESET_DEVICE ResetDevice;\r
- EFI_SCSI_IO_PROTOCOL_EXEC_SCSI_COMMAND ExecuteScsiCommand; \r
+ EFI_SCSI_IO_PROTOCOL_EXEC_SCSI_COMMAND ExecuteScsiCommand;\r
+\r
+ ///\r
+ /// Supplies the alignment requirement for any buffer used in a data transfer.\r
+ /// IoAlign values of 0 and 1 mean that the buffer can be placed anywhere in memory.\r
+ /// Otherwise, IoAlign must be a power of 2, and the requirement is that the\r
+ /// start address of a buffer must be evenly divisible by IoAlign with no remainder.\r
+ ///\r
UINT32 IoAlign;\r
};\r
\r