mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
iommu/amd: Move and introduce new IRTE-related unions and structures
Move existing unions and structs for accessing/managing IRTE to a proper header file. This is mainly to simplify variable declarations in subsequent patches. Besides, this patch also introduces new struct irte_ga for the new 128-bit IRTE format. Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
3928aa3f57
commit
a38180bd36
2 changed files with 76 additions and 28 deletions
|
@ -3511,34 +3511,6 @@ EXPORT_SYMBOL(amd_iommu_device_info);
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
union irte {
|
|
||||||
u32 val;
|
|
||||||
struct {
|
|
||||||
u32 valid : 1,
|
|
||||||
no_fault : 1,
|
|
||||||
int_type : 3,
|
|
||||||
rq_eoi : 1,
|
|
||||||
dm : 1,
|
|
||||||
rsvd_1 : 1,
|
|
||||||
destination : 8,
|
|
||||||
vector : 8,
|
|
||||||
rsvd_2 : 8;
|
|
||||||
} fields;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct irq_2_irte {
|
|
||||||
u16 devid; /* Device ID for IRTE table */
|
|
||||||
u16 index; /* Index into IRTE table*/
|
|
||||||
};
|
|
||||||
|
|
||||||
struct amd_ir_data {
|
|
||||||
struct irq_2_irte irq_2_irte;
|
|
||||||
union irte irte_entry;
|
|
||||||
union {
|
|
||||||
struct msi_msg msi_entry;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct irq_chip amd_ir_chip;
|
static struct irq_chip amd_ir_chip;
|
||||||
|
|
||||||
#define DTE_IRQ_PHYS_ADDR_MASK (((1ULL << 45)-1) << 6)
|
#define DTE_IRQ_PHYS_ADDR_MASK (((1ULL << 45)-1) << 6)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/mutex.h>
|
#include <linux/mutex.h>
|
||||||
|
#include <linux/msi.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
|
@ -705,4 +706,79 @@ enum amd_iommu_intr_mode_type {
|
||||||
x == AMD_IOMMU_GUEST_IR_LEGACY_GA)
|
x == AMD_IOMMU_GUEST_IR_LEGACY_GA)
|
||||||
|
|
||||||
#define AMD_IOMMU_GUEST_IR_VAPIC(x) (x == AMD_IOMMU_GUEST_IR_VAPIC)
|
#define AMD_IOMMU_GUEST_IR_VAPIC(x) (x == AMD_IOMMU_GUEST_IR_VAPIC)
|
||||||
|
|
||||||
|
union irte {
|
||||||
|
u32 val;
|
||||||
|
struct {
|
||||||
|
u32 valid : 1,
|
||||||
|
no_fault : 1,
|
||||||
|
int_type : 3,
|
||||||
|
rq_eoi : 1,
|
||||||
|
dm : 1,
|
||||||
|
rsvd_1 : 1,
|
||||||
|
destination : 8,
|
||||||
|
vector : 8,
|
||||||
|
rsvd_2 : 8;
|
||||||
|
} fields;
|
||||||
|
};
|
||||||
|
|
||||||
|
union irte_ga_lo {
|
||||||
|
u64 val;
|
||||||
|
|
||||||
|
/* For int remapping */
|
||||||
|
struct {
|
||||||
|
u64 valid : 1,
|
||||||
|
no_fault : 1,
|
||||||
|
/* ------ */
|
||||||
|
int_type : 3,
|
||||||
|
rq_eoi : 1,
|
||||||
|
dm : 1,
|
||||||
|
/* ------ */
|
||||||
|
guest_mode : 1,
|
||||||
|
destination : 8,
|
||||||
|
rsvd : 48;
|
||||||
|
} fields_remap;
|
||||||
|
|
||||||
|
/* For guest vAPIC */
|
||||||
|
struct {
|
||||||
|
u64 valid : 1,
|
||||||
|
no_fault : 1,
|
||||||
|
/* ------ */
|
||||||
|
ga_log_intr : 1,
|
||||||
|
rsvd1 : 3,
|
||||||
|
is_run : 1,
|
||||||
|
/* ------ */
|
||||||
|
guest_mode : 1,
|
||||||
|
destination : 8,
|
||||||
|
rsvd2 : 16,
|
||||||
|
ga_tag : 32;
|
||||||
|
} fields_vapic;
|
||||||
|
};
|
||||||
|
|
||||||
|
union irte_ga_hi {
|
||||||
|
u64 val;
|
||||||
|
struct {
|
||||||
|
u64 vector : 8,
|
||||||
|
rsvd_1 : 4,
|
||||||
|
ga_root_ptr : 40,
|
||||||
|
rsvd_2 : 12;
|
||||||
|
} fields;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct irte_ga {
|
||||||
|
union irte_ga_lo lo;
|
||||||
|
union irte_ga_hi hi;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct irq_2_irte {
|
||||||
|
u16 devid; /* Device ID for IRTE table */
|
||||||
|
u16 index; /* Index into IRTE table*/
|
||||||
|
};
|
||||||
|
|
||||||
|
struct amd_ir_data {
|
||||||
|
struct irq_2_irte irq_2_irte;
|
||||||
|
union irte irte_entry;
|
||||||
|
struct msi_msg msi_entry;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* _ASM_X86_AMD_IOMMU_TYPES_H */
|
#endif /* _ASM_X86_AMD_IOMMU_TYPES_H */
|
||||||
|
|
Loading…
Reference in a new issue