extern bool_t iommu_debug;
extern bool_t amd_iommu_perdev_intremap;
+#define IOMMU_PAGE_SIZE(sz) (1UL << PAGE_SHIFT_##sz)
+#define IOMMU_PAGE_MASK(sz) (~(u64)0 << PAGE_SHIFT_##sz)
+#define IOMMU_PAGE_ALIGN(sz, addr) (((addr) + ~PAGE_MASK_##sz) & PAGE_MASK_##sz)
+
#define PAGE_SHIFT_4K (12)
-#define PAGE_SIZE_4K (1UL << PAGE_SHIFT_4K)
-#define PAGE_MASK_4K (((u64)-1) << PAGE_SHIFT_4K)
-#define PAGE_ALIGN_4K(addr) (((addr) + PAGE_SIZE_4K - 1) & PAGE_MASK_4K)
+#define PAGE_SIZE_4K IOMMU_PAGE_SIZE(4K)
+#define PAGE_MASK_4K IOMMU_PAGE_MASK(4K)
+#define PAGE_ALIGN_4K(addr) IOMMU_PAGE_ALIGN(4K, addr)
+
+#define PAGE_SHIFT_64K (16)
+#define PAGE_SIZE_64K IOMMU_PAGE_SIZE(64K)
+#define PAGE_MASK_64K IOMMU_PAGE_MASK(64K)
+#define PAGE_ALIGN_64K(addr) IOMMU_PAGE_ALIGN(64K, addr)
int iommu_setup(void);