162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _ASM_X86_IOMMU_H 362306a36Sopenharmony_ci#define _ASM_X86_IOMMU_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/acpi.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <asm/e820/api.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciextern int force_iommu, no_iommu; 1062306a36Sopenharmony_ciextern int iommu_detected; 1162306a36Sopenharmony_ciextern int iommu_merge; 1262306a36Sopenharmony_ciextern int panic_on_overflow; 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#ifdef CONFIG_SWIOTLB 1562306a36Sopenharmony_ciextern bool x86_swiotlb_enable; 1662306a36Sopenharmony_ci#else 1762306a36Sopenharmony_ci#define x86_swiotlb_enable false 1862306a36Sopenharmony_ci#endif 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* 10 seconds */ 2162306a36Sopenharmony_ci#define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistatic inline int __init 2462306a36Sopenharmony_ciarch_rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci u64 start = rmrr->base_address; 2762306a36Sopenharmony_ci u64 end = rmrr->end_address + 1; 2862306a36Sopenharmony_ci int entry_type; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci entry_type = e820__get_entry_type(start, end); 3162306a36Sopenharmony_ci if (entry_type == E820_TYPE_RESERVED || entry_type == E820_TYPE_NVS) 3262306a36Sopenharmony_ci return 0; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci pr_err(FW_BUG "No firmware reserved region can cover this RMRR [%#018Lx-%#018Lx], contact BIOS vendor for fixes\n", 3562306a36Sopenharmony_ci start, end - 1); 3662306a36Sopenharmony_ci return -EINVAL; 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci#endif /* _ASM_X86_IOMMU_H */ 40