1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _ASM_X86_IOMMU_H 3*4882a593Smuzhiyun #define _ASM_X86_IOMMU_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/acpi.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include <asm/e820/api.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun extern int force_iommu, no_iommu; 10*4882a593Smuzhiyun extern int iommu_detected; 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /* 10 seconds */ 13*4882a593Smuzhiyun #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun static inline int __init arch_rmrr_sanity_check(struct acpi_dmar_reserved_memory * rmrr)16*4882a593Smuzhiyunarch_rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr) 17*4882a593Smuzhiyun { 18*4882a593Smuzhiyun u64 start = rmrr->base_address; 19*4882a593Smuzhiyun u64 end = rmrr->end_address + 1; 20*4882a593Smuzhiyun int entry_type; 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun entry_type = e820__get_entry_type(start, end); 23*4882a593Smuzhiyun if (entry_type == E820_TYPE_RESERVED || entry_type == E820_TYPE_NVS) 24*4882a593Smuzhiyun return 0; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun pr_err(FW_BUG "No firmware reserved region can cover this RMRR [%#018Lx-%#018Lx], contact BIOS vendor for fixes\n", 27*4882a593Smuzhiyun start, end - 1); 28*4882a593Smuzhiyun return -EINVAL; 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #endif /* _ASM_X86_IOMMU_H */ 32