**/\r
UINT64\r
NvmeCreatePrpList (\r
- IN PEI_NVME_CONTROLLER_PRIVATE_DATA *Private,\r
- IN EFI_PHYSICAL_ADDRESS PhysicalAddr,\r
- IN UINTN Pages\r
+ IN PEI_NVME_CONTROLLER_PRIVATE_DATA *Private,\r
+ IN EFI_PHYSICAL_ADDRESS PhysicalAddr,\r
+ IN UINTN Pages\r
)\r
{\r
- UINTN PrpEntryNo;\r
- UINTN PrpListNo;\r
- UINT64 PrpListBase;\r
- VOID *PrpListHost;\r
- UINTN PrpListIndex;\r
- UINTN PrpEntryIndex;\r
- UINT64 Remainder;\r
- EFI_PHYSICAL_ADDRESS PrpListPhyAddr;\r
- UINTN Bytes;\r
- UINT8 *PrpEntry;\r
- EFI_PHYSICAL_ADDRESS NewPhyAddr;\r
+ UINTN PrpEntryNo;\r
+ UINTN PrpListNo;\r
+ UINT64 PrpListBase;\r
+ VOID *PrpListHost;\r
+ UINTN PrpListIndex;\r
+ UINTN PrpEntryIndex;\r
+ UINT64 Remainder;\r
+ EFI_PHYSICAL_ADDRESS PrpListPhyAddr;\r
+ UINTN Bytes;\r
+ UINT8 *PrpEntry;\r
+ EFI_PHYSICAL_ADDRESS NewPhyAddr;\r
\r
//\r
// The number of Prp Entry in a memory page.\r
//\r
// Calculate total PrpList number.\r
//\r
- PrpListNo = (UINTN) DivU64x64Remainder ((UINT64)Pages, (UINT64)PrpEntryNo, &Remainder);\r
+ PrpListNo = (UINTN)DivU64x64Remainder ((UINT64)Pages, (UINT64)PrpEntryNo, &Remainder);\r
if (Remainder != 0) {\r
PrpListNo += 1;\r
}\r
));\r
return 0;\r
}\r
- PrpListHost = (VOID *)(UINTN) NVME_PRP_BASE (Private);\r
\r
- Bytes = EFI_PAGES_TO_SIZE (PrpListNo);\r
+ PrpListHost = (VOID *)(UINTN)NVME_PRP_BASE (Private);\r
+\r
+ Bytes = EFI_PAGES_TO_SIZE (PrpListNo);\r
PrpListPhyAddr = (UINT64)(UINTN)(PrpListHost);\r
\r
//\r
PrpListBase = (UINTN)PrpListHost + PrpListIndex * EFI_PAGE_SIZE;\r
\r
for (PrpEntryIndex = 0; PrpEntryIndex < PrpEntryNo; ++PrpEntryIndex) {\r
- PrpEntry = (UINT8 *)(UINTN) (PrpListBase + PrpEntryIndex * sizeof(UINT64));\r
+ PrpEntry = (UINT8 *)(UINTN)(PrpListBase + PrpEntryIndex * sizeof (UINT64));\r
if (PrpEntryIndex != PrpEntryNo - 1) {\r
//\r
// Fill all PRP entries except of last one.\r
//\r
- CopyMem (PrpEntry, (VOID *)(UINTN) (&PhysicalAddr), sizeof (UINT64));\r
+ CopyMem (PrpEntry, (VOID *)(UINTN)(&PhysicalAddr), sizeof (UINT64));\r
PhysicalAddr += EFI_PAGE_SIZE;\r
} else {\r
//\r
// Fill last PRP entries with next PRP List pointer.\r
//\r
NewPhyAddr = (PrpListPhyAddr + (PrpListIndex + 1) * EFI_PAGE_SIZE);\r
- CopyMem (PrpEntry, (VOID *)(UINTN) (&NewPhyAddr), sizeof (UINT64));\r
+ CopyMem (PrpEntry, (VOID *)(UINTN)(&NewPhyAddr), sizeof (UINT64));\r
}\r
}\r
}\r
//\r
PrpListBase = (UINTN)PrpListHost + PrpListIndex * EFI_PAGE_SIZE;\r
for (PrpEntryIndex = 0; PrpEntryIndex < ((Remainder != 0) ? Remainder : PrpEntryNo); ++PrpEntryIndex) {\r
- PrpEntry = (UINT8 *)(UINTN) (PrpListBase + PrpEntryIndex * sizeof(UINT64));\r
- CopyMem (PrpEntry, (VOID *)(UINTN) (&PhysicalAddr), sizeof (UINT64));\r
+ PrpEntry = (UINT8 *)(UINTN)(PrpListBase + PrpEntryIndex * sizeof (UINT64));\r
+ CopyMem (PrpEntry, (VOID *)(UINTN)(&PhysicalAddr), sizeof (UINT64));\r
\r
PhysicalAddr += EFI_PAGE_SIZE;\r
}\r
**/\r
EFI_STATUS\r
NvmeCheckCqStatus (\r
- IN NVME_CQ *Cq\r
+ IN NVME_CQ *Cq\r
)\r
{\r
- if (Cq->Sct == 0x0 && Cq->Sc == 0x0) {\r
+ if ((Cq->Sct == 0x0) && (Cq->Sc == 0x0)) {\r
return EFI_SUCCESS;\r
}\r
\r
DEBUG ((DEBUG_INFO, "Reservation Conflict\n"));\r
break;\r
}\r
+\r
break;\r
\r
case 0x1:\r
DEBUG ((DEBUG_INFO, "Attempted Write to Read Only Range\n"));\r
break;\r
}\r
+\r
break;\r
\r
case 0x2:\r
DEBUG ((DEBUG_INFO, "Access Denied\n"));\r
break;\r
}\r
+\r
break;\r
\r
default:\r
**/\r
EFI_STATUS\r
NvmePassThruExecute (\r
- IN PEI_NVME_CONTROLLER_PRIVATE_DATA *Private,\r
- IN UINT32 NamespaceId,\r
- IN OUT EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET *Packet\r
+ IN PEI_NVME_CONTROLLER_PRIVATE_DATA *Private,\r
+ IN UINT32 NamespaceId,\r
+ IN OUT EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET *Packet\r
)\r
{\r
- EFI_STATUS Status;\r
- NVME_SQ *Sq;\r
- NVME_CQ *Cq;\r
- UINT8 QueueId;\r
- UINTN SqSize;\r
- UINTN CqSize;\r
- EDKII_IOMMU_OPERATION MapOp;\r
- UINTN MapLength;\r
- EFI_PHYSICAL_ADDRESS PhyAddr;\r
- VOID *MapData;\r
- VOID *MapMeta;\r
- UINT32 Bytes;\r
- UINT32 Offset;\r
- UINT32 Data32;\r
- UINT64 Timer;\r
+ EFI_STATUS Status;\r
+ NVME_SQ *Sq;\r
+ NVME_CQ *Cq;\r
+ UINT8 QueueId;\r
+ UINTN SqSize;\r
+ UINTN CqSize;\r
+ EDKII_IOMMU_OPERATION MapOp;\r
+ UINTN MapLength;\r
+ EFI_PHYSICAL_ADDRESS PhyAddr;\r
+ VOID *MapData;\r
+ VOID *MapMeta;\r
+ UINT32 Bytes;\r
+ UINT32 Offset;\r
+ UINT32 Data32;\r
+ UINT64 Timer;\r
\r
//\r
// Check the data fields in Packet parameter\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if (Packet->QueueType != NVME_ADMIN_QUEUE && Packet->QueueType != NVME_IO_QUEUE) {\r
+ if ((Packet->QueueType != NVME_ADMIN_QUEUE) && (Packet->QueueType != NVME_IO_QUEUE)) {\r
DEBUG ((\r
DEBUG_ERROR,\r
"%a, Invalid parameter: QueueId(%lx)\n",\r
ZeroMem (Sq, sizeof (NVME_SQ));\r
Sq->Opc = (UINT8)Packet->NvmeCmd->Cdw0.Opcode;\r
Sq->Fuse = (UINT8)Packet->NvmeCmd->Cdw0.FusedOperation;\r
- Sq->Cid = Private->Cid[QueueId]++;;\r
+ Sq->Cid = Private->Cid[QueueId]++;\r
Sq->Nsid = Packet->NvmeCmd->Nsid;\r
\r
//\r
//\r
if ((Sq->Opc & (BIT0 | BIT1)) != 0) {\r
if (((Packet->TransferLength != 0) && (Packet->TransferBuffer == NULL)) ||\r
- ((Packet->TransferLength == 0) && (Packet->TransferBuffer != NULL))) {\r
+ ((Packet->TransferLength == 0) && (Packet->TransferBuffer != NULL)))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// allocated internally by the driver.\r
//\r
if ((Packet->QueueType == NVME_ADMIN_QUEUE) &&\r
- ((Sq->Opc == NVME_ADMIN_CRIOCQ_CMD) || (Sq->Opc == NVME_ADMIN_CRIOSQ_CMD))) {\r
+ ((Sq->Opc == NVME_ADMIN_CRIOCQ_CMD) || (Sq->Opc == NVME_ADMIN_CRIOSQ_CMD)))\r
+ {\r
if ((Packet->TransferBuffer != Private->SqBuffer[NVME_IO_QUEUE]) &&\r
- (Packet->TransferBuffer != Private->CqBuffer[NVME_IO_QUEUE])) {\r
+ (Packet->TransferBuffer != Private->CqBuffer[NVME_IO_QUEUE]))\r
+ {\r
DEBUG ((\r
DEBUG_ERROR,\r
"%a: Does not support external IO queues creation request.\n",\r
\r
if ((Packet->TransferLength != 0) && (Packet->TransferBuffer != NULL)) {\r
MapLength = Packet->TransferLength;\r
- Status = IoMmuMap (\r
- MapOp,\r
- Packet->TransferBuffer,\r
- &MapLength,\r
- &PhyAddr,\r
- &MapData\r
- );\r
+ Status = IoMmuMap (\r
+ MapOp,\r
+ Packet->TransferBuffer,\r
+ &MapLength,\r
+ &PhyAddr,\r
+ &MapData\r
+ );\r
if (EFI_ERROR (Status) || (MapLength != Packet->TransferLength)) {\r
Status = EFI_OUT_OF_RESOURCES;\r
DEBUG ((DEBUG_ERROR, "%a: Fail to map data buffer.\n", __FUNCTION__));\r
Sq->Prp[0] = PhyAddr;\r
}\r
\r
- if((Packet->MetadataLength != 0) && (Packet->MetadataBuffer != NULL)) {\r
+ if ((Packet->MetadataLength != 0) && (Packet->MetadataBuffer != NULL)) {\r
MapLength = Packet->MetadataLength;\r
- Status = IoMmuMap (\r
- MapOp,\r
- Packet->MetadataBuffer,\r
- &MapLength,\r
- &PhyAddr,\r
- &MapMeta\r
- );\r
+ Status = IoMmuMap (\r
+ MapOp,\r
+ Packet->MetadataBuffer,\r
+ &MapLength,\r
+ &PhyAddr,\r
+ &MapMeta\r
+ );\r
if (EFI_ERROR (Status) || (MapLength != Packet->MetadataLength)) {\r
Status = EFI_OUT_OF_RESOURCES;\r
DEBUG ((DEBUG_ERROR, "%a: Fail to map meta data buffer.\n", __FUNCTION__));\r
goto Exit;\r
}\r
+\r
Sq->Mptr = PhyAddr;\r
}\r
}\r
//\r
// Create PrpList for remaining Data Buffer.\r
//\r
- PhyAddr = (Sq->Prp[0] + EFI_PAGE_SIZE) & ~(EFI_PAGE_SIZE - 1);\r
+ PhyAddr = (Sq->Prp[0] + EFI_PAGE_SIZE) & ~(EFI_PAGE_SIZE - 1);\r
Sq->Prp[1] = NvmeCreatePrpList (\r
Private,\r
PhyAddr,\r
- EFI_SIZE_TO_PAGES(Offset + Bytes) - 1\r
+ EFI_SIZE_TO_PAGES (Offset + Bytes) - 1\r
);\r
if (Sq->Prp[1] == 0) {\r
Status = EFI_OUT_OF_RESOURCES;\r
DEBUG ((DEBUG_ERROR, "%a: Create PRP list fail, Status - %r\n", __FUNCTION__, Status));\r
goto Exit;\r
}\r
-\r
} else if ((Offset + Bytes) > EFI_PAGE_SIZE) {\r
Sq->Prp[1] = (Sq->Prp[0] + EFI_PAGE_SIZE) & ~(EFI_PAGE_SIZE - 1);\r
}\r
if (Packet->NvmeCmd->Flags & CDW10_VALID) {\r
Sq->Payload.Raw.Cdw10 = Packet->NvmeCmd->Cdw10;\r
}\r
+\r
if (Packet->NvmeCmd->Flags & CDW11_VALID) {\r
Sq->Payload.Raw.Cdw11 = Packet->NvmeCmd->Cdw11;\r
}\r
+\r
if (Packet->NvmeCmd->Flags & CDW12_VALID) {\r
Sq->Payload.Raw.Cdw12 = Packet->NvmeCmd->Cdw12;\r
}\r
+\r
if (Packet->NvmeCmd->Flags & CDW13_VALID) {\r
Sq->Payload.Raw.Cdw13 = Packet->NvmeCmd->Cdw13;\r
}\r
+\r
if (Packet->NvmeCmd->Flags & CDW14_VALID) {\r
Sq->Payload.Raw.Cdw14 = Packet->NvmeCmd->Cdw14;\r
}\r
+\r
if (Packet->NvmeCmd->Flags & CDW15_VALID) {\r
Sq->Payload.Raw.Cdw15 = Packet->NvmeCmd->Cdw15;\r
}\r
if (Private->SqTdbl[QueueId].Sqt == SqSize) {\r
Private->SqTdbl[QueueId].Sqt = 0;\r
}\r
+\r
Data32 = ReadUnaligned32 ((UINT32 *)&Private->SqTdbl[QueueId]);\r
Status = NVME_SET_SQTDBL (Private, QueueId, &Data32);\r
if (EFI_ERROR (Status)) {\r
//\r
Status = EFI_TIMEOUT;\r
}\r
+\r
goto Exit;\r
}\r
\r
Private->CqHdbl[QueueId].Cqh++;\r
if (Private->CqHdbl[QueueId].Cqh == CqSize) {\r
Private->CqHdbl[QueueId].Cqh = 0;\r
- Private->Pt[QueueId] ^= 1;\r
+ Private->Pt[QueueId] ^= 1;\r
}\r
\r
//\r
EFI_STATUS\r
EFIAPI\r
NvmePassThruGetDevicePath (\r
- IN EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI *This,\r
- OUT UINTN *DevicePathLength,\r
- OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
+ IN EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI *This,\r
+ OUT UINTN *DevicePathLength,\r
+ OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath\r
)\r
{\r
- PEI_NVME_CONTROLLER_PRIVATE_DATA *Private;\r
+ PEI_NVME_CONTROLLER_PRIVATE_DATA *Private;\r
\r
- if (This == NULL || DevicePathLength == NULL || DevicePath == NULL) {\r
+ if ((This == NULL) || (DevicePathLength == NULL) || (DevicePath == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
NvmePassThruGetNextNameSpace (\r
- IN EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI *This,\r
- IN OUT UINT32 *NamespaceId\r
+ IN EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI *This,\r
+ IN OUT UINT32 *NamespaceId\r
)\r
{\r
- PEI_NVME_CONTROLLER_PRIVATE_DATA *Private;\r
- UINT32 DeviceIndex;\r
- EFI_STATUS Status;\r
+ PEI_NVME_CONTROLLER_PRIVATE_DATA *Private;\r
+ UINT32 DeviceIndex;\r
+ EFI_STATUS Status;\r
\r
- if (This == NULL || NamespaceId == NULL) {\r
+ if ((This == NULL) || (NamespaceId == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// Start with the first namespace ID\r
//\r
*NamespaceId = Private->NamespaceInfo[0].NamespaceId;\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
} else {\r
if (*NamespaceId > Private->ControllerData->Nn) {\r
return EFI_INVALID_PARAMETER;\r
if (*NamespaceId == Private->NamespaceInfo[DeviceIndex].NamespaceId) {\r
if ((DeviceIndex + 1) < Private->ActiveNamespaceNum) {\r
*NamespaceId = Private->NamespaceInfo[DeviceIndex + 1].NamespaceId;\r
- Status = EFI_SUCCESS;\r
+ Status = EFI_SUCCESS;\r
}\r
+\r
break;\r
}\r
}\r
}\r
\r
return Status;\r
-\r
}\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
NvmePassThru (\r
- IN EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI *This,\r
- IN UINT32 NamespaceId,\r
- IN OUT EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET *Packet\r
+ IN EDKII_PEI_NVM_EXPRESS_PASS_THRU_PPI *This,\r
+ IN UINT32 NamespaceId,\r
+ IN OUT EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET *Packet\r
)\r
{\r
- PEI_NVME_CONTROLLER_PRIVATE_DATA *Private;\r
- EFI_STATUS Status;\r
+ PEI_NVME_CONTROLLER_PRIVATE_DATA *Private;\r
+ EFI_STATUS Status;\r
\r
- if (This == NULL || Packet == NULL) {\r
+ if ((This == NULL) || (Packet == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// Check NamespaceId is valid or not.\r
//\r
if ((NamespaceId > Private->ControllerData->Nn) &&\r
- (NamespaceId != (UINT32) -1)) {\r
+ (NamespaceId != (UINT32)-1))\r
+ {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
);\r
\r
return Status;\r
-\r
}\r
-\r