xref: /OK3568_Linux_fs/kernel/arch/x86/include/asm/iommu.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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*4882a593Smuzhiyun arch_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