/** @file | |
BOT Transportation implementation. | |
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _PEI_BOT_PEIM_H_ | |
#define _PEI_BOT_PEIM_H_ | |
#include <PiPei.h> | |
#include <Ppi/UsbIo.h> | |
#include <Ppi/UsbHostController.h> | |
#include <Ppi/BlockIo.h> | |
// #include <Library/DebugLib.h> | |
#include <Library/PeimEntryPoint.h> | |
#include <Library/PeiServicesLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <IndustryStandard/Atapi.h> | |
#pragma pack(1) | |
// | |
// Bulk Only device protocol | |
// | |
typedef struct { | |
UINT32 Signature; | |
UINT32 Tag; | |
UINT32 DataTransferLength; | |
UINT8 Flags; | |
UINT8 Lun; | |
UINT8 CmdLen; | |
UINT8 CmdBlock[16]; | |
} CBW; | |
typedef struct { | |
UINT32 Signature; | |
UINT32 Tag; | |
UINT32 DataResidue; | |
UINT8 Status; | |
} CSW; | |
#pragma pack() | |
// | |
// Status code, see Usb Bot device spec | |
// | |
#define CSWSIG 0x53425355 | |
#define CBWSIG 0x43425355 | |
/** | |
Sends out ATAPI Inquiry Packet Command to the specified device. This command will | |
return INQUIRY data of the device. | |
@param PeiServices The pointer of EFI_PEI_SERVICES. | |
@param PeiBotDevice The pointer to PEI_BOT_DEVICE instance. | |
@retval EFI_SUCCESS Inquiry command completes successfully. | |
@retval EFI_DEVICE_ERROR Inquiry command failed. | |
**/ | |
EFI_STATUS | |
PeiUsbInquiry ( | |
IN EFI_PEI_SERVICES **PeiServices, | |
IN PEI_BOT_DEVICE *PeiBotDevice | |
); | |
/** | |
Sends out ATAPI Test Unit Ready Packet Command to the specified device | |
to find out whether device is accessible. | |
@param PeiServices The pointer of EFI_PEI_SERVICES. | |
@param PeiBotDevice The pointer to PEI_BOT_DEVICE instance. | |
@retval EFI_SUCCESS TestUnit command executed successfully. | |
@retval EFI_DEVICE_ERROR Device cannot be executed TestUnit command successfully. | |
**/ | |
EFI_STATUS | |
PeiUsbTestUnitReady ( | |
IN EFI_PEI_SERVICES **PeiServices, | |
IN PEI_BOT_DEVICE *PeiBotDevice | |
); | |
/** | |
Sends out ATAPI Request Sense Packet Command to the specified device. | |
@param PeiServices The pointer of EFI_PEI_SERVICES. | |
@param PeiBotDevice The pointer to PEI_BOT_DEVICE instance. | |
@param SenseCounts Length of sense buffer. | |
@param SenseKeyBuffer Pointer to sense buffer. | |
@retval EFI_SUCCESS Command executed successfully. | |
@retval EFI_DEVICE_ERROR Some device errors happen. | |
**/ | |
EFI_STATUS | |
PeiUsbRequestSense ( | |
IN EFI_PEI_SERVICES **PeiServices, | |
IN PEI_BOT_DEVICE *PeiBotDevice, | |
OUT UINTN *SenseCounts, | |
IN UINT8 *SenseKeyBuffer | |
); | |
/** | |
Sends out ATAPI Read Capacity Packet Command to the specified device. | |
This command will return the information regarding the capacity of the | |
media in the device. | |
@param PeiServices The pointer of EFI_PEI_SERVICES. | |
@param PeiBotDevice The pointer to PEI_BOT_DEVICE instance. | |
@retval EFI_SUCCESS Command executed successfully. | |
@retval EFI_DEVICE_ERROR Some device errors happen. | |
**/ | |
EFI_STATUS | |
PeiUsbReadCapacity ( | |
IN EFI_PEI_SERVICES **PeiServices, | |
IN PEI_BOT_DEVICE *PeiBotDevice | |
); | |
/** | |
Sends out ATAPI Read Format Capacity Data Command to the specified device. | |
This command will return the information regarding the capacity of the | |
media in the device. | |
@param PeiServices The pointer of EFI_PEI_SERVICES. | |
@param PeiBotDevice The pointer to PEI_BOT_DEVICE instance. | |
@retval EFI_SUCCESS Command executed successfully. | |
@retval EFI_DEVICE_ERROR Some device errors happen. | |
**/ | |
EFI_STATUS | |
PeiUsbReadFormattedCapacity ( | |
IN EFI_PEI_SERVICES **PeiServices, | |
IN PEI_BOT_DEVICE *PeiBotDevice | |
); | |
/** | |
Execute Read(10) ATAPI command on a specific SCSI target. | |
Executes the ATAPI Read(10) command on the ATAPI target specified by PeiBotDevice. | |
@param PeiServices The pointer of EFI_PEI_SERVICES. | |
@param PeiBotDevice The pointer to PEI_BOT_DEVICE instance. | |
@param Buffer The pointer to data buffer. | |
@param Lba The start logic block address of reading. | |
@param NumberOfBlocks The block number of reading. | |
@retval EFI_SUCCESS Command executed successfully. | |
@retval EFI_DEVICE_ERROR Some device errors happen. | |
**/ | |
EFI_STATUS | |
PeiUsbRead10 ( | |
IN EFI_PEI_SERVICES **PeiServices, | |
IN PEI_BOT_DEVICE *PeiBotDevice, | |
IN VOID *Buffer, | |
IN EFI_PEI_LBA Lba, | |
IN UINTN NumberOfBlocks | |
); | |
/** | |
Check if there is media according to sense data. | |
@param SenseData Pointer to sense data. | |
@param SenseCounts Count of sense data. | |
@retval TRUE No media | |
@retval FALSE Media exists | |
**/ | |
BOOLEAN | |
IsNoMedia ( | |
IN ATAPI_REQUEST_SENSE_DATA *SenseData, | |
IN UINTN SenseCounts | |
); | |
/** | |
Check if there is media error according to sense data. | |
@param SenseData Pointer to sense data. | |
@param SenseCounts Count of sense data. | |
@retval TRUE Media error | |
@retval FALSE No media error | |
**/ | |
BOOLEAN | |
IsMediaError ( | |
IN ATAPI_REQUEST_SENSE_DATA *SenseData, | |
IN UINTN SenseCounts | |
); | |
/** | |
Check if media is changed according to sense data. | |
@param SenseData Pointer to sense data. | |
@param SenseCounts Count of sense data. | |
@retval TRUE There is media change event. | |
@retval FALSE media is NOT changed. | |
**/ | |
BOOLEAN | |
IsMediaChange ( | |
IN ATAPI_REQUEST_SENSE_DATA *SenseData, | |
IN UINTN SenseCounts | |
); | |
#endif |