#ifndef _ASM_X86_AMD_IOMMU_TYPES_H
#define _ASM_X86_AMD_IOMMU_TYPES_H
#include <linux/bitfield.h>
#include <linux/iommu.h>
#include <linux/types.h>
#include <linux/mmu_notifier.h>
#include <linux/mutex.h>
#include <linux/msi.h>
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/pci.h>
#include <linux/irqreturn.h>
#include <linux/io-pgtable.h>
#define MAX_IOMMUS …
#define DEV_TABLE_ENTRY_SIZE …
#define ALIAS_TABLE_ENTRY_SIZE …
#define RLOOKUP_TABLE_ENTRY_SIZE …
#define MMIO_CAP_HDR_OFFSET …
#define MMIO_RANGE_OFFSET …
#define MMIO_MISC_OFFSET …
#define MMIO_RANGE_LD_MASK …
#define MMIO_RANGE_FD_MASK …
#define MMIO_RANGE_BUS_MASK …
#define MMIO_RANGE_LD_SHIFT …
#define MMIO_RANGE_FD_SHIFT …
#define MMIO_RANGE_BUS_SHIFT …
#define MMIO_GET_LD(x) …
#define MMIO_GET_FD(x) …
#define MMIO_GET_BUS(x) …
#define MMIO_MSI_NUM(x) …
#define MMIO_EXCL_ENABLE_MASK …
#define MMIO_EXCL_ALLOW_MASK …
#define MMIO_DEV_TABLE_OFFSET …
#define MMIO_CMD_BUF_OFFSET …
#define MMIO_EVT_BUF_OFFSET …
#define MMIO_CONTROL_OFFSET …
#define MMIO_EXCL_BASE_OFFSET …
#define MMIO_EXCL_LIMIT_OFFSET …
#define MMIO_EXT_FEATURES …
#define MMIO_PPR_LOG_OFFSET …
#define MMIO_GA_LOG_BASE_OFFSET …
#define MMIO_GA_LOG_TAIL_OFFSET …
#define MMIO_MSI_ADDR_LO_OFFSET …
#define MMIO_MSI_ADDR_HI_OFFSET …
#define MMIO_MSI_DATA_OFFSET …
#define MMIO_INTCAPXT_EVT_OFFSET …
#define MMIO_INTCAPXT_PPR_OFFSET …
#define MMIO_INTCAPXT_GALOG_OFFSET …
#define MMIO_EXT_FEATURES2 …
#define MMIO_CMD_HEAD_OFFSET …
#define MMIO_CMD_TAIL_OFFSET …
#define MMIO_EVT_HEAD_OFFSET …
#define MMIO_EVT_TAIL_OFFSET …
#define MMIO_STATUS_OFFSET …
#define MMIO_PPR_HEAD_OFFSET …
#define MMIO_PPR_TAIL_OFFSET …
#define MMIO_GA_HEAD_OFFSET …
#define MMIO_GA_TAIL_OFFSET …
#define MMIO_CNTR_CONF_OFFSET …
#define MMIO_CNTR_REG_OFFSET …
#define MMIO_REG_END_OFFSET …
#define FEATURE_PREFETCH …
#define FEATURE_PPR …
#define FEATURE_X2APIC …
#define FEATURE_NX …
#define FEATURE_GT …
#define FEATURE_IA …
#define FEATURE_GA …
#define FEATURE_HE …
#define FEATURE_PC …
#define FEATURE_GATS …
#define FEATURE_GLX …
#define FEATURE_GAM_VAPIC …
#define FEATURE_PASMAX …
#define FEATURE_GIOSUP …
#define FEATURE_HASUP …
#define FEATURE_EPHSUP …
#define FEATURE_HDSUP …
#define FEATURE_SNP …
#define FEATURE_SNPAVICSUP …
#define FEATURE_SNPAVICSUP_GAM(x) …
#define PASID_MASK …
#define MMIO_STATUS_EVT_OVERFLOW_MASK …
#define MMIO_STATUS_EVT_INT_MASK …
#define MMIO_STATUS_COM_WAIT_INT_MASK …
#define MMIO_STATUS_EVT_RUN_MASK …
#define MMIO_STATUS_PPR_OVERFLOW_MASK …
#define MMIO_STATUS_PPR_INT_MASK …
#define MMIO_STATUS_PPR_RUN_MASK …
#define MMIO_STATUS_GALOG_RUN_MASK …
#define MMIO_STATUS_GALOG_OVERFLOW_MASK …
#define MMIO_STATUS_GALOG_INT_MASK …
#define EVENT_ENTRY_SIZE …
#define EVENT_TYPE_SHIFT …
#define EVENT_TYPE_MASK …
#define EVENT_TYPE_ILL_DEV …
#define EVENT_TYPE_IO_FAULT …
#define EVENT_TYPE_DEV_TAB_ERR …
#define EVENT_TYPE_PAGE_TAB_ERR …
#define EVENT_TYPE_ILL_CMD …
#define EVENT_TYPE_CMD_HARD_ERR …
#define EVENT_TYPE_IOTLB_INV_TO …
#define EVENT_TYPE_INV_DEV_REQ …
#define EVENT_TYPE_INV_PPR_REQ …
#define EVENT_TYPE_RMP_FAULT …
#define EVENT_TYPE_RMP_HW_ERR …
#define EVENT_DEVID_MASK …
#define EVENT_DEVID_SHIFT …
#define EVENT_DOMID_MASK_LO …
#define EVENT_DOMID_MASK_HI …
#define EVENT_FLAGS_MASK …
#define EVENT_FLAGS_SHIFT …
#define EVENT_FLAG_RW …
#define EVENT_FLAG_I …
#define CONTROL_IOMMU_EN …
#define CONTROL_HT_TUN_EN …
#define CONTROL_EVT_LOG_EN …
#define CONTROL_EVT_INT_EN …
#define CONTROL_COMWAIT_EN …
#define CONTROL_INV_TIMEOUT …
#define CONTROL_PASSPW_EN …
#define CONTROL_RESPASSPW_EN …
#define CONTROL_COHERENT_EN …
#define CONTROL_ISOC_EN …
#define CONTROL_CMDBUF_EN …
#define CONTROL_PPRLOG_EN …
#define CONTROL_PPRINT_EN …
#define CONTROL_PPR_EN …
#define CONTROL_GT_EN …
#define CONTROL_GA_EN …
#define CONTROL_GAM_EN …
#define CONTROL_GALOG_EN …
#define CONTROL_GAINT_EN …
#define CONTROL_XT_EN …
#define CONTROL_INTCAPXT_EN …
#define CONTROL_IRTCACHEDIS …
#define CONTROL_SNPAVIC_EN …
#define CTRL_INV_TO_MASK …
#define CTRL_INV_TO_NONE …
#define CTRL_INV_TO_1MS …
#define CTRL_INV_TO_10MS …
#define CTRL_INV_TO_100MS …
#define CTRL_INV_TO_1S …
#define CTRL_INV_TO_10S …
#define CTRL_INV_TO_100S …
#define CMD_COMPL_WAIT …
#define CMD_INV_DEV_ENTRY …
#define CMD_INV_IOMMU_PAGES …
#define CMD_INV_IOTLB_PAGES …
#define CMD_INV_IRT …
#define CMD_COMPLETE_PPR …
#define CMD_INV_ALL …
#define CMD_COMPL_WAIT_STORE_MASK …
#define CMD_COMPL_WAIT_INT_MASK …
#define CMD_INV_IOMMU_PAGES_SIZE_MASK …
#define CMD_INV_IOMMU_PAGES_PDE_MASK …
#define CMD_INV_IOMMU_PAGES_GN_MASK …
#define PPR_STATUS_MASK …
#define PPR_STATUS_SHIFT …
#define CMD_INV_IOMMU_ALL_PAGES_ADDRESS …
#define DEV_ENTRY_VALID …
#define DEV_ENTRY_TRANSLATION …
#define DEV_ENTRY_HAD …
#define DEV_ENTRY_PPR …
#define DEV_ENTRY_IR …
#define DEV_ENTRY_IW …
#define DEV_ENTRY_NO_PAGE_FAULT …
#define DEV_ENTRY_EX …
#define DEV_ENTRY_SYSMGT1 …
#define DEV_ENTRY_SYSMGT2 …
#define DEV_ENTRY_IRQ_TBL_EN …
#define DEV_ENTRY_INIT_PASS …
#define DEV_ENTRY_EINT_PASS …
#define DEV_ENTRY_NMI_PASS …
#define DEV_ENTRY_LINT0_PASS …
#define DEV_ENTRY_LINT1_PASS …
#define DEV_ENTRY_MODE_MASK …
#define DEV_ENTRY_MODE_SHIFT …
#define MAX_DEV_TABLE_ENTRIES …
#define CMD_BUFFER_SIZE …
#define CMD_BUFFER_UNINITIALIZED …
#define CMD_BUFFER_ENTRIES …
#define MMIO_CMD_SIZE_SHIFT …
#define MMIO_CMD_SIZE_512 …
#define EVT_BUFFER_SIZE …
#define EVT_LEN_MASK …
#define PPR_LOG_ENTRIES …
#define PPR_LOG_SIZE_SHIFT …
#define PPR_LOG_SIZE_512 …
#define PPR_ENTRY_SIZE …
#define PPR_LOG_SIZE …
#define PPR_FLAG_EXEC …
#define PPR_FLAG_READ …
#define PPR_FLAG_WRITE …
#define PPR_FLAG_US …
#define PPR_FLAG_RVSD …
#define PPR_FLAG_GN …
#define PPR_REQ_TYPE(x) …
#define PPR_FLAGS(x) …
#define PPR_DEVID(x) …
#define PPR_TAG(x) …
#define PPR_PASID1(x) …
#define PPR_PASID2(x) …
#define PPR_PASID(x) …
#define PPR_REQ_FAULT …
#define GA_LOG_ENTRIES …
#define GA_LOG_SIZE_SHIFT …
#define GA_LOG_SIZE_512 …
#define GA_ENTRY_SIZE …
#define GA_LOG_SIZE …
#define GA_TAG(x) …
#define GA_DEVID(x) …
#define GA_REQ_TYPE(x) …
#define GA_GUEST_NR …
#define IOMMU_IN_ADDR_BIT_SIZE …
#define IOMMU_OUT_ADDR_BIT_SIZE …
#define AMD_IOMMU_PGSIZES …
#define AMD_IOMMU_PGSIZES_4K …
#define AMD_IOMMU_PGSIZES_V2 …
#define DTE_IRQ_PHYS_ADDR_MASK …
#define DTE_IRQ_REMAP_INTCTL_MASK …
#define DTE_IRQ_REMAP_INTCTL …
#define DTE_IRQ_REMAP_ENABLE …
#define DTE_INTTAB_ALIGNMENT …
#define DTE_INTTABLEN_VALUE …
#define DTE_INTTABLEN …
#define DTE_INTTABLEN_MASK …
#define MAX_IRQS_PER_TABLE …
#define PAGE_MODE_NONE …
#define PAGE_MODE_1_LEVEL …
#define PAGE_MODE_2_LEVEL …
#define PAGE_MODE_3_LEVEL …
#define PAGE_MODE_4_LEVEL …
#define PAGE_MODE_5_LEVEL …
#define PAGE_MODE_6_LEVEL …
#define PAGE_MODE_7_LEVEL …
#define GUEST_PGTABLE_4_LEVEL …
#define GUEST_PGTABLE_5_LEVEL …
#define PM_LEVEL_SHIFT(x) …
#define PM_LEVEL_SIZE(x) …
#define PM_LEVEL_INDEX(x, a) …
#define PM_LEVEL_ENC(x) …
#define PM_LEVEL_PDE(x, a) …
#define PM_PTE_LEVEL(pte) …
#define PM_MAP_4k …
#define PM_ADDR_MASK …
#define PM_MAP_MASK(lvl) …
#define PM_ALIGNED(lvl, addr) …
#define PAGE_SIZE_LEVEL(pagesize) …
#define PAGE_SIZE_PTE_COUNT(pagesize) …
#define PAGE_SIZE_ALIGN(address, pagesize) …
#define PAGE_SIZE_PTE(address, pagesize) …
#define PTE_PAGE_SIZE(pte) …
#define PTE_LEVEL_PAGE_SIZE(level) …
#define IOMMU_PTE_HD_BIT …
#define IOMMU_PTE_PR …
#define IOMMU_PTE_HD …
#define IOMMU_PTE_U …
#define IOMMU_PTE_FC …
#define IOMMU_PTE_IR …
#define IOMMU_PTE_IW …
#define DTE_FLAG_V …
#define DTE_FLAG_TV …
#define DTE_FLAG_HAD …
#define DTE_FLAG_GIOV …
#define DTE_FLAG_GV …
#define DTE_GLX_SHIFT …
#define DTE_GLX_MASK …
#define DTE_FLAG_IR …
#define DTE_FLAG_IW …
#define DTE_FLAG_IOTLB …
#define DTE_FLAG_MASK …
#define DEV_DOMID_MASK …
#define DTE_GCR3_VAL_A(x) …
#define DTE_GCR3_VAL_B(x) …
#define DTE_GCR3_VAL_C(x) …
#define DTE_GCR3_SHIFT_A …
#define DTE_GCR3_SHIFT_B …
#define DTE_GCR3_SHIFT_C …
#define DTE_GPT_LEVEL_SHIFT …
#define GCR3_VALID …
#define IOMMU_PAGE_MASK …
#define IOMMU_PTE_PRESENT(pte) …
#define IOMMU_PTE_DIRTY(pte) …
#define IOMMU_PTE_PAGE(pte) …
#define IOMMU_PTE_MODE(pte) …
#define IOMMU_PROT_MASK …
#define IOMMU_PROT_IR …
#define IOMMU_PROT_IW …
#define IOMMU_UNITY_MAP_FLAG_EXCL_RANGE …
#define IOMMU_CAP_IOTLB …
#define IOMMU_CAP_NPCACHE …
#define IOMMU_CAP_EFR …
#define IOMMU_IVINFO_OFFSET …
#define IOMMU_IVINFO_EFRSUP …
#define IOMMU_IVINFO_DMA_REMAP …
#define IOMMU_FEAT_GASUP_SHIFT …
#define IOMMU_EFR_XTSUP_SHIFT …
#define IOMMU_EFR_GASUP_SHIFT …
#define IOMMU_EFR_MSICAPMMIOSUP_SHIFT …
#define MAX_DOMAIN_ID …
#define LOOP_TIMEOUT …
#define MMIO_STATUS_TIMEOUT …
extern bool amd_iommu_dump;
#define DUMP_printk(format, arg...) …
extern bool amd_iommu_np_cache;
extern bool amd_iommu_iotlb_sup;
struct irq_remap_table { … };
extern bool amd_iommu_irq_remap;
extern const struct iommu_ops amd_iommu_ops;
extern bool amdr_ivrs_remap_support;
extern struct kmem_cache *amd_iommu_irq_cache;
#define PCI_SBDF_TO_SEGID(sbdf) …
#define PCI_SBDF_TO_DEVID(sbdf) …
#define PCI_SEG_DEVID_TO_SBDF(seg, devid) …
#define for_each_pci_segment(pci_seg) …
#define for_each_pci_segment_safe(pci_seg, next) …
#define for_each_iommu(iommu) …
#define for_each_iommu_safe(iommu, next) …
#define for_each_pdom_dev_data(pdom_dev_data, pdom) …
#define for_each_pdom_dev_data_safe(pdom_dev_data, next, pdom) …
struct amd_iommu;
struct iommu_domain;
struct irq_domain;
struct amd_irte_ops;
#define AMD_IOMMU_FLAG_TRANS_PRE_ENABLED …
#define io_pgtable_to_data(x) …
#define io_pgtable_ops_to_data(x) …
#define io_pgtable_ops_to_domain(x) …
#define io_pgtable_cfg_to_data(x) …
struct gcr3_tbl_info { … };
struct amd_io_pgtable { … };
enum protection_domain_mode { … };
struct pdom_dev_data { … };
struct protection_domain { … };
struct amd_iommu_pci_seg { … };
struct amd_iommu { … };
static inline struct amd_iommu *dev_to_amd_iommu(struct device *dev)
{ … }
#define ACPIHID_UID_LEN …
#define ACPIHID_HID_LEN …
struct acpihid_map_entry { … };
struct devid_map { … };
#define AMD_IOMMU_DEVICE_FLAG_ATS_SUP …
#define AMD_IOMMU_DEVICE_FLAG_PRI_SUP …
#define AMD_IOMMU_DEVICE_FLAG_PASID_SUP …
#define AMD_IOMMU_DEVICE_FLAG_EXEC_SUP …
#define AMD_IOMMU_DEVICE_FLAG_PRIV_SUP …
struct iommu_dev_data { … };
extern struct list_head ioapic_map;
extern struct list_head hpet_map;
extern struct list_head acpihid_map;
extern struct list_head amd_iommu_pci_seg_list;
extern struct list_head amd_iommu_list;
extern struct amd_iommu *amd_iommus[MAX_IOMMUS];
struct dev_table_entry { … };
struct unity_map_entry { … };
extern unsigned amd_iommu_aperture_order;
extern unsigned long *amd_iommu_pd_alloc_bitmap;
extern bool amd_iommu_force_isolation;
extern int amd_iommu_max_glx_val;
extern u64 amd_iommu_efr;
extern u64 amd_iommu_efr2;
static inline int get_ioapic_devid(int id)
{ … }
static inline int get_hpet_devid(int id)
{ … }
enum amd_iommu_intr_mode_type { … };
#define AMD_IOMMU_GUEST_IR_GA(x) …
#define AMD_IOMMU_GUEST_IR_VAPIC(x) …
irte;
#define APICID_TO_IRTE_DEST_LO(x) …
#define APICID_TO_IRTE_DEST_HI(x) …
irte_ga_lo;
irte_ga_hi;
struct irte_ga { … };
struct irq_2_irte { … };
struct amd_ir_data { … };
struct amd_irte_ops { … };
#ifdef CONFIG_IRQ_REMAP
extern struct amd_irte_ops irte_32_ops;
extern struct amd_irte_ops irte_128_ops;
#endif
#endif