| /** @file | |
| Provides the functions to submit Scsi commands defined in SCSI-2 specification for SCSI devices. | |
| This library class provides the functions to submit SCSI commands defined in SCSI-2 specification | |
| for hard drive, CD and DVD devices that are the most common SCSI boot targets used by UEFI platforms. | |
| This library class depends on SCSI I/O Protocol defined in UEFI Specification and SCSI-2 industry standard. | |
| Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> | |
| 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. | |
| **/ | |
| #ifndef __SCSI_LIB_H__ | |
| #define __SCSI_LIB_H__ | |
| #include <Protocol/ScsiIo.h> | |
| /** | |
| Execute Test Unit Ready SCSI command on a specific SCSI target. | |
| Executes the Test Unit Ready command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance | |
| for the specific SCSI target. | |
| @param[in] Timeout The timeout in 100 ns units to use for the execution | |
| of this SCSI Request Packet. A Timeout value of | |
| zero means that this function will wait indefinitely | |
| for the SCSI Request Packet to execute. If Timeout | |
| is greater than zero, then this function will return | |
| EFI_TIMEOUT if the time required to execute the SCSI | |
| Request Packet is greater than Timeout. | |
| @param[in, out] SenseData A pointer to sense data that was generated by | |
| the execution of the SCSI Request Packet. This | |
| buffer must be allocated by the caller. | |
| If SenseDataLength is 0, then this parameter is | |
| optional and may be NULL. | |
| @param[in, out] SenseDataLength On input, a pointer to the length in bytes of | |
| the SenseData buffer. On output, a pointer to | |
| the number of bytes written to the SenseData buffer. | |
| @param[out] HostAdapterStatus The status of the SCSI Host Controller that produces | |
| the SCSI bus containing the SCSI target specified by | |
| ScsiIo when the SCSI Request Packet was executed. | |
| See the EFI SCSI I/O Protocol in the UEFI Specification | |
| for details on the possible return values. | |
| @param[out] TargetStatus The status returned by the SCSI target specified | |
| by ScsiIo when the SCSI Request Packet was executed | |
| on the SCSI Host Controller. See the EFI SCSI I/O | |
| Protocol in the UEFI Specification for details on | |
| the possible return values. | |
| @retval EFI_SUCCESS The command was executed successfully. | |
| See HostAdapterStatus, TargetStatus, SenseDataLength, | |
| and SenseData in that order for additional status | |
| information. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because | |
| there are too many SCSI Command Packets already | |
| queued. The SCSI Request Packet was not sent, so | |
| no additional status information is available. | |
| The caller may retry again later. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send | |
| SCSI Request Packet. See HostAdapterStatus, | |
| TargetStatus, SenseDataLength, and SenseData in that | |
| order for additional status information. | |
| @retval 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. | |
| @retval 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. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiTestUnitReadyCommand ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus | |
| ); | |
| /** | |
| Execute Inquiry SCSI command on a specific SCSI target. | |
| Executes the Inquiry command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If InquiryDataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If InquiryDataLength is non-zero and InquiryDataBuffer is not NULL, InquiryDataBuffer | |
| must meet buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance | |
| for the specific SCSI target. | |
| @param[in] Timeout The timeout in 100 ns units to use for the | |
| execution of this SCSI Request Packet. A Timeout | |
| value of zero means that this function will wait | |
| indefinitely for the SCSI Request Packet to execute. | |
| If Timeout is greater than zero, then this function | |
| will return EFI_TIMEOUT if the time required to | |
| execute the SCSI Request Packet is greater than Timeout. | |
| @param[in, out] SenseData A pointer to sense data that was generated | |
| by the execution of the SCSI Request Packet. | |
| This buffer must be allocated by the caller. | |
| If SenseDataLength is 0, then this parameter | |
| is optional and may be NULL. | |
| @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer. | |
| On output, the number of bytes written to the SenseData buffer. | |
| @param[out] HostAdapterStatus The status of the SCSI Host Controller that | |
| produces the SCSI bus containing the SCSI | |
| target specified by ScsiIo when the SCSI | |
| Request Packet was executed. See the EFI | |
| SCSI I/O Protocol in the UEFI Specification | |
| for details on the possible return values. | |
| @param[out] TargetStatus The status returned by the SCSI target specified | |
| by ScsiIo when the SCSI Request Packet was | |
| executed on the SCSI Host Controller. | |
| See the EFI SCSI I/O Protocol in the UEFI | |
| Specification for details on the possible | |
| return values. | |
| @param[in, out] InquiryDataBuffer A pointer to inquiry data that was generated | |
| by the execution of the SCSI Request Packet. | |
| This buffer must be allocated by the caller. | |
| If InquiryDataLength is 0, then this parameter | |
| is optional and may be NULL. | |
| @param[in, out] InquiryDataLength On input, a pointer to the length in bytes | |
| of the InquiryDataBuffer buffer. | |
| On output, a pointer to the number of bytes | |
| written to the InquiryDataBuffer buffer. | |
| @param[in] EnableVitalProductData If TRUE, then the supported vital product | |
| data is returned in InquiryDataBuffer. | |
| If FALSE, then the standard inquiry data is | |
| returned in InquiryDataBuffer. | |
| @retval EFI_SUCCESS The command was executed successfully. See HostAdapterStatus, | |
| TargetStatus, SenseDataLength, and SenseData in that order | |
| for additional status information. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire | |
| InquiryDataBuffer could not be transferred. The actual | |
| number of bytes transferred is returned in InquiryDataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there | |
| are too many SCSI Command Packets already queued. | |
| The SCSI Request Packet was not sent, so no additional | |
| status information is available. The caller may retry again later. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI | |
| Request Packet. See HostAdapterStatus, TargetStatus, | |
| SenseDataLength, and SenseData in that order for additional | |
| status information. | |
| @retval 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. | |
| @retval 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. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiInquiryCommand ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *InquiryDataBuffer, OPTIONAL | |
| IN OUT UINT32 *InquiryDataLength, | |
| IN BOOLEAN EnableVitalProductData | |
| ); | |
| /** | |
| Execute Inquiry SCSI command on a specific SCSI target. | |
| Executes the Inquiry command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If InquiryDataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If InquiryDataLength is non-zero and InquiryDataBuffer is not NULL, InquiryDataBuffer | |
| must meet buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance | |
| for the specific SCSI target. | |
| @param[in] Timeout The timeout in 100 ns units to use for the | |
| execution of this SCSI Request Packet. A Timeout | |
| value of zero means that this function will wait | |
| indefinitely for the SCSI Request Packet to execute. | |
| If Timeout is greater than zero, then this function | |
| will return EFI_TIMEOUT if the time required to | |
| execute the SCSI Request Packet is greater than Timeout. | |
| @param[in, out] SenseData A pointer to sense data that was generated | |
| by the execution of the SCSI Request Packet. | |
| This buffer must be allocated by the caller. | |
| If SenseDataLength is 0, then this parameter | |
| is optional and may be NULL. | |
| @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer. | |
| On output, the number of bytes written to the SenseData buffer. | |
| @param[out] HostAdapterStatus The status of the SCSI Host Controller that | |
| produces the SCSI bus containing the SCSI | |
| target specified by ScsiIo when the SCSI | |
| Request Packet was executed. See the EFI | |
| SCSI I/O Protocol in the UEFI Specification | |
| for details on the possible return values. | |
| @param[out] TargetStatus The status returned by the SCSI target specified | |
| by ScsiIo when the SCSI Request Packet was | |
| executed on the SCSI Host Controller. | |
| See the EFI SCSI I/O Protocol in the UEFI | |
| Specification for details on the possible | |
| return values. | |
| @param[in, out] InquiryDataBuffer A pointer to inquiry data that was generated | |
| by the execution of the SCSI Request Packet. | |
| This buffer must be allocated by the caller. | |
| If InquiryDataLength is 0, then this parameter | |
| is optional and may be NULL. | |
| @param[in, out] InquiryDataLength On input, a pointer to the length in bytes | |
| of the InquiryDataBuffer buffer. | |
| On output, a pointer to the number of bytes | |
| written to the InquiryDataBuffer buffer. | |
| @param[in] EnableVitalProductData If TRUE, then the supported vital product | |
| data for the PageCode is returned in InquiryDataBuffer. | |
| If FALSE, then the standard inquiry data is | |
| returned in InquiryDataBuffer and PageCode is ignored. | |
| @param[in] PageCode The page code of the vital product data. | |
| It's ignored if EnableVitalProductData is FALSE. | |
| @retval EFI_SUCCESS The command executed successfully. See HostAdapterStatus, | |
| TargetStatus, SenseDataLength, and SenseData in that order | |
| for additional status information. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire | |
| InquiryDataBuffer could not be transferred. The actual | |
| number of bytes transferred is returned in InquiryDataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there | |
| are too many SCSI Command Packets already queued. | |
| The SCSI Request Packet was not sent, so no additional | |
| status information is available. The caller may retry again later. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI | |
| Request Packet. See HostAdapterStatus, TargetStatus, | |
| SenseDataLength, and SenseData in that order for additional | |
| status information. | |
| @retval 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. | |
| @retval 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. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiInquiryCommandEx ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *InquiryDataBuffer, OPTIONAL | |
| IN OUT UINT32 *InquiryDataLength, | |
| IN BOOLEAN EnableVitalProductData, | |
| IN UINT8 PageCode | |
| ); | |
| /** | |
| Execute Mode Sense(10) SCSI command on a specific SCSI target. | |
| Executes the SCSI Mode Sense(10) command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout | |
| after Timeout 100 ns units. The DBDField, PageControl, and PageCode parameters | |
| are used to construct the CDB for this SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo A pointer to the SCSI I/O Protocol instance | |
| for the specific SCSI target. | |
| @param[in] Timeout The timeout in 100 ns units to use for the | |
| execution of this SCSI Request Packet. A Timeout | |
| value of zero means that this function will wait | |
| indefinitely for the SCSI Request Packet to execute. | |
| If Timeout is greater than zero, then this function | |
| will return EFI_TIMEOUT if the time required to | |
| execute the SCSI Request Packet is greater than Timeout. | |
| @param[in, out] SenseData A pointer to sense data that was generated | |
| by the execution of the SCSI Request Packet. | |
| This buffer must be allocated by the caller. | |
| If SenseDataLength is 0, then this parameter | |
| is optional and may be NULL. | |
| @param[in, out] SenseDataLength On input, the length in bytes of the SenseData buffer. | |
| On output, the number of bytes written to the SenseData buffer. | |
| @param[out] HostAdapterStatus The status of the SCSI Host Controller that | |
| produces the SCSI bus containing the SCSI target | |
| specified by ScsiIo when the SCSI Request Packet | |
| was executed. See the EFI SCSI I/O Protocol in the | |
| UEFI Specification for details on the possible | |
| return values. | |
| @param[out] TargetStatus The status returned by the SCSI target specified | |
| by ScsiIo when the SCSI Request Packet was executed | |
| on the SCSI Host Controller. See the EFI SCSI | |
| I/O Protocol in the UEFI Specification for details | |
| on the possible return values. | |
| @param[in, out] DataBuffer A pointer to data that was generated by the | |
| execution of the SCSI Request Packet. This | |
| buffer must be allocated by the caller. If | |
| DataLength is 0, then this parameter is optional | |
| and may be NULL. | |
| @param[in, out] DataLength On input, a pointer to the length in bytes of | |
| the DataBuffer buffer. On output, a pointer | |
| to the number of bytes written to the DataBuffer | |
| buffer. | |
| @param[in] DBDField Specifies the DBD field of the CDB for this SCSI Command. | |
| @param[in] PageControl Specifies the PC field of the CDB for this SCSI Command. | |
| @param[in] PageCode Specifies the Page Control field of the CDB for this SCSI Command. | |
| @retval EFI_SUCCESS The command was executed successfully. | |
| See HostAdapterStatus, TargetStatus, SenseDataLength, | |
| and SenseData in that order for additional status information. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the | |
| entire DataBuffer could not be transferred. | |
| The actual number of bytes transferred is returned | |
| in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because | |
| there are too many SCSI Command Packets already queued. | |
| The SCSI Request Packet was not sent, so no additional | |
| status information is available. The caller may retry | |
| again later. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send | |
| SCSI Request Packet. See HostAdapterStatus, TargetStatus, | |
| SenseDataLength, and SenseData in that order for | |
| additional status information. | |
| @retval 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. | |
| @retval 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. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiModeSense10Command ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT8 DBDField, OPTIONAL | |
| IN UINT8 PageControl, | |
| IN UINT8 PageCode | |
| ); | |
| /** | |
| Execute Request Sense SCSI command on a specific SCSI target. | |
| Executes the Request Sense command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after Timeout 100 ns units. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo A pointer to SCSI IO protocol. | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are | |
| too many SCSI Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by | |
| the SCSI initiator(i.e., SCSI Host Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiRequestSenseCommand ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus | |
| ); | |
| /** | |
| Execute Read Capacity SCSI command on a specific SCSI target. | |
| Executes the SCSI Read Capacity command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after | |
| Timeout 100 ns units. The Pmi parameter is used to construct the CDB for this SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo A pointer to SCSI IO protocol. | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer A pointer to a data buffer. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] Pmi Partial medium indicator. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire | |
| DataBuffer could not be transferred. The actual | |
| number of bytes transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because | |
| there are too many SCSI Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet | |
| is not supported by the SCSI initiator(i.e., SCSI Host Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiReadCapacityCommand ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN BOOLEAN Pmi | |
| ); | |
| /** | |
| Execute Read Capacity SCSI 16 command on a specific SCSI target. | |
| Executes the SCSI Read Capacity 16 command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after | |
| Timeout 100 ns units. The Pmi parameter is used to construct the CDB for this SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo A pointer to SCSI IO protocol. | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer A pointer to a data buffer. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] Pmi Partial medium indicator. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire | |
| DataBuffer could not be transferred. The actual | |
| number of bytes transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because | |
| there are too many SCSI Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet | |
| is not supported by the SCSI initiator(i.e., SCSI Host Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiReadCapacity16Command ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN BOOLEAN Pmi | |
| ); | |
| /** | |
| Execute Read(10) SCSI command on a specific SCSI target. | |
| Executes the SCSI Read(10) command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout | |
| after Timeout 100 ns units. The StartLba and SectorSize parameters are used to | |
| construct the CDB for this SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo A pointer to SCSI IO protocol. | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer Read 10 command data. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could | |
| not be transferred. The actual number of bytes transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many | |
| SCSI Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by | |
| the SCSI initiator(i.e., SCSI Host Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiRead10Command ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT32 StartLba, | |
| IN UINT32 SectorSize | |
| ); | |
| /** | |
| Execute Write(10) SCSI command on a specific SCSI target. | |
| Executes the SCSI Write(10) command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after | |
| Timeout 100 ns units. The StartLba and SectorSize parameters are used to construct | |
| the CDB for this SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo SCSI IO Protocol to use | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer A pointer to a data buffer. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could | |
| not be transferred. The actual number of bytes transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many | |
| SCSI Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by | |
| the SCSI initiator(i.e., SCSI Host Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiWrite10Command ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT32 StartLba, | |
| IN UINT32 SectorSize | |
| ); | |
| /** | |
| Execute Read(16) SCSI command on a specific SCSI target. | |
| Executes the SCSI Read(16) command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout | |
| after Timeout 100 ns units. The StartLba and SectorSize parameters are used to | |
| construct the CDB for this SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo A pointer to SCSI IO protocol. | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer Read 16 command data. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could | |
| not be transferred. The actual number of bytes transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many | |
| SCSI Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by | |
| the SCSI initiator(i.e., SCSI Host Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiRead16Command ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT64 StartLba, | |
| IN UINT32 SectorSize | |
| ); | |
| /** | |
| Execute Write(16) SCSI command on a specific SCSI target. | |
| Executes the SCSI Write(16) command on the SCSI target specified by ScsiIo. | |
| If Timeout is zero, then this function waits indefinitely for the command to complete. | |
| If Timeout is greater than zero, then the command is executed and will timeout after | |
| Timeout 100 ns units. The StartLba and SectorSize parameters are used to construct | |
| the CDB for this SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet buffer | |
| alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise EFI_INVALID_PARAMETER | |
| gets returned. | |
| @param[in] ScsiIo SCSI IO Protocol to use | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer A pointer to a data buffer. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks of data that shall be transferred. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could | |
| not be transferred. The actual number of bytes transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many | |
| SCSI Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported by | |
| the SCSI initiator(i.e., SCSI Host Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet are invalid. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiWrite16Command ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT64 StartLba, | |
| IN UINT32 SectorSize | |
| ); | |
| /** | |
| Execute blocking/non-blocking Read(10) SCSI command on a specific SCSI | |
| target. | |
| Executes the SCSI Read(10) command on the SCSI target specified by ScsiIo. | |
| When Event is NULL, blocking command will be executed. Otherwise non-blocking | |
| command will be executed. | |
| For blocking I/O, if Timeout is zero, this function will wait indefinitely | |
| for the command to complete. If Timeout is greater than zero, then the | |
| command is executed and will timeout after Timeout 100 ns units. | |
| For non-blocking I/O, if Timeout is zero, Event will be signaled only after | |
| the command to completes. If Timeout is greater than zero, Event will also be | |
| signaled after Timeout 100 ns units. | |
| The StartLba and SectorSize parameters are used to construct the CDB for this | |
| SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| @param[in] ScsiIo A pointer to SCSI IO protocol. | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer Read 16 command data. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks | |
| of data that shall be transferred. | |
| @param[in] Event If the SCSI target 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 Read(10) command | |
| completes. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, | |
| but the entire DataBuffer could not be | |
| transferred. The actual number of bytes | |
| transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be | |
| sent because there are too many SCSI | |
| Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting | |
| to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI | |
| Request Packet is not supported by the | |
| SCSI initiator(i.e., SCSI Host | |
| Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the | |
| SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet | |
| are invalid. | |
| @retval EFI_OUT_OF_RESOURCES The request could not be completed due | |
| to a lack of resources. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiRead10CommandEx ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT32 StartLba, | |
| IN UINT32 SectorSize, | |
| IN EFI_EVENT Event OPTIONAL | |
| ); | |
| /** | |
| Execute blocking/non-blocking Write(10) SCSI command on a specific SCSI | |
| target. | |
| Executes the SCSI Write(10) command on the SCSI target specified by ScsiIo. | |
| When Event is NULL, blocking command will be executed. Otherwise non-blocking | |
| command will be executed. | |
| For blocking I/O, if Timeout is zero, this function will wait indefinitely | |
| for the command to complete. If Timeout is greater than zero, then the | |
| command is executed and will timeout after Timeout 100 ns units. | |
| For non-blocking I/O, if Timeout is zero, Event will be signaled only after | |
| the command to completes. If Timeout is greater than zero, Event will also be | |
| signaled after Timeout 100 ns units. | |
| The StartLba and SectorSize parameters are used to construct the CDB for this | |
| SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| @param[in] ScsiIo SCSI IO Protocol to use | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer A pointer to a data buffer. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks | |
| of data that shall be transferred. | |
| @param[in] Event If the SCSI target 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 Write(10) command | |
| completes. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, | |
| but the entire DataBuffer could not be | |
| transferred. The actual number of bytes | |
| transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be | |
| sent because there are too many SCSI | |
| Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting | |
| to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI | |
| Request Packet is not supported by the | |
| SCSI initiator(i.e., SCSI Host | |
| Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the | |
| SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet | |
| are invalid. | |
| @retval EFI_OUT_OF_RESOURCES The request could not be completed due | |
| to a lack of resources. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiWrite10CommandEx ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT32 StartLba, | |
| IN UINT32 SectorSize, | |
| IN EFI_EVENT Event OPTIONAL | |
| ); | |
| /** | |
| Execute blocking/non-blocking Read(16) SCSI command on a specific SCSI | |
| target. | |
| Executes the SCSI Read(16) command on the SCSI target specified by ScsiIo. | |
| When Event is NULL, blocking command will be executed. Otherwise non-blocking | |
| command will be executed. | |
| For blocking I/O, if Timeout is zero, this function will wait indefinitely | |
| for the command to complete. If Timeout is greater than zero, then the | |
| command is executed and will timeout after Timeout 100 ns units. | |
| For non-blocking I/O, if Timeout is zero, Event will be signaled only after | |
| the command to completes. If Timeout is greater than zero, Event will also be | |
| signaled after Timeout 100 ns units. | |
| The StartLba and SectorSize parameters are used to construct the CDB for this | |
| SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| @param[in] ScsiIo A pointer to SCSI IO protocol. | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer Read 16 command data. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks | |
| of data that shall be transferred. | |
| @param[in] Event If the SCSI target 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 Read(16) command | |
| completes. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, | |
| but the entire DataBuffer could not be | |
| transferred. The actual number of bytes | |
| transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be | |
| sent because there are too many SCSI | |
| Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting | |
| to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI | |
| Request Packet is not supported by the | |
| SCSI initiator(i.e., SCSI Host | |
| Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the | |
| SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet | |
| are invalid. | |
| @retval EFI_OUT_OF_RESOURCES The request could not be completed due | |
| to a lack of resources. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiRead16CommandEx ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT64 StartLba, | |
| IN UINT32 SectorSize, | |
| IN EFI_EVENT Event OPTIONAL | |
| ); | |
| /** | |
| Execute blocking/non-blocking Write(16) SCSI command on a specific SCSI | |
| target. | |
| Executes the SCSI Write(16) command on the SCSI target specified by ScsiIo. | |
| When Event is NULL, blocking command will be executed. Otherwise non-blocking | |
| command will be executed. | |
| For blocking I/O, if Timeout is zero, this function will wait indefinitely | |
| for the command to complete. If Timeout is greater than zero, then the | |
| command is executed and will timeout after Timeout 100 ns units. | |
| For non-blocking I/O, if Timeout is zero, Event will be signaled only after | |
| the command to completes. If Timeout is greater than zero, Event will also be | |
| signaled after Timeout 100 ns units. | |
| The StartLba and SectorSize parameters are used to construct the CDB for this | |
| SCSI command. | |
| If ScsiIo is NULL, then ASSERT(). | |
| If SenseDataLength is NULL, then ASSERT(). | |
| If HostAdapterStatus is NULL, then ASSERT(). | |
| If TargetStatus is NULL, then ASSERT(). | |
| If DataLength is NULL, then ASSERT(). | |
| If SenseDataLength is non-zero and SenseData is not NULL, SenseData must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| If DataLength is non-zero and DataBuffer is not NULL, DataBuffer must meet | |
| buffer alignment requirement defined in EFI_SCSI_IO_PROTOCOL. Otherwise | |
| EFI_INVALID_PARAMETER gets returned. | |
| @param[in] ScsiIo SCSI IO Protocol to use | |
| @param[in] Timeout The length of timeout period. | |
| @param[in, out] SenseData A pointer to output sense data. | |
| @param[in, out] SenseDataLength The length of output sense data. | |
| @param[out] HostAdapterStatus The status of Host Adapter. | |
| @param[out] TargetStatus The status of the target. | |
| @param[in, out] DataBuffer A pointer to a data buffer. | |
| @param[in, out] DataLength The length of data buffer. | |
| @param[in] StartLba The start address of LBA. | |
| @param[in] SectorSize The number of contiguous logical blocks | |
| of data that shall be transferred. | |
| @param[in] Event If the SCSI target 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 Write(16) command | |
| completes. | |
| @retval EFI_SUCCESS Command is executed successfully. | |
| @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, | |
| but the entire DataBuffer could not be | |
| transferred. The actual number of bytes | |
| transferred is returned in DataLength. | |
| @retval EFI_NOT_READY The SCSI Request Packet could not be | |
| sent because there are too many SCSI | |
| Command Packets already queued. | |
| @retval EFI_DEVICE_ERROR A device error occurred while attempting | |
| to send SCSI Request Packet. | |
| @retval EFI_UNSUPPORTED The command described by the SCSI | |
| Request Packet is not supported by the | |
| SCSI initiator(i.e., SCSI Host | |
| Controller) | |
| @retval EFI_TIMEOUT A timeout occurred while waiting for the | |
| SCSI Request Packet to execute. | |
| @retval EFI_INVALID_PARAMETER The contents of the SCSI Request Packet | |
| are invalid. | |
| @retval EFI_OUT_OF_RESOURCES The request could not be completed due | |
| to a lack of resources. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiWrite16CommandEx ( | |
| IN EFI_SCSI_IO_PROTOCOL *ScsiIo, | |
| IN UINT64 Timeout, | |
| IN OUT VOID *SenseData, OPTIONAL | |
| IN OUT UINT8 *SenseDataLength, | |
| OUT UINT8 *HostAdapterStatus, | |
| OUT UINT8 *TargetStatus, | |
| IN OUT VOID *DataBuffer, OPTIONAL | |
| IN OUT UINT32 *DataLength, | |
| IN UINT64 StartLba, | |
| IN UINT32 SectorSize, | |
| IN EFI_EVENT Event OPTIONAL | |
| ); | |
| #endif |