]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Protocol/ScsiIo.h
MdePkg: Clean up source files
[mirror_edk2.git] / MdePkg / Include / Protocol / ScsiIo.h
index 953098bb2509f60907610a543c9c5c9b036c0a5d..1e7bc86b2967252bf3938c45383d8cf2536a6c5e 100644 (file)
@@ -1,14 +1,17 @@
 /** @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
+  managing devices on SCSI buses are defined here.\r
 \r
-  Copyright (c) 2006, 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
+  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  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
+  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
 \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
+/// Forward reference for pure ANSI compatability\r
+///\r
+typedef struct _EFI_SCSI_IO_PROTOCOL EFI_SCSI_IO_PROTOCOL;\r
+\r
 //\r
-// Forward reference for pure ANSI compatability\r
+// SCSI Device type information, defined in the SCSI Primary Commands standard (e.g., SPC-4)\r
 //\r
-typedef struct _EFI_SCSI_IO_PROTOCOL EFI_SCSI_IO_PROTOCOL;\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
@@ -36,16 +64,16 @@ typedef struct _EFI_SCSI_IO_PROTOCOL EFI_SCSI_IO_PROTOCOL;
 // 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
@@ -53,27 +81,80 @@ typedef struct _EFI_SCSI_IO_PROTOCOL EFI_SCSI_IO_PROTOCOL;
 // 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
@@ -84,7 +165,7 @@ typedef struct {
   @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
@@ -93,8 +174,7 @@ EFI_STATUS
 (EFIAPI *EFI_SCSI_IO_PROTOCOL_GET_DEVICE_TYPE)(\r
   IN  EFI_SCSI_IO_PROTOCOL            *This,\r
   OUT UINT8                           *DeviceType\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Retrieves the device location in the SCSI channel.\r
@@ -115,8 +195,7 @@ EFI_STATUS
   IN EFI_SCSI_IO_PROTOCOL           *This,\r
   IN OUT UINT8                      **Target,\r
   OUT UINT64                        *Lun\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Resets the SCSI Bus that the SCSI Controller is attached to.\r
@@ -135,8 +214,7 @@ typedef
 EFI_STATUS\r
 (EFIAPI *EFI_SCSI_IO_PROTOCOL_RESET_BUS)(\r
   IN EFI_SCSI_IO_PROTOCOL     *This\r
-  )\r
-;\r
+  );\r
 \r
 /**\r
   Resets the SCSI Controller that the device handle specifies.\r
@@ -144,7 +222,7 @@ EFI_STATUS
   @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
@@ -156,8 +234,7 @@ typedef
 EFI_STATUS\r
 (EFIAPI *EFI_SCSI_IO_PROTOCOL_RESET_DEVICE)(\r
   IN EFI_SCSI_IO_PROTOCOL     *This\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
@@ -166,7 +243,7 @@ EFI_STATUS
   @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
@@ -177,7 +254,7 @@ EFI_STATUS
 \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
@@ -214,15 +291,24 @@ EFI_STATUS
   IN EFI_SCSI_IO_PROTOCOL                   *This,\r
   IN OUT  EFI_SCSI_IO_SCSI_REQUEST_PACKET   *Packet,\r
   IN EFI_EVENT                              Event  OPTIONAL\r
-  )\r
-;\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