#define __DMA_ACCESS_LIB_H__\r
\r
typedef struct {\r
+ EFI_ACPI_DMAR_HEADER *AcpiDmarTable;\r
+ UINT64 EngineMask;\r
UINT8 HostAddressWidth;\r
UINTN VTdEngineCount;\r
UINT64 VTdEngineAddress[1];\r
/**\r
Set DMA protected region.\r
\r
+ @param VTdInfo The VTd engine context information.\r
@param EngineMask The mask of the VTd engine to be accessed.\r
@param LowMemoryBase The protected low memory region base.\r
@param LowMemoryLength The protected low memory region length.\r
**/\r
EFI_STATUS\r
SetDmaProtectedRange (\r
+ IN VTD_INFO *VTdInfo,\r
IN UINT64 EngineMask,\r
IN UINT32 LowMemoryBase,\r
IN UINT32 LowMemoryLength,\r
/**\r
Diable DMA protection.\r
\r
+ @param VTdInfo The VTd engine context information.\r
@param EngineMask The mask of the VTd engine to be accessed.\r
\r
@retval DMA protection is disabled.\r
**/\r
EFI_STATUS\r
DisableDmaProtection (\r
+ IN VTD_INFO *VTdInfo,\r
+ IN UINT64 EngineMask\r
+ );\r
+\r
+/**\r
+ Return if the DMA protection is enabled.\r
+\r
+ @param VTdInfo The VTd engine context information.\r
+ @param EngineMask The mask of the VTd engine to be accessed.\r
+\r
+ @retval TRUE DMA protection is enabled in at least one VTd engine.\r
+ @retval FALSE DMA protection is disabled in all VTd engines.\r
+**/\r
+UINT64\r
+GetDmaProtectionEnabledEngineMask (\r
+ IN VTD_INFO *VTdInfo,\r
IN UINT64 EngineMask\r
);\r
\r
/**\r
Get protected low memory alignment.\r
\r
+ @param VTdInfo The VTd engine context information.\r
@param EngineMask The mask of the VTd engine to be accessed.\r
\r
@return protected low memory alignment.\r
**/\r
UINT32\r
GetLowMemoryAlignment (\r
+ IN VTD_INFO *VTdInfo,\r
IN UINT64 EngineMask\r
);\r
\r
/**\r
Get protected high memory alignment.\r
\r
+ @param VTdInfo The VTd engine context information.\r
@param EngineMask The mask of the VTd engine to be accessed.\r
\r
@return protected high memory alignment.\r
**/\r
UINT64\r
GetHighMemoryAlignment (\r
+ IN VTD_INFO *VTdInfo,\r
+ IN UINT64 EngineMask\r
+ );\r
+\r
+/**\r
+ Enable VTd translation table protection.\r
+\r
+ @param VTdInfo The VTd engine context information.\r
+ @param EngineMask The mask of the VTd engine to be accessed.\r
+**/\r
+VOID\r
+EnableVTdTranslationProtection (\r
+ IN VTD_INFO *VTdInfo,\r
+ IN UINT64 EngineMask\r
+ );\r
+\r
+/**\r
+ Disable VTd translation table protection.\r
+\r
+ @param VTdInfo The VTd engine context information.\r
+ @param EngineMask The mask of the VTd engine to be accessed.\r
+**/\r
+VOID\r
+DisableVTdTranslationProtection (\r
+ IN VTD_INFO *VTdInfo,\r
IN UINT64 EngineMask\r
);\r
\r
+/**\r
+ Parse DMAR DRHD table.\r
+\r
+ @param[in] AcpiDmarTable DMAR ACPI table\r
+\r
+ @return EFI_SUCCESS The DMAR DRHD table is parsed.\r
+**/\r
+EFI_STATUS\r
+ParseDmarAcpiTableDrhd (\r
+ IN EFI_ACPI_DMAR_HEADER *AcpiDmarTable\r
+ );\r
+\r
+/**\r
+ Parse DMAR DRHD table.\r
+\r
+ @param VTdInfo The VTd engine context information.\r
+**/\r
+VOID\r
+ParseDmarAcpiTableRmrr (\r
+ IN VTD_INFO *VTdInfo\r
+ );\r
+\r
+/**\r
+ Dump DMAR ACPI table.\r
+\r
+ @param[in] Dmar DMAR ACPI table\r
+**/\r
+VOID\r
+DumpAcpiDMAR (\r
+ IN EFI_ACPI_DMAR_HEADER *Dmar\r
+ );\r
+\r
+/**\r
+ Get the highest memory.\r
+\r
+ @return the highest memory.\r
+**/\r
+UINT64\r
+GetTopMemory (\r
+ VOID\r
+ );\r
+\r
+extern EFI_GUID mVTdInfoGuid;\r
+\r
#endif\r
\r