MdeModulePkg UfsBlockIoPei: Remove redundant functions
The functions that are never called have been removed. They are UfsPeimUnlinkMemBlock,UfsPeimRequestSense, UfsPeimInquiry,UfsRwAttributes,UfsClearFlag,UfsReadFlag and UfsFindAvailableSlotInTmrl. https://bugzilla.tianocore.org/show_bug.cgi?id=1062 v2: Remove the comment that mentioned 'UfsPeimUnlinkMemBlock' within function UfsPeimFreeMemPool(). Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: shenglei <shenglei.zhang@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
@@ -137,53 +137,7 @@ UFS_PEIM_HC_PRIVATE_DATA gUfsHcPeimTemplate = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
Execute Request Sense SCSI command on a specific UFS device.
|
|
||||||
|
|
||||||
@param[in] Private A pointer to UFS_PEIM_HC_PRIVATE_DATA data structure.
|
|
||||||
@param[in] Lun The lun on which the SCSI cmd executed.
|
|
||||||
@param[out] DataBuffer A pointer to output sense data.
|
|
||||||
@param[out] DataBufferLength The length of output sense data.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The command executed successfully.
|
|
||||||
@retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
|
|
||||||
@retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
UfsPeimRequestSense (
|
|
||||||
IN UFS_PEIM_HC_PRIVATE_DATA *Private,
|
|
||||||
IN UINTN Lun,
|
|
||||||
OUT VOID *DataBuffer,
|
|
||||||
OUT UINT32 *DataBufferLength
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UFS_SCSI_REQUEST_PACKET Packet;
|
|
||||||
UINT8 Cdb[UFS_SCSI_OP_LENGTH_SIX];
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
ZeroMem (&Packet, sizeof (UFS_SCSI_REQUEST_PACKET));
|
|
||||||
ZeroMem (Cdb, sizeof (Cdb));
|
|
||||||
|
|
||||||
Cdb[0] = EFI_SCSI_OP_REQUEST_SENSE;
|
|
||||||
|
|
||||||
Packet.Timeout = UFS_TIMEOUT;
|
|
||||||
Packet.Cdb = Cdb;
|
|
||||||
Packet.CdbLength = sizeof (Cdb);
|
|
||||||
Packet.DataDirection = UfsDataIn;
|
|
||||||
Packet.InDataBuffer = DataBuffer;
|
|
||||||
Packet.InTransferLength = *DataBufferLength;
|
|
||||||
Packet.SenseData = NULL;
|
|
||||||
Packet.SenseDataLength = 0;
|
|
||||||
|
|
||||||
Status = UfsExecScsiCmds (Private,(UINT8)Lun, &Packet);
|
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
|
||||||
*DataBufferLength = Packet.InTransferLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Execute TEST UNITY READY SCSI command on a specific UFS device.
|
Execute TEST UNITY READY SCSI command on a specific UFS device.
|
||||||
@@ -231,62 +185,7 @@ UfsPeimTestUnitReady (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Execute INQUIRY SCSI command on a specific UFS device.
|
|
||||||
|
|
||||||
@param[in] Private A pointer to UFS_PEIM_HC_PRIVATE_DATA data structure.
|
|
||||||
@param[in] Lun The lun on which the SCSI cmd executed.
|
|
||||||
@param[out] Inquiry A pointer to Inquiry data buffer.
|
|
||||||
@param[out] InquiryLengths The length of output Inquiry data.
|
|
||||||
@param[out] SenseData A pointer to output sense data.
|
|
||||||
@param[out] SenseDataLength The length of output sense data.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The command executed successfully.
|
|
||||||
@retval EFI_DEVICE_ERROR A device error occurred while attempting to send SCSI Request Packet.
|
|
||||||
@retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
UfsPeimInquiry (
|
|
||||||
IN UFS_PEIM_HC_PRIVATE_DATA *Private,
|
|
||||||
IN UINTN Lun,
|
|
||||||
OUT VOID *Inquiry,
|
|
||||||
OUT UINT32 *InquiryLength,
|
|
||||||
OUT VOID *SenseData, OPTIONAL
|
|
||||||
OUT UINT8 *SenseDataLength
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UFS_SCSI_REQUEST_PACKET Packet;
|
|
||||||
UINT8 Cdb[UFS_SCSI_OP_LENGTH_SIX];
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
ZeroMem (&Packet, sizeof (UFS_SCSI_REQUEST_PACKET));
|
|
||||||
ZeroMem (Cdb, sizeof (Cdb));
|
|
||||||
|
|
||||||
Cdb[0] = EFI_SCSI_OP_INQUIRY;
|
|
||||||
Cdb[4] = sizeof (EFI_SCSI_INQUIRY_DATA);
|
|
||||||
|
|
||||||
Packet.Timeout = UFS_TIMEOUT;
|
|
||||||
Packet.Cdb = Cdb;
|
|
||||||
Packet.CdbLength = sizeof (Cdb);
|
|
||||||
Packet.InDataBuffer = Inquiry;
|
|
||||||
Packet.InTransferLength = *InquiryLength;
|
|
||||||
Packet.DataDirection = UfsDataIn;
|
|
||||||
Packet.SenseData = SenseData;
|
|
||||||
Packet.SenseDataLength = *SenseDataLength;
|
|
||||||
|
|
||||||
Status = UfsExecScsiCmds (Private, (UINT8)Lun, &Packet);
|
|
||||||
|
|
||||||
if (*SenseDataLength != 0) {
|
|
||||||
*SenseDataLength = Packet.SenseDataLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
|
||||||
*InquiryLength = Packet.InTransferLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Execute READ CAPACITY(10) SCSI command on a specific UFS device.
|
Execute READ CAPACITY(10) SCSI command on a specific UFS device.
|
||||||
|
@@ -219,31 +219,7 @@ UfsPeimIsMemBlockEmpty (
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Unlink the memory block from the pool's list.
|
|
||||||
|
|
||||||
@param Head The block list head of the memory's pool.
|
|
||||||
@param BlockToUnlink The memory block to unlink.
|
|
||||||
|
|
||||||
**/
|
|
||||||
VOID
|
|
||||||
UfsPeimUnlinkMemBlock (
|
|
||||||
IN UFS_PEIM_MEM_BLOCK *Head,
|
|
||||||
IN UFS_PEIM_MEM_BLOCK *BlockToUnlink
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UFS_PEIM_MEM_BLOCK *Block;
|
|
||||||
|
|
||||||
ASSERT ((Head != NULL) && (BlockToUnlink != NULL));
|
|
||||||
|
|
||||||
for (Block = Head; Block != NULL; Block = Block->Next) {
|
|
||||||
if (Block->Next == BlockToUnlink) {
|
|
||||||
Block->Next = BlockToUnlink->Next;
|
|
||||||
BlockToUnlink->Next = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initialize the memory management pool for the host controller.
|
Initialize the memory management pool for the host controller.
|
||||||
@@ -305,8 +281,6 @@ UfsPeimFreeMemPool (
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Unlink all the memory blocks from the pool, then free them.
|
// Unlink all the memory blocks from the pool, then free them.
|
||||||
// UfsPeimUnlinkMemBlock can't be used to unlink and free the
|
|
||||||
// first block.
|
|
||||||
//
|
//
|
||||||
for (Block = Pool->Head->Next; Block != NULL; Block = Pool->Head->Next) {
|
for (Block = Pool->Head->Next; Block != NULL; Block = Pool->Head->Next) {
|
||||||
UfsPeimFreeMemBlock (Pool, Block);
|
UfsPeimFreeMemBlock (Pool, Block);
|
||||||
|
@@ -694,31 +694,7 @@ UfsFindAvailableSlotInTrl (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Find out available slot in task management transfer list of a UFS device.
|
|
||||||
|
|
||||||
@param[in] Private The pointer to the UFS_PEIM_HC_PRIVATE_DATA data structure.
|
|
||||||
@param[out] Slot The available slot.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The available slot was found successfully.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
UfsFindAvailableSlotInTmrl (
|
|
||||||
IN UFS_PEIM_HC_PRIVATE_DATA *Private,
|
|
||||||
OUT UINT8 *Slot
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ASSERT ((Private != NULL) && (Slot != NULL));
|
|
||||||
|
|
||||||
//
|
|
||||||
// The simplest algo to always use slot 0.
|
|
||||||
// TODO: enhance it to support async transfer with multiple slot.
|
|
||||||
//
|
|
||||||
*Slot = 0;
|
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Start specified slot in transfer list of a UFS device.
|
Start specified slot in transfer list of a UFS device.
|
||||||
@@ -897,113 +873,7 @@ Exit:
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Read or write specified attribute of a UFS device.
|
|
||||||
|
|
||||||
@param[in] Private The pointer to the UFS_PEIM_HC_PRIVATE_DATA data structure.
|
|
||||||
@param[in] Read The boolean variable to show r/w direction.
|
|
||||||
@param[in] AttrId The ID of Attribute.
|
|
||||||
@param[in] Index The Index of Attribute.
|
|
||||||
@param[in] Selector The Selector of Attribute.
|
|
||||||
@param[in, out] Attributes The value of Attribute to be read or written.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The Attribute was read/written successfully.
|
|
||||||
@retval EFI_DEVICE_ERROR A device error occurred while attempting to r/w the Attribute.
|
|
||||||
@retval EFI_TIMEOUT A timeout occurred while waiting for the completion of r/w the Attribute.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
UfsRwAttributes (
|
|
||||||
IN UFS_PEIM_HC_PRIVATE_DATA *Private,
|
|
||||||
IN BOOLEAN Read,
|
|
||||||
IN UINT8 AttrId,
|
|
||||||
IN UINT8 Index,
|
|
||||||
IN UINT8 Selector,
|
|
||||||
IN OUT UINT32 *Attributes
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
UFS_DEVICE_MANAGEMENT_REQUEST_PACKET Packet;
|
|
||||||
UINT8 Slot;
|
|
||||||
UTP_TRD *Trd;
|
|
||||||
UINTN Address;
|
|
||||||
UTP_QUERY_RESP_UPIU *QueryResp;
|
|
||||||
UINT8 *CmdDescBase;
|
|
||||||
UINT32 CmdDescSize;
|
|
||||||
UINT32 ReturnData;
|
|
||||||
|
|
||||||
ZeroMem (&Packet, sizeof (UFS_DEVICE_MANAGEMENT_REQUEST_PACKET));
|
|
||||||
|
|
||||||
if (Read) {
|
|
||||||
Packet.DataDirection = UfsDataIn;
|
|
||||||
Packet.Opcode = UtpQueryFuncOpcodeRdAttr;
|
|
||||||
} else {
|
|
||||||
Packet.DataDirection = UfsDataOut;
|
|
||||||
Packet.Opcode = UtpQueryFuncOpcodeWrAttr;
|
|
||||||
}
|
|
||||||
Packet.DescId = AttrId;
|
|
||||||
Packet.Index = Index;
|
|
||||||
Packet.Selector = Selector;
|
|
||||||
Packet.Timeout = UFS_TIMEOUT;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Find out which slot of transfer request list is available.
|
|
||||||
//
|
|
||||||
Status = UfsFindAvailableSlotInTrl (Private, &Slot);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trd = ((UTP_TRD*)Private->UtpTrlBase) + Slot;
|
|
||||||
//
|
|
||||||
// Fill transfer request descriptor to this slot.
|
|
||||||
//
|
|
||||||
Status = UfsCreateDMCommandDesc (Private, &Packet, Trd);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check the transfer request result.
|
|
||||||
//
|
|
||||||
CmdDescBase = (UINT8 *)(UINTN)(LShiftU64 ((UINT64)Trd->UcdBaU, 32) | LShiftU64 ((UINT64)Trd->UcdBa, 7));
|
|
||||||
QueryResp = (UTP_QUERY_RESP_UPIU*)(CmdDescBase + Trd->RuO * sizeof (UINT32));
|
|
||||||
CmdDescSize = Trd->RuO * sizeof (UINT32) + Trd->RuL * sizeof (UINT32);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Start to execute the transfer request.
|
|
||||||
//
|
|
||||||
UfsStartExecCmd (Private, Slot);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Wait for the completion of the transfer request.
|
|
||||||
//
|
|
||||||
Address = Private->UfsHcBase + UFS_HC_UTRLDBR_OFFSET;
|
|
||||||
Status = UfsWaitMemSet (Address, BIT0 << Slot, 0, Packet.Timeout);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
goto Exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (QueryResp->QueryResp != 0) {
|
|
||||||
DumpQueryResponseResult (QueryResp->QueryResp);
|
|
||||||
Status = EFI_DEVICE_ERROR;
|
|
||||||
goto Exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Trd->Ocs == 0) {
|
|
||||||
ReturnData = QueryResp->Tsf.Value;
|
|
||||||
SwapLittleEndianToBigEndian ((UINT8*)&ReturnData, sizeof (UINT32));
|
|
||||||
*Attributes = ReturnData;
|
|
||||||
} else {
|
|
||||||
Status = EFI_DEVICE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
Exit:
|
|
||||||
UfsStopExecCmd (Private, Slot);
|
|
||||||
UfsPeimFreeMem (Private->Pool, CmdDescBase, CmdDescSize);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Read or write specified flag of a UFS device.
|
Read or write specified flag of a UFS device.
|
||||||
@@ -1143,57 +1013,7 @@ UfsSetFlag (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Clear specified flag to 0 on a UFS device.
|
|
||||||
|
|
||||||
@param[in] Private The pointer to the UFS_PEIM_HC_PRIVATE_DATA data structure.
|
|
||||||
@param[in] FlagId The ID of flag to be cleared.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The flag was cleared successfully.
|
|
||||||
@retval EFI_DEVICE_ERROR A device error occurred while attempting to clear the flag.
|
|
||||||
@retval EFI_TIMEOUT A timeout occurred while waiting for the completion of clearing the flag.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
UfsClearFlag (
|
|
||||||
IN UFS_PEIM_HC_PRIVATE_DATA *Private,
|
|
||||||
IN UINT8 FlagId
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
UINT8 Value;
|
|
||||||
|
|
||||||
Value = 0;
|
|
||||||
Status = UfsRwFlags (Private, FALSE, FlagId, &Value);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Read specified flag from a UFS device.
|
|
||||||
|
|
||||||
@param[in] Private The pointer to the UFS_PEIM_HC_PRIVATE_DATA data structure.
|
|
||||||
@param[in] FlagId The ID of flag to be read.
|
|
||||||
@param[out] Value The flag's value.
|
|
||||||
|
|
||||||
@retval EFI_SUCCESS The flag was read successfully.
|
|
||||||
@retval EFI_DEVICE_ERROR A device error occurred while attempting to read the flag.
|
|
||||||
@retval EFI_TIMEOUT A timeout occurred while waiting for the completion of reading the flag.
|
|
||||||
|
|
||||||
**/
|
|
||||||
EFI_STATUS
|
|
||||||
UfsReadFlag (
|
|
||||||
IN UFS_PEIM_HC_PRIVATE_DATA *Private,
|
|
||||||
IN UINT8 FlagId,
|
|
||||||
OUT UINT8 *Value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
EFI_STATUS Status;
|
|
||||||
|
|
||||||
Status = UfsRwFlags (Private, TRUE, FlagId, Value);
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Sends NOP IN cmd to a UFS device for initialization process request.
|
Sends NOP IN cmd to a UFS device for initialization process request.
|
||||||
|
Reference in New Issue
Block a user