TianoCore EDK2 master
Loading...
Searching...
No Matches
ScsiDisk.h File Reference

Go to the source code of this file.

Data Structures

struct  SCSI_UNMAP_PARAM_INFO
 
struct  SCSI_DISK_DEV
 
struct  SCSI_BLKIO2_REQUEST
 
struct  SCSI_ASYNC_RW_REQUEST
 
struct  SCSI_ERASEBLK_REQUEST
 

Macros

#define IS_DEVICE_FIXED(a)   (a)->FixedDevice ? 1 : 0
 
#define UFS_WLUN_RPMB   0xC4
 
#define SCSI_DISK_DEV_SIGNATURE   SIGNATURE_32 ('s', 'c', 'd', 'k')
 
#define SCSI_DISK_DEV_FROM_BLKIO(a)   CR (a, SCSI_DISK_DEV, BlkIo, SCSI_DISK_DEV_SIGNATURE)
 
#define SCSI_DISK_DEV_FROM_BLKIO2(a)   CR (a, SCSI_DISK_DEV, BlkIo2, SCSI_DISK_DEV_SIGNATURE)
 
#define SCSI_DISK_DEV_FROM_ERASEBLK(a)   CR (a, SCSI_DISK_DEV, EraseBlock, SCSI_DISK_DEV_SIGNATURE)
 
#define SCSI_DISK_DEV_FROM_STORSEC(a)   CR (a, SCSI_DISK_DEV, StorageSecurity, SCSI_DISK_DEV_SIGNATURE)
 
#define SCSI_DISK_DEV_FROM_DISKINFO(a)   CR (a, SCSI_DISK_DEV, DiskInfo, SCSI_DISK_DEV_SIGNATURE)
 
#define ACTION_NO_ACTION   0x00
 
#define ACTION_READ_CAPACITY   0x01
 
#define ACTION_RETRY_COMMAND_LATER   0x02
 
#define ACTION_RETRY_WITH_BACKOFF_ALGO   0x03
 
#define SCSI_COMMAND_VERSION_1   0x01
 
#define SCSI_COMMAND_VERSION_2   0x02
 
#define SCSI_COMMAND_VERSION_3   0x03
 
#define VENDOR_IDENTIFICATION_OFFSET   3
 
#define VENDOR_IDENTIFICATION_LENGTH   8
 
#define PRODUCT_IDENTIFICATION_OFFSET   11
 
#define PRODUCT_IDENTIFICATION_LENGTH   16
 
#define SCSI_DISK_TIMEOUT   EFI_TIMER_PERIOD_SECONDS (30)
 

Functions

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 ScsiDiskComponentNameGetDriverName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN CHAR8 *Language, OUT CHAR16 **DriverName)
 
EFI_STATUS EFIAPI ScsiDiskComponentNameGetControllerName (IN EFI_COMPONENT_NAME_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Language, OUT CHAR16 **ControllerName)
 
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)
 
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 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 ScsiDiskDetectMedia (IN SCSI_DISK_DEV *ScsiDiskDevice, IN BOOLEAN MustReadCapacity, OUT BOOLEAN *MediaChange)
 
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)
 
EFI_STATUS ScsiDiskInquiryDevice (IN OUT SCSI_DISK_DEV *ScsiDiskDevice, OUT BOOLEAN *NeedRetry)
 
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)
 
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)
 
VOID GetMediaInfo (IN OUT SCSI_DISK_DEV *ScsiDiskDevice, IN EFI_SCSI_DISK_CAPACITY_DATA *Capacity10, IN EFI_SCSI_DISK_CAPACITY_DATA16 *Capacity16)
 
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 InitializeInstallDiskInfo (IN SCSI_DISK_DEV *ScsiDiskDevice, 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)
 

Variables

EFI_DRIVER_BINDING_PROTOCOL gScsiDiskDriverBinding
 
EFI_COMPONENT_NAME_PROTOCOL gScsiDiskComponentName
 
EFI_COMPONENT_NAME2_PROTOCOL gScsiDiskComponentName2
 

Detailed Description

Header file for SCSI Disk Driver.

Copyright (c) 2004 - 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.h.

Macro Definition Documentation

◆ ACTION_NO_ACTION

#define ACTION_NO_ACTION   0x00

Definition at line 173 of file ScsiDisk.h.

◆ ACTION_READ_CAPACITY

#define ACTION_READ_CAPACITY   0x01

Definition at line 174 of file ScsiDisk.h.

◆ ACTION_RETRY_COMMAND_LATER

#define ACTION_RETRY_COMMAND_LATER   0x02

Definition at line 175 of file ScsiDisk.h.

◆ ACTION_RETRY_WITH_BACKOFF_ALGO

#define ACTION_RETRY_WITH_BACKOFF_ALGO   0x03

Definition at line 176 of file ScsiDisk.h.

◆ IS_DEVICE_FIXED

#define IS_DEVICE_FIXED (   a)    (a)->FixedDevice ? 1 : 0

Definition at line 39 of file ScsiDisk.h.

◆ PRODUCT_IDENTIFICATION_LENGTH

#define PRODUCT_IDENTIFICATION_LENGTH   16

Definition at line 187 of file ScsiDisk.h.

◆ PRODUCT_IDENTIFICATION_OFFSET

#define PRODUCT_IDENTIFICATION_OFFSET   11

Definition at line 186 of file ScsiDisk.h.

◆ SCSI_COMMAND_VERSION_1

#define SCSI_COMMAND_VERSION_1   0x01

Definition at line 178 of file ScsiDisk.h.

◆ SCSI_COMMAND_VERSION_2

#define SCSI_COMMAND_VERSION_2   0x02

Definition at line 179 of file ScsiDisk.h.

◆ SCSI_COMMAND_VERSION_3

#define SCSI_COMMAND_VERSION_3   0x03

Definition at line 180 of file ScsiDisk.h.

◆ SCSI_DISK_DEV_FROM_BLKIO

#define SCSI_DISK_DEV_FROM_BLKIO (   a)    CR (a, SCSI_DISK_DEV, BlkIo, SCSI_DISK_DEV_SIGNATURE)

Definition at line 99 of file ScsiDisk.h.

◆ SCSI_DISK_DEV_FROM_BLKIO2

#define SCSI_DISK_DEV_FROM_BLKIO2 (   a)    CR (a, SCSI_DISK_DEV, BlkIo2, SCSI_DISK_DEV_SIGNATURE)

Definition at line 100 of file ScsiDisk.h.

◆ SCSI_DISK_DEV_FROM_DISKINFO

#define SCSI_DISK_DEV_FROM_DISKINFO (   a)    CR (a, SCSI_DISK_DEV, DiskInfo, SCSI_DISK_DEV_SIGNATURE)

Definition at line 104 of file ScsiDisk.h.

◆ SCSI_DISK_DEV_FROM_ERASEBLK

#define SCSI_DISK_DEV_FROM_ERASEBLK (   a)    CR (a, SCSI_DISK_DEV, EraseBlock, SCSI_DISK_DEV_SIGNATURE)

Definition at line 101 of file ScsiDisk.h.

◆ SCSI_DISK_DEV_FROM_STORSEC

#define SCSI_DISK_DEV_FROM_STORSEC (   a)    CR (a, SCSI_DISK_DEV, StorageSecurity, SCSI_DISK_DEV_SIGNATURE)

Definition at line 102 of file ScsiDisk.h.

◆ SCSI_DISK_DEV_SIGNATURE

#define SCSI_DISK_DEV_SIGNATURE   SIGNATURE_32 ('s', 'c', 'd', 'k')

Definition at line 49 of file ScsiDisk.h.

◆ SCSI_DISK_TIMEOUT

#define SCSI_DISK_TIMEOUT   EFI_TIMER_PERIOD_SECONDS (30)

Definition at line 196 of file ScsiDisk.h.

◆ UFS_WLUN_RPMB

#define UFS_WLUN_RPMB   0xC4

Definition at line 41 of file ScsiDisk.h.

◆ VENDOR_IDENTIFICATION_LENGTH

#define VENDOR_IDENTIFICATION_LENGTH   8

Definition at line 185 of file ScsiDisk.h.

◆ VENDOR_IDENTIFICATION_OFFSET

#define VENDOR_IDENTIFICATION_OFFSET   3

Definition at line 184 of file ScsiDisk.h.

Function Documentation

◆ 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 should be produced.

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

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.

◆ 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.

◆ 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.

◆ 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.

◆ 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.

◆ ScsiDiskComponentNameGetControllerName()

EFI_STATUS EFIAPI ScsiDiskComponentNameGetControllerName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN EFI_HANDLE  ControllerHandle,
IN EFI_HANDLE ChildHandle  OPTIONAL,
IN CHAR8 *  Language,
OUT CHAR16 **  ControllerName 
)

Retrieves a Unicode string that is the user readable name of the controller that is being managed by a driver.

This function retrieves the user readable name of the controller specified by ControllerHandle and ChildHandle in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the controller name is returned in ControllerName, and EFI_SUCCESS is returned. If the driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle, then EFI_UNSUPPORTED is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned.

Parameters
ThisA pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance.
ControllerHandleThe handle of a controller that the driver specified by This is managing. This handle specifies the controller whose name is to be returned.
ChildHandleThe handle of the child controller to retrieve the name of. This is an optional parameter that may be NULL. It will be NULL for device drivers. It will also be NULL for a bus drivers that wish to retrieve the name of the bus controller. It will not be NULL for a bus driver that wishes to retrieve the name of a child controller.
LanguageA pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 4646 or ISO 639-2 language code format.
ControllerNameA pointer to the Unicode string to return. This Unicode string is the name of the controller specified by ControllerHandle and ChildHandle in the language specified by Language from the point of view of the driver specified by This.
Return values
EFI_SUCCESSThe Unicode string for the user readable name in the language specified by Language for the driver specified by This was returned in DriverName.
EFI_INVALID_PARAMETERControllerHandle is NULL.
EFI_INVALID_PARAMETERChildHandle is not NULL and it is not a valid EFI_HANDLE.
EFI_INVALID_PARAMETERLanguage is NULL.
EFI_INVALID_PARAMETERControllerName is NULL.
EFI_UNSUPPORTEDThe driver specified by This is not currently managing the controller specified by ControllerHandle and ChildHandle.
EFI_UNSUPPORTEDThe driver specified by This does not support the language specified by Language.

Definition at line 160 of file ComponentName.c.

◆ ScsiDiskComponentNameGetDriverName()

EFI_STATUS EFIAPI ScsiDiskComponentNameGetDriverName ( IN EFI_COMPONENT_NAME_PROTOCOL This,
IN CHAR8 *  Language,
OUT CHAR16 **  DriverName 
)

Retrieves a Unicode string that is the user readable name of the driver.

This function retrieves the user readable name of a driver in the form of a Unicode string. If the driver specified by This has a user readable name in the language specified by Language, then a pointer to the driver name is returned in DriverName, and EFI_SUCCESS is returned. If the driver specified by This does not support the language specified by Language, then EFI_UNSUPPORTED is returned.

Parameters
ThisA pointer to the EFI_COMPONENT_NAME2_PROTOCOL or EFI_COMPONENT_NAME_PROTOCOL instance.
LanguageA pointer to a Null-terminated ASCII string array indicating the language. This is the language of the driver name that the caller is requesting, and it must match one of the languages specified in SupportedLanguages. The number of languages supported by a driver is up to the driver writer. Language is specified in RFC 4646 or ISO 639-2 language code format.
DriverNameA pointer to the Unicode string to return. This Unicode string is the name of the driver specified by This in the language specified by Language.
Return values
EFI_SUCCESSThe Unicode string for the Driver specified by This and the language specified by Language was returned in DriverName.
EFI_INVALID_PARAMETERLanguage is NULL.
EFI_INVALID_PARAMETERDriverName is NULL.
EFI_UNSUPPORTEDThe driver specified by This does not support the language specified by Language.

Definition at line 75 of file ComponentName.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.

◆ 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

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.

◆ 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

◆ gScsiDiskComponentName

EFI_COMPONENT_NAME_PROTOCOL gScsiDiskComponentName
extern

Definition at line 14 of file ComponentName.c.

◆ gScsiDiskComponentName2

EFI_COMPONENT_NAME2_PROTOCOL gScsiDiskComponentName2
extern

Definition at line 23 of file ComponentName.c.

◆ gScsiDiskDriverBinding

EFI_DRIVER_BINDING_PROTOCOL gScsiDiskDriverBinding
extern

Definition at line 12 of file ScsiDisk.c.