/** @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 - 2019, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#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 Security Protocol In SCSI command on a specific SCSI target. | |
Executes the SCSI Security Protocol In 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 TransferLength 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] SecurityProtocol The Security Protocol to use. | |
@param[in] SecurityProtocolSpecific The Security Protocol Specific data. | |
@param[in] Inc512 If TRUE, 512 increment (INC_512) bit will be set for the | |
SECURITY PROTOCOL IN command. | |
@param[in] DataLength The size in bytes of the data buffer. | |
@param[in, out] DataBuffer A pointer to a data buffer. | |
@param[out] TransferLength A pointer to a buffer to store the size in | |
bytes of the data written to the data buffer. | |
@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 TransferLength. | |
@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 | |
ScsiSecurityProtocolInCommand ( | |
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 UINT8 SecurityProtocol, | |
IN UINT16 SecurityProtocolSpecific, | |
IN BOOLEAN Inc512, | |
IN UINTN DataLength, | |
IN OUT VOID *DataBuffer OPTIONAL, | |
OUT UINTN *TransferLength | |
); | |
/** | |
Execute Security Protocol Out SCSI command on a specific SCSI target. | |
Executes the SCSI Security Protocol Out 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. | |
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] SecurityProtocol The Security Protocol to use. | |
@param[in] SecurityProtocolSpecific The Security Protocol Specific data. | |
@param[in] Inc512 If TRUE, 512 increment (INC_512) bit will be set for the | |
SECURITY PROTOCOL OUT command. | |
@param[in] DataLength The size in bytes of the transfer data. | |
@param[in, out] DataBuffer A pointer to a data buffer. | |
@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 | |
ScsiSecurityProtocolOutCommand ( | |
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 UINT8 SecurityProtocol, | |
IN UINT16 SecurityProtocolSpecific, | |
IN BOOLEAN Inc512, | |
IN UINTN DataLength, | |
IN OUT VOID *DataBuffer OPTIONAL | |
); | |
/** | |
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 |