/** @file\r
- Common Libarary for SCSI\r
+ Provides the functions to submit Scsi commands defined in SCSI-2 specification for SCSI devices.\r
\r
- Copyright (c) 2006 - 2007, 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
+ This library class provides the functions to submit SCSI commands defined in SCSI-2 specification\r
+ for hard drive, CD and DVD devices that are the most common SCSI boot targets used by UEFI platforms.\r
+ This library class depends on SCSI I/O Protocol defined in UEFI Specification and SCSI-2 industry standard.\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 - 2011, 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
\r
**/\r
\r
-#ifndef _SCSI_LIB_H_\r
-#define _SCSI_LIB_H_\r
+#ifndef __SCSI_LIB_H__\r
+#define __SCSI_LIB_H__\r
\r
#include <Protocol/ScsiIo.h>\r
\r
-//\r
-// the time unit is 100ns, since the SCSI I/O defines timeout in 100ns unit.\r
-//\r
-#define EFI_SCSI_STALL_1_MICROSECOND 10\r
-#define EFI_SCSI_STALL_1_MILLISECOND 10000\r
-#define EFI_SCSI_STALL_1_SECOND 10000000\r
-\r
-///\r
-/// this macro cannot be directly used by the gBS->Stall(),\r
-/// since the value output by this macro is in 100ns unit,\r
-/// not 1us unit (1us = 1000ns)\r
-///\r
-#define EFI_SCSI_STALL_SECONDS(a) ((a) * EFI_SCSI_STALL_1_SECOND)\r
-\r
-\r
/**\r
- Function test the ready status of the SCSI unit.\r
-\r
- Submit SCSI test unit ready command with SCSI request packet specified by this scsi command, TimeOut\r
- and SenseData, then get the status of the target Scsi unit.\r
+ Execute Test Unit Ready SCSI command on a specific SCSI target.\r
\r
+ Executes the Test Unit Ready command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.\r
+ If ScsiIo is NULL, then ASSERT().\r
If SenseDataLength is NULL, then ASSERT().\r
-\r
If HostAdapterStatus is NULL, then ASSERT().\r
-\r
If TargetStatus is NULL, then ASSERT().\r
\r
- @param[in] ScsiIo A pointer to SCSI IO protocol.\r
- @param[in] Timeout The length of timeout period.\r
- @param[in] SenseData A pointer to output sense data.\r
- @param[out] SenseDataLength The length of output sense data.\r
- @param[out] HostAdapterStatus The status of Host Adapter.\r
- @param[out] TargetStatus The status of the target.\r
-\r
- @retval EFI_SUCCESS The status of the unit is tested successfully.\r
- @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
- but the entire DataBuffer could not be transferred.\r
- The actual number of bytes transferred is returned\r
- in InTransferLength.\r
- @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
- there are too many SCSI Command Packets already \r
- queued.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
- the SCSI Request Packet.\r
- @retval EFI_INVALID_PARAMETER ScsiIo is NULL.\r
- @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
- is not supported by the SCSI initiator(i.e., SCSI \r
- Host Controller).\r
- @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
- Request Packet to execute.\r
+\r
+ @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance\r
+ for the specific SCSI target.\r
+ @param[in] Timeout The timeout in 100 ns units to use for the execution\r
+ of this SCSI Request Packet. A Timeout value of\r
+ zero means that this function will wait indefinitely\r
+ for the SCSI Request Packet to execute. If Timeout\r
+ is greater than zero, then this function will return\r
+ EFI_TIMEOUT if the time required to execute the SCSI\r
+ Request Packet is greater than Timeout.\r
+ @param[in, out] SenseData A pointer to sense data that was generated by\r
+ the execution of the SCSI Request Packet. This\r
+ buffer must be allocated by the caller.\r
+ If SenseDataLength is 0, then this parameter is\r
+ optional and may be NULL.\r
+ @param[in, out] SenseDataLength On input, a pointer to the length in bytes of\r
+ the SenseData buffer. On output, a pointer to\r
+ the number of bytes written to the SenseData buffer. \r
+ @param[out] HostAdapterStatus The status of the SCSI Host Controller that produces\r
+ the SCSI bus containing the SCSI target specified by\r
+ ScsiIo when the SCSI Request Packet was executed.\r
+ See the EFI SCSI I/O Protocol in the UEFI Specification\r
+ for details on the possible return values.\r
+ @param[out] TargetStatus The status returned by the SCSI target specified\r
+ by ScsiIo when the SCSI Request Packet was executed\r
+ on the SCSI Host Controller. See the EFI SCSI I/O\r
+ Protocol in the UEFI Specification for details on\r
+ the possible return values. \r
+\r
+ @retval EFI_SUCCESS The command was executed successfully.\r
+ See HostAdapterStatus, TargetStatus, SenseDataLength,\r
+ and SenseData in that order for additional status\r
+ information.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because\r
+ there are too many SCSI Command Packets already\r
+ queued. The SCSI Request Packet was not sent, so\r
+ no additional status information is available.\r
+ The caller may retry again later.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send\r
+ SCSI Request Packet. See HostAdapterStatus,\r
+ TargetStatus, SenseDataLength, and SenseData in that\r
+ order for additional status information.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
+ is not supported by the SCSI initiator(i.e., SCSI\r
+ Host Controller). The SCSI Request Packet was not\r
+ sent, so no additional status information is available.\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request\r
+ Packet to execute. See HostAdapterStatus, TargetStatus,\r
+ SenseDataLength, and SenseData in that order for\r
+ additional status information.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
ScsiTestUnitReadyCommand (\r
- IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
- IN UINT64 Timeout,\r
- IN VOID *SenseData,\r
- OUT UINT8 *SenseDataLength,\r
- OUT UINT8 *HostAdapterStatus,\r
- OUT UINT8 *TargetStatus\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus\r
);\r
\r
\r
/**\r
- Function to submit SCSI inquiry command.\r
-\r
- Submit SCSI inquiry command with the SCSI request packet specified by this SCSI command and input\r
- parameters, then return the status of Scsi unit execution.\r
+ Execute Inquiry SCSI command on a specific SCSI target.\r
\r
+ Executes the Inquiry command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.\r
+ If ScsiIo is NULL, then ASSERT().\r
If SenseDataLength is NULL, then ASSERT().\r
-\r
If HostAdapterStatus is NULL, then ASSERT().\r
-\r
If TargetStatus is NULL, then ASSERT().\r
-\r
If InquiryDataLength is NULL, then ASSERT().\r
\r
- @param[in] ScsiIo SCSI IO Protocol to use\r
- @param[in] Timeout The length of timeout period.\r
- @param[in] SenseData A pointer to output sense data.\r
- @param[in, out] SenseDataLength The length of output sense data.\r
- @param[out] HostAdapterStatus The status of Host Adapter.\r
- @param[out] TargetStatus The status of the target.\r
- @param[in, out] InquiryDataBuffer A pointer to inquiry data buffer.\r
- @param[in, out] InquiryDataLength The length of inquiry data buffer.\r
- @param[in] EnableVitalProductData Boolean to enable Vital Product Data.\r
-\r
- @retval EFI_SUCCESS Command is executed successfully.\r
- @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
- but the entire DataBuffer could not be transferred.\r
- The actual number of bytes transferred is returned\r
- in TransferLength.\r
- @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
- there are too many SCSI Command Packets already \r
- queued.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
- the SCSI Request Packet.\r
- @retval EFI_INVALID_PARAMETER ScsiIo is NULL.\r
- @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
- is not supported by the SCSI initiator(i.e., SCSI \r
- Host Controller).\r
- @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
- Request Packet to execute.\r
+ @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance\r
+ for the specific SCSI target.\r
+ @param[in] Timeout The timeout in 100 ns units to use for the\r
+ execution of this SCSI Request Packet. A Timeout\r
+ value of zero means that this function will wait\r
+ indefinitely for the SCSI Request Packet to execute.\r
+ If Timeout is greater than zero, then this function\r
+ will return EFI_TIMEOUT if the time required to\r
+ execute the SCSI Request Packet is greater than Timeout.\r
+ @param[in, out] SenseData A pointer to sense data that was generated\r
+ by the execution of the SCSI Request Packet.\r
+ This buffer must be allocated by the caller.\r
+ If SenseDataLength is 0, then this parameter\r
+ is optional and may be NULL.\r
+ @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer.\r
+ On output, the number of bytes written to the SenseData buffer. \r
+ @param[out] HostAdapterStatus The status of the SCSI Host Controller that\r
+ produces the SCSI bus containing the SCSI\r
+ target specified by ScsiIo when the SCSI\r
+ Request Packet was executed. See the EFI\r
+ SCSI I/O Protocol in the UEFI Specification\r
+ for details on the possible return values.\r
+ @param[out] TargetStatus The status returned by the SCSI target specified\r
+ by ScsiIo when the SCSI Request Packet was\r
+ executed on the SCSI Host Controller.\r
+ See the EFI SCSI I/O Protocol in the UEFI\r
+ Specification for details on the possible\r
+ return values. \r
+ @param[in, out] InquiryDataBuffer A pointer to inquiry data that was generated\r
+ by the execution of the SCSI Request Packet.\r
+ This buffer must be allocated by the caller.\r
+ If InquiryDataLength is 0, then this parameter\r
+ is optional and may be NULL. \r
+ @param[in, out] InquiryDataLength On input, a pointer to the length in bytes\r
+ of the InquiryDataBuffer buffer.\r
+ On output, a pointer to the number of bytes\r
+ written to the InquiryDataBuffer buffer.\r
+ @param[in] EnableVitalProductData If TRUE, then the supported vital product\r
+ data is returned in InquiryDataBuffer.\r
+ If FALSE, then the standard inquiry data is\r
+ returned in InquiryDataBuffer. \r
+\r
+ @retval EFI_SUCCESS The command was executed successfully. See HostAdapterStatus,\r
+ TargetStatus, SenseDataLength, and SenseData in that order\r
+ for additional status information.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire\r
+ InquiryDataBuffer could not be transferred. The actual\r
+ number of bytes transferred is returned in InquiryDataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there\r
+ are too many SCSI Command Packets already queued.\r
+ The SCSI Request Packet was not sent, so no additional\r
+ status information is available. The caller may retry again later.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI\r
+ Request Packet. See HostAdapterStatus, TargetStatus,\r
+ SenseDataLength, and SenseData in that order for additional\r
+ status information.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not\r
+ supported by the SCSI initiator(i.e., SCSI Host Controller).\r
+ The SCSI Request Packet was not sent, so no additional\r
+ status information is available.\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request\r
+ Packet to execute. See HostAdapterStatus, TargetStatus,\r
+ SenseDataLength, and SenseData in that order for\r
+ additional status information.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
ScsiInquiryCommand (\r
- IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
- IN UINT64 Timeout,\r
- IN VOID *SenseData,\r
- IN OUT UINT8 *SenseDataLength,\r
- OUT UINT8 *HostAdapterStatus,\r
- OUT UINT8 *TargetStatus,\r
- IN OUT VOID *InquiryDataBuffer,\r
- IN OUT UINT32 *InquiryDataLength,\r
- IN BOOLEAN EnableVitalProductData\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *InquiryDataBuffer, OPTIONAL\r
+ IN OUT UINT32 *InquiryDataLength,\r
+ IN BOOLEAN EnableVitalProductData\r
);\r
\r
\r
/**\r
- Function to submit SCSI mode sense 10 command.\r
-\r
- Submit SCSI Mode Sense (10) command with the SCSI request packet specified by this SCSI command and\r
- the input parameters, then return the status of Scsi unit execution.\r
+ Execute Inquiry SCSI command on a specific SCSI target.\r
\r
+ Executes the Inquiry command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.\r
+ If ScsiIo is NULL, then ASSERT().\r
If SenseDataLength is NULL, then ASSERT().\r
-\r
If HostAdapterStatus is NULL, then ASSERT().\r
-\r
If TargetStatus is NULL, then ASSERT().\r
+ If InquiryDataLength is NULL, then ASSERT().\r
+\r
+ @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance\r
+ for the specific SCSI target.\r
+ @param[in] Timeout The timeout in 100 ns units to use for the\r
+ execution of this SCSI Request Packet. A Timeout\r
+ value of zero means that this function will wait\r
+ indefinitely for the SCSI Request Packet to execute.\r
+ If Timeout is greater than zero, then this function\r
+ will return EFI_TIMEOUT if the time required to\r
+ execute the SCSI Request Packet is greater than Timeout.\r
+ @param[in, out] SenseData A pointer to sense data that was generated\r
+ by the execution of the SCSI Request Packet.\r
+ This buffer must be allocated by the caller.\r
+ If SenseDataLength is 0, then this parameter\r
+ is optional and may be NULL.\r
+ @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer.\r
+ On output, the number of bytes written to the SenseData buffer. \r
+ @param[out] HostAdapterStatus The status of the SCSI Host Controller that\r
+ produces the SCSI bus containing the SCSI\r
+ target specified by ScsiIo when the SCSI\r
+ Request Packet was executed. See the EFI\r
+ SCSI I/O Protocol in the UEFI Specification\r
+ for details on the possible return values.\r
+ @param[out] TargetStatus The status returned by the SCSI target specified\r
+ by ScsiIo when the SCSI Request Packet was\r
+ executed on the SCSI Host Controller.\r
+ See the EFI SCSI I/O Protocol in the UEFI\r
+ Specification for details on the possible\r
+ return values. \r
+ @param[in, out] InquiryDataBuffer A pointer to inquiry data that was generated\r
+ by the execution of the SCSI Request Packet.\r
+ This buffer must be allocated by the caller.\r
+ If InquiryDataLength is 0, then this parameter\r
+ is optional and may be NULL. \r
+ @param[in, out] InquiryDataLength On input, a pointer to the length in bytes\r
+ of the InquiryDataBuffer buffer.\r
+ On output, a pointer to the number of bytes\r
+ written to the InquiryDataBuffer buffer.\r
+ @param[in] EnableVitalProductData If TRUE, then the supported vital product\r
+ data for the PageCode is returned in InquiryDataBuffer.\r
+ If FALSE, then the standard inquiry data is\r
+ returned in InquiryDataBuffer and PageCode is ignored.\r
+ @param[in] PageCode The page code of the vital product data.\r
+ It's ignored if EnableVitalProductData is FALSE.\r
+\r
+ @retval EFI_SUCCESS The command executed successfully. See HostAdapterStatus,\r
+ TargetStatus, SenseDataLength, and SenseData in that order\r
+ for additional status information.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire\r
+ InquiryDataBuffer could not be transferred. The actual\r
+ number of bytes transferred is returned in InquiryDataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there\r
+ are too many SCSI Command Packets already queued.\r
+ The SCSI Request Packet was not sent, so no additional\r
+ status information is available. The caller may retry again later.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI\r
+ Request Packet. See HostAdapterStatus, TargetStatus,\r
+ SenseDataLength, and SenseData in that order for additional\r
+ status information.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not\r
+ supported by the SCSI initiator(i.e., SCSI Host Controller).\r
+ The SCSI Request Packet was not sent, so no additional\r
+ status information is available.\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request\r
+ Packet to execute. See HostAdapterStatus, TargetStatus,\r
+ SenseDataLength, and SenseData in that order for\r
+ additional status information.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ScsiInquiryCommandEx (\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *InquiryDataBuffer, OPTIONAL\r
+ IN OUT UINT32 *InquiryDataLength,\r
+ IN BOOLEAN EnableVitalProductData,\r
+ IN UINT8 PageCode\r
+ );\r
+\r
\r
+/**\r
+ Execute Mode Sense(10) SCSI command on a specific SCSI target.\r
+\r
+ Executes the SCSI Mode Sense(10) command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout\r
+ after Timeout 100 ns units. The DBDField, PageControl, and PageCode parameters\r
+ are used to construct the CDB for this SCSI command.\r
+ If ScsiIo is NULL, then ASSERT().\r
+ If SenseDataLength is NULL, then ASSERT().\r
+ If HostAdapterStatus is NULL, then ASSERT().\r
+ If TargetStatus is NULL, then ASSERT().\r
If DataLength is NULL, then ASSERT().\r
\r
- @param[in] ScsiIo A pointer to SCSI IO protocol.\r
- @param[in] Timeout The length of timeout period.\r
- @param[in] SenseData A pointer to output sense data.\r
- @param[in, out] SenseDataLength The length of output sense data.\r
- @param[out] HostAdapterStatus The status of Host Adapter.\r
- @param[out] TargetStatus The status of the target.\r
- @param[in] DataBuffer A pointer to input data buffer.\r
- @param[in, out] DataLength The length of input data buffer.\r
- @param[in] DBDField The DBD Field (Optional).\r
- @param[in] PageControl Page Control.\r
- @param[in] PageCode Page code.\r
-\r
- @retval EFI_SUCCESS The status of the unit is tested successfully.\r
- @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, \r
- but the entire DataBuffer could not be transferred.\r
+\r
+ @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance\r
+ for the specific SCSI target.\r
+ @param[in] Timeout The timeout in 100 ns units to use for the\r
+ execution of this SCSI Request Packet. A Timeout\r
+ value of zero means that this function will wait\r
+ indefinitely for the SCSI Request Packet to execute.\r
+ If Timeout is greater than zero, then this function\r
+ will return EFI_TIMEOUT if the time required to\r
+ execute the SCSI Request Packet is greater than Timeout.\r
+ @param[in, out] SenseData A pointer to sense data that was generated\r
+ by the execution of the SCSI Request Packet.\r
+ This buffer must be allocated by the caller.\r
+ If SenseDataLength is 0, then this parameter\r
+ is optional and may be NULL.\r
+ @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer.\r
+ On output, the number of bytes written to the SenseData buffer. \r
+ @param[out] HostAdapterStatus The status of the SCSI Host Controller that\r
+ produces the SCSI bus containing the SCSI target\r
+ specified by ScsiIo when the SCSI Request Packet\r
+ was executed. See the EFI SCSI I/O Protocol in the\r
+ UEFI Specification for details on the possible\r
+ return values.\r
+ @param[out] TargetStatus The status returned by the SCSI target specified\r
+ by ScsiIo when the SCSI Request Packet was executed\r
+ on the SCSI Host Controller. See the EFI SCSI\r
+ I/O Protocol in the UEFI Specification for details\r
+ on the possible return values.\r
+ @param[in, out] DataBuffer A pointer to data that was generated by the\r
+ execution of the SCSI Request Packet. This\r
+ buffer must be allocated by the caller. If\r
+ DataLength is 0, then this parameter is optional\r
+ and may be NULL. \r
+ @param[in, out] DataLength On input, a pointer to the length in bytes of\r
+ the DataBuffer buffer. On output, a pointer\r
+ to the number of bytes written to the DataBuffer\r
+ buffer. \r
+ @param[in] DBDField Specifies the DBD field of the CDB for this SCSI Command.\r
+ @param[in] PageControl Specifies the PC field of the CDB for this SCSI Command. \r
+ @param[in] PageCode Specifies the Page Control field of the CDB for this SCSI Command. \r
+\r
+ @retval EFI_SUCCESS The command was executed successfully.\r
+ See HostAdapterStatus, TargetStatus, SenseDataLength,\r
+ and SenseData in that order for additional status information.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the\r
+ entire DataBuffer could not be transferred.\r
The actual number of bytes transferred is returned\r
- in TransferLength.\r
- @retval EFI_NOT_READY The SCSI Request Packet could not be sent because \r
- there are too many SCSI Command Packets already \r
- queued.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempting to send \r
- the SCSI Request Packet.\r
- @retval EFI_INVALID_PARAMETER ScsiIo is NULL. \r
+ in DataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because\r
+ there are too many SCSI Command Packets already queued.\r
+ The SCSI Request Packet was not sent, so no additional\r
+ status information is available. The caller may retry\r
+ again later.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send\r
+ SCSI Request Packet. See HostAdapterStatus, TargetStatus,\r
+ SenseDataLength, and SenseData in that order for\r
+ additional status information.\r
@retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
- is not supported by the SCSI initiator(i.e., SCSI \r
- Host Controller).\r
- @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI \r
- Request Packet to execute.\r
+ is not supported by the SCSI initiator(i.e., SCSI\r
+ Host Controller). The SCSI Request Packet was not\r
+ sent, so no additional status information is available.\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI\r
+ Request Packet to execute. See HostAdapterStatus,\r
+ TargetStatus, SenseDataLength, and SenseData in that\r
+ order for additional status information.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
ScsiModeSense10Command (\r
- IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
- IN UINT64 Timeout,\r
- IN VOID *SenseData,\r
- IN OUT UINT8 *SenseDataLength,\r
- OUT UINT8 *HostAdapterStatus,\r
- OUT UINT8 *TargetStatus,\r
- IN VOID *DataBuffer,\r
- IN OUT UINT32 *DataLength,\r
- IN UINT8 DBDField, OPTIONAL\r
- IN UINT8 PageControl,\r
- IN UINT8 PageCode\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *DataBuffer, OPTIONAL\r
+ IN OUT UINT32 *DataLength,\r
+ IN UINT8 DBDField, OPTIONAL\r
+ IN UINT8 PageControl,\r
+ IN UINT8 PageCode\r
);\r
\r
\r
\r
/**\r
- Function to submit SCSI request sense command.\r
-\r
- Submit SCSI request sense command with the SCSI requested packet specified by this\r
- SCSI command, TimeOut and SenseData, and then return the status of scsi unit execution.\r
+ Execute Request Sense SCSI command on a specific SCSI target.\r
\r
+ Executes the Request Sense command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units.\r
+ If ScsiIo is NULL, then ASSERT().\r
If SenseDataLength is NULL, then ASSERT().\r
- \r
If HostAdapterStatus is NULL, then ASSERT().\r
- \r
If TargetStatus is NULL, then ASSERT().\r
\r
@param[in] ScsiIo A pointer to SCSI IO protocol.\r
@param[in] Timeout The length of timeout period.\r
- @param[in] SenseData A pointer to output sense data.\r
- @param[in, out] SenseDataLength The length of output sense data.\r
+ @param[in, out] SenseData A pointer to output sense data.\r
+ @param[in, out] SenseDataLength The length of output sense data.\r
@param[out] HostAdapterStatus The status of Host Adapter.\r
@param[out] TargetStatus The status of the target.\r
\r
@retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by\r
the SCSI initiator(i.e., SCSI Host Controller)\r
@retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
- @retval EFI_INVALID_PARAMETER ScsiIo is NULL.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
ScsiRequestSenseCommand (\r
- IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
- IN UINT64 Timeout,\r
- IN VOID *SenseData,\r
- IN OUT UINT8 *SenseDataLength,\r
- OUT UINT8 *HostAdapterStatus,\r
- OUT UINT8 *TargetStatus\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus\r
);\r
\r
\r
/**\r
- Function to submit read capacity command.\r
-\r
- Submit SCSI read capacity command with the SCSI request packet specified by this SCSI \r
- command and the input parameters, and then return the status of Scsi unit execution.\r
+ Execute Read Capacity SCSI command on a specific SCSI target.\r
\r
+ Executes the SCSI Read Capacity command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after\r
+ Timeout 100 ns units. The Pmi parameter is used to construct the CDB for this SCSI command.\r
+ If ScsiIo is NULL, then ASSERT().\r
If SenseDataLength is NULL, then ASSERT().\r
-\r
If HostAdapterStatus is NULL, then ASSERT().\r
-\r
If TargetStatus is NULL, then ASSERT().\r
-\r
If DataLength is NULL, then ASSERT().\r
\r
- @param[in] ScsiIo A pointer to SCSI IO protocol.\r
- @param[in] Timeout The length of timeout period.\r
- @param[in] SenseData A pointer to output sense data.\r
+ @param[in] ScsiIo A pointer to SCSI IO protocol.\r
+ @param[in] Timeout The length of timeout period.\r
+ @param[in, out] SenseData A pointer to output sense data.\r
@param[in, out] SenseDataLength The length of output sense data.\r
- @param[out] HostAdapterStatus The status of Host Adapter.\r
- @param[out] TargetStatus The status of the target.\r
- @param[out] DataBuffer A pointer to a data buffer.\r
+ @param[out] HostAdapterStatus The status of Host Adapter.\r
+ @param[out] TargetStatus The status of the target.\r
+ @param[in, out] DataBuffer A pointer to a data buffer.\r
@param[in, out] DataLength The length of data buffer.\r
- @param[in] PMI Partial medium indicator.\r
-\r
- @retval EFI_SUCCESS Command is executed successfully.\r
- @retval EFI_WARN_BUFFER_TOO_SMALL The SCSI Request Packet was executed, but the entire DataBuffer could\r
- not be transferred. The actual number of bytes transferred is returned in DataLength.\r
- @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many \r
- SCSI Command Packets already queued.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
- @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by \r
- the SCSI initiator(i.e., SCSI Host Controller)\r
- @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
- @retval EFI_INVALID_PARAMETER ScsiIo is NULL.\r
+ @param[in] Pmi Partial medium indicator.\r
+\r
+ @retval EFI_SUCCESS Command is executed successfully.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire\r
+ DataBuffer could not be transferred. The actual\r
+ number of bytes transferred is returned in DataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because\r
+ there are too many SCSI Command Packets already queued.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
+ is not supported by the SCSI initiator(i.e., SCSI Host Controller)\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
ScsiReadCapacityCommand (\r
- IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
- IN UINT64 Timeout,\r
- IN VOID *SenseData,\r
- IN OUT UINT8 *SenseDataLength,\r
- OUT UINT8 *HostAdapterStatus,\r
- OUT UINT8 *TargetStatus,\r
- OUT VOID *DataBuffer,\r
- IN OUT UINT32 *DataLength,\r
- IN BOOLEAN PMI\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *DataBuffer, OPTIONAL\r
+ IN OUT UINT32 *DataLength,\r
+ IN BOOLEAN Pmi\r
);\r
\r
\r
/**\r
- Function to submit read 10 command.\r
-\r
- Submit SCSI read (10) command with the SCSI request packet specified by this SCSI command \r
- and the input parameters, and then return the status of Scsi unit execution.\r
+ Execute Read Capacity SCSI 16 command on a specific SCSI target.\r
\r
+ Executes the SCSI Read Capacity 16 command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after\r
+ Timeout 100 ns units. The Pmi parameter is used to construct the CDB for this SCSI command.\r
+ If ScsiIo is NULL, then ASSERT().\r
If SenseDataLength is NULL, then ASSERT().\r
-\r
If HostAdapterStatus is NULL, then ASSERT().\r
-\r
If TargetStatus is NULL, then ASSERT().\r
+ If DataLength is NULL, then ASSERT().\r
\r
+ @param[in] ScsiIo A pointer to SCSI IO protocol.\r
+ @param[in] Timeout The length of timeout period.\r
+ @param[in, out] SenseData A pointer to output sense data.\r
+ @param[in, out] SenseDataLength The length of output sense data.\r
+ @param[out] HostAdapterStatus The status of Host Adapter.\r
+ @param[out] TargetStatus The status of the target.\r
+ @param[in, out] DataBuffer A pointer to a data buffer.\r
+ @param[in, out] DataLength The length of data buffer.\r
+ @param[in] Pmi Partial medium indicator.\r
+\r
+ @retval EFI_SUCCESS Command is executed successfully.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire\r
+ DataBuffer could not be transferred. The actual\r
+ number of bytes transferred is returned in DataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because\r
+ there are too many SCSI Command Packets already queued.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet\r
+ is not supported by the SCSI initiator(i.e., SCSI Host Controller)\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ScsiReadCapacity16Command (\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *DataBuffer, OPTIONAL\r
+ IN OUT UINT32 *DataLength,\r
+ IN BOOLEAN Pmi\r
+ );\r
+\r
+\r
+/**\r
+ Execute Read(10) SCSI command on a specific SCSI target.\r
+\r
+ Executes the SCSI Read(10) command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout\r
+ after Timeout 100 ns units. The StartLba and SectorSize parameters are used to\r
+ construct the CDB for this SCSI command.\r
+ If ScsiIo is NULL, then ASSERT().\r
+ If SenseDataLength is NULL, then ASSERT().\r
+ If HostAdapterStatus is NULL, then ASSERT().\r
+ If TargetStatus is NULL, then ASSERT().\r
If DataLength is NULL, then ASSERT().\r
\r
- @param[in] ScsiIo A pointer to SCSI IO protocol.\r
- @param[in] Timeout The length of timeout period.\r
- @param[in] SenseData A pointer to output sense data.\r
+\r
+ @param[in] ScsiIo A pointer to SCSI IO protocol.\r
+ @param[in] Timeout The length of timeout period.\r
+ @param[in, out] SenseData A pointer to output sense data.\r
@param[in, out] SenseDataLength The length of output sense data.\r
- @param[out] HostAdapterStatus The status of Host Adapter.\r
- @param[out] TargetStatus The status of the target.\r
- @param[out] DataBuffer Read 10 command data.\r
+ @param[out] HostAdapterStatus The status of Host Adapter.\r
+ @param[out] TargetStatus The status of the target.\r
+ @param[in, out] DataBuffer Read 10 command data.\r
@param[in, out] DataLength The length of data buffer.\r
- @param[in] StartLba The start address of LBA.\r
- @param[in] SectorSize The sector size.\r
-\r
- @retval EFI_SUCCESS Command is executed successfully.\r
- @retval EFI_WARN_BUFFER_TOO_SMALL The SCSI Request Packet was executed, but the entire DataBuffer could\r
- not be transferred. The actual number of bytes transferred is returned in DataLength.\r
- @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many \r
- SCSI Command Packets already queued.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
- @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by \r
- the SCSI initiator(i.e., SCSI Host Controller)\r
- @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
- @retval EFI_INVALID_PARAMETER ScsiIo is NULL.\r
+ @param[in] StartLba The start address of LBA.\r
+ @param[in] SectorSize The sector size.\r
+\r
+ @retval EFI_SUCCESS Command is executed successfully.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could\r
+ not be transferred. The actual number of bytes transferred is returned in DataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many \r
+ SCSI Command Packets already queued.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by \r
+ the SCSI initiator(i.e., SCSI Host Controller)\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
ScsiRead10Command (\r
- IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
- IN UINT64 Timeout,\r
- IN VOID *SenseData,\r
- IN OUT UINT8 *SenseDataLength,\r
- OUT UINT8 *HostAdapterStatus,\r
- OUT UINT8 *TargetStatus,\r
- OUT VOID *DataBuffer,\r
- IN OUT UINT32 *DataLength,\r
- IN UINT32 StartLba,\r
- IN UINT32 SectorSize\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *DataBuffer, OPTIONAL\r
+ IN OUT UINT32 *DataLength,\r
+ IN UINT32 StartLba,\r
+ IN UINT32 SectorSize\r
);\r
\r
\r
/**\r
- Function to submit SCSI write 10 command.\r
+ Execute Write(10) SCSI command on a specific SCSI target.\r
+\r
+ Executes the SCSI Write(10) command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after\r
+ Timeout 100 ns units. The StartLba and SectorSize parameters are used to construct\r
+ the CDB for this SCSI command.\r
+ If ScsiIo is NULL, then ASSERT().\r
+ If SenseDataLength is NULL, then ASSERT().\r
+ If HostAdapterStatus is NULL, then ASSERT().\r
+ If TargetStatus is NULL, then ASSERT().\r
+ If DataLength is NULL, then ASSERT().\r
\r
- Submit SCSI write (10) command with the SCSI request packet specified by this SCSI command and the\r
- input parameters, and then return the status of Scsi unit execution.\r
+ @param[in] ScsiIo SCSI IO Protocol to use\r
+ @param[in] Timeout The length of timeout period.\r
+ @param[in, out] SenseData A pointer to output sense data.\r
+ @param[in, out] SenseDataLength The length of output sense data.\r
+ @param[out] HostAdapterStatus The status of Host Adapter.\r
+ @param[out] TargetStatus The status of the target.\r
+ @param[in, out] DataBuffer A pointer to a data buffer.\r
+ @param[in, out] DataLength The length of data buffer.\r
+ @param[in] StartLba The start address of LBA.\r
+ @param[in] SectorSize The sector size.\r
+\r
+ @retval EFI_SUCCESS Command is executed successfully.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could\r
+ not be transferred. The actual number of bytes transferred is returned in DataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many \r
+ SCSI Command Packets already queued.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by \r
+ the SCSI initiator(i.e., SCSI Host Controller)\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
\r
- If SenseDataLength is NULL, then ASSERT().\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ScsiWrite10Command (\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *DataBuffer, OPTIONAL\r
+ IN OUT UINT32 *DataLength,\r
+ IN UINT32 StartLba,\r
+ IN UINT32 SectorSize\r
+ );\r
\r
+/**\r
+ Execute Read(16) SCSI command on a specific SCSI target.\r
+\r
+ Executes the SCSI Read(16) command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout\r
+ after Timeout 100 ns units. The StartLba and SectorSize parameters are used to\r
+ construct the CDB for this SCSI command.\r
+ If ScsiIo is NULL, then ASSERT().\r
+ If SenseDataLength is NULL, then ASSERT().\r
If HostAdapterStatus is NULL, then ASSERT().\r
-\r
If TargetStatus is NULL, then ASSERT().\r
-\r
If DataLength is NULL, then ASSERT().\r
\r
- @param[in] ScsiIo SCSI IO Protocol to use\r
- @param[in] Timeout The length of timeout period.\r
- @param[in] SenseData A pointer to output sense data.\r
+\r
+ @param[in] ScsiIo A pointer to SCSI IO protocol.\r
+ @param[in] Timeout The length of timeout period.\r
+ @param[in, out] SenseData A pointer to output sense data.\r
@param[in, out] SenseDataLength The length of output sense data.\r
- @param[out] HostAdapterStatus The status of Host Adapter.\r
- @param[out] TargetStatus The status of the target.\r
- @param[out] DataBuffer A pointer to a data buffer.\r
+ @param[out] HostAdapterStatus The status of Host Adapter.\r
+ @param[out] TargetStatus The status of the target.\r
+ @param[in, out] DataBuffer Read 16 command data.\r
@param[in, out] DataLength The length of data buffer.\r
- @param[in] StartLba The start address of LBA.\r
- @param[in] SectorSize The sector size.\r
-\r
- @retval EFI_SUCCESS Command is executed successfully.\r
- @retval EFI_WARN_BUFFER_TOO_SMALL The SCSI Request Packet was executed, but the entire DataBuffer could\r
- not be transferred. The actual number of bytes transferred is returned in DataLength.\r
- @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many \r
- SCSI Command Packets already queued.\r
- @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
- @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by \r
- the SCSI initiator(i.e., SCSI Host Controller)\r
- @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
- @retval EFI_INVALID_PARAMETER ScsiIo is NULL.\r
+ @param[in] StartLba The start address of LBA.\r
+ @param[in] SectorSize The sector size.\r
+\r
+ @retval EFI_SUCCESS Command is executed successfully.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could\r
+ not be transferred. The actual number of bytes transferred is returned in DataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many \r
+ SCSI Command Packets already queued.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by \r
+ the SCSI initiator(i.e., SCSI Host Controller)\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
\r
**/\r
EFI_STATUS\r
EFIAPI\r
-ScsiWrite10Command (\r
- IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
- IN UINT64 Timeout,\r
- IN VOID *SenseData,\r
- IN OUT UINT8 *SenseDataLength,\r
- OUT UINT8 *HostAdapterStatus,\r
- OUT UINT8 *TargetStatus,\r
- OUT VOID *DataBuffer,\r
- IN OUT UINT32 *DataLength,\r
- IN UINT32 StartLba,\r
- IN UINT32 SectorSize\r
+ScsiRead16Command (\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *DataBuffer, OPTIONAL\r
+ IN OUT UINT32 *DataLength,\r
+ IN UINT64 StartLba,\r
+ IN UINT32 SectorSize\r
);\r
\r
\r
+/**\r
+ Execute Write(16) SCSI command on a specific SCSI target.\r
+\r
+ Executes the SCSI Write(16) command on the SCSI target specified by ScsiIo.\r
+ If Timeout is zero, then this function waits indefinitely for the command to complete.\r
+ If Timeout is greater than zero, then the command is executed and will timeout after\r
+ Timeout 100 ns units. The StartLba and SectorSize parameters are used to construct\r
+ the CDB for this SCSI command.\r
+ If ScsiIo is NULL, then ASSERT().\r
+ If SenseDataLength is NULL, then ASSERT().\r
+ If HostAdapterStatus is NULL, then ASSERT().\r
+ If TargetStatus is NULL, then ASSERT().\r
+ If DataLength is NULL, then ASSERT().\r
+\r
+ @param[in] ScsiIo SCSI IO Protocol to use\r
+ @param[in] Timeout The length of timeout period.\r
+ @param[in, out] SenseData A pointer to output sense data.\r
+ @param[in, out] SenseDataLength The length of output sense data.\r
+ @param[out] HostAdapterStatus The status of Host Adapter.\r
+ @param[out] TargetStatus The status of the target.\r
+ @param[in, out] DataBuffer A pointer to a data buffer.\r
+ @param[in, out] DataLength The length of data buffer.\r
+ @param[in] StartLba The start address of LBA.\r
+ @param[in] SectorSize The sector size.\r
+\r
+ @retval EFI_SUCCESS Command is executed successfully.\r
+ @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could\r
+ not be transferred. The actual number of bytes transferred is returned in DataLength.\r
+ @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many \r
+ SCSI Command Packets already queued.\r
+ @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.\r
+ @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by \r
+ the SCSI initiator(i.e., SCSI Host Controller)\r
+ @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ScsiWrite16Command (\r
+ IN EFI_SCSI_IO_PROTOCOL *ScsiIo,\r
+ IN UINT64 Timeout,\r
+ IN OUT VOID *SenseData, OPTIONAL\r
+ IN OUT UINT8 *SenseDataLength,\r
+ OUT UINT8 *HostAdapterStatus,\r
+ OUT UINT8 *TargetStatus,\r
+ IN OUT VOID *DataBuffer, OPTIONAL\r
+ IN OUT UINT32 *DataLength,\r
+ IN UINT64 StartLba,\r
+ IN UINT32 SectorSize\r
+ );\r
+\r
#endif\r