QueueId = 2;\r
Cq = Private->CqBuffer[QueueId] + Private->CqHdbl[QueueId].Cqh;\r
HasNewItem = FALSE;\r
+ PciIo = Private->PciIo;\r
\r
//\r
// Submit asynchronous subtasks to the NVMe Submission Queue\r
sizeof(EFI_NVM_EXPRESS_COMPLETION)\r
);\r
\r
+ //\r
+ // Free the resources allocated before cmd submission\r
+ //\r
+ if (AsyncRequest->MapData != NULL) {\r
+ PciIo->Unmap (PciIo, AsyncRequest->MapData);\r
+ }\r
+ if (AsyncRequest->MapMeta != NULL) {\r
+ PciIo->Unmap (PciIo, AsyncRequest->MapMeta);\r
+ }\r
+ if (AsyncRequest->MapPrpList != NULL) {\r
+ PciIo->Unmap (PciIo, AsyncRequest->MapPrpList);\r
+ }\r
+ if (AsyncRequest->PrpListHost != NULL) {\r
+ PciIo->FreeBuffer (\r
+ PciIo,\r
+ AsyncRequest->PrpListNo,\r
+ AsyncRequest->PrpListHost\r
+ );\r
+ }\r
+\r
RemoveEntryList (Link);\r
gBS->SignalEvent (AsyncRequest->CallerEvent);\r
FreePool (AsyncRequest);\r
}\r
\r
if (HasNewItem) {\r
- PciIo = Private->PciIo;\r
Data = ReadUnaligned32 ((UINT32*)&Private->CqHdbl[QueueId]);\r
PciIo->Mem.Write (\r
PciIo,\r
AsyncRequest->Packet = Packet;\r
AsyncRequest->CommandId = Sq->Cid;\r
AsyncRequest->CallerEvent = Event;\r
+ AsyncRequest->MapData = MapData;\r
+ AsyncRequest->MapMeta = MapMeta;\r
+ AsyncRequest->MapPrpList = MapPrpList;\r
+ AsyncRequest->PrpListNo = PrpListNo;\r
+ AsyncRequest->PrpListHost = PrpListHost;\r
\r
OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
InsertTailList (&Private->AsyncPassThruQueue, &AsyncRequest->Link);\r