#include <Library/MemoryAllocationLib.h>\r
\r
\r
+STATIC\r
+PHYSICAL_ADDRESS\r
+HostToDeviceAddress (\r
+ IN VOID *Address\r
+ )\r
+{\r
+ return (PHYSICAL_ADDRESS)(UINTN)Address + PcdGet64 (PcdDmaDeviceOffset);\r
+}\r
\r
/**\r
Provides the DMA controller-specific addresses needed to access system memory.\r
OUT VOID **Mapping\r
)\r
{\r
- *DeviceAddress = (PHYSICAL_ADDRESS)(UINTN)HostAddress;\r
+ if (HostAddress == NULL ||\r
+ NumberOfBytes == NULL ||\r
+ DeviceAddress == NULL ||\r
+ Mapping == NULL ) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ *DeviceAddress = HostToDeviceAddress (HostAddress);\r
*Mapping = NULL;\r
return EFI_SUCCESS;\r
}\r
//\r
if (MemoryType == EfiBootServicesData) {\r
*HostAddress = AllocateAlignedPages (Pages, Alignment);\r
- } else if (MemoryType != EfiRuntimeServicesData) {\r
+ } else if (MemoryType == EfiRuntimeServicesData) {\r
*HostAddress = AllocateAlignedRuntimePages (Pages, Alignment);\r
} else {\r
return EFI_INVALID_PARAMETER;\r