| /** @file | |
| Header file for SCSI Disk Driver. | |
| Copyright (c) 2004 - 2008, Intel Corporation. <BR> | |
| All rights reserved. This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef _SCSI_DISK_H_ | |
| #define _SCSI_DISK_H_ | |
| #include <Uefi.h> | |
| #include <Protocol/ScsiIo.h> | |
| #include <Protocol/ComponentName.h> | |
| #include <Protocol/BlockIo.h> | |
| #include <Protocol/DriverBinding.h> | |
| #include <Protocol/ScsiPassThruExt.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/UefiDriverEntryPoint.h> | |
| #include <Library/UefiLib.h> | |
| #include <Library/BaseMemoryLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/UefiScsiLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <IndustryStandard/Scsi.h> | |
| #define IS_DEVICE_FIXED(a) (a)->FixedDevice ? 1 : 0 | |
| #define SCSI_DISK_DEV_SIGNATURE SIGNATURE_32 ('s', 'c', 'd', 'k') | |
| typedef struct { | |
| UINT32 Signature; | |
| EFI_HANDLE Handle; | |
| EFI_BLOCK_IO_PROTOCOL BlkIo; | |
| EFI_BLOCK_IO_MEDIA BlkIoMedia; | |
| EFI_SCSI_IO_PROTOCOL *ScsiIo; | |
| UINT8 DeviceType; | |
| BOOLEAN FixedDevice; | |
| UINT16 Reserved; | |
| EFI_SCSI_SENSE_DATA *SenseData; | |
| UINTN SenseDataNumber; | |
| EFI_SCSI_INQUIRY_DATA InquiryData; | |
| EFI_UNICODE_STRING_TABLE *ControllerNameTable; | |
| } SCSI_DISK_DEV; | |
| #define SCSI_DISK_DEV_FROM_THIS(a) CR (a, SCSI_DISK_DEV, BlkIo, SCSI_DISK_DEV_SIGNATURE) | |
| // | |
| // Global Variables | |
| // | |
| extern EFI_DRIVER_BINDING_PROTOCOL gScsiDiskDriverBinding; | |
| extern EFI_COMPONENT_NAME_PROTOCOL gScsiDiskComponentName; | |
| extern EFI_COMPONENT_NAME2_PROTOCOL gScsiDiskComponentName2; | |
| // | |
| // action code used in detect media process | |
| // | |
| #define ACTION_NO_ACTION 0x00 | |
| #define ACTION_READ_CAPACITY 0x01 | |
| #define ACTION_RETRY_COMMAND_LATER 0x02 | |
| /** | |
| 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. | |
| @param This Protocol instance pointer. | |
| @param ControllerHandle Handle of device to test | |
| @param RemainingDevicePath Optional parameter use to pick a specific child | |
| device to start. | |
| @retval EFI_SUCCESS This driver supports this device | |
| @retval EFI_ALREADY_STARTED This driver is already running on this device | |
| @retval other This driver does not support this device | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiDiskDriverBindingSupported ( | |
| 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. | |
| @param This Protocol instance pointer. | |
| @param ControllerHandle Handle of device to bind driver to | |
| @param RemainingDevicePath Optional parameter use to pick a specific child | |
| device to start. | |
| @retval EFI_SUCCESS This driver is added to ControllerHandle | |
| @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle | |
| @retval other This driver does not support this device | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiDiskDriverBindingStart ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Controller, | |
| IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath 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. | |
| @param This Protocol instance pointer. | |
| @param ControllerHandle Handle of device to stop driver on | |
| @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of | |
| children is zero stop the entire bus driver. | |
| @param ChildHandleBuffer List of Child Handles to Stop. | |
| @retval EFI_SUCCESS This driver is removed ControllerHandle | |
| @retval other This driver was not removed from this device | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiDiskDriverBindingStop ( | |
| IN EFI_DRIVER_BINDING_PROTOCOL *This, | |
| IN EFI_HANDLE Controller, | |
| IN UINTN NumberOfChildren, | |
| IN EFI_HANDLE *ChildHandleBuffer OPTIONAL | |
| ); | |
| // | |
| // EFI Component Name Functions | |
| // | |
| /** | |
| 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. | |
| @param This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or | |
| EFI_COMPONENT_NAME_PROTOCOL instance. | |
| @param Language A 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 3066 or ISO 639-2 language code format. | |
| @param DriverName A 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. | |
| @retval EFI_SUCCESS The Unicode string for the Driver specified by | |
| This and the language specified by Language was | |
| returned in DriverName. | |
| @retval EFI_INVALID_PARAMETER Language is NULL. | |
| @retval EFI_INVALID_PARAMETER DriverName is NULL. | |
| @retval EFI_UNSUPPORTED The driver specified by This does not support | |
| the language specified by Language. | |
| **/ | |
| 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 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. | |
| @param This A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or | |
| EFI_COMPONENT_NAME_PROTOCOL instance. | |
| @param ControllerHandle The handle of a controller that the driver | |
| specified by This is managing. This handle | |
| specifies the controller whose name is to be | |
| returned. | |
| @param ChildHandle The 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. | |
| @param Language A 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 3066 or ISO 639-2 language code format. | |
| @param ControllerName A 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. | |
| @retval EFI_SUCCESS The Unicode string for the user readable name in | |
| the language specified by Language for the | |
| driver specified by This was returned in | |
| DriverName. | |
| @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE. | |
| @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid | |
| EFI_HANDLE. | |
| @retval EFI_INVALID_PARAMETER Language is NULL. | |
| @retval EFI_INVALID_PARAMETER ControllerName is NULL. | |
| @retval EFI_UNSUPPORTED The driver specified by This is not currently | |
| managing the controller specified by | |
| ControllerHandle and ChildHandle. | |
| @retval EFI_UNSUPPORTED The driver specified by This does not support | |
| the language specified by Language. | |
| **/ | |
| 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 | |
| ); | |
| /** | |
| Reset SCSI Disk. | |
| @param This The pointer of EFI_BLOCK_IO_PROTOCOL | |
| @param ExtendedVerification The flag about if extend verificate | |
| @retval EFI_SUCCESS The device was reset. | |
| @retval EFI_DEVICE_ERROR The device is not functioning properly and could | |
| not be reset. | |
| @return EFI_STATUS is retured from EFI_SCSI_IO_PROTOCOL.ResetDevice(). | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiDiskReset ( | |
| IN EFI_BLOCK_IO_PROTOCOL *This, | |
| IN BOOLEAN ExtendedVerification | |
| ); | |
| /** | |
| The function is to Read Block from SCSI Disk. | |
| @param This The pointer of EFI_BLOCK_IO_PROTOCOL. | |
| @param MediaId The Id of Media detected | |
| @param Lba The logic block address | |
| @param BufferSize The size of Buffer | |
| @param Buffer The buffer to fill the read out data | |
| @retval EFI_SUCCESS Successfully to read out block. | |
| @retval EFI_DEVICE_ERROR Fail to detect media. | |
| @retval EFI_NO_MEDIA Media is not present. | |
| @retval EFI_MEDIA_CHANGED Media has changed. | |
| @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device. | |
| @retval EFI_INVALID_PARAMETER Invalid parameter passed in. | |
| **/ | |
| 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 Write Block to SCSI Disk. | |
| @param This The pointer of EFI_BLOCK_IO_PROTOCOL | |
| @param MediaId The Id of Media detected | |
| @param Lba The logic block address | |
| @param BufferSize The size of Buffer | |
| @param Buffer The buffer to fill the read out data | |
| @retval EFI_SUCCESS Successfully to read out block. | |
| @retval EFI_WRITE_PROTECTED The device can not be written to. | |
| @retval EFI_DEVICE_ERROR Fail to detect media. | |
| @retval EFI_NO_MEDIA Media is not present. | |
| @retval EFI_MEDIA_CHNAGED Media has changed. | |
| @retval EFI_BAD_BUFFER_SIZE The Buffer was not a multiple of the block size of the device. | |
| @retval EFI_INVALID_PARAMETER Invalid parameter passed in. | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiDiskWriteBlocks ( | |
| IN EFI_BLOCK_IO_PROTOCOL *This, | |
| IN UINT32 MediaId, | |
| IN EFI_LBA Lba, | |
| IN UINTN BufferSize, | |
| IN VOID *Buffer | |
| ); | |
| /** | |
| Flush Block to Disk. | |
| EFI_SUCCESS is returned directly. | |
| @param This The pointer of EFI_BLOCK_IO_PROTOCOL | |
| @retval EFI_SUCCESS All outstanding data was written to the device | |
| **/ | |
| EFI_STATUS | |
| EFIAPI | |
| ScsiDiskFlushBlocks ( | |
| IN EFI_BLOCK_IO_PROTOCOL *This | |
| ); | |
| /** | |
| Dectect Device and read out capacity ,if error occurs, parse the sense key. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| @param MustReadCapacity The flag about reading device capacity | |
| @param MediaChange The pointer of flag indicates if media has changed | |
| @retval EFI_DEVICE_ERROR Indicates that error occurs | |
| @retval EFI_SUCCESS Successfully to detect media | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskDetectMedia ( | |
| IN SCSI_DISK_DEV *ScsiDiskDevice, | |
| IN BOOLEAN MustReadCapacity, | |
| OUT BOOLEAN *MediaChange | |
| ); | |
| /** | |
| To test deivice. | |
| 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. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| @param NeedRetry The pointer of flag indicates try again | |
| @param SenseDataArray The pointer of an array of sense data | |
| @param NumberOfSenseKeys The pointer of the number of sense data array | |
| @retval EFI_DEVICE_ERROR Indicates that error occurs | |
| @retval EFI_SUCCESS Successfully to test unit | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskTestUnitReady ( | |
| IN SCSI_DISK_DEV *ScsiDiskDevice, | |
| OUT BOOLEAN *NeedRetry, | |
| OUT EFI_SCSI_SENSE_DATA **SenseDataArray, | |
| OUT UINTN *NumberOfSenseKeys | |
| ); | |
| /** | |
| Parsing Sense Keys which got from request sense command. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| @param SenseData The pointer of EFI_SCSI_SENSE_DATA | |
| @param NumberOfSenseKeys The number of sense key | |
| @param Action The pointer of action which indicates what is need to do next | |
| @retval EFI_DEVICE_ERROR Indicates that error occurs | |
| @retval EFI_SUCCESS Successfully to complete the parsing | |
| **/ | |
| EFI_STATUS | |
| DetectMediaParsingSenseKeys ( | |
| OUT SCSI_DISK_DEV *ScsiDiskDevice, | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN NumberOfSenseKeys, | |
| OUT UINTN *Action | |
| ); | |
| /** | |
| Send read capacity command to device and get the device parameter. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| @param NeedRetry The pointer of flag indicates if need a retry | |
| @param SenseDataArray The pointer of an array of sense data | |
| @param NumberOfSenseKeys The number of sense key | |
| @retval EFI_DEVICE_ERROR Indicates that error occurs | |
| @retval EFI_SUCCESS Successfully to read capacity | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskReadCapacity ( | |
| IN OUT SCSI_DISK_DEV *ScsiDiskDevice, | |
| OUT BOOLEAN *NeedRetry, | |
| OUT EFI_SCSI_SENSE_DATA **SenseDataArray, | |
| OUT UINTN *NumberOfSenseKeys | |
| ); | |
| /** | |
| Check the HostAdapter status and re-interpret it in EFI_STATUS. | |
| @param HostAdapterStatus Host Adapter status | |
| @retval EFI_SUCCESS Host adapter is OK. | |
| @retval EFI_TIMEOUT Timeout. | |
| @retval EFI_NOT_READY Adapter NOT ready. | |
| @retval EFI_DEVICE_ERROR Adapter device error. | |
| **/ | |
| EFI_STATUS | |
| CheckHostAdapterStatus ( | |
| IN UINT8 HostAdapterStatus | |
| ); | |
| /** | |
| Check the target status and re-interpret it in EFI_STATUS. | |
| @param TargetStatus Target status | |
| @retval EFI_NOT_READY Device is NOT ready. | |
| @retval EFI_DEVICE_ERROR | |
| @retval EFI_SUCCESS | |
| **/ | |
| EFI_STATUS | |
| CheckTargetStatus ( | |
| IN UINT8 TargetStatus | |
| ); | |
| /** | |
| Retrieve all sense keys from the device. | |
| When encountering error during the process, if retrieve sense keys before | |
| error encounterred, it returns the sense keys with return status set to EFI_SUCCESS, | |
| and NeedRetry set to FALSE; otherwize, return the proper return status. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| @param NeedRetry The pointer of flag indicates if need a retry | |
| @param SenseDataArray The pointer of an array of sense data | |
| @param NumberOfSenseKeys The number of sense key | |
| @param AskResetIfError The flag indicates if need reset when error occurs | |
| @retval EFI_DEVICE_ERROR Indicates that error occurs | |
| @retval EFI_SUCCESS Successfully to request sense key | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskRequestSenseKeys ( | |
| IN OUT SCSI_DISK_DEV *ScsiDiskDevice, | |
| OUT BOOLEAN *NeedRetry, | |
| OUT EFI_SCSI_SENSE_DATA **SenseDataArray, | |
| OUT UINTN *NumberOfSenseKeys, | |
| IN BOOLEAN AskResetIfError | |
| ); | |
| /** | |
| Send out Inquiry command to Device. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| @param NeedRetry Indicates if needs try again when error happens | |
| @retval EFI_DEVICE_ERROR Indicates that error occurs | |
| @retval EFI_SUCCESS Successfully to detect media | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskInquiryDevice ( | |
| IN OUT SCSI_DISK_DEV *ScsiDiskDevice, | |
| OUT BOOLEAN *NeedRetry | |
| ); | |
| /** | |
| Parse Inquiry data. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| **/ | |
| VOID | |
| ParseInquiryData ( | |
| IN OUT SCSI_DISK_DEV *ScsiDiskDevice | |
| ); | |
| /** | |
| Read sector from SCSI Disk. | |
| @param ScsiDiskDevice The poiniter of SCSI_DISK_DEV | |
| @param Buffer The buffer to fill in the read out data | |
| @param Lba Logic block address | |
| @param NumberOfBlocks The number of blocks to read | |
| @retval EFI_DEVICE_ERROR Indicates a device error. | |
| @retval EFI_SUCCESS Operation is successful. | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskReadSectors ( | |
| IN SCSI_DISK_DEV *ScsiDiskDevice, | |
| OUT VOID *Buffer, | |
| IN EFI_LBA Lba, | |
| IN UINTN NumberOfBlocks | |
| ); | |
| /** | |
| Write sector to SCSI Disk. | |
| @param ScsiDiskDevice The poiniter of SCSI_DISK_DEV | |
| @param Buffer The buffer of data to be written into SCSI Disk | |
| @param Lba Logic block address | |
| @param NumberOfBlocks The number of blocks to read | |
| @retval EFI_DEVICE_ERROR Indicates a device error. | |
| @retval EFI_SUCCESS Operation is successful. | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskWriteSectors ( | |
| IN SCSI_DISK_DEV *ScsiDiskDevice, | |
| IN VOID *Buffer, | |
| IN EFI_LBA Lba, | |
| IN UINTN NumberOfBlocks | |
| ); | |
| /** | |
| Sumbmit Read command. | |
| @param ScsiDiskDevice The pointer of ScsiDiskDevice | |
| @param NeedRetry The pointer of flag indicates if needs retry if error happens | |
| @param SenseDataArray NOT used yet in this function | |
| @param NumberOfSenseKeys The number of sense key | |
| @param Timeout The time to complete the command | |
| @param DataBuffer The buffer to fill with the read out data | |
| @param DataLength The length of buffer | |
| @param StartLba The start logic block address | |
| @param SectorSize The size of sector | |
| @return EFI_STATUS is returned by calling ScsiRead10Command(). | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskRead10 ( | |
| IN SCSI_DISK_DEV *ScsiDiskDevice, | |
| OUT BOOLEAN *NeedRetry, | |
| OUT EFI_SCSI_SENSE_DATA **SenseDataArray, OPTIONAL | |
| OUT UINTN *NumberOfSenseKeys, | |
| IN UINT64 Timeout, | |
| OUT UINT8 *DataBuffer, | |
| IN OUT UINT32 *DataLength, | |
| IN UINT32 StartLba, | |
| IN UINT32 SectorSize | |
| ); | |
| /** | |
| Submit Write Command. | |
| @param ScsiDiskDevice The pointer of ScsiDiskDevice | |
| @param NeedRetry The pointer of flag indicates if needs retry if error happens | |
| @param SenseDataArray NOT used yet in this function | |
| @param NumberOfSenseKeys The number of sense key | |
| @param Timeout The time to complete the command | |
| @param DataBuffer The buffer to fill with the read out data | |
| @param DataLength The length of buffer | |
| @param StartLba The start logic block address | |
| @param SectorSize The size of sector | |
| @return EFI_STATUS is returned by calling ScsiWrite10Command(). | |
| **/ | |
| EFI_STATUS | |
| ScsiDiskWrite10 ( | |
| IN SCSI_DISK_DEV *ScsiDiskDevice, | |
| OUT BOOLEAN *NeedRetry, | |
| OUT EFI_SCSI_SENSE_DATA **SenseDataArray, OPTIONAL | |
| OUT UINTN *NumberOfSenseKeys, | |
| IN UINT64 Timeout, | |
| IN UINT8 *DataBuffer, | |
| IN OUT UINT32 *DataLength, | |
| IN UINT32 StartLba, | |
| IN UINT32 SectorSize | |
| ); | |
| /** | |
| Get information from media read capacity command. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| @param Capacity The pointer of EFI_SCSI_DISK_CAPACITY_DATA | |
| **/ | |
| VOID | |
| GetMediaInfo ( | |
| IN OUT SCSI_DISK_DEV *ScsiDiskDevice, | |
| IN EFI_SCSI_DISK_CAPACITY_DATA *Capacity | |
| ); | |
| /** | |
| Check sense key to find if media presents. | |
| @param SenseData The pointer of EFI_SCSI_SENSE_DATA | |
| @param SenseCounts The number of sense key | |
| @retval TRUE NOT any media | |
| @retval FALSE Media presents | |
| **/ | |
| BOOLEAN | |
| ScsiDiskIsNoMedia ( | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN SenseCounts | |
| ); | |
| /** | |
| Parse sense key. | |
| @param SenseData The pointer of EFI_SCSI_SENSE_DATA | |
| @param SenseCounts The number of sense key | |
| @retval TRUE Error | |
| @retval FALSE NOT error | |
| **/ | |
| BOOLEAN | |
| ScsiDiskIsMediaError ( | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN SenseCounts | |
| ); | |
| /** | |
| Check sense key to find if hardware error happens. | |
| @param SenseData The pointer of EFI_SCSI_SENSE_DATA | |
| @param SenseCounts The number of sense key | |
| @retval TRUE Hardware error exits. | |
| @retval FALSE NO error. | |
| **/ | |
| BOOLEAN | |
| ScsiDiskIsHardwareError ( | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN SenseCounts | |
| ); | |
| /** | |
| Check sense key to find if media has changed. | |
| @param SenseData The pointer of EFI_SCSI_SENSE_DATA | |
| @param SenseCounts The number of sense key | |
| @retval TRUE Media is changed. | |
| @retval FALSE Medit is NOT changed. | |
| **/ | |
| BOOLEAN | |
| ScsiDiskIsMediaChange ( | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN SenseCounts | |
| ); | |
| /** | |
| Check sense key to find if reset happens. | |
| @param SenseData The pointer of EFI_SCSI_SENSE_DATA | |
| @param SenseCounts The number of sense key | |
| @retval TRUE It is reset before. | |
| @retval FALSE It is NOT reset before. | |
| **/ | |
| BOOLEAN | |
| ScsiDiskIsResetBefore ( | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN SenseCounts | |
| ); | |
| /** | |
| Check sense key to find if the drive is ready. | |
| @param SenseData The pointer of EFI_SCSI_SENSE_DATA | |
| @param SenseCounts The number of sense key | |
| @param RetryLater The flag means if need a retry | |
| @retval TRUE Drive is ready. | |
| @retval FALSE Drive is NOT ready. | |
| **/ | |
| BOOLEAN | |
| ScsiDiskIsDriveReady ( | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN SenseCounts, | |
| OUT BOOLEAN *RetryLater | |
| ); | |
| /** | |
| Check sense key to find if it has sense key. | |
| @param SenseData - The pointer of EFI_SCSI_SENSE_DATA | |
| @param SenseCounts - The number of sense key | |
| @retval TRUE It has sense key. | |
| @retval FALSE It has NOT any sense key. | |
| **/ | |
| BOOLEAN | |
| ScsiDiskHaveSenseKey ( | |
| IN EFI_SCSI_SENSE_DATA *SenseData, | |
| IN UINTN SenseCounts | |
| ); | |
| /** | |
| Release resource about disk device. | |
| @param ScsiDiskDevice The pointer of SCSI_DISK_DEV | |
| **/ | |
| VOID | |
| ReleaseScsiDiskDeviceResources ( | |
| IN SCSI_DISK_DEV *ScsiDiskDevice | |
| ); | |
| #endif |