// specific addresses.\r
//\r
if ((Sq->Opc & (BIT0 | BIT1)) != 0) {\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
MapOp = EdkiiIoMmuOperationBusMasterWrite;\r
}\r
\r
- MapLength = Packet->TransferLength;\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
- goto Exit;\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
+ 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
+ goto Exit;\r
+ }\r
\r
- Sq->Prp[0] = PhyAddr;\r
+ Sq->Prp[0] = PhyAddr;\r
+ }\r
\r
if((Packet->MetadataLength != 0) && (Packet->MetadataBuffer != NULL)) {\r
MapLength = Packet->MetadataLength;\r