TianoCore EDK2 master
Loading...
Searching...
No Matches
ScsiDisk.c File Reference
#include "ScsiDisk.h"

Go to the source code of this file.

Functions

VOID * AllocateAlignedBuffer (IN SCSI_DISK_DEV *ScsiDiskDevice, IN UINTN BufferSize)
 
VOID FreeAlignedBuffer (IN VOID *Buffer, IN UINTN BufferSize)
 
UINTN RemoveTrailingSpaces (IN OUT CHAR8 *String)
 
EFI_STATUS EFIAPI InitializeScsiDisk (IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
 
EFI_STATUS EFIAPI ScsiDiskDriverBindingSupported (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
 
EFI_STATUS EFIAPI ScsiDiskDriverBindingStart (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
 
EFI_STATUS EFIAPI ScsiDiskDriverBindingStop (IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer OPTIONAL)
 
EFI_STATUS EFIAPI ScsiDiskReset (IN EFI_BLOCK_IO_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
 
EFI_STATUS EFIAPI ScsiDiskReadBlocks (IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, OUT VOID *Buffer)
 
EFI_STATUS EFIAPI ScsiDiskWriteBlocks (IN EFI_BLOCK_IO_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN UINTN BufferSize, IN VOID *Buffer)
 
EFI_STATUS EFIAPI ScsiDiskFlushBlocks (IN EFI_BLOCK_IO_PROTOCOL *This)
 
EFI_STATUS EFIAPI ScsiDiskResetEx (IN EFI_BLOCK_IO2_PROTOCOL *This, IN BOOLEAN ExtendedVerification)
 
EFI_STATUS EFIAPI ScsiDiskReadBlocksEx (IN EFI_BLOCK_IO2_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, OUT VOID *Buffer)
 
EFI_STATUS EFIAPI ScsiDiskWriteBlocksEx (IN EFI_BLOCK_IO2_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_BLOCK_IO2_TOKEN *Token, IN UINTN BufferSize, IN VOID *Buffer)
 
EFI_STATUS EFIAPI ScsiDiskFlushBlocksEx (IN EFI_BLOCK_IO2_PROTOCOL *This, IN OUT EFI_BLOCK_IO2_TOKEN *Token)
 
VOID EFIAPI ScsiDiskAsyncUnmapNotify (IN EFI_EVENT Event, IN VOID *Context)
 
EFI_STATUS ScsiDiskUnmap (IN SCSI_DISK_DEV *ScsiDiskDevice, IN UINT64 Lba, IN UINTN Blocks, IN EFI_ERASE_BLOCK_TOKEN *Token OPTIONAL)
 
EFI_STATUS EFIAPI ScsiDiskEraseBlocks (IN EFI_ERASE_BLOCK_PROTOCOL *This, IN UINT32 MediaId, IN EFI_LBA Lba, IN OUT EFI_ERASE_BLOCK_TOKEN *Token, IN UINTN Size)
 
EFI_STATUS EFIAPI ScsiDiskReceiveData (IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This, IN UINT32 MediaId OPTIONAL, IN UINT64 Timeout, IN UINT8 SecurityProtocolId, IN UINT16 SecurityProtocolSpecificData, IN UINTN PayloadBufferSize, OUT VOID *PayloadBuffer, OUT UINTN *PayloadTransferSize)
 
EFI_STATUS EFIAPI ScsiDiskSendData (IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL *This, IN UINT32 MediaId OPTIONAL, IN UINT64 Timeout, IN UINT8 SecurityProtocolId, IN UINT16 SecurityProtocolSpecificData, IN UINTN PayloadBufferSize, OUT VOID *PayloadBuffer)
 
EFI_STATUS ScsiDiskDetectMedia (IN SCSI_DISK_DEV *ScsiDiskDevice, IN BOOLEAN MustReadCapacity, OUT BOOLEAN *MediaChange)
 
EFI_STATUS ScsiDiskInquiryDevice (IN OUT SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry)
 
EFI_STATUS ScsiDiskTestUnitReady (IN SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry, OUT EFI_SCSI_SENSE_DATA **SenseDataArray, OUT UINTN *NumberOfSenseKeys)
 
EFI_STATUS DetectMediaParsingSenseKeys (OUT SCSI_DISK_DEV *ScsiDiskDevice, IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN NumberOfSenseKeys, OUT UINTN *Action)
 
EFI_STATUS ScsiDiskReadCapacity (IN OUT SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry, OUT EFI_SCSI_SENSE_DATA **SenseDataArray, OUT UINTN *NumberOfSenseKeys)
 
EFI_STATUS CheckHostAdapterStatus (IN UINT8 HostAdapterStatus)
 
EFI_STATUS CheckTargetStatus (IN UINT8 TargetStatus)
 
EFI_STATUS ScsiDiskRequestSenseKeys (IN OUT SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry, OUT EFI_SCSI_SENSE_DATA **SenseDataArray, OUT UINTN *NumberOfSenseKeys, IN BOOLEAN AskResetIfError)
 
VOID GetMediaInfo (IN OUT SCSI_DISK_DEV *ScsiDiskDevice, IN EFI_SCSI_DISK_CAPACITY_DATA *Capacity10, IN EFI_SCSI_DISK_CAPACITY_DATA16 *Capacity16)
 
VOID ParseInquiryData (IN OUT SCSI_DISK_DEV *ScsiDiskDevice)
 
EFI_STATUS ScsiDiskReadSectors (IN SCSI_DISK_DEV *ScsiDiskDevice, OUT VOID *Buffer, IN EFI_LBA Lba, IN UINTN NumberOfBlocks)
 
EFI_STATUS ScsiDiskWriteSectors (IN SCSI_DISK_DEV *ScsiDiskDevice, IN VOID *Buffer, IN EFI_LBA Lba, IN UINTN NumberOfBlocks)
 
EFI_STATUS ScsiDiskAsyncReadSectors (IN SCSI_DISK_DEV *ScsiDiskDevice, OUT VOID *Buffer, IN EFI_LBA Lba, IN UINTN NumberOfBlocks, IN EFI_BLOCK_IO2_TOKEN *Token)
 
EFI_STATUS ScsiDiskAsyncWriteSectors (IN SCSI_DISK_DEV *ScsiDiskDevice, IN VOID *Buffer, IN EFI_LBA Lba, IN UINTN NumberOfBlocks, IN EFI_BLOCK_IO2_TOKEN *Token)
 
EFI_STATUS ScsiDiskRead10 (IN SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry, IN UINT64 Timeout, OUT UINT8 *DataBuffer, IN OUT UINT32 *DataLength, IN UINT32 StartLba, IN UINT32 SectorCount)
 
EFI_STATUS ScsiDiskWrite10 (IN SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry, IN UINT64 Timeout, IN UINT8 *DataBuffer, IN OUT UINT32 *DataLength, IN UINT32 StartLba, IN UINT32 SectorCount)
 
EFI_STATUS ScsiDiskRead16 (IN SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry, IN UINT64 Timeout, OUT UINT8 *DataBuffer, IN OUT UINT32 *DataLength, IN UINT64 StartLba, IN UINT32 SectorCount)
 
EFI_STATUS ScsiDiskWrite16 (IN SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry, IN UINT64 Timeout, IN UINT8 *DataBuffer, IN OUT UINT32 *DataLength, IN UINT64 StartLba, IN UINT32 SectorCount)
 
VOID EFIAPI ScsiDiskNotify (IN EFI_EVENT Event, IN VOID *Context)
 
EFI_STATUS ScsiDiskAsyncRead10 (IN SCSI_DISK_DEV *ScsiDiskDevice, IN UINT64 Timeout, IN UINT8 TimesRetry, OUT UINT8 *DataBuffer, IN UINT32 DataLength, IN UINT32 StartLba, IN UINT32 SectorCount, IN OUT SCSI_BLKIO2_REQUEST *BlkIo2Req, IN EFI_BLOCK_IO2_TOKEN *Token)
 
EFI_STATUS ScsiDiskAsyncWrite10 (IN SCSI_DISK_DEV *ScsiDiskDevice, IN UINT64 Timeout, IN UINT8 TimesRetry, IN UINT8 *DataBuffer, IN UINT32 DataLength, IN UINT32 StartLba, IN UINT32 SectorCount, IN OUT SCSI_BLKIO2_REQUEST *BlkIo2Req, IN EFI_BLOCK_IO2_TOKEN *Token)
 
EFI_STATUS ScsiDiskAsyncRead16 (IN SCSI_DISK_DEV *ScsiDiskDevice, IN UINT64 Timeout, IN UINT8 TimesRetry, OUT UINT8 *DataBuffer, IN UINT32 DataLength, IN UINT64 StartLba, IN UINT32 SectorCount, IN OUT SCSI_BLKIO2_REQUEST *BlkIo2Req, IN EFI_BLOCK_IO2_TOKEN *Token)
 
EFI_STATUS ScsiDiskAsyncWrite16 (IN SCSI_DISK_DEV *ScsiDiskDevice, IN UINT64 Timeout, IN UINT8 TimesRetry, IN UINT8 *DataBuffer, IN UINT32 DataLength, IN UINT64 StartLba, IN UINT32 SectorCount, IN OUT SCSI_BLKIO2_REQUEST *BlkIo2Req, IN EFI_BLOCK_IO2_TOKEN *Token)
 
BOOLEAN ScsiDiskIsNoMedia (IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN SenseCounts)
 
BOOLEAN ScsiDiskIsMediaError (IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN SenseCounts)
 
BOOLEAN ScsiDiskIsHardwareError (IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN SenseCounts)
 
BOOLEAN ScsiDiskIsMediaChange (IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN SenseCounts)
 
BOOLEAN ScsiDiskIsResetBefore (IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN SenseCounts)
 
BOOLEAN ScsiDiskIsDriveReady (IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN SenseCounts, OUT BOOLEAN *RetryLater)
 
BOOLEAN ScsiDiskHaveSenseKey (IN EFI_SCSI_SENSE_DATA *SenseData, IN UINTN SenseCounts)
 
VOID ReleaseScsiDiskDeviceResources (IN SCSI_DISK_DEV *ScsiDiskDevice)
 
BOOLEAN DetermineInstallBlockIo (IN EFI_HANDLE ChildHandle)
 
VOID *EFIAPI GetParentProtocol (IN EFI_GUID *ProtocolGuid, IN EFI_HANDLE ChildHandle)
 
BOOLEAN DetermineInstallEraseBlock (IN SCSI_DISK_DEV *ScsiDiskDevice, IN EFI_HANDLE ChildHandle)
 
BOOLEAN DetermineInstallStorageSecurity (IN SCSI_DISK_DEV *ScsiDiskDevice, IN EFI_HANDLE ChildHandle)
 
EFI_STATUS EFIAPI ScsiDiskInfoInquiry (IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *InquiryData, IN OUT UINT32 *InquiryDataSize)
 
EFI_STATUS EFIAPI ScsiDiskInfoIdentify (IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *IdentifyData, IN OUT UINT32 *IdentifyDataSize)
 
EFI_STATUS EFIAPI ScsiDiskInfoSenseData (IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *SenseData, IN OUT UINT32 *SenseDataSize, OUT UINT8 *SenseDataNumber)
 
EFI_STATUS EFIAPI ScsiDiskInfoWhichIde (IN EFI_DISK_INFO_PROTOCOL *This, OUT UINT32 *IdeChannel, OUT UINT32 *IdeDevice)
 
EFI_STATUS AtapiIdentifyDevice (IN OUT SCSI_DISK_DEV *ScsiDiskDevice)
 
VOID InitializeInstallDiskInfo (IN SCSI_DISK_DEV *ScsiDiskDevice, IN EFI_HANDLE ChildHandle)
 

Variables

EFI_DRIVER_BINDING_PROTOCOL gScsiDiskDriverBinding
 
EFI_DISK_INFO_PROTOCOL gScsiDiskInfoProtocolTemplate
 

Detailed Description

SCSI disk driver that layers on every SCSI IO protocol in the system.

Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
Copyright (c) 1985 - 2022, American Megatrends International LLC.
SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file ScsiDisk.c.

Function Documentation

◆ AllocateAlignedBuffer()

VOID * AllocateAlignedBuffer ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN UINTN  BufferSize 
)

Allocates an aligned buffer for SCSI disk.

This function allocates an aligned buffer for the SCSI disk to perform SCSI IO operations. The alignment requirement is from SCSI IO interface.

Parameters
ScsiDiskDeviceThe SCSI disk involved for the operation.
BufferSizeThe request buffer size.
Returns
A pointer to the aligned buffer or NULL if the allocation fails.

Definition at line 42 of file ScsiDisk.c.

◆ AtapiIdentifyDevice()

EFI_STATUS AtapiIdentifyDevice ( IN OUT SCSI_DISK_DEV ScsiDiskDevice)

Issues ATA IDENTIFY DEVICE command to identify ATAPI device.

This function tries to fill 512-byte ATAPI_IDENTIFY_DATA for ATAPI device to implement Identify() interface for DiskInfo protocol. The ATA command is sent via SCSI Request Packet.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
Return values
EFI_SUCCESSThe ATAPI device identify data were retrieved successfully.
othersSome error occurred during the identification that ATAPI device.

Definition at line 6311 of file ScsiDisk.c.

◆ CheckHostAdapterStatus()

EFI_STATUS CheckHostAdapterStatus ( IN UINT8  HostAdapterStatus)

Check the HostAdapter status and re-interpret it in EFI_STATUS.

Parameters
HostAdapterStatusHost Adapter status
Return values
EFI_SUCCESSHost adapter is OK.
EFI_TIMEOUTTimeout.
EFI_NOT_READYAdapter NOT ready.
EFI_DEVICE_ERRORAdapter device error.

Definition at line 3194 of file ScsiDisk.c.

◆ CheckTargetStatus()

EFI_STATUS CheckTargetStatus ( IN UINT8  TargetStatus)

Check the target status and re-interpret it in EFI_STATUS.

Parameters
TargetStatusTarget status
Return values
EFI_NOT_READYDevice is NOT ready.
EFI_DEVICE_ERROR
EFI_SUCCESS

Definition at line 3234 of file ScsiDisk.c.

◆ DetectMediaParsingSenseKeys()

EFI_STATUS DetectMediaParsingSenseKeys ( OUT SCSI_DISK_DEV ScsiDiskDevice,
IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  NumberOfSenseKeys,
OUT UINTN Action 
)

Parsing Sense Keys which got from request sense command.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
SenseDataThe pointer of EFI_SCSI_SENSE_DATA
NumberOfSenseKeysThe number of sense key
ActionThe pointer of action which indicates what is need to do next
Return values
EFI_DEVICE_ERRORIndicates that error occurs
EFI_SUCCESSSuccessfully to complete the parsing

Definition at line 2923 of file ScsiDisk.c.

◆ DetermineInstallBlockIo()

BOOLEAN DetermineInstallBlockIo ( IN EFI_HANDLE  ChildHandle)

Determine if Block Io & Block Io2 should be produced.

Parameters
ChildHandleChild Handle to retrieve Parent information.
Return values
TRUEShould produce Block Io & Block Io2.
FALSEShould not produce Block Io & Block Io2.

Definition at line 5850 of file ScsiDisk.c.

◆ DetermineInstallEraseBlock()

BOOLEAN DetermineInstallEraseBlock ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN EFI_HANDLE  ChildHandle 
)

Determine if EFI Erase Block Protocol should be produced.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV.
ChildHandleHandle of device.
Return values
TRUEShould produce EFI Erase Block Protocol.
FALSEShould not produce EFI Erase Block Protocol.

Definition at line 5951 of file ScsiDisk.c.

◆ DetermineInstallStorageSecurity()

BOOLEAN DetermineInstallStorageSecurity ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN EFI_HANDLE  ChildHandle 
)

Determine if EFI Storage Security Command Protocol should be produced.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV.
ChildHandleHandle of device.
Return values
TRUEShould produce EFI Storage Security Command Protocol.
FALSEShould not produce EFI Storage Security Command Protocol.

Definition at line 6096 of file ScsiDisk.c.

◆ FreeAlignedBuffer()

VOID FreeAlignedBuffer ( IN VOID *  Buffer,
IN UINTN  BufferSize 
)

Frees an aligned buffer for SCSI disk.

This function frees an aligned buffer for the SCSI disk to perform SCSI IO operations.

Parameters
BufferThe aligned buffer to be freed.
BufferSizeThe request buffer size.

Definition at line 61 of file ScsiDisk.c.

◆ GetMediaInfo()

VOID GetMediaInfo ( IN OUT SCSI_DISK_DEV ScsiDiskDevice,
IN EFI_SCSI_DISK_CAPACITY_DATA Capacity10,
IN EFI_SCSI_DISK_CAPACITY_DATA16 Capacity16 
)

Get information from media read capacity command.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
Capacity10The pointer of EFI_SCSI_DISK_CAPACITY_DATA
Capacity16The pointer of EFI_SCSI_DISK_CAPACITY_DATA16

Definition at line 3373 of file ScsiDisk.c.

◆ GetParentProtocol()

VOID *EFIAPI GetParentProtocol ( IN EFI_GUID ProtocolGuid,
IN EFI_HANDLE  ChildHandle 
)

Search protocol database and check to see if the protocol specified by ProtocolGuid is present on a ControllerHandle and opened by ChildHandle with an attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER. If the ControllerHandle is found, then the protocol specified by ProtocolGuid will be opened on it.

Parameters
ProtocolGuidProtocolGuid pointer.
ChildHandleChild Handle to retrieve Parent information.

Definition at line 5896 of file ScsiDisk.c.

◆ InitializeInstallDiskInfo()

VOID InitializeInstallDiskInfo ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN EFI_HANDLE  ChildHandle 
)

Initialize the installation of DiskInfo protocol.

This function prepares for the installation of DiskInfo protocol on the child handle. By default, it installs DiskInfo protocol with SCSI interface GUID. If it further detects that the physical device is an ATAPI/AHCI device, it then updates interface GUID to be IDE/AHCI interface GUID.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV.
ChildHandleChild handle to install DiskInfo protocol.

Definition at line 6347 of file ScsiDisk.c.

◆ InitializeScsiDisk()

EFI_STATUS EFIAPI InitializeScsiDisk ( IN EFI_HANDLE  ImageHandle,
IN EFI_SYSTEM_TABLE SystemTable 
)

The user Entry Point for module ScsiDisk.

The user code starts with this function.

Parameters
ImageHandleThe firmware allocated handle for the EFI image.
SystemTableA pointer to the EFI System Table.
Return values
EFI_SUCCESSThe entry point is executed successfully.
otherSome error occurs when executing this entry point.

Definition at line 112 of file ScsiDisk.c.

◆ ParseInquiryData()

VOID ParseInquiryData ( IN OUT SCSI_DISK_DEV ScsiDiskDevice)

Parse Inquiry data.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV

Definition at line 3434 of file ScsiDisk.c.

◆ ReleaseScsiDiskDeviceResources()

VOID ReleaseScsiDiskDeviceResources ( IN SCSI_DISK_DEV ScsiDiskDevice)

Release resource about disk device.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV

Definition at line 5816 of file ScsiDisk.c.

◆ RemoveTrailingSpaces()

UINTN RemoveTrailingSpaces ( IN OUT CHAR8 *  String)

Remove trailing spaces from the string.

Parameters
StringThe ASCII string to remove the trailing spaces.
Return values
thenew length of the string.

Definition at line 79 of file ScsiDisk.c.

◆ ScsiDiskAsyncRead10()

EFI_STATUS ScsiDiskAsyncRead10 ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN UINT64  Timeout,
IN UINT8  TimesRetry,
OUT UINT8 *  DataBuffer,
IN UINT32  DataLength,
IN UINT32  StartLba,
IN UINT32  SectorCount,
IN OUT SCSI_BLKIO2_REQUEST BlkIo2Req,
IN EFI_BLOCK_IO2_TOKEN Token 
)

Submit Async Read(10) command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice.
TimeoutThe time to complete the command.
TimesRetryThe number of times the command has been retried.
DataBufferThe buffer to fill with the read out data.
DataLengthThe length of buffer.
StartLbaThe start logic block address.
SectorCountThe number of blocks to read.
BlkIo2ReqThe upstream BlockIo2 request.
TokenThe pointer to the token associated with the non-blocking read request.
Return values
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
Returns
others Status returned by calling ScsiRead10CommandEx().

Definition at line 5006 of file ScsiDisk.c.

◆ ScsiDiskAsyncRead16()

EFI_STATUS ScsiDiskAsyncRead16 ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN UINT64  Timeout,
IN UINT8  TimesRetry,
OUT UINT8 *  DataBuffer,
IN UINT32  DataLength,
IN UINT64  StartLba,
IN UINT32  SectorCount,
IN OUT SCSI_BLKIO2_REQUEST BlkIo2Req,
IN EFI_BLOCK_IO2_TOKEN Token 
)

Submit Async Read(16) command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice.
TimeoutThe time to complete the command.
TimesRetryThe number of times the command has been retried.
DataBufferThe buffer to fill with the read out data.
DataLengthThe length of buffer.
StartLbaThe start logic block address.
SectorCountThe number of blocks to read.
BlkIo2ReqThe upstream BlockIo2 request.
TokenThe pointer to the token associated with the non-blocking read request.
Return values
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
Returns
others Status returned by calling ScsiRead16CommandEx().

Definition at line 5242 of file ScsiDisk.c.

◆ ScsiDiskAsyncReadSectors()

EFI_STATUS ScsiDiskAsyncReadSectors ( IN SCSI_DISK_DEV ScsiDiskDevice,
OUT VOID *  Buffer,
IN EFI_LBA  Lba,
IN UINTN  NumberOfBlocks,
IN EFI_BLOCK_IO2_TOKEN Token 
)

Asynchronously read sector from SCSI Disk.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV.
BufferThe buffer to fill in the read out data.
LbaLogic block address.
NumberOfBlocksThe number of blocks to read.
TokenA pointer to the token associated with the non-blocking read request.
Return values
EFI_INVALID_PARAMETERToken is NULL or Token->Event is NULL.
EFI_DEVICE_ERRORIndicates a device error.
EFI_SUCCESSOperation is successful.

Definition at line 3787 of file ScsiDisk.c.

◆ ScsiDiskAsyncUnmapNotify()

VOID EFIAPI ScsiDiskAsyncUnmapNotify ( IN EFI_EVENT  Event,
IN VOID *  Context 
)

Internal helper notify function which process the result of an asynchronous SCSI UNMAP Command and signal the event passed from EraseBlocks.

Parameters
EventThe instance of EFI_EVENT.
ContextThe parameter passed in.

Definition at line 1468 of file ScsiDisk.c.

◆ ScsiDiskAsyncWrite10()

EFI_STATUS ScsiDiskAsyncWrite10 ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN UINT64  Timeout,
IN UINT8  TimesRetry,
IN UINT8 *  DataBuffer,
IN UINT32  DataLength,
IN UINT32  StartLba,
IN UINT32  SectorCount,
IN OUT SCSI_BLKIO2_REQUEST BlkIo2Req,
IN EFI_BLOCK_IO2_TOKEN Token 
)

Submit Async Write(10) command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice.
TimeoutThe time to complete the command.
TimesRetryThe number of times the command has been retried.
DataBufferThe buffer contains the data to write.
DataLengthThe length of buffer.
StartLbaThe start logic block address.
SectorCountThe number of blocks to write.
BlkIo2ReqThe upstream BlockIo2 request.
TokenThe pointer to the token associated with the non-blocking read request.
Return values
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
Returns
others Status returned by calling ScsiWrite10CommandEx().

Definition at line 5124 of file ScsiDisk.c.

◆ ScsiDiskAsyncWrite16()

EFI_STATUS ScsiDiskAsyncWrite16 ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN UINT64  Timeout,
IN UINT8  TimesRetry,
IN UINT8 *  DataBuffer,
IN UINT32  DataLength,
IN UINT64  StartLba,
IN UINT32  SectorCount,
IN OUT SCSI_BLKIO2_REQUEST BlkIo2Req,
IN EFI_BLOCK_IO2_TOKEN Token 
)

Submit Async Write(16) command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice.
TimeoutThe time to complete the command.
TimesRetryThe number of times the command has been retried.
DataBufferThe buffer contains the data to write.
DataLengthThe length of buffer.
StartLbaThe start logic block address.
SectorCountThe number of blocks to write.
BlkIo2ReqThe upstream BlockIo2 request.
TokenThe pointer to the token associated with the non-blocking read request.
Return values
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.
Returns
others Status returned by calling ScsiWrite16CommandEx().

Definition at line 5360 of file ScsiDisk.c.

◆ ScsiDiskAsyncWriteSectors()

EFI_STATUS ScsiDiskAsyncWriteSectors ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN VOID *  Buffer,
IN EFI_LBA  Lba,
IN UINTN  NumberOfBlocks,
IN EFI_BLOCK_IO2_TOKEN Token 
)

Asynchronously write sector to SCSI Disk.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV.
BufferThe buffer of data to be written into SCSI Disk.
LbaLogic block address.
NumberOfBlocksThe number of blocks to read.
TokenA pointer to the token associated with the non-blocking read request.
Return values
EFI_INVALID_PARAMETERToken is NULL or Token->Event is NULL
EFI_DEVICE_ERRORIndicates a device error.
EFI_SUCCESSOperation is successful.

Definition at line 4005 of file ScsiDisk.c.

◆ ScsiDiskDetectMedia()

EFI_STATUS ScsiDiskDetectMedia ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN BOOLEAN  MustReadCapacity,
OUT BOOLEAN *  MediaChange 
)

Detect Device and read out capacity ,if error occurs, parse the sense key.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
MustReadCapacityThe flag about reading device capacity
MediaChangeThe pointer of flag indicates if media has changed
Return values
EFI_DEVICE_ERRORIndicates that error occurs
EFI_SUCCESSSuccessfully to detect media

Definition at line 2319 of file ScsiDisk.c.

◆ ScsiDiskDriverBindingStart()

EFI_STATUS EFIAPI ScsiDiskDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath  OPTIONAL 
)

Start this driver on ControllerHandle.

This service is called by the EFI boot service ConnectController(). In order to make drivers as small as possible, there are a few calling restrictions for this service. ConnectController() must follow these calling restrictions. If any other agent wishes to call Start() it must also follow these calling restrictions.

Parameters
ThisProtocol instance pointer.
ControllerHandleHandle of device to bind driver to
RemainingDevicePathOptional parameter use to pick a specific child device to start.
Return values
EFI_SUCCESSThis driver is added to ControllerHandle
EFI_ALREADY_STARTEDThis driver is already running on ControllerHandle
otherThis driver does not support this device

Definition at line 220 of file ScsiDisk.c.

◆ ScsiDiskDriverBindingStop()

EFI_STATUS EFIAPI ScsiDiskDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN UINTN  NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer  OPTIONAL 
)

Stop this driver on ControllerHandle.

This service is called by the EFI boot service DisconnectController(). In order to make drivers as small as possible, there are a few calling restrictions for this service. DisconnectController() must follow these calling restrictions. If any other agent wishes to call Stop() it must also follow these calling restrictions.

Parameters
ThisProtocol instance pointer.
ControllerHandleHandle of device to stop driver on
NumberOfChildrenNumber of Handles in ChildHandleBuffer. If number of children is zero stop the entire bus driver.
ChildHandleBufferList of Child Handles to Stop.
Return values
EFI_SUCCESSThis driver is removed ControllerHandle
otherThis driver was not removed from this device

Definition at line 458 of file ScsiDisk.c.

◆ ScsiDiskDriverBindingSupported()

EFI_STATUS EFIAPI ScsiDiskDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL This,
IN EFI_HANDLE  Controller,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath  OPTIONAL 
)

Test to see if this driver supports ControllerHandle.

This service is called by the EFI boot service ConnectController(). In order to make drivers as small as possible, there are a few calling restrictions for this service. ConnectController() must follow these calling restrictions. If any other agent wishes to call Supported() it must also follow these calling restrictions.

Parameters
ThisProtocol instance pointer.
ControllerHandleHandle of device to test
RemainingDevicePathOptional parameter use to pick a specific child device to start.
Return values
EFI_SUCCESSThis driver supports this device
EFI_ALREADY_STARTEDThis driver is already running on this device
otherThis driver does not support this device

Definition at line 156 of file ScsiDisk.c.

◆ ScsiDiskEraseBlocks()

EFI_STATUS EFIAPI ScsiDiskEraseBlocks ( IN EFI_ERASE_BLOCK_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN OUT EFI_ERASE_BLOCK_TOKEN Token,
IN UINTN  Size 
)

Erase a specified number of device blocks.

Parameters
[in]ThisIndicates a pointer to the calling context.
[in]MediaIdThe media ID that the erase request is for.
[in]LbaThe starting logical block address to be erased. The caller is responsible for erasing only legitimate locations.
[in,out]TokenA pointer to the token associated with the transaction.
[in]SizeThe size in bytes to be erased. This must be a multiple of the physical block size of the device.
Return values
EFI_SUCCESSThe erase request was queued if Event is not NULL. The data was erased correctly to the device if the Event is NULL.to the device.
EFI_WRITE_PROTECTEDThe device cannot be erased due to write protection.
EFI_DEVICE_ERRORThe device reported an error while attempting to perform the erase operation.
EFI_INVALID_PARAMETERThe erase request contains LBAs that are not valid.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.

Definition at line 1752 of file ScsiDisk.c.

◆ ScsiDiskFlushBlocks()

EFI_STATUS EFIAPI ScsiDiskFlushBlocks ( IN EFI_BLOCK_IO_PROTOCOL This)

Flush Block to Disk.

EFI_SUCCESS is returned directly.

Parameters
ThisThe pointer of EFI_BLOCK_IO_PROTOCOL
Return values
EFI_SUCCESSAll outstanding data was written to the device

Definition at line 917 of file ScsiDisk.c.

◆ ScsiDiskFlushBlocksEx()

EFI_STATUS EFIAPI ScsiDiskFlushBlocksEx ( IN EFI_BLOCK_IO2_PROTOCOL This,
IN OUT EFI_BLOCK_IO2_TOKEN Token 
)

Flush the Block Device.

Parameters
ThisIndicates a pointer to the calling context.
TokenA pointer to the token associated with the transaction.
Return values
EFI_SUCCESSAll outstanding data was written to the device.
EFI_DEVICE_ERRORThe device reported an error while attempting to write data.
EFI_WRITE_PROTECTEDThe device cannot be written to.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.

Definition at line 1363 of file ScsiDisk.c.

◆ ScsiDiskHaveSenseKey()

BOOLEAN ScsiDiskHaveSenseKey ( IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  SenseCounts 
)

Check sense key to find if it has sense key.

Parameters
SenseData- The pointer of EFI_SCSI_SENSE_DATA
SenseCounts- The number of sense key
Return values
TRUEIt has sense key.
FALSEIt has NOT any sense key.

Definition at line 5776 of file ScsiDisk.c.

◆ ScsiDiskInfoIdentify()

EFI_STATUS EFIAPI ScsiDiskInfoIdentify ( IN EFI_DISK_INFO_PROTOCOL This,
IN OUT VOID *  IdentifyData,
IN OUT UINT32 *  IdentifyDataSize 
)

Provides identify information for the controller type.

This function is used by the IDE bus driver to get identify data. Data format of Identify data is defined by the Interface GUID.

Parameters
[in]ThisPointer to the EFI_DISK_INFO_PROTOCOL instance.
[in,out]IdentifyDataPointer to a buffer for the identify data.
[in,out]IdentifyDataSizePointer to the value for the identify data size.
Return values
EFI_SUCCESSThe command was accepted without any errors.
EFI_NOT_FOUNDDevice does not support this data class
EFI_DEVICE_ERRORError reading IdentifyData from device
EFI_BUFFER_TOO_SMALLIdentifyDataSize not big enough

Definition at line 6205 of file ScsiDisk.c.

◆ ScsiDiskInfoInquiry()

EFI_STATUS EFIAPI ScsiDiskInfoInquiry ( IN EFI_DISK_INFO_PROTOCOL This,
IN OUT VOID *  InquiryData,
IN OUT UINT32 *  InquiryDataSize 
)

Provides inquiry information for the controller type.

This function is used by the IDE bus driver to get inquiry data. Data format of Identify data is defined by the Interface GUID.

Parameters
[in]ThisPointer to the EFI_DISK_INFO_PROTOCOL instance.
[in,out]InquiryDataPointer to a buffer for the inquiry data.
[in,out]InquiryDataSizePointer to the value for the inquiry data size.
Return values
EFI_SUCCESSThe command was accepted without any errors.
EFI_NOT_FOUNDDevice does not support this data class
EFI_DEVICE_ERRORError reading InquiryData from device
EFI_BUFFER_TOO_SMALLInquiryDataSize not big enough

Definition at line 6164 of file ScsiDisk.c.

◆ ScsiDiskInfoSenseData()

EFI_STATUS EFIAPI ScsiDiskInfoSenseData ( IN EFI_DISK_INFO_PROTOCOL This,
IN OUT VOID *  SenseData,
IN OUT UINT32 *  SenseDataSize,
OUT UINT8 *  SenseDataNumber 
)

Provides sense data information for the controller type.

This function is used by the IDE bus driver to get sense data. Data format of Sense data is defined by the Interface GUID.

Parameters
[in]ThisPointer to the EFI_DISK_INFO_PROTOCOL instance.
[in,out]SenseDataPointer to the SenseData.
[in,out]SenseDataSizeSize of SenseData in bytes.
[out]SenseDataNumberPointer to the value for the sense data size.
Return values
EFI_SUCCESSThe command was accepted without any errors.
EFI_NOT_FOUNDDevice does not support this data class.
EFI_DEVICE_ERRORError reading SenseData from device.
EFI_BUFFER_TOO_SMALLSenseDataSize not big enough.

Definition at line 6252 of file ScsiDisk.c.

◆ ScsiDiskInfoWhichIde()

EFI_STATUS EFIAPI ScsiDiskInfoWhichIde ( IN EFI_DISK_INFO_PROTOCOL This,
OUT UINT32 *  IdeChannel,
OUT UINT32 *  IdeDevice 
)

This function is used by the IDE bus driver to get controller information.

Parameters
[in]ThisPointer to the EFI_DISK_INFO_PROTOCOL instance.
[out]IdeChannelPointer to the Ide Channel number. Primary or secondary.
[out]IdeDevicePointer to the Ide Device number. Master or slave.
Return values
EFI_SUCCESSIdeChannel and IdeDevice are valid.
EFI_UNSUPPORTEDThis is not an IDE device.

Definition at line 6275 of file ScsiDisk.c.

◆ ScsiDiskInquiryDevice()

EFI_STATUS ScsiDiskInquiryDevice ( IN OUT SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry 
)

Send out Inquiry command to Device.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
NeedRetryIndicates if needs try again when error happens
Return values
EFI_DEVICE_ERRORIndicates that error occurs
EFI_SUCCESSSuccessfully to detect media

Definition at line 2526 of file ScsiDisk.c.

◆ ScsiDiskIsDriveReady()

BOOLEAN ScsiDiskIsDriveReady ( IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  SenseCounts,
OUT BOOLEAN *  RetryLater 
)

Check sense key to find if the drive is ready.

Parameters
SenseDataThe pointer of EFI_SCSI_SENSE_DATA
SenseCountsThe number of sense key
RetryLaterThe flag means if need a retry
Return values
TRUEDrive is ready.
FALSEDrive is NOT ready.

Definition at line 5706 of file ScsiDisk.c.

◆ ScsiDiskIsHardwareError()

BOOLEAN ScsiDiskIsHardwareError ( IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  SenseCounts 
)

Check sense key to find if hardware error happens.

Parameters
SenseDataThe pointer of EFI_SCSI_SENSE_DATA
SenseCountsThe number of sense key
Return values
TRUEHardware error exits.
FALSENO error.

Definition at line 5589 of file ScsiDisk.c.

◆ ScsiDiskIsMediaChange()

BOOLEAN ScsiDiskIsMediaChange ( IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  SenseCounts 
)

Check sense key to find if media has changed.

Parameters
SenseDataThe pointer of EFI_SCSI_SENSE_DATA
SenseCountsThe number of sense key
Return values
TRUEMedia is changed.
FALSEMedia is NOT changed.

Definition at line 5625 of file ScsiDisk.c.

◆ ScsiDiskIsMediaError()

BOOLEAN ScsiDiskIsMediaError ( IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  SenseCounts 
)

Parse sense key.

Parameters
SenseDataThe pointer of EFI_SCSI_SENSE_DATA
SenseCountsThe number of sense key
Return values
TRUEError
FALSENOT error

Definition at line 5507 of file ScsiDisk.c.

◆ ScsiDiskIsNoMedia()

BOOLEAN ScsiDiskIsNoMedia ( IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  SenseCounts 
)

Check sense key to find if media presents.

Parameters
SenseDataThe pointer of EFI_SCSI_SENSE_DATA
SenseCountsThe number of sense key
Return values
TRUENOT any media
FALSEMedia presents

Definition at line 5467 of file ScsiDisk.c.

◆ ScsiDiskIsResetBefore()

BOOLEAN ScsiDiskIsResetBefore ( IN EFI_SCSI_SENSE_DATA SenseData,
IN UINTN  SenseCounts 
)

Check sense key to find if reset happens.

Parameters
SenseDataThe pointer of EFI_SCSI_SENSE_DATA
SenseCountsThe number of sense key
Return values
TRUEIt is reset before.
FALSEIt is NOT reset before.

Definition at line 5665 of file ScsiDisk.c.

◆ ScsiDiskNotify()

VOID EFIAPI ScsiDiskNotify ( IN EFI_EVENT  Event,
IN VOID *  Context 
)

Internal helper notify function in which determine whether retry of a SCSI Read/Write command is needed and signal the event passed from Block I/O(2) if the SCSI I/O operation completes.

Parameters
EventThe instance of EFI_EVENT.
ContextThe parameter passed in.

Definition at line 4713 of file ScsiDisk.c.

◆ ScsiDiskRead10()

EFI_STATUS ScsiDiskRead10 ( IN SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry,
IN UINT64  Timeout,
OUT UINT8 *  DataBuffer,
IN OUT UINT32 *  DataLength,
IN UINT32  StartLba,
IN UINT32  SectorCount 
)

Submit Read(10) command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice
NeedRetryThe pointer of flag indicates if needs retry if error happens
TimeoutThe time to complete the command
DataBufferThe buffer to fill with the read out data
DataLengthThe length of buffer
StartLbaThe start logic block address
SectorCountThe number of blocks to read
Returns
EFI_STATUS is returned by calling ScsiRead10Command().

Definition at line 4221 of file ScsiDisk.c.

◆ ScsiDiskRead16()

EFI_STATUS ScsiDiskRead16 ( IN SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry,
IN UINT64  Timeout,
OUT UINT8 *  DataBuffer,
IN OUT UINT32 *  DataLength,
IN UINT64  StartLba,
IN UINT32  SectorCount 
)

Submit Read(16) command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice
NeedRetryThe pointer of flag indicates if needs retry if error happens
TimeoutThe time to complete the command
DataBufferThe buffer to fill with the read out data
DataLengthThe length of buffer
StartLbaThe start logic block address
SectorCountThe number of blocks to read
Returns
EFI_STATUS is returned by calling ScsiRead16Command().

Definition at line 4469 of file ScsiDisk.c.

◆ ScsiDiskReadBlocks()

EFI_STATUS EFIAPI ScsiDiskReadBlocks ( IN EFI_BLOCK_IO_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN UINTN  BufferSize,
OUT VOID *  Buffer 
)

The function is to Read Block from SCSI Disk.

Parameters
ThisThe pointer of EFI_BLOCK_IO_PROTOCOL.
MediaIdThe Id of Media detected
LbaThe logic block address
BufferSizeThe size of Buffer
BufferThe buffer to fill the read out data
Return values
EFI_SUCCESSSuccessfully to read out block.
EFI_DEVICE_ERRORFail to detect media.
EFI_NO_MEDIAMedia is not present.
EFI_MEDIA_CHANGEDMedia has changed.
EFI_BAD_BUFFER_SIZEThe Buffer was not a multiple of the block size of the device.
EFI_INVALID_PARAMETERInvalid parameter passed in.

Definition at line 616 of file ScsiDisk.c.

◆ ScsiDiskReadBlocksEx()

EFI_STATUS EFIAPI ScsiDiskReadBlocksEx ( IN EFI_BLOCK_IO2_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN OUT EFI_BLOCK_IO2_TOKEN Token,
IN UINTN  BufferSize,
OUT VOID *  Buffer 
)

The function is to Read Block from SCSI Disk.

Parameters
ThisThe pointer of EFI_BLOCK_IO_PROTOCOL.
MediaIdThe Id of Media detected.
LbaThe logic block address.
TokenA pointer to the token associated with the transaction.
BufferSizeThe size of Buffer.
BufferThe buffer to fill the read out data.
Return values
EFI_SUCCESSThe read request was queued if Token-> Event is not NULL. The data was read correctly from the device if theToken-> Event is NULL.
EFI_DEVICE_ERRORThe device reported an error while attempting to perform the read operation.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.
EFI_BAD_BUFFER_SIZEThe BufferSize parameter is not a multiple of the intrinsic block size of the device.
EFI_INVALID_PARAMETERThe read request contains LBAs that are not valid, or the buffer is not on proper alignment.
EFI_OUT_OF_RESOURCESThe request could not be completed due to a lack of resources.

Definition at line 1009 of file ScsiDisk.c.

◆ ScsiDiskReadCapacity()

EFI_STATUS ScsiDiskReadCapacity ( IN OUT SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry,
OUT EFI_SCSI_SENSE_DATA **  SenseDataArray,
OUT UINTN NumberOfSenseKeys 
)

Send read capacity command to device and get the device parameter.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
NeedRetryThe pointer of flag indicates if need a retry
SenseDataArrayThe pointer of an array of sense data
NumberOfSenseKeysThe number of sense key
Return values
EFI_DEVICE_ERRORIndicates that error occurs
EFI_SUCCESSSuccessfully to read capacity or sense data is received.

Definition at line 3017 of file ScsiDisk.c.

◆ ScsiDiskReadSectors()

EFI_STATUS ScsiDiskReadSectors ( IN SCSI_DISK_DEV ScsiDiskDevice,
OUT VOID *  Buffer,
IN EFI_LBA  Lba,
IN UINTN  NumberOfBlocks 
)

Read sector from SCSI Disk.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
BufferThe buffer to fill in the read out data
LbaLogic block address
NumberOfBlocksThe number of blocks to read
Return values
EFI_DEVICE_ERRORIndicates a device error.
EFI_SUCCESSOperation is successful.

Definition at line 3455 of file ScsiDisk.c.

◆ ScsiDiskReceiveData()

EFI_STATUS EFIAPI ScsiDiskReceiveData ( IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL This,
IN UINT32 MediaId  OPTIONAL,
IN UINT64  Timeout,
IN UINT8  SecurityProtocolId,
IN UINT16  SecurityProtocolSpecificData,
IN UINTN  PayloadBufferSize,
OUT VOID *  PayloadBuffer,
OUT UINTN PayloadTransferSize 
)

Send a security protocol command to a device that receives data and/or the result of one or more commands sent by SendData.

The ReceiveData function sends a security protocol command to the given MediaId. The security protocol command sent is defined by SecurityProtocolId and contains the security protocol specific data SecurityProtocolSpecificData. The function returns the data from the security protocol command in PayloadBuffer.

For devices supporting the SCSI command set, the security protocol command is sent using the SECURITY PROTOCOL IN command defined in SPC-4.

If PayloadBufferSize is too small to store the available data from the security protocol command, the function shall copy PayloadBufferSize bytes into the PayloadBuffer and return EFI_WARN_BUFFER_TOO_SMALL.

If PayloadBuffer or PayloadTransferSize is NULL and PayloadBufferSize is non-zero, the function shall return EFI_INVALID_PARAMETER.

If the given MediaId does not support security protocol commands, the function shall return EFI_UNSUPPORTED. If there is no media in the device, the function returns EFI_NO_MEDIA. If the MediaId is not the ID for the current media in the device, the function returns EFI_MEDIA_CHANGED.

If the security protocol fails to complete within the Timeout period, the function shall return EFI_TIMEOUT.

If the security protocol command completes without an error, the function shall return EFI_SUCCESS. If the security protocol command completes with an error, the function shall return EFI_DEVICE_ERROR.

Parameters
ThisIndicates a pointer to the calling context.
MediaIdID of the medium to receive data from. If there is no block IO protocol supported by the physical device, the value of MediaId is undefined.
TimeoutThe timeout, in 100ns units, to use for the execution of the security protocol command. A Timeout value of 0 means that this function will wait indefinitely for the security protocol command to execute. If Timeout is greater than zero, then this function will return EFI_TIMEOUT if the time required to execute the receive data command is greater than Timeout.
SecurityProtocolIdThe value of the "Security Protocol" parameter of the security protocol command to be sent.
SecurityProtocolSpecificDataThe value of the "Security Protocol Specific" parameter of the security protocol command to be sent.
PayloadBufferSizeSize in bytes of the payload data buffer.
PayloadBufferA pointer to a destination buffer to store the security protocol command specific payload data for the security protocol command. The caller is responsible for having either implicit or explicit ownership of the buffer.
PayloadTransferSizeA pointer to a buffer to store the size in bytes of the data written to the payload data buffer.
Return values
EFI_SUCCESSThe security protocol command completed successfully.
EFI_WARN_BUFFER_TOO_SMALLThe PayloadBufferSize was too small to store the available data from the device. The PayloadBuffer contains the truncated data.
EFI_UNSUPPORTEDThe given MediaId does not support security protocol commands.
EFI_DEVICE_ERRORThe security protocol command completed with an error.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.
EFI_INVALID_PARAMETERThe PayloadBuffer or PayloadTransferSize is NULL and PayloadBufferSize is non-zero.
EFI_TIMEOUTA timeout occurred while waiting for the security protocol command to execute.

Definition at line 1936 of file ScsiDisk.c.

◆ ScsiDiskRequestSenseKeys()

EFI_STATUS ScsiDiskRequestSenseKeys ( IN OUT SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry,
OUT EFI_SCSI_SENSE_DATA **  SenseDataArray,
OUT UINTN NumberOfSenseKeys,
IN BOOLEAN  AskResetIfError 
)

Retrieve all sense keys from the device.

When encountering error during the process, if retrieve sense keys before error encountered, it returns the sense keys with return status set to EFI_SUCCESS, and NeedRetry set to FALSE; otherwise, return the proper return status.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
NeedRetryThe pointer of flag indicates if need a retry
SenseDataArrayThe pointer of an array of sense data
NumberOfSenseKeysThe number of sense key
AskResetIfErrorThe flag indicates if need reset when error occurs
Return values
EFI_DEVICE_ERRORIndicates that error occurs
EFI_SUCCESSSuccessfully to request sense key

Definition at line 3276 of file ScsiDisk.c.

◆ ScsiDiskReset()

EFI_STATUS EFIAPI ScsiDiskReset ( IN EFI_BLOCK_IO_PROTOCOL This,
IN BOOLEAN  ExtendedVerification 
)

Reset SCSI Disk.

Parameters
ThisThe pointer of EFI_BLOCK_IO_PROTOCOL
ExtendedVerificationThe flag about if extend verificate
Return values
EFI_SUCCESSThe device was reset.
EFI_DEVICE_ERRORThe device is not functioning properly and could not be reset.
Returns
EFI_STATUS is returned from EFI_SCSI_IO_PROTOCOL.ResetDevice().

Definition at line 557 of file ScsiDisk.c.

◆ ScsiDiskResetEx()

EFI_STATUS EFIAPI ScsiDiskResetEx ( IN EFI_BLOCK_IO2_PROTOCOL This,
IN BOOLEAN  ExtendedVerification 
)

Reset SCSI Disk.

Parameters
ThisThe pointer of EFI_BLOCK_IO2_PROTOCOL.
ExtendedVerificationThe flag about if extend verificate.
Return values
EFI_SUCCESSThe device was reset.
EFI_DEVICE_ERRORThe device is not functioning properly and could not be reset.
Returns
EFI_STATUS is returned from EFI_SCSI_IO_PROTOCOL.ResetDevice().

Definition at line 941 of file ScsiDisk.c.

◆ ScsiDiskSendData()

EFI_STATUS EFIAPI ScsiDiskSendData ( IN EFI_STORAGE_SECURITY_COMMAND_PROTOCOL This,
IN UINT32 MediaId  OPTIONAL,
IN UINT64  Timeout,
IN UINT8  SecurityProtocolId,
IN UINT16  SecurityProtocolSpecificData,
IN UINTN  PayloadBufferSize,
OUT VOID *  PayloadBuffer 
)

Send a security protocol command to a device.

The SendData function sends a security protocol command containing the payload PayloadBuffer to the given MediaId. The security protocol command sent is defined by SecurityProtocolId and contains the security protocol specific data SecurityProtocolSpecificData. If the underlying protocol command requires a specific padding for the command payload, the SendData function shall add padding bytes to the command payload to satisfy the padding requirements.

For devices supporting the SCSI command set, the security protocol command is sent using the SECURITY PROTOCOL OUT command defined in SPC-4.

If PayloadBuffer is NULL and PayloadBufferSize is non-zero, the function shall return EFI_INVALID_PARAMETER.

If the given MediaId does not support security protocol commands, the function shall return EFI_UNSUPPORTED. If there is no media in the device, the function returns EFI_NO_MEDIA. If the MediaId is not the ID for the current media in the device, the function returns EFI_MEDIA_CHANGED.

If the security protocol fails to complete within the Timeout period, the function shall return EFI_TIMEOUT.

If the security protocol command completes without an error, the function shall return EFI_SUCCESS. If the security protocol command completes with an error, the function shall return EFI_DEVICE_ERROR.

Parameters
ThisIndicates a pointer to the calling context.
MediaIdID of the medium to receive data from. If there is no block IO protocol supported by the physical device, the value of MediaId is undefined.
TimeoutThe timeout, in 100ns units, to use for the execution of the security protocol command. A Timeout value of 0 means that this function will wait indefinitely for the security protocol command to execute. If Timeout is greater than zero, then this function will return EFI_TIMEOUT if the time required to execute the receive data command is greater than Timeout.
SecurityProtocolIdThe value of the "Security Protocol" parameter of the security protocol command to be sent.
SecurityProtocolSpecificDataThe value of the "Security Protocol Specific" parameter of the security protocol command to be sent.
PayloadBufferSizeSize in bytes of the payload data buffer.
PayloadBufferA pointer to a destination buffer to store the security protocol command specific payload data for the security protocol command.
Return values
EFI_SUCCESSThe security protocol command completed successfully.
EFI_UNSUPPORTEDThe given MediaId does not support security protocol commands.
EFI_DEVICE_ERRORThe security protocol command completed with an error.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.
EFI_INVALID_PARAMETERThe PayloadBuffer is NULL and PayloadBufferSize is non-zero.
EFI_TIMEOUTA timeout occurred while waiting for the security protocol command to execute.

Definition at line 2154 of file ScsiDisk.c.

◆ ScsiDiskTestUnitReady()

EFI_STATUS ScsiDiskTestUnitReady ( IN SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry,
OUT EFI_SCSI_SENSE_DATA **  SenseDataArray,
OUT UINTN NumberOfSenseKeys 
)

To test device.

When Test Unit Ready command succeeds, retrieve Sense Keys via Request Sense; When Test Unit Ready command encounters any error caused by host adapter or target, return error without retrieving Sense Keys.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
NeedRetryThe pointer of flag indicates try again
SenseDataArrayThe pointer of an array of sense data
NumberOfSenseKeysThe pointer of the number of sense data array
Return values
EFI_DEVICE_ERRORIndicates that error occurs
EFI_SUCCESSSuccessfully to test unit

Definition at line 2809 of file ScsiDisk.c.

◆ ScsiDiskUnmap()

EFI_STATUS ScsiDiskUnmap ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN UINT64  Lba,
IN UINTN  Blocks,
IN EFI_ERASE_BLOCK_TOKEN *Token  OPTIONAL 
)

Require the device server to cause one or more LBAs to be unmapped.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice.
LbaThe start block number.
BlocksTotal block number to be unmapped.
TokenThe pointer to the token associated with the non-blocking erase block request.
Return values
EFI_SUCCESSTarget blocks have been successfully unmapped.
EFI_DEVICE_ERRORFail to unmap the target blocks.

Definition at line 1532 of file ScsiDisk.c.

◆ ScsiDiskWrite10()

EFI_STATUS ScsiDiskWrite10 ( IN SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry,
IN UINT64  Timeout,
IN UINT8 *  DataBuffer,
IN OUT UINT32 *  DataLength,
IN UINT32  StartLba,
IN UINT32  SectorCount 
)

Submit Write(10) Command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice
NeedRetryThe pointer of flag indicates if needs retry if error happens
TimeoutThe time to complete the command
DataBufferThe buffer to fill with the read out data
DataLengthThe length of buffer
StartLbaThe start logic block address
SectorCountThe number of blocks to write
Returns
EFI_STATUS is returned by calling ScsiWrite10Command().

Definition at line 4346 of file ScsiDisk.c.

◆ ScsiDiskWrite16()

EFI_STATUS ScsiDiskWrite16 ( IN SCSI_DISK_DEV ScsiDiskDevice,
OUT BOOLEAN *  NeedRetry,
IN UINT64  Timeout,
IN UINT8 *  DataBuffer,
IN OUT UINT32 *  DataLength,
IN UINT64  StartLba,
IN UINT32  SectorCount 
)

Submit Write(16) Command.

Parameters
ScsiDiskDeviceThe pointer of ScsiDiskDevice
NeedRetryThe pointer of flag indicates if needs retry if error happens
TimeoutThe time to complete the command
DataBufferThe buffer to fill with the read out data
DataLengthThe length of buffer
StartLbaThe start logic block address
SectorCountThe number of blocks to write
Returns
EFI_STATUS is returned by calling ScsiWrite16Command().

Definition at line 4593 of file ScsiDisk.c.

◆ ScsiDiskWriteBlocks()

EFI_STATUS EFIAPI ScsiDiskWriteBlocks ( IN EFI_BLOCK_IO_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN UINTN  BufferSize,
IN VOID *  Buffer 
)

The function is to Write Block to SCSI Disk.

Parameters
ThisThe pointer of EFI_BLOCK_IO_PROTOCOL
MediaIdThe Id of Media detected
LbaThe logic block address
BufferSizeThe size of Buffer
BufferThe buffer to fill the read out data
Return values
EFI_SUCCESSSuccessfully to read out block.
EFI_WRITE_PROTECTEDThe device can not be written to.
EFI_DEVICE_ERRORFail to detect media.
EFI_NO_MEDIAMedia is not present.
EFI_MEDIA_CHANGEDMedia has changed.
EFI_BAD_BUFFER_SIZEThe Buffer was not a multiple of the block size of the device.
EFI_INVALID_PARAMETERInvalid parameter passed in.

Definition at line 768 of file ScsiDisk.c.

◆ ScsiDiskWriteBlocksEx()

EFI_STATUS EFIAPI ScsiDiskWriteBlocksEx ( IN EFI_BLOCK_IO2_PROTOCOL This,
IN UINT32  MediaId,
IN EFI_LBA  Lba,
IN OUT EFI_BLOCK_IO2_TOKEN Token,
IN UINTN  BufferSize,
IN VOID *  Buffer 
)

The function is to Write Block to SCSI Disk.

Parameters
ThisThe pointer of EFI_BLOCK_IO_PROTOCOL.
MediaIdThe Id of Media detected.
LbaThe logic block address.
TokenA pointer to the token associated with the transaction.
BufferSizeThe size of Buffer.
BufferThe buffer to fill the read out data.
Return values
EFI_SUCCESSThe data were written correctly to the device.
EFI_WRITE_PROTECTEDThe device cannot be written to.
EFI_NO_MEDIAThere is no media in the device.
EFI_MEDIA_CHANGEDThe MediaId is not for the current media.
EFI_DEVICE_ERRORThe device reported an error while attempting to perform the write operation.
EFI_BAD_BUFFER_SIZEThe BufferSize parameter is not a multiple of the intrinsic block size of the device.
EFI_INVALID_PARAMETERThe write request contains LBAs that are not valid, or the buffer is not on proper alignment.

Definition at line 1188 of file ScsiDisk.c.

◆ ScsiDiskWriteSectors()

EFI_STATUS ScsiDiskWriteSectors ( IN SCSI_DISK_DEV ScsiDiskDevice,
IN VOID *  Buffer,
IN EFI_LBA  Lba,
IN UINTN  NumberOfBlocks 
)

Write sector to SCSI Disk.

Parameters
ScsiDiskDeviceThe pointer of SCSI_DISK_DEV
BufferThe buffer of data to be written into SCSI Disk
LbaLogic block address
NumberOfBlocksThe number of blocks to read
Return values
EFI_DEVICE_ERRORIndicates a device error.
EFI_SUCCESSOperation is successful.

Definition at line 3620 of file ScsiDisk.c.

Variable Documentation

◆ gScsiDiskDriverBinding

EFI_DRIVER_BINDING_PROTOCOL gScsiDiskDriverBinding
Initial value:
= {
0xa,
}
#define NULL
Definition: Base.h:319
EFI_STATUS EFIAPI ScsiDiskDriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer OPTIONAL)
Definition: ScsiDisk.c:458
EFI_STATUS EFIAPI ScsiDiskDriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
Definition: ScsiDisk.c:156
EFI_STATUS EFIAPI ScsiDiskDriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE Controller, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
Definition: ScsiDisk.c:220

Definition at line 12 of file ScsiDisk.c.

◆ gScsiDiskInfoProtocolTemplate

EFI_DISK_INFO_PROTOCOL gScsiDiskInfoProtocolTemplate
Initial value:
= {
}
#define EFI_DISK_INFO_SCSI_INTERFACE_GUID
Definition: DiskInfo.h:41
EFI_STATUS EFIAPI ScsiDiskInfoWhichIde(IN EFI_DISK_INFO_PROTOCOL *This, OUT UINT32 *IdeChannel, OUT UINT32 *IdeDevice)
Definition: ScsiDisk.c:6275
EFI_STATUS EFIAPI ScsiDiskInfoInquiry(IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *InquiryData, IN OUT UINT32 *InquiryDataSize)
Definition: ScsiDisk.c:6164
EFI_STATUS EFIAPI ScsiDiskInfoSenseData(IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *SenseData, IN OUT UINT32 *SenseDataSize, OUT UINT8 *SenseDataNumber)
Definition: ScsiDisk.c:6252
EFI_STATUS EFIAPI ScsiDiskInfoIdentify(IN EFI_DISK_INFO_PROTOCOL *This, IN OUT VOID *IdentifyData, IN OUT UINT32 *IdentifyDataSize)
Definition: ScsiDisk.c:6205

Definition at line 21 of file ScsiDisk.c.