MdePkg: Implement SCSI commands for Security Protocol In/Out
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1546 This patch implements the Security Protocol In and Security Protocol Out commands in UefiScsiLib to prepare support for the Storage Security Command Protocol. Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Jian J Wang <jian.j.wang@intel.com> Signed-off-by: Christopher J Zurcher <christopher.j.zurcher@intel.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
committed by
Hao A Wu
parent
1f5e4d9128
commit
9b14509b16
@@ -5,7 +5,7 @@
|
||||
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 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
|
||||
**/
|
||||
@@ -813,6 +813,134 @@ ScsiWrite16Command (
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
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.
|
||||
|
Reference in New Issue
Block a user