EFI_STATUS Status;\r
NVME_ADMIN_CRIOCQ CrIoCq;\r
UINT32 Index;\r
+ UINT16 QueueSize;\r
+\r
+ Status = EFI_SUCCESS;\r
\r
for (Index = 1; Index < NVME_MAX_QUEUES; Index++) {\r
ZeroMem (&CommandPacket, sizeof(EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET));\r
CommandPacket.CommandTimeout = NVME_GENERIC_TIMEOUT;\r
CommandPacket.QueueType = NVME_ADMIN_QUEUE;\r
\r
+ if (Index == 1) {\r
+ QueueSize = NVME_CCQ_SIZE;\r
+ } else {\r
+ if (Private->Cap.Mqes > NVME_ASYNC_CCQ_SIZE) {\r
+ QueueSize = NVME_ASYNC_CCQ_SIZE;\r
+ } else {\r
+ QueueSize = Private->Cap.Mqes;\r
+ }\r
+ }\r
+\r
CrIoCq.Qid = Index;\r
- CrIoCq.Qsize = (Index == 1) ? NVME_CCQ_SIZE : NVME_ASYNC_CCQ_SIZE;\r
+ CrIoCq.Qsize = QueueSize;\r
CrIoCq.Pc = 1;\r
CopyMem (&CommandPacket.NvmeCmd->Cdw10, &CrIoCq, sizeof (NVME_ADMIN_CRIOCQ));\r
CommandPacket.NvmeCmd->Flags = CDW10_VALID | CDW11_VALID;\r
EFI_STATUS Status;\r
NVME_ADMIN_CRIOSQ CrIoSq;\r
UINT32 Index;\r
+ UINT16 QueueSize;\r
+\r
+ Status = EFI_SUCCESS;\r
\r
for (Index = 1; Index < NVME_MAX_QUEUES; Index++) {\r
ZeroMem (&CommandPacket, sizeof(EFI_NVM_EXPRESS_PASS_THRU_COMMAND_PACKET));\r
CommandPacket.CommandTimeout = NVME_GENERIC_TIMEOUT;\r
CommandPacket.QueueType = NVME_ADMIN_QUEUE;\r
\r
+ if (Index == 1) {\r
+ QueueSize = NVME_CSQ_SIZE;\r
+ } else {\r
+ if (Private->Cap.Mqes > NVME_ASYNC_CSQ_SIZE) {\r
+ QueueSize = NVME_ASYNC_CSQ_SIZE;\r
+ } else {\r
+ QueueSize = Private->Cap.Mqes;\r
+ }\r
+ }\r
+\r
CrIoSq.Qid = Index;\r
- CrIoSq.Qsize = (Index == 1) ? NVME_CSQ_SIZE : NVME_ASYNC_CSQ_SIZE;\r
+ CrIoSq.Qsize = QueueSize;\r
CrIoSq.Pc = 1;\r
CrIoSq.Cqid = Index;\r
CrIoSq.Qprio = 0;\r
return Status;\r
}\r
\r
+ //\r
+ // Enable 64-bit DMA support in the PCI layer.\r
+ //\r
+ Status = PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationEnable,\r
+ EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE,\r
+ NULL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((EFI_D_WARN, "NvmeControllerInit: failed to enable 64-bit DMA (%r)\n", Status));\r
+ }\r
+\r
//\r
// Read the Controller Capabilities register and verify that the NVM command set is supported\r
//\r