\r
**/\r
\r
-#include <PiDxe.h>\r
-\r
-#include <Protocol/IoMmu.h>\r
-#include <Protocol/PciIo.h>\r
-\r
-#include <Library/IoLib.h>\r
-#include <Library/BaseLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-\r
#include "DmaProtection.h"\r
\r
/**\r
\r
@retval EFI_SUCCESS The requested memory pages were allocated.\r
@retval EFI_UNSUPPORTED Attributes is unsupported. The only legal attribute bits are\r
- MEMORY_WRITE_COMBINE and MEMORY_CACHED.\r
+ MEMORY_WRITE_COMBINE, MEMORY_CACHED and DUAL_ADDRESS_CYCLE.\r
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.\r
@retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.\r
\r
EFI_STATUS Status;\r
EFI_PHYSICAL_ADDRESS DeviceAddress;\r
UINTN NumberOfPages;\r
+ EFI_TPL OriginalTpl;\r
+\r
+ OriginalTpl = gBS->RaiseTPL (VTD_TPL_LEVEL);\r
\r
Status = GetDeviceInfoFromMapping (Mapping, &DeviceAddress, &NumberOfPages);\r
- if (EFI_ERROR(Status)) {\r
- return Status;\r
+ if (!EFI_ERROR(Status)) {\r
+ Status = VTdSetAttribute (\r
+ This,\r
+ DeviceHandle,\r
+ DeviceAddress,\r
+ EFI_PAGES_TO_SIZE(NumberOfPages),\r
+ IoMmuAccess\r
+ );\r
}\r
- Status = VTdSetAttribute (\r
- This,\r
- DeviceHandle,\r
- DeviceAddress,\r
- EFI_PAGES_TO_SIZE(NumberOfPages),\r
- IoMmuAccess\r
- );\r
+\r
+ gBS->RestoreTPL (OriginalTpl);\r
\r
return Status;\r
}\r