//\r
if (((Sq->Opc & (BIT0 | BIT1)) != 0) &&\r
!((Packet->QueueType == NVME_ADMIN_QUEUE) && ((Sq->Opc == NVME_ADMIN_CRIOCQ_CMD) || (Sq->Opc == NVME_ADMIN_CRIOSQ_CMD)))) {\r
- if ((Packet->TransferLength == 0) || (Packet->TransferBuffer == NULL)) {\r
+ if (((Packet->TransferLength != 0) && (Packet->TransferBuffer == NULL)) ||\r
+ ((Packet->TransferLength == 0) && (Packet->TransferBuffer != NULL))) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
Flag = EfiPciIoOperationBusMasterWrite;\r
}\r
\r
- MapLength = Packet->TransferLength;\r
- Status = PciIo->Map (\r
- PciIo,\r
- Flag,\r
- Packet->TransferBuffer,\r
- &MapLength,\r
- &PhyAddr,\r
- &MapData\r
- );\r
- if (EFI_ERROR (Status) || (Packet->TransferLength != MapLength)) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
+ if ((Packet->TransferLength != 0) && (Packet->TransferBuffer != NULL)) {\r
+ MapLength = Packet->TransferLength;\r
+ Status = PciIo->Map (\r
+ PciIo,\r
+ Flag,\r
+ Packet->TransferBuffer,\r
+ &MapLength,\r
+ &PhyAddr,\r
+ &MapData\r
+ );\r
+ if (EFI_ERROR (Status) || (Packet->TransferLength != MapLength)) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
\r
- Sq->Prp[0] = PhyAddr;\r
- Sq->Prp[1] = 0;\r
+ Sq->Prp[0] = PhyAddr;\r
+ Sq->Prp[1] = 0;\r
+ }\r
\r
if((Packet->MetadataLength != 0) && (Packet->MetadataBuffer != NULL)) {\r
MapLength = Packet->MetadataLength;\r