HV: vmx: convert hexadecimals used in bitops to unsigned

Signed-off-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
Junjie Mao 2018-06-19 18:32:16 +08:00 committed by lijinxia
parent 41a1035f9b
commit d705970eb2
5 changed files with 457 additions and 457 deletions

View File

@ -308,7 +308,7 @@ static int dm_emulate_mmio_pre(struct vcpu *vcpu, uint64_t exit_qual)
return status; return status;
vcpu->req.reqs.mmio_request.value = vcpu->mmio.value; vcpu->req.reqs.mmio_request.value = vcpu->mmio.value;
/* XXX: write access while EPT perm RX -> WP */ /* XXX: write access while EPT perm RX -> WP */
if ((exit_qual & 0x38) == 0x28) if ((exit_qual & 0x38UL) == 0x28UL)
vcpu->req.type = REQ_WP; vcpu->req.type = REQ_WP;
} }
@ -334,7 +334,7 @@ int ept_violation_vmexit_handler(struct vcpu *vcpu)
exit_qual = vcpu->arch_vcpu.exit_qualification; exit_qual = vcpu->arch_vcpu.exit_qualification;
/* Specify if read or write operation */ /* Specify if read or write operation */
if ((exit_qual & 0x2) != 0U) { if ((exit_qual & 0x2UL) != 0UL) {
/* Write operation */ /* Write operation */
mmio->read_write = HV_MEM_IO_WRITE; mmio->read_write = HV_MEM_IO_WRITE;

View File

@ -255,7 +255,7 @@ uint32_t get_cs_access_rights(void)
asm volatile ("movw %%cs, %%ax" : "=a" (sel_value)); asm volatile ("movw %%cs, %%ax" : "=a" (sel_value));
asm volatile ("lar %%eax, %%eax" : "=a" (usable_ar) : "a"(sel_value)); asm volatile ("lar %%eax, %%eax" : "=a" (usable_ar) : "a"(sel_value));
usable_ar = usable_ar >> 8; usable_ar = usable_ar >> 8;
usable_ar &= 0xf0ff; /* clear bits 11:8 */ usable_ar &= 0xf0ffU; /* clear bits 11:8 */
return usable_ar; return usable_ar;
} }
@ -620,8 +620,8 @@ static void init_guest_state(struct vcpu *vcpu)
value32 = gdtb.limit; value32 = gdtb.limit;
if (((gdtb.base >> 47) & 0x1) != 0U) if (((gdtb.base >> 47) & 0x1UL) != 0UL)
gdtb.base |= 0xffff000000000000ull; gdtb.base |= 0xffff000000000000UL;
base = gdtb.base; base = gdtb.base;
@ -655,8 +655,8 @@ static void init_guest_state(struct vcpu *vcpu)
/* Limit */ /* Limit */
limit = idtb.limit; limit = idtb.limit;
if (((idtb.base >> 47) & 0x1) != 0U) if (((idtb.base >> 47) & 0x1UL) != 0UL)
idtb.base |= 0xffff000000000000ull; idtb.base |= 0xffff000000000000UL;
/* Base */ /* Base */
base = idtb.base; base = idtb.base;
@ -953,8 +953,8 @@ static void init_host_state(__unused struct vcpu *vcpu)
asm volatile ("sgdt %0"::"m" (gdtb)); asm volatile ("sgdt %0"::"m" (gdtb));
value32 = gdtb.limit; value32 = gdtb.limit;
if (((gdtb.base >> 47) & 0x1) != 0U) if (((gdtb.base >> 47) & 0x1UL) != 0UL)
gdtb.base |= 0xffff000000000000ull; gdtb.base |= 0xffff000000000000UL;
/* Set up the guest and host GDTB base fields with current GDTB base */ /* Set up the guest and host GDTB base fields with current GDTB base */
field = VMX_HOST_GDTR_BASE; field = VMX_HOST_GDTR_BASE;
@ -963,17 +963,17 @@ static void init_host_state(__unused struct vcpu *vcpu)
/* TODO: Should guest TR point to host TR ? */ /* TODO: Should guest TR point to host TR ? */
trbase = gdtb.base + tr_sel; trbase = gdtb.base + tr_sel;
if (((trbase >> 47) & 0x1) != 0U) if (((trbase >> 47) & 0x1UL) != 0UL)
trbase |= 0xffff000000000000ull; trbase |= 0xffff000000000000UL;
/* SS segment override */ /* SS segment override */
asm volatile ("mov %0,%%rax\n" asm volatile ("mov %0,%%rax\n"
".byte 0x36\n" ".byte 0x36\n"
"movq (%%rax),%%rax\n":"=a" (trbase_lo):"0"(trbase) "movq (%%rax),%%rax\n":"=a" (trbase_lo):"0"(trbase)
); );
realtrbase = ((trbase_lo >> 16) & (0x0ffff)) | realtrbase = ((trbase_lo >> 16) & (0x0ffffUL)) |
(((trbase_lo >> 32) & 0x000000ff) << 16) | (((trbase_lo >> 32) & 0x000000ffUL) << 16) |
(((trbase_lo >> 56) & 0xff) << 24); (((trbase_lo >> 56) & 0xffUL) << 24);
/* SS segment override for upper32 bits of base in ia32e mode */ /* SS segment override for upper32 bits of base in ia32e mode */
asm volatile ("mov %0,%%rax\n" asm volatile ("mov %0,%%rax\n"
@ -989,8 +989,8 @@ static void init_host_state(__unused struct vcpu *vcpu)
/* Obtain the current interrupt descriptor table base */ /* Obtain the current interrupt descriptor table base */
asm volatile ("sidt %0"::"m" (idtb)); asm volatile ("sidt %0"::"m" (idtb));
/* base */ /* base */
if (((idtb.base >> 47) & 0x1) != 0U) if (((idtb.base >> 47) & 0x1UL) != 0UL)
idtb.base |= 0xffff000000000000ull; idtb.base |= 0xffff000000000000UL;
field = VMX_HOST_IDTR_BASE; field = VMX_HOST_IDTR_BASE;
exec_vmwrite(field, idtb.base); exec_vmwrite(field, idtb.base);
@ -1210,7 +1210,7 @@ static void init_exec_ctrl(struct vcpu *vcpu)
* TODO: introduce API to make this data driven based * TODO: introduce API to make this data driven based
* on VMX_EPT_VPID_CAP * on VMX_EPT_VPID_CAP
*/ */
value64 = vm->arch_vm.nworld_eptp | (3 << 3) | 6; value64 = vm->arch_vm.nworld_eptp | (3UL << 3) | 6UL;
exec_vmwrite64(VMX_EPT_POINTER_FULL, value64); exec_vmwrite64(VMX_EPT_POINTER_FULL, value64);
pr_dbg("VMX_EPT_POINTER: 0x%016llx ", value64); pr_dbg("VMX_EPT_POINTER: 0x%016llx ", value64);

View File

@ -407,10 +407,10 @@ static void dmar_register_hrhd(struct dmar_drhd_rt *dmar_uint)
#endif #endif
/* check capability */ /* check capability */
if ((iommu_cap_super_page_val(dmar_uint->cap) & 0x1) == 0) if ((iommu_cap_super_page_val(dmar_uint->cap) & 0x1UL) == 0)
dev_dbg(ACRN_DBG_IOMMU, "dmar uint doesn't support 2MB page!"); dev_dbg(ACRN_DBG_IOMMU, "dmar uint doesn't support 2MB page!");
if ((iommu_cap_super_page_val(dmar_uint->cap) & 0x2) == 0) if ((iommu_cap_super_page_val(dmar_uint->cap) & 0x2UL) == 0)
dev_dbg(ACRN_DBG_IOMMU, "dmar uint doesn't support 1GB page!"); dev_dbg(ACRN_DBG_IOMMU, "dmar uint doesn't support 1GB page!");
/* when the hardware support snoop control, /* when the hardware support snoop control,
@ -675,7 +675,7 @@ static void dmar_fault_msi_write(struct dmar_drhd_rt *dmar_uint,
/* redirection hint: 0 /* redirection hint: 0
* destination mode: 0 * destination mode: 0
*/ */
addr_low = 0xFEE00000 | ((lapic_id & 0xFF) << 12); addr_low = 0xFEE00000U | ((lapic_id & 0xFFU) << 12);
IOMMU_LOCK(dmar_uint); IOMMU_LOCK(dmar_uint);
iommu_write32(dmar_uint, DMAR_FEDATA_REG, data); iommu_write32(dmar_uint, DMAR_FEDATA_REG, data);
@ -722,8 +722,8 @@ static void fault_record_analysis(__unused uint64_t low, uint64_t high)
(DMA_FRCD_UP_T(high) != 0U) ? "Read/Atomic" : "Write", (DMA_FRCD_UP_T(high) != 0U) ? "Read/Atomic" : "Write",
DMA_FRCD_UP_FR(high), DMA_FRCD_UP_FR(high),
DMA_FRCD_UP_SID(high) >> 8, DMA_FRCD_UP_SID(high) >> 8,
(DMA_FRCD_UP_SID(high) >> 3) & 0x1f, (DMA_FRCD_UP_SID(high) >> 3) & 0x1fUL,
DMA_FRCD_UP_SID(high) & 0x7, DMA_FRCD_UP_SID(high) & 0x7UL,
low); low);
#if DBG_IOMMU #if DBG_IOMMU
if (iommu_ecap_dt(dmar_uint->ecap)) if (iommu_ecap_dt(dmar_uint->ecap))
@ -919,13 +919,13 @@ static int add_iommu_device(struct iommu_domain *domain, uint16_t segment,
dmar_uint = device_to_dmaru(segment, bus, devfun); dmar_uint = device_to_dmaru(segment, bus, devfun);
if (dmar_uint == NULL) { if (dmar_uint == NULL) {
pr_err("no dmar unit found for device:0x%x:%x.%x", pr_err("no dmar unit found for device:0x%x:%x.%x",
bus, devfun >> 3, devfun & 0x7); bus, devfun >> 3, devfun & 0x7U);
return 1; return 1;
} }
if (dmar_uint->drhd->ignore) { if (dmar_uint->drhd->ignore) {
dev_dbg(ACRN_DBG_IOMMU, "device is ignored :0x%x:%x.%x", dev_dbg(ACRN_DBG_IOMMU, "device is ignored :0x%x:%x.%x",
bus, devfun >> 3, devfun & 0x7); bus, devfun >> 3, devfun & 0x7U);
return 0; return 0;
} }
@ -987,7 +987,7 @@ static int add_iommu_device(struct iommu_domain *domain, uint16_t segment,
pr_err("%s: context entry@0x%llx (Lower:%x) ", pr_err("%s: context entry@0x%llx (Lower:%x) ",
__func__, context_entry, context_entry->lower); __func__, context_entry, context_entry->lower);
pr_err("already present for %x:%x.%x", pr_err("already present for %x:%x.%x",
bus, devfun >> 3, devfun & 0x7); bus, devfun >> 3, devfun & 0x7U);
return 1; return 1;
} }

View File

@ -8,311 +8,311 @@
#define VMX_H_ #define VMX_H_
/* 16-bit control fields */ /* 16-bit control fields */
#define VMX_VPID 0x00000000 #define VMX_VPID 0x00000000U
/* 16-bit guest-state fields */ /* 16-bit guest-state fields */
#define VMX_GUEST_ES_SEL 0x00000800 #define VMX_GUEST_ES_SEL 0x00000800U
#define VMX_GUEST_CS_SEL 0x00000802 #define VMX_GUEST_CS_SEL 0x00000802U
#define VMX_GUEST_SS_SEL 0x00000804 #define VMX_GUEST_SS_SEL 0x00000804U
#define VMX_GUEST_DS_SEL 0x00000806 #define VMX_GUEST_DS_SEL 0x00000806U
#define VMX_GUEST_FS_SEL 0x00000808 #define VMX_GUEST_FS_SEL 0x00000808U
#define VMX_GUEST_GS_SEL 0x0000080a #define VMX_GUEST_GS_SEL 0x0000080aU
#define VMX_GUEST_LDTR_SEL 0x0000080c #define VMX_GUEST_LDTR_SEL 0x0000080cU
#define VMX_GUEST_TR_SEL 0x0000080e #define VMX_GUEST_TR_SEL 0x0000080eU
#define VMX_GUEST_INTR_STATUS 0x00000810 #define VMX_GUEST_INTR_STATUS 0x00000810U
/* 16-bit host-state fields */ /* 16-bit host-state fields */
#define VMX_HOST_ES_SEL 0x00000c00 #define VMX_HOST_ES_SEL 0x00000c00U
#define VMX_HOST_CS_SEL 0x00000c02 #define VMX_HOST_CS_SEL 0x00000c02U
#define VMX_HOST_SS_SEL 0x00000c04 #define VMX_HOST_SS_SEL 0x00000c04U
#define VMX_HOST_DS_SEL 0x00000c06 #define VMX_HOST_DS_SEL 0x00000c06U
#define VMX_HOST_FS_SEL 0x00000c08 #define VMX_HOST_FS_SEL 0x00000c08U
#define VMX_HOST_GS_SEL 0x00000c0a #define VMX_HOST_GS_SEL 0x00000c0aU
#define VMX_HOST_TR_SEL 0x00000c0c #define VMX_HOST_TR_SEL 0x00000c0cU
/* 64-bit control fields */ /* 64-bit control fields */
#define VMX_IO_BITMAP_A_FULL 0x00002000 #define VMX_IO_BITMAP_A_FULL 0x00002000U
#define VMX_IO_BITMAP_A_HIGH 0x00002001 #define VMX_IO_BITMAP_A_HIGH 0x00002001U
#define VMX_IO_BITMAP_B_FULL 0x00002002 #define VMX_IO_BITMAP_B_FULL 0x00002002U
#define VMX_IO_BITMAP_B_HIGH 0x00002003 #define VMX_IO_BITMAP_B_HIGH 0x00002003U
#define VMX_MSR_BITMAP_FULL 0x00002004 #define VMX_MSR_BITMAP_FULL 0x00002004U
#define VMX_MSR_BITMAP_HIGH 0x00002005 #define VMX_MSR_BITMAP_HIGH 0x00002005U
#define VMX_EXIT_MSR_STORE_ADDR_FULL 0x00002006 #define VMX_EXIT_MSR_STORE_ADDR_FULL 0x00002006U
#define VMX_EXIT_MSR_STORE_ADDR_HIGH 0x00002007 #define VMX_EXIT_MSR_STORE_ADDR_HIGH 0x00002007U
#define VMX_EXIT_MSR_LOAD_ADDR_FULL 0x00002008 #define VMX_EXIT_MSR_LOAD_ADDR_FULL 0x00002008U
#define VMX_EXIT_MSR_LOAD_ADDR_HIGH 0x00002009 #define VMX_EXIT_MSR_LOAD_ADDR_HIGH 0x00002009U
#define VMX_ENTRY_MSR_LOAD_ADDR_FULL 0x0000200a #define VMX_ENTRY_MSR_LOAD_ADDR_FULL 0x0000200aU
#define VMX_ENTRY_MSR_LOAD_ADDR_HIGH 0x0000200b #define VMX_ENTRY_MSR_LOAD_ADDR_HIGH 0x0000200bU
#define VMX_EXECUTIVE_VMCS_PTR_FULL 0x0000200c #define VMX_EXECUTIVE_VMCS_PTR_FULL 0x0000200cU
#define VMX_EXECUTIVE_VMCS_PTR_HIGH 0x0000200d #define VMX_EXECUTIVE_VMCS_PTR_HIGH 0x0000200dU
#define VMX_TSC_OFFSET_FULL 0x00002010 #define VMX_TSC_OFFSET_FULL 0x00002010U
#define VMX_TSC_OFFSET_HIGH 0x00002011 #define VMX_TSC_OFFSET_HIGH 0x00002011U
#define VMX_VIRTUAL_APIC_PAGE_ADDR_FULL 0x00002012 #define VMX_VIRTUAL_APIC_PAGE_ADDR_FULL 0x00002012U
#define VMX_VIRTUAL_APIC_PAGE_ADDR_HIGH 0x00002013 #define VMX_VIRTUAL_APIC_PAGE_ADDR_HIGH 0x00002013U
#define VMX_APIC_ACCESS_ADDR_FULL 0x00002014 #define VMX_APIC_ACCESS_ADDR_FULL 0x00002014U
#define VMX_APIC_ACCESS_ADDR_HIGH 0x00002015 #define VMX_APIC_ACCESS_ADDR_HIGH 0x00002015U
#define VMX_EPT_POINTER_FULL 0x0000201A #define VMX_EPT_POINTER_FULL 0x0000201AU
#define VMX_EPT_POINTER_HIGH 0x0000201B #define VMX_EPT_POINTER_HIGH 0x0000201BU
#define VMX_EOI_EXIT0_FULL 0x0000201C #define VMX_EOI_EXIT0_FULL 0x0000201CU
#define VMX_EOI_EXIT0_HIGH 0x0000201D #define VMX_EOI_EXIT0_HIGH 0x0000201DU
#define VMX_EOI_EXIT1_FULL 0x0000201E #define VMX_EOI_EXIT1_FULL 0x0000201EU
#define VMX_EOI_EXIT1_HIGH 0x0000201F #define VMX_EOI_EXIT1_HIGH 0x0000201FU
#define VMX_EOI_EXIT2_FULL 0x00002020 #define VMX_EOI_EXIT2_FULL 0x00002020U
#define VMX_EOI_EXIT2_HIGH 0x00002021 #define VMX_EOI_EXIT2_HIGH 0x00002021U
#define VMX_EOI_EXIT3_FULL 0x00002022 #define VMX_EOI_EXIT3_FULL 0x00002022U
#define VMX_EOI_EXIT3_HIGH 0x00002023 #define VMX_EOI_EXIT3_HIGH 0x00002023U
#define VMX_EOI_EXIT(vector) (VMX_EOI_EXIT0_FULL + ((vector) / 64) * 2) #define VMX_EOI_EXIT(vector) (VMX_EOI_EXIT0_FULL + ((vector) / 64) * 2)
#define VMX_XSS_EXITING_BITMAP_FULL 0x0000202C #define VMX_XSS_EXITING_BITMAP_FULL 0x0000202CU
#define VMX_XSS_EXITING_BITMAP_HIGH 0x0000202D #define VMX_XSS_EXITING_BITMAP_HIGH 0x0000202DU
/* 64-bit read-only data fields */ /* 64-bit read-only data fields */
#define VMX_GUEST_PHYSICAL_ADDR_FULL 0x00002400 #define VMX_GUEST_PHYSICAL_ADDR_FULL 0x00002400U
#define VMX_GUEST_PHYSICAL_ADDR_HIGH 0x00002401 #define VMX_GUEST_PHYSICAL_ADDR_HIGH 0x00002401U
/* 64-bit guest-state fields */ /* 64-bit guest-state fields */
#define VMX_VMS_LINK_PTR_FULL 0x00002800 #define VMX_VMS_LINK_PTR_FULL 0x00002800U
#define VMX_VMS_LINK_PTR_HIGH 0x00002801 #define VMX_VMS_LINK_PTR_HIGH 0x00002801U
#define VMX_GUEST_IA32_DEBUGCTL_FULL 0x00002802 #define VMX_GUEST_IA32_DEBUGCTL_FULL 0x00002802U
#define VMX_GUEST_IA32_DEBUGCTL_HIGH 0x00002803 #define VMX_GUEST_IA32_DEBUGCTL_HIGH 0x00002803U
#define VMX_GUEST_IA32_PAT_FULL 0x00002804 #define VMX_GUEST_IA32_PAT_FULL 0x00002804U
#define VMX_GUEST_IA32_PAT_HIGH 0x00002805 #define VMX_GUEST_IA32_PAT_HIGH 0x00002805U
#define VMX_GUEST_IA32_EFER_FULL 0x00002806 #define VMX_GUEST_IA32_EFER_FULL 0x00002806U
#define VMX_GUEST_IA32_EFER_HIGH 0x00002807 #define VMX_GUEST_IA32_EFER_HIGH 0x00002807U
#define VMX_GUEST_IA32_PERF_CTL_FULL 0x00002808 #define VMX_GUEST_IA32_PERF_CTL_FULL 0x00002808U
#define VMX_GUEST_IA32_PERF_CTL_HIGH 0x00002809 #define VMX_GUEST_IA32_PERF_CTL_HIGH 0x00002809U
#define VMX_GUEST_PDPTE0_FULL 0x0000280A #define VMX_GUEST_PDPTE0_FULL 0x0000280AU
#define VMX_GUEST_PDPTE0_HIGH 0x0000280B #define VMX_GUEST_PDPTE0_HIGH 0x0000280BU
#define VMX_GUEST_PDPTE1_FULL 0x0000280C #define VMX_GUEST_PDPTE1_FULL 0x0000280CU
#define VMX_GUEST_PDPTE1_HIGH 0x0000280D #define VMX_GUEST_PDPTE1_HIGH 0x0000280DU
#define VMX_GUEST_PDPTE2_FULL 0x0000280E #define VMX_GUEST_PDPTE2_FULL 0x0000280EU
#define VMX_GUEST_PDPTE2_HIGH 0x0000280F #define VMX_GUEST_PDPTE2_HIGH 0x0000280FU
#define VMX_GUEST_PDPTE3_FULL 0x00002810 #define VMX_GUEST_PDPTE3_FULL 0x00002810U
#define VMX_GUEST_PDPTE3_HIGH 0x00002811 #define VMX_GUEST_PDPTE3_HIGH 0x00002811U
/* 64-bit host-state fields */ /* 64-bit host-state fields */
#define VMX_HOST_IA32_PAT_FULL 0x00002C00 #define VMX_HOST_IA32_PAT_FULL 0x00002C00U
#define VMX_HOST_IA32_PAT_HIGH 0x00002C01 #define VMX_HOST_IA32_PAT_HIGH 0x00002C01U
#define VMX_HOST_IA32_EFER_FULL 0x00002C02 #define VMX_HOST_IA32_EFER_FULL 0x00002C02U
#define VMX_HOST_IA32_EFER_HIGH 0x00002C03 #define VMX_HOST_IA32_EFER_HIGH 0x00002C03U
#define VMX_HOST_IA32_PERF_CTL_FULL 0x00002C04 #define VMX_HOST_IA32_PERF_CTL_FULL 0x00002C04U
#define VMX_HOST_IA32_PERF_CTL_HIGH 0x00002C05 #define VMX_HOST_IA32_PERF_CTL_HIGH 0x00002C05U
/* 32-bit control fields */ /* 32-bit control fields */
#define VMX_PIN_VM_EXEC_CONTROLS 0x00004000 #define VMX_PIN_VM_EXEC_CONTROLS 0x00004000U
#define VMX_PROC_VM_EXEC_CONTROLS 0x00004002 #define VMX_PROC_VM_EXEC_CONTROLS 0x00004002U
#define VMX_EXCEPTION_BITMAP 0x00004004 #define VMX_EXCEPTION_BITMAP 0x00004004U
#define VMX_PF_ERROR_CODE_MASK 0x00004006 #define VMX_PF_ERROR_CODE_MASK 0x00004006U
#define VMX_PF_ERROR_CODE_MATCH 0x00004008 #define VMX_PF_ERROR_CODE_MATCH 0x00004008U
#define VMX_CR3_TARGET_COUNT 0x0000400a #define VMX_CR3_TARGET_COUNT 0x0000400aU
#define VMX_EXIT_CONTROLS 0x0000400c #define VMX_EXIT_CONTROLS 0x0000400cU
#define VMX_EXIT_MSR_STORE_COUNT 0x0000400e #define VMX_EXIT_MSR_STORE_COUNT 0x0000400eU
#define VMX_EXIT_MSR_LOAD_COUNT 0x00004010 #define VMX_EXIT_MSR_LOAD_COUNT 0x00004010U
#define VMX_ENTRY_CONTROLS 0x00004012 #define VMX_ENTRY_CONTROLS 0x00004012U
#define VMX_ENTRY_MSR_LOAD_COUNT 0x00004014 #define VMX_ENTRY_MSR_LOAD_COUNT 0x00004014U
#define VMX_ENTRY_INT_INFO_FIELD 0x00004016 #define VMX_ENTRY_INT_INFO_FIELD 0x00004016U
#define VMX_ENTRY_EXCEPTION_ERROR_CODE 0x00004018 #define VMX_ENTRY_EXCEPTION_ERROR_CODE 0x00004018U
#define VMX_ENTRY_INSTR_LENGTH 0x0000401a #define VMX_ENTRY_INSTR_LENGTH 0x0000401aU
#define VMX_TPR_THRESHOLD 0x0000401c #define VMX_TPR_THRESHOLD 0x0000401cU
#define VMX_PROC_VM_EXEC_CONTROLS2 0x0000401E #define VMX_PROC_VM_EXEC_CONTROLS2 0x0000401EU
#define VMX_PLE_GAP 0x00004020 #define VMX_PLE_GAP 0x00004020U
#define VMX_PLE_WINDOW 0x00004022 #define VMX_PLE_WINDOW 0x00004022U
/* 32-bit read-only data fields */ /* 32-bit read-only data fields */
#define VMX_INSTR_ERROR 0x00004400 #define VMX_INSTR_ERROR 0x00004400U
#define VMX_EXIT_REASON 0x00004402 #define VMX_EXIT_REASON 0x00004402U
#define VMX_EXIT_INT_INFO 0x00004404 #define VMX_EXIT_INT_INFO 0x00004404U
#define VMX_EXIT_INT_ERROR_CODE 0x00004406 #define VMX_EXIT_INT_ERROR_CODE 0x00004406U
#define VMX_IDT_VEC_INFO_FIELD 0x00004408 #define VMX_IDT_VEC_INFO_FIELD 0x00004408U
#define VMX_IDT_VEC_ERROR_CODE 0x0000440a #define VMX_IDT_VEC_ERROR_CODE 0x0000440aU
#define VMX_EXIT_INSTR_LEN 0x0000440c #define VMX_EXIT_INSTR_LEN 0x0000440cU
#define VMX_INSTR_INFO 0x0000440e #define VMX_INSTR_INFO 0x0000440eU
/* 32-bit guest-state fields */ /* 32-bit guest-state fields */
#define VMX_GUEST_ES_LIMIT 0x00004800 #define VMX_GUEST_ES_LIMIT 0x00004800U
#define VMX_GUEST_CS_LIMIT 0x00004802 #define VMX_GUEST_CS_LIMIT 0x00004802U
#define VMX_GUEST_SS_LIMIT 0x00004804 #define VMX_GUEST_SS_LIMIT 0x00004804U
#define VMX_GUEST_DS_LIMIT 0x00004806 #define VMX_GUEST_DS_LIMIT 0x00004806U
#define VMX_GUEST_FS_LIMIT 0x00004808 #define VMX_GUEST_FS_LIMIT 0x00004808U
#define VMX_GUEST_GS_LIMIT 0x0000480a #define VMX_GUEST_GS_LIMIT 0x0000480aU
#define VMX_GUEST_LDTR_LIMIT 0x0000480c #define VMX_GUEST_LDTR_LIMIT 0x0000480cU
#define VMX_GUEST_TR_LIMIT 0x0000480e #define VMX_GUEST_TR_LIMIT 0x0000480eU
#define VMX_GUEST_GDTR_LIMIT 0x00004810 #define VMX_GUEST_GDTR_LIMIT 0x00004810U
#define VMX_GUEST_IDTR_LIMIT 0x00004812 #define VMX_GUEST_IDTR_LIMIT 0x00004812U
#define VMX_GUEST_ES_ATTR 0x00004814 #define VMX_GUEST_ES_ATTR 0x00004814U
#define VMX_GUEST_CS_ATTR 0x00004816 #define VMX_GUEST_CS_ATTR 0x00004816U
#define VMX_GUEST_SS_ATTR 0x00004818 #define VMX_GUEST_SS_ATTR 0x00004818U
#define VMX_GUEST_DS_ATTR 0x0000481a #define VMX_GUEST_DS_ATTR 0x0000481aU
#define VMX_GUEST_FS_ATTR 0x0000481c #define VMX_GUEST_FS_ATTR 0x0000481cU
#define VMX_GUEST_GS_ATTR 0x0000481e #define VMX_GUEST_GS_ATTR 0x0000481eU
#define VMX_GUEST_LDTR_ATTR 0x00004820 #define VMX_GUEST_LDTR_ATTR 0x00004820U
#define VMX_GUEST_TR_ATTR 0x00004822 #define VMX_GUEST_TR_ATTR 0x00004822U
#define VMX_GUEST_INTERRUPTIBILITY_INFO 0x00004824 #define VMX_GUEST_INTERRUPTIBILITY_INFO 0x00004824U
#define VMX_GUEST_ACTIVITY_STATE 0x00004826 #define VMX_GUEST_ACTIVITY_STATE 0x00004826U
#define VMX_GUEST_SMBASE 0x00004828 #define VMX_GUEST_SMBASE 0x00004828U
#define VMX_GUEST_IA32_SYSENTER_CS 0x0000482a #define VMX_GUEST_IA32_SYSENTER_CS 0x0000482aU
#define VMX_GUEST_TIMER 0x0000482E #define VMX_GUEST_TIMER 0x0000482EU
/* 32-bit host-state fields */ /* 32-bit host-state fields */
#define VMX_HOST_IA32_SYSENTER_CS 0x00004c00 #define VMX_HOST_IA32_SYSENTER_CS 0x00004c00U
/* natural-width control fields */ /* natural-width control fields */
#define VMX_CR0_MASK 0x00006000 #define VMX_CR0_MASK 0x00006000U
#define VMX_CR4_MASK 0x00006002 #define VMX_CR4_MASK 0x00006002U
#define VMX_CR0_READ_SHADOW 0x00006004 #define VMX_CR0_READ_SHADOW 0x00006004U
#define VMX_CR4_READ_SHADOW 0x00006006 #define VMX_CR4_READ_SHADOW 0x00006006U
#define VMX_CR3_TARGET_0 0x00006008 #define VMX_CR3_TARGET_0 0x00006008U
#define VMX_CR3_TARGET_1 0x0000600a #define VMX_CR3_TARGET_1 0x0000600aU
#define VMX_CR3_TARGET_2 0x0000600c #define VMX_CR3_TARGET_2 0x0000600cU
#define VMX_CR3_TARGET_3 0x0000600e #define VMX_CR3_TARGET_3 0x0000600eU
/* natural-width read-only data fields */ /* natural-width read-only data fields */
#define VMX_EXIT_QUALIFICATION 0x00006400 #define VMX_EXIT_QUALIFICATION 0x00006400U
#define VMX_IO_RCX 0x00006402 #define VMX_IO_RCX 0x00006402U
#define VMX_IO_RDI 0x00006406 #define VMX_IO_RDI 0x00006406U
#define VMX_GUEST_LINEAR_ADDR 0x0000640a #define VMX_GUEST_LINEAR_ADDR 0x0000640aU
/* natural-width guest-state fields */ /* natural-width guest-state fields */
#define VMX_GUEST_CR0 0x00006800 #define VMX_GUEST_CR0 0x00006800U
#define VMX_GUEST_CR3 0x00006802 #define VMX_GUEST_CR3 0x00006802U
#define VMX_GUEST_CR4 0x00006804 #define VMX_GUEST_CR4 0x00006804U
#define VMX_GUEST_ES_BASE 0x00006806 #define VMX_GUEST_ES_BASE 0x00006806U
#define VMX_GUEST_CS_BASE 0x00006808 #define VMX_GUEST_CS_BASE 0x00006808U
#define VMX_GUEST_SS_BASE 0x0000680a #define VMX_GUEST_SS_BASE 0x0000680aU
#define VMX_GUEST_DS_BASE 0x0000680c #define VMX_GUEST_DS_BASE 0x0000680cU
#define VMX_GUEST_FS_BASE 0x0000680e #define VMX_GUEST_FS_BASE 0x0000680eU
#define VMX_GUEST_GS_BASE 0x00006810 #define VMX_GUEST_GS_BASE 0x00006810U
#define VMX_GUEST_LDTR_BASE 0x00006812 #define VMX_GUEST_LDTR_BASE 0x00006812U
#define VMX_GUEST_TR_BASE 0x00006814 #define VMX_GUEST_TR_BASE 0x00006814U
#define VMX_GUEST_GDTR_BASE 0x00006816 #define VMX_GUEST_GDTR_BASE 0x00006816U
#define VMX_GUEST_IDTR_BASE 0x00006818 #define VMX_GUEST_IDTR_BASE 0x00006818U
#define VMX_GUEST_DR7 0x0000681a #define VMX_GUEST_DR7 0x0000681aU
#define VMX_GUEST_RSP 0x0000681c #define VMX_GUEST_RSP 0x0000681cU
#define VMX_GUEST_RIP 0x0000681e #define VMX_GUEST_RIP 0x0000681eU
#define VMX_GUEST_RFLAGS 0x00006820 #define VMX_GUEST_RFLAGS 0x00006820U
#define VMX_GUEST_PENDING_DEBUG_EXCEPT 0x00006822 #define VMX_GUEST_PENDING_DEBUG_EXCEPT 0x00006822U
#define VMX_GUEST_IA32_SYSENTER_ESP 0x00006824 #define VMX_GUEST_IA32_SYSENTER_ESP 0x00006824U
#define VMX_GUEST_IA32_SYSENTER_EIP 0x00006826 #define VMX_GUEST_IA32_SYSENTER_EIP 0x00006826U
/* natural-width host-state fields */ /* natural-width host-state fields */
#define VMX_HOST_CR0 0x00006c00 #define VMX_HOST_CR0 0x00006c00U
#define VMX_HOST_CR3 0x00006c02 #define VMX_HOST_CR3 0x00006c02U
#define VMX_HOST_CR4 0x00006c04 #define VMX_HOST_CR4 0x00006c04U
#define VMX_HOST_FS_BASE 0x00006c06 #define VMX_HOST_FS_BASE 0x00006c06U
#define VMX_HOST_GS_BASE 0x00006c08 #define VMX_HOST_GS_BASE 0x00006c08U
#define VMX_HOST_TR_BASE 0x00006c0a #define VMX_HOST_TR_BASE 0x00006c0aU
#define VMX_HOST_GDTR_BASE 0x00006c0c #define VMX_HOST_GDTR_BASE 0x00006c0cU
#define VMX_HOST_IDTR_BASE 0x00006c0e #define VMX_HOST_IDTR_BASE 0x00006c0eU
#define VMX_HOST_IA32_SYSENTER_ESP 0x00006c10 #define VMX_HOST_IA32_SYSENTER_ESP 0x00006c10U
#define VMX_HOST_IA32_SYSENTER_EIP 0x00006c12 #define VMX_HOST_IA32_SYSENTER_EIP 0x00006c12U
#define VMX_HOST_RSP 0x00006c14 #define VMX_HOST_RSP 0x00006c14U
#define VMX_HOST_RIP 0x00006c16 #define VMX_HOST_RIP 0x00006c16U
/* /*
* Basic VM exit reasons * Basic VM exit reasons
*/ */
#define VMX_EXIT_REASON_EXCEPTION_OR_NMI 0x00000000 #define VMX_EXIT_REASON_EXCEPTION_OR_NMI 0x00000000U
#define VMX_EXIT_REASON_EXTERNAL_INTERRUPT 0x00000001 #define VMX_EXIT_REASON_EXTERNAL_INTERRUPT 0x00000001U
#define VMX_EXIT_REASON_TRIPLE_FAULT 0x00000002 #define VMX_EXIT_REASON_TRIPLE_FAULT 0x00000002U
#define VMX_EXIT_REASON_INIT_SIGNAL 0x00000003 #define VMX_EXIT_REASON_INIT_SIGNAL 0x00000003U
#define VMX_EXIT_REASON_STARTUP_IPI 0x00000004 #define VMX_EXIT_REASON_STARTUP_IPI 0x00000004U
#define VMX_EXIT_REASON_IO_SMI 0x00000005 #define VMX_EXIT_REASON_IO_SMI 0x00000005U
#define VMX_EXIT_REASON_OTHER_SMI 0x00000006 #define VMX_EXIT_REASON_OTHER_SMI 0x00000006U
#define VMX_EXIT_REASON_INTERRUPT_WINDOW 0x00000007 #define VMX_EXIT_REASON_INTERRUPT_WINDOW 0x00000007U
#define VMX_EXIT_REASON_NMI_WINDOW 0x00000008 #define VMX_EXIT_REASON_NMI_WINDOW 0x00000008U
#define VMX_EXIT_REASON_TASK_SWITCH 0x00000009 #define VMX_EXIT_REASON_TASK_SWITCH 0x00000009U
#define VMX_EXIT_REASON_CPUID 0x0000000A #define VMX_EXIT_REASON_CPUID 0x0000000AU
#define VMX_EXIT_REASON_GETSEC 0x0000000B #define VMX_EXIT_REASON_GETSEC 0x0000000BU
#define VMX_EXIT_REASON_HLT 0x0000000C #define VMX_EXIT_REASON_HLT 0x0000000CU
#define VMX_EXIT_REASON_INVD 0x0000000D #define VMX_EXIT_REASON_INVD 0x0000000DU
#define VMX_EXIT_REASON_INVLPG 0x0000000E #define VMX_EXIT_REASON_INVLPG 0x0000000EU
#define VMX_EXIT_REASON_RDPMC 0x0000000F #define VMX_EXIT_REASON_RDPMC 0x0000000FU
#define VMX_EXIT_REASON_RDTSC 0x00000010 #define VMX_EXIT_REASON_RDTSC 0x00000010U
#define VMX_EXIT_REASON_RSM 0x00000011 #define VMX_EXIT_REASON_RSM 0x00000011U
#define VMX_EXIT_REASON_VMCALL 0x00000012 #define VMX_EXIT_REASON_VMCALL 0x00000012U
#define VMX_EXIT_REASON_VMCLEAR 0x00000013 #define VMX_EXIT_REASON_VMCLEAR 0x00000013U
#define VMX_EXIT_REASON_VMLAUNCH 0x00000014 #define VMX_EXIT_REASON_VMLAUNCH 0x00000014U
#define VMX_EXIT_REASON_VMPTRLD 0x00000015 #define VMX_EXIT_REASON_VMPTRLD 0x00000015U
#define VMX_EXIT_REASON_VMPTRST 0x00000016 #define VMX_EXIT_REASON_VMPTRST 0x00000016U
#define VMX_EXIT_REASON_VMREAD 0x00000017 #define VMX_EXIT_REASON_VMREAD 0x00000017U
#define VMX_EXIT_REASON_VMRESUME 0x00000018 #define VMX_EXIT_REASON_VMRESUME 0x00000018U
#define VMX_EXIT_REASON_VMWRITE 0x00000019 #define VMX_EXIT_REASON_VMWRITE 0x00000019U
#define VMX_EXIT_REASON_VMXOFF 0x0000001A #define VMX_EXIT_REASON_VMXOFF 0x0000001AU
#define VMX_EXIT_REASON_VMXON 0x0000001B #define VMX_EXIT_REASON_VMXON 0x0000001BU
#define VMX_EXIT_REASON_CR_ACCESS 0x0000001C #define VMX_EXIT_REASON_CR_ACCESS 0x0000001CU
#define VMX_EXIT_REASON_DR_ACCESS 0x0000001D #define VMX_EXIT_REASON_DR_ACCESS 0x0000001DU
#define VMX_EXIT_REASON_IO_INSTRUCTION 0x0000001E #define VMX_EXIT_REASON_IO_INSTRUCTION 0x0000001EU
#define VMX_EXIT_REASON_RDMSR 0x0000001F #define VMX_EXIT_REASON_RDMSR 0x0000001FU
#define VMX_EXIT_REASON_WRMSR 0x00000020 #define VMX_EXIT_REASON_WRMSR 0x00000020U
#define VMX_EXIT_REASON_ENTRY_FAILURE_INVALID_GUEST_STATE 0x00000021 #define VMX_EXIT_REASON_ENTRY_FAILURE_INVALID_GUEST_STATE 0x00000021U
#define VMX_EXIT_REASON_ENTRY_FAILURE_MSR_LOADING 0x00000022 #define VMX_EXIT_REASON_ENTRY_FAILURE_MSR_LOADING 0x00000022U
/* entry 0x23 (35) is missing */ /* entry 0x23 (35) is missing */
#define VMX_EXIT_REASON_MWAIT 0x00000024 #define VMX_EXIT_REASON_MWAIT 0x00000024U
#define VMX_EXIT_REASON_MONITOR_TRAP 0x00000025 #define VMX_EXIT_REASON_MONITOR_TRAP 0x00000025U
/* entry 0x26 (38) is missing */ /* entry 0x26 (38) is missing */
#define VMX_EXIT_REASON_MONITOR 0x00000027 #define VMX_EXIT_REASON_MONITOR 0x00000027U
#define VMX_EXIT_REASON_PAUSE 0x00000028 #define VMX_EXIT_REASON_PAUSE 0x00000028U
#define VMX_EXIT_REASON_ENTRY_FAILURE_MACHINE_CHECK 0x00000029 #define VMX_EXIT_REASON_ENTRY_FAILURE_MACHINE_CHECK 0x00000029U
/* entry 0x2A (42) is missing */ /* entry 0x2A (42) is missing */
#define VMX_EXIT_REASON_TPR_BELOW_THRESHOLD 0x0000002B #define VMX_EXIT_REASON_TPR_BELOW_THRESHOLD 0x0000002BU
#define VMX_EXIT_REASON_APIC_ACCESS 0x0000002C #define VMX_EXIT_REASON_APIC_ACCESS 0x0000002CU
#define VMX_EXIT_REASON_VIRTUALIZED_EOI 0x0000002D #define VMX_EXIT_REASON_VIRTUALIZED_EOI 0x0000002DU
#define VMX_EXIT_REASON_GDTR_IDTR_ACCESS 0x0000002E #define VMX_EXIT_REASON_GDTR_IDTR_ACCESS 0x0000002EU
#define VMX_EXIT_REASON_LDTR_TR_ACCESS 0x0000002F #define VMX_EXIT_REASON_LDTR_TR_ACCESS 0x0000002FU
#define VMX_EXIT_REASON_EPT_VIOLATION 0x00000030 #define VMX_EXIT_REASON_EPT_VIOLATION 0x00000030U
#define VMX_EXIT_REASON_EPT_MISCONFIGURATION 0x00000031 #define VMX_EXIT_REASON_EPT_MISCONFIGURATION 0x00000031U
#define VMX_EXIT_REASON_INVEPT 0x00000032 #define VMX_EXIT_REASON_INVEPT 0x00000032U
#define VMX_EXIT_REASON_RDTSCP 0x00000033 #define VMX_EXIT_REASON_RDTSCP 0x00000033U
#define VMX_EXIT_REASON_VMX_PREEMPTION_TIMER_EXPIRED 0x00000034 #define VMX_EXIT_REASON_VMX_PREEMPTION_TIMER_EXPIRED 0x00000034U
#define VMX_EXIT_REASON_INVVPID 0x00000035 #define VMX_EXIT_REASON_INVVPID 0x00000035U
#define VMX_EXIT_REASON_WBINVD 0x00000036 #define VMX_EXIT_REASON_WBINVD 0x00000036U
#define VMX_EXIT_REASON_XSETBV 0x00000037 #define VMX_EXIT_REASON_XSETBV 0x00000037U
#define VMX_EXIT_REASON_APIC_WRITE 0x00000038 #define VMX_EXIT_REASON_APIC_WRITE 0x00000038U
/* VMX execution control bits (pin based) */ /* VMX execution control bits (pin based) */
#define VMX_PINBASED_CTLS_IRQ_EXIT (1<<0) #define VMX_PINBASED_CTLS_IRQ_EXIT (1U<<0)
#define VMX_PINBASED_CTLS_NMI_EXIT (1<<3) #define VMX_PINBASED_CTLS_NMI_EXIT (1U<<3)
#define VMX_PINBASED_CTLS_VIRT_NMI (1<<5) #define VMX_PINBASED_CTLS_VIRT_NMI (1U<<5)
#define VMX_PINBASED_CTLS_ENABLE_PTMR (1<<6) #define VMX_PINBASED_CTLS_ENABLE_PTMR (1U<<6)
#define VMX_PINBASED_CTLS_POST_IRQ (1<<7) #define VMX_PINBASED_CTLS_POST_IRQ (1U<<7)
/* VMX execution control bits (processor based) */ /* VMX execution control bits (processor based) */
#define VMX_PROCBASED_CTLS_IRQ_WIN (1<<2) #define VMX_PROCBASED_CTLS_IRQ_WIN (1U<<2)
#define VMX_PROCBASED_CTLS_TSC_OFF (1<<3) #define VMX_PROCBASED_CTLS_TSC_OFF (1U<<3)
#define VMX_PROCBASED_CTLS_HLT (1<<7) #define VMX_PROCBASED_CTLS_HLT (1U<<7)
#define VMX_PROCBASED_CTLS_INVLPG (1<<9) #define VMX_PROCBASED_CTLS_INVLPG (1U<<9)
#define VMX_PROCBASED_CTLS_MWAIT (1<<10) #define VMX_PROCBASED_CTLS_MWAIT (1U<<10)
#define VMX_PROCBASED_CTLS_RDPMC (1<<11) #define VMX_PROCBASED_CTLS_RDPMC (1U<<11)
#define VMX_PROCBASED_CTLS_RDTSC (1<<12) #define VMX_PROCBASED_CTLS_RDTSC (1U<<12)
#define VMX_PROCBASED_CTLS_CR3_LOAD (1<<15) #define VMX_PROCBASED_CTLS_CR3_LOAD (1U<<15)
#define VMX_PROCBASED_CTLS_CR3_STORE (1<<16) #define VMX_PROCBASED_CTLS_CR3_STORE (1U<<16)
#define VMX_PROCBASED_CTLS_CR8_LOAD (1<<19) #define VMX_PROCBASED_CTLS_CR8_LOAD (1U<<19)
#define VMX_PROCBASED_CTLS_CR8_STORE (1<<20) #define VMX_PROCBASED_CTLS_CR8_STORE (1U<<20)
#define VMX_PROCBASED_CTLS_TPR_SHADOW (1<<21) #define VMX_PROCBASED_CTLS_TPR_SHADOW (1U<<21)
#define VMX_PROCBASED_CTLS_NMI_WINEXIT (1<<22) #define VMX_PROCBASED_CTLS_NMI_WINEXIT (1U<<22)
#define VMX_PROCBASED_CTLS_MOV_DR (1<<23) #define VMX_PROCBASED_CTLS_MOV_DR (1U<<23)
#define VMX_PROCBASED_CTLS_UNCOND_IO (1<<24) #define VMX_PROCBASED_CTLS_UNCOND_IO (1U<<24)
#define VMX_PROCBASED_CTLS_IO_BITMAP (1<<25) #define VMX_PROCBASED_CTLS_IO_BITMAP (1U<<25)
#define VMX_PROCBASED_CTLS_MON_TRAP (1<<27) #define VMX_PROCBASED_CTLS_MON_TRAP (1U<<27)
#define VMX_PROCBASED_CTLS_MSR_BITMAP (1<<28) #define VMX_PROCBASED_CTLS_MSR_BITMAP (1U<<28)
#define VMX_PROCBASED_CTLS_MONITOR (1<<29) #define VMX_PROCBASED_CTLS_MONITOR (1U<<29)
#define VMX_PROCBASED_CTLS_PAUSE (1<<30) #define VMX_PROCBASED_CTLS_PAUSE (1U<<30)
#define VMX_PROCBASED_CTLS_SECONDARY (1<<31) #define VMX_PROCBASED_CTLS_SECONDARY (1U<<31)
#define VMX_PROCBASED_CTLS2_VAPIC (1<<0) #define VMX_PROCBASED_CTLS2_VAPIC (1U<<0)
#define VMX_PROCBASED_CTLS2_EPT (1<<1) #define VMX_PROCBASED_CTLS2_EPT (1U<<1)
#define VMX_PROCBASED_CTLS2_DESC_TABLE (1<<2) #define VMX_PROCBASED_CTLS2_DESC_TABLE (1U<<2)
#define VMX_PROCBASED_CTLS2_RDTSCP (1<<3) #define VMX_PROCBASED_CTLS2_RDTSCP (1U<<3)
#define VMX_PROCBASED_CTLS2_VX2APIC (1<<4) #define VMX_PROCBASED_CTLS2_VX2APIC (1U<<4)
#define VMX_PROCBASED_CTLS2_VPID (1<<5) #define VMX_PROCBASED_CTLS2_VPID (1U<<5)
#define VMX_PROCBASED_CTLS2_WBINVD (1<<6) #define VMX_PROCBASED_CTLS2_WBINVD (1U<<6)
#define VMX_PROCBASED_CTLS2_UNRESTRICT (1<<7) #define VMX_PROCBASED_CTLS2_UNRESTRICT (1U<<7)
#define VMX_PROCBASED_CTLS2_VAPIC_REGS (1<<8) #define VMX_PROCBASED_CTLS2_VAPIC_REGS (1U<<8)
#define VMX_PROCBASED_CTLS2_VIRQ (1<<9) #define VMX_PROCBASED_CTLS2_VIRQ (1U<<9)
#define VMX_PROCBASED_CTLS2_PAUSE_LOOP (1<<10) #define VMX_PROCBASED_CTLS2_PAUSE_LOOP (1U<<10)
#define VMX_PROCBASED_CTLS2_RDRAND (1<<11) #define VMX_PROCBASED_CTLS2_RDRAND (1U<<11)
#define VMX_PROCBASED_CTLS2_INVPCID (1<<12) #define VMX_PROCBASED_CTLS2_INVPCID (1U<<12)
#define VMX_PROCBASED_CTLS2_VM_FUNCS (1<<13) #define VMX_PROCBASED_CTLS2_VM_FUNCS (1U<<13)
#define VMX_PROCBASED_CTLS2_VMCS_SHADW (1<<14) #define VMX_PROCBASED_CTLS2_VMCS_SHADW (1U<<14)
#define VMX_PROCBASED_CTLS2_RDSEED (1<<16) #define VMX_PROCBASED_CTLS2_RDSEED (1U<<16)
#define VMX_PROCBASED_CTLS2_EPT_VE (1<<18) #define VMX_PROCBASED_CTLS2_EPT_VE (1U<<18)
#define VMX_PROCBASED_CTLS2_XSVE_XRSTR (1<<20) #define VMX_PROCBASED_CTLS2_XSVE_XRSTR (1U<<20)
/* MSR_IA32_VMX_EPT_VPID_CAP: EPT and VPID capability bits */ /* MSR_IA32_VMX_EPT_VPID_CAP: EPT and VPID capability bits */
#define VMX_EPT_EXECUTE_ONLY (1 << 0) #define VMX_EPT_EXECUTE_ONLY (1U << 0)
#define VMX_EPT_PAGE_WALK_4 (1 << 6) #define VMX_EPT_PAGE_WALK_4 (1U << 6)
#define VMX_EPT_PAGE_WALK_5 (1 << 7) #define VMX_EPT_PAGE_WALK_5 (1U << 7)
#define VMX_EPTP_UC (1 << 8) #define VMX_EPTP_UC (1U << 8)
#define VMX_EPTP_WB (1 << 14) #define VMX_EPTP_WB (1U << 14)
#define VMX_EPT_2MB_PAGE (1 << 16) #define VMX_EPT_2MB_PAGE (1U << 16)
#define VMX_EPT_1GB_PAGE (1 << 17) #define VMX_EPT_1GB_PAGE (1U << 17)
#define VMX_EPT_INVEPT (1 << 20) #define VMX_EPT_INVEPT (1U << 20)
#define VMX_EPT_AD (1 << 21) #define VMX_EPT_AD (1U << 21)
#define VMX_EPT_INVEPT_SINGLE_CONTEXT (1 << 25) #define VMX_EPT_INVEPT_SINGLE_CONTEXT (1U << 25)
#define VMX_EPT_INVEPT_GLOBAL_CONTEXT (1 << 26) #define VMX_EPT_INVEPT_GLOBAL_CONTEXT (1U << 26)
#define VMX_MIN_NR_VPID 1 #define VMX_MIN_NR_VPID 1
#define VMX_MAX_NR_VPID (1 << 5) #define VMX_MAX_NR_VPID (1 << 5)
@ -322,49 +322,49 @@
#define VMX_VPID_TYPE_ALL_CONTEXT 2 #define VMX_VPID_TYPE_ALL_CONTEXT 2
#define VMX_VPID_TYPE_SINGLE_NON_GLOBAL 3 #define VMX_VPID_TYPE_SINGLE_NON_GLOBAL 3
#define VMX_VPID_INVVPID (1 << 0) /* (32 - 32) */ #define VMX_VPID_INVVPID (1U << 0) /* (32 - 32) */
#define VMX_VPID_INVVPID_INDIVIDUAL_ADDR (1 << 8) /* (40 - 32) */ #define VMX_VPID_INVVPID_INDIVIDUAL_ADDR (1U << 8) /* (40 - 32) */
#define VMX_VPID_INVVPID_SINGLE_CONTEXT (1 << 9) /* (41 - 32) */ #define VMX_VPID_INVVPID_SINGLE_CONTEXT (1U << 9) /* (41 - 32) */
#define VMX_VPID_INVVPID_GLOBAL_CONTEXT (1 << 10) /* (42 - 32) */ #define VMX_VPID_INVVPID_GLOBAL_CONTEXT (1U << 10) /* (42 - 32) */
#define VMX_VPID_INVVPID_SINGLE_NON_GLOBAL (1 << 11) /* (43 - 32) */ #define VMX_VPID_INVVPID_SINGLE_NON_GLOBAL (1U << 11) /* (43 - 32) */
#define VMX_EPT_MT_EPTE_SHIFT 3 #define VMX_EPT_MT_EPTE_SHIFT 3
#define VMX_EPTP_PWL_MASK 0x38 #define VMX_EPTP_PWL_MASK 0x38UL
#define VMX_EPTP_PWL_4 0x18 #define VMX_EPTP_PWL_4 0x18UL
#define VMX_EPTP_PWL_5 0x20 #define VMX_EPTP_PWL_5 0x20UL
#define VMX_EPTP_AD_ENABLE_BIT (1 << 6) #define VMX_EPTP_AD_ENABLE_BIT (1UL << 6)
#define VMX_EPTP_MT_MASK 0x7 #define VMX_EPTP_MT_MASK 0x7UL
#define VMX_EPTP_MT_WB 0x6 #define VMX_EPTP_MT_WB 0x6UL
#define VMX_EPTP_MT_UC 0x0 #define VMX_EPTP_MT_UC 0x0UL
/* VMX exit control bits */ /* VMX exit control bits */
#define VMX_EXIT_CTLS_SAVE_DBG (1<<2) #define VMX_EXIT_CTLS_SAVE_DBG (1U<<2)
#define VMX_EXIT_CTLS_HOST_ADDR64 (1<<9) #define VMX_EXIT_CTLS_HOST_ADDR64 (1U<<9)
#define VMX_EXIT_CTLS_LOAD_PERF (1<<12) #define VMX_EXIT_CTLS_LOAD_PERF (1U<<12)
#define VMX_EXIT_CTLS_ACK_IRQ (1<<15) #define VMX_EXIT_CTLS_ACK_IRQ (1U<<15)
#define VMX_EXIT_CTLS_SAVE_PAT (1<<18) #define VMX_EXIT_CTLS_SAVE_PAT (1U<<18)
#define VMX_EXIT_CTLS_LOAD_PAT (1<<19) #define VMX_EXIT_CTLS_LOAD_PAT (1U<<19)
#define VMX_EXIT_CTLS_SAVE_EFER (1<<20) #define VMX_EXIT_CTLS_SAVE_EFER (1U<<20)
#define VMX_EXIT_CTLS_LOAD_EFER (1<<21) #define VMX_EXIT_CTLS_LOAD_EFER (1U<<21)
#define VMX_EXIT_CTLS_SAVE_PTMR (1<<22) #define VMX_EXIT_CTLS_SAVE_PTMR (1U<<22)
/* VMX entry control bits */ /* VMX entry control bits */
#define VMX_ENTRY_CTLS_LOAD_DBG (1<<2) #define VMX_ENTRY_CTLS_LOAD_DBG (1U<<2)
#define VMX_ENTRY_CTLS_IA32E_MODE (1<<9) #define VMX_ENTRY_CTLS_IA32E_MODE (1U<<9)
#define VMX_ENTRY_CTLS_ENTRY_SMM (1<<10) #define VMX_ENTRY_CTLS_ENTRY_SMM (1U<<10)
#define VMX_ENTRY_CTLS_DEACT_DUAL (1<<11) #define VMX_ENTRY_CTLS_DEACT_DUAL (1U<<11)
#define VMX_ENTRY_CTLS_LOAD_PERF (1<<13) #define VMX_ENTRY_CTLS_LOAD_PERF (1U<<13)
#define VMX_ENTRY_CTLS_LOAD_PAT (1<<14) #define VMX_ENTRY_CTLS_LOAD_PAT (1U<<14)
#define VMX_ENTRY_CTLS_LOAD_EFER (1<<15) #define VMX_ENTRY_CTLS_LOAD_EFER (1U<<15)
/* VMX entry/exit Interrupt info */ /* VMX entry/exit Interrupt info */
#define VMX_INT_INFO_ERR_CODE_VALID (1<<11) #define VMX_INT_INFO_ERR_CODE_VALID (1U<<11)
#define VMX_INT_INFO_VALID (1<<31) #define VMX_INT_INFO_VALID (1U<<31)
#define VMX_INT_TYPE_MASK (0x700) #define VMX_INT_TYPE_MASK (0x700U)
#define VMX_INT_TYPE_EXT_INT 0 #define VMX_INT_TYPE_EXT_INT 0U
#define VMX_INT_TYPE_NMI 2 #define VMX_INT_TYPE_NMI 2U
#define VMX_INT_TYPE_HW_EXP 3 #define VMX_INT_TYPE_HW_EXP 3U
#define VMX_INT_TYPE_SW_EXP 6 #define VMX_INT_TYPE_SW_EXP 6U
/*VM exit qulifications for APIC-access /*VM exit qulifications for APIC-access
* Access type: * Access type:
@ -376,19 +376,19 @@
* 15 = guest-physical access for an instructon fetch or during * 15 = guest-physical access for an instructon fetch or during
* instruction execution * instruction execution
*/ */
#define APIC_ACCESS_TYPE(qual) (((qual) >> 12) & 0xF) #define APIC_ACCESS_TYPE(qual) (((qual) >> 12) & 0xFU)
#define APIC_ACCESS_OFFSET(qual) ((qual) & 0xFFF) #define APIC_ACCESS_OFFSET(qual) ((qual) & 0xFFFU)
#define VM_SUCCESS 0 #define VM_SUCCESS 0
#define VM_FAIL -1 #define VM_FAIL -1
#define VMX_VMENTRY_FAIL 0x80000000 #define VMX_VMENTRY_FAIL 0x80000000U
#ifndef ASSEMBLER #ifndef ASSEMBLER
#define RFLAGS_C (1<<0) #define RFLAGS_C (1U<<0)
#define RFLAGS_Z (1<<6) #define RFLAGS_Z (1U<<6)
/* CR0 bits hv want to trap to track status change */ /* CR0 bits hv want to trap to track status change */
#define CR0_TRAP_MASK (CR0_PE | CR0_PG | CR0_WP) #define CR0_TRAP_MASK (CR0_PE | CR0_PG | CR0_WP)
@ -398,7 +398,7 @@
/* CR4 bits hv want to trap to track status change */ /* CR4 bits hv want to trap to track status change */
#define CR4_TRAP_MASK (CR4_PSE | CR4_PAE) #define CR4_TRAP_MASK (CR4_PSE | CR4_PAE)
#define VMX_SUPPORT_UNRESTRICTED_GUEST (1<<5) #define VMX_SUPPORT_UNRESTRICTED_GUEST (1U<<5)
/* External Interfaces */ /* External Interfaces */
int exec_vmxon_instr(uint32_t pcpu_id); int exec_vmxon_instr(uint32_t pcpu_id);

View File

@ -10,89 +10,89 @@
* Intel IOMMU register specification per version 1.0 public spec. * Intel IOMMU register specification per version 1.0 public spec.
*/ */
#define DMAR_VER_REG 0x0 /* Arch version supported by this IOMMU */ #define DMAR_VER_REG 0x0U /* Arch version supported by this IOMMU */
#define DMAR_CAP_REG 0x8 /* Hardware supported capabilities */ #define DMAR_CAP_REG 0x8U /* Hardware supported capabilities */
#define DMAR_ECAP_REG 0x10 /* Extended capabilities supported */ #define DMAR_ECAP_REG 0x10U /* Extended capabilities supported */
#define DMAR_GCMD_REG 0x18 /* Global command register */ #define DMAR_GCMD_REG 0x18U /* Global command register */
#define DMAR_GSTS_REG 0x1c /* Global status register */ #define DMAR_GSTS_REG 0x1cU /* Global status register */
#define DMAR_RTADDR_REG 0x20 /* Root entry table */ #define DMAR_RTADDR_REG 0x20U /* Root entry table */
#define DMAR_CCMD_REG 0x28 /* Context command reg */ #define DMAR_CCMD_REG 0x28U /* Context command reg */
#define DMAR_FSTS_REG 0x34 /* Fault Status register */ #define DMAR_FSTS_REG 0x34U /* Fault Status register */
#define DMAR_FECTL_REG 0x38 /* Fault control register */ #define DMAR_FECTL_REG 0x38U /* Fault control register */
#define DMAR_FEDATA_REG 0x3c /* Fault event interrupt data register */ #define DMAR_FEDATA_REG 0x3cU /* Fault event interrupt data register */
#define DMAR_FEADDR_REG 0x40 /* Fault event interrupt addr register */ #define DMAR_FEADDR_REG 0x40U /* Fault event interrupt addr register */
#define DMAR_FEUADDR_REG 0x44 /* Upper address register */ #define DMAR_FEUADDR_REG 0x44U /* Upper address register */
#define DMAR_AFLOG_REG 0x58 /* Advanced Fault control */ #define DMAR_AFLOG_REG 0x58U /* Advanced Fault control */
#define DMAR_PMEN_REG 0x64 /* Enable Protected Memory Region */ #define DMAR_PMEN_REG 0x64U /* Enable Protected Memory Region */
#define DMAR_PLMBASE_REG 0x68 /* PMRR Low addr */ #define DMAR_PLMBASE_REG 0x68U /* PMRR Low addr */
#define DMAR_PLMLIMIT_REG 0x6c /* PMRR low limit */ #define DMAR_PLMLIMIT_REG 0x6cU /* PMRR low limit */
#define DMAR_PHMBASE_REG 0x70 /* pmrr high base addr */ #define DMAR_PHMBASE_REG 0x70U /* pmrr high base addr */
#define DMAR_PHMLIMIT_REG 0x78 /* pmrr high limit */ #define DMAR_PHMLIMIT_REG 0x78U /* pmrr high limit */
#define DMAR_IQH_REG 0x80 /* Invalidation queue head register */ #define DMAR_IQH_REG 0x80U /* Invalidation queue head register */
#define DMAR_IQT_REG 0x88 /* Invalidation queue tail register */ #define DMAR_IQT_REG 0x88U /* Invalidation queue tail register */
#define DMAR_IQ_SHIFT 4 /* Invalidation queue head/tail shift */ #define DMAR_IQ_SHIFT 4 /* Invalidation queue head/tail shift */
#define DMAR_IQA_REG 0x90 /* Invalidation queue addr register */ #define DMAR_IQA_REG 0x90U /* Invalidation queue addr register */
#define DMAR_ICS_REG 0x9c /* Invalidation complete status register */ #define DMAR_ICS_REG 0x9cU /* Invalidation complete status register */
#define DMAR_IRTA_REG 0xb8 /* Interrupt remapping table addr register */ #define DMAR_IRTA_REG 0xb8U /* Interrupt remapping table addr register */
#define DMAR_VER_MAJOR(v) (((v) & 0xf0) >> 4) #define DMAR_VER_MAJOR(v) (((v) & 0xf0U) >> 4)
#define DMAR_VER_MINOR(v) ((v) & 0x0f) #define DMAR_VER_MINOR(v) ((v) & 0x0fU)
/* /*
* Decoding Capability Register * Decoding Capability Register
*/ */
#define iommu_cap_pi(c) (((c) >> 59) & 1) #define iommu_cap_pi(c) (((c) >> 59) & 1UL)
#define iommu_cap_read_drain(c) (((c) >> 55) & 1) #define iommu_cap_read_drain(c) (((c) >> 55) & 1UL)
#define iommu_cap_write_drain(c) (((c) >> 54) & 1) #define iommu_cap_write_drain(c) (((c) >> 54) & 1UL)
#define iommu_cap_max_amask_val(c) (((c) >> 48) & 0x3f) #define iommu_cap_max_amask_val(c) (((c) >> 48) & 0x3fUL)
#define iommu_cap_num_fault_regs(c) ((((c) >> 40) & 0xff) + 1) #define iommu_cap_num_fault_regs(c) ((((c) >> 40) & 0xffUL) + 1)
#define iommu_cap_pgsel_inv(c) (((c) >> 39) & 1) #define iommu_cap_pgsel_inv(c) (((c) >> 39) & 1UL)
#define iommu_cap_super_page_val(c) (((c) >> 34) & 0xf) #define iommu_cap_super_page_val(c) (((c) >> 34) & 0xfUL)
#define iommu_cap_super_offset(c) \ #define iommu_cap_super_offset(c) \
(((find_first_bit(&iommu_cap_super_page_val(c), 4)) \ (((find_first_bit(&iommu_cap_super_page_val(c), 4)) \
* OFFSET_STRIDE) + 21) * OFFSET_STRIDE) + 21)
#define iommu_cap_fault_reg_offset(c) ((((c) >> 24) & 0x3ff) * 16) #define iommu_cap_fault_reg_offset(c) ((((c) >> 24) & 0x3ffUL) * 16)
#define iommu_cap_max_fault_reg_offset(c) \ #define iommu_cap_max_fault_reg_offset(c) \
(iommu_cap_fault_reg_offset(c) + iommu_cap_num_fault_regs(c) * 16) (iommu_cap_fault_reg_offset(c) + iommu_cap_num_fault_regs(c) * 16)
#define iommu_cap_zlr(c) (((c) >> 22) & 1) #define iommu_cap_zlr(c) (((c) >> 22) & 1UL)
#define iommu_cap_isoch(c) (((c) >> 23) & 1) #define iommu_cap_isoch(c) (((c) >> 23) & 1UL)
#define iommu_cap_mgaw(c) ((((c) >> 16) & 0x3f) + 1) #define iommu_cap_mgaw(c) ((((c) >> 16) & 0x3f) + 1UL)
#define iommu_cap_sagaw(c) (((c) >> 8) & 0x1f) #define iommu_cap_sagaw(c) (((c) >> 8) & 0x1fUL)
#define iommu_cap_caching_mode(c) (((c) >> 7) & 1) #define iommu_cap_caching_mode(c) (((c) >> 7) & 1UL)
#define iommu_cap_phmr(c) (((c) >> 6) & 1) #define iommu_cap_phmr(c) (((c) >> 6) & 1UL)
#define iommu_cap_plmr(c) (((c) >> 5) & 1) #define iommu_cap_plmr(c) (((c) >> 5) & 1UL)
#define iommu_cap_rwbf(c) (((c) >> 4) & 1) #define iommu_cap_rwbf(c) (((c) >> 4) & 1UL)
#define iommu_cap_afl(c) (((c) >> 3) & 1) #define iommu_cap_afl(c) (((c) >> 3) & 1UL)
#define iommu_cap_ndoms(c) (((unsigned long)1) << (4 + 2 * ((c) & 0x7))) #define iommu_cap_ndoms(c) (((unsigned long)1) << (4 + 2 * ((c) & 0x7UL)))
/* /*
* Decoding Extended Capability Register * Decoding Extended Capability Register
*/ */
#define iommu_ecap_c(c) (((c) >> 0) & 1) #define iommu_ecap_c(c) (((c) >> 0) & 1UL)
#define iommu_ecap_qi(c) (((c) >> 1) & 1) #define iommu_ecap_qi(c) (((c) >> 1) & 1UL)
#define iommu_ecap_dt(c) (((c) >> 2) & 1) #define iommu_ecap_dt(c) (((c) >> 2) & 1UL)
#define iommu_ecap_ir(c) (((c) >> 3) & 1) #define iommu_ecap_ir(c) (((c) >> 3) & 1UL)
#define iommu_ecap_eim(c) (((c) >> 4) & 1) #define iommu_ecap_eim(c) (((c) >> 4) & 1UL)
#define iommu_ecap_pt(c) (((c) >> 6) & 1) #define iommu_ecap_pt(c) (((c) >> 6) & 1UL)
#define iommu_ecap_sc(c) (((c) >> 7) & 1) #define iommu_ecap_sc(c) (((c) >> 7) & 1UL)
#define iommu_ecap_iro(c) (((c) >> 8) & 0x3ff) #define iommu_ecap_iro(c) (((c) >> 8) & 0x3ffUL)
#define iommu_ecap_mhmv(c) (((c) >> 20) & 0xf) #define iommu_ecap_mhmv(c) (((c) >> 20) & 0xfUL)
#define iommu_ecap_ecs(c) (((c) >> 24) & 1) #define iommu_ecap_ecs(c) (((c) >> 24) & 1UL)
#define iommu_ecap_mts(c) (((c) >> 25) & 1) #define iommu_ecap_mts(c) (((c) >> 25) & 1UL)
#define iommu_ecap_nest(c) (((c) >> 26) & 1) #define iommu_ecap_nest(c) (((c) >> 26) & 1UL)
#define iommu_ecap_dis(c) (((c) >> 27) & 1) #define iommu_ecap_dis(c) (((c) >> 27) & 1UL)
#define iommu_ecap_prs(c) (((c) >> 29) & 1) #define iommu_ecap_prs(c) (((c) >> 29) & 1UL)
#define iommu_ecap_ers(c) (((c) >> 30) & 1) #define iommu_ecap_ers(c) (((c) >> 30) & 1UL)
#define iommu_ecap_srs(c) (((c) >> 31) & 1) #define iommu_ecap_srs(c) (((c) >> 31) & 1UL)
#define iommu_ecap_nwfs(c) (((c) >> 33) & 1) #define iommu_ecap_nwfs(c) (((c) >> 33) & 1UL)
#define iommu_ecap_eafs(c) (((c) >> 34) & 1) #define iommu_ecap_eafs(c) (((c) >> 34) & 1UL)
#define iommu_ecap_pss(c) (((c) >> 35) & 0x1f) #define iommu_ecap_pss(c) (((c) >> 35) & 0x1fUL)
#define iommu_ecap_pasid(c) (((c) >> 40) & 1) #define iommu_ecap_pasid(c) (((c) >> 40) & 1UL)
#define iommu_ecap_dit(c) (((c) >> 41) & 1) #define iommu_ecap_dit(c) (((c) >> 41) & 1UL)
#define iommu_ecap_pds(c) (((c) >> 42) & 1) #define iommu_ecap_pds(c) (((c) >> 42) & 1UL)
/* PMEN_REG */ /* PMEN_REG */
#define DMA_PMEN_EPM (((uint32_t)1)<<31) #define DMA_PMEN_EPM (((uint32_t)1)<<31)
@ -121,68 +121,68 @@
#define DMA_GSTS_CFIS (((uint32_t)1) << 23) #define DMA_GSTS_CFIS (((uint32_t)1) << 23)
/* CCMD_REG */ /* CCMD_REG */
#define DMA_CCMD_ICC (((uint64_t)1) << 63) #define DMA_CCMD_ICC (((uint64_t)1UL) << 63)
#define DMA_CCMD_ICC_32 (((uint32_t)1) << 31) #define DMA_CCMD_ICC_32 (((uint32_t)1UL) << 31)
#define DMA_CCMD_GLOBAL_INVL (((uint64_t)1) << 61) #define DMA_CCMD_GLOBAL_INVL (((uint64_t)1UL) << 61)
#define DMA_CCMD_DOMAIN_INVL (((uint64_t)2) << 61) #define DMA_CCMD_DOMAIN_INVL (((uint64_t)2UL) << 61)
#define DMA_CCMD_DEVICE_INVL (((uint64_t)3) << 61) #define DMA_CCMD_DEVICE_INVL (((uint64_t)3UL) << 61)
#define DMA_CCMD_FM(m) (((uint64_t)((m) & 0x3)) << 32) #define DMA_CCMD_FM(m) (((uint64_t)((m) & 0x3UL)) << 32)
#define DMA_CCMD_MASK_NOBIT 0 #define DMA_CCMD_MASK_NOBIT 0UL
#define DMA_CCMD_MASK_1BIT 1 #define DMA_CCMD_MASK_1BIT 1UL
#define DMA_CCMD_MASK_2BIT 2 #define DMA_CCMD_MASK_2BIT 2UL
#define DMA_CCMD_MASK_3BIT 3 #define DMA_CCMD_MASK_3BIT 3UL
#define DMA_CCMD_SID(s) (((uint64_t)((s) & 0xffff)) << 16) #define DMA_CCMD_SID(s) (((uint64_t)((s) & 0xffffUL)) << 16)
#define DMA_CCMD_DID(d) ((uint64_t)((d) & 0xffff)) #define DMA_CCMD_DID(d) ((uint64_t)((d) & 0xffffUL))
#define DMA_CCMD_GET_CAIG_32(v) (((uint32_t)(v) >> 27) & 0x3) #define DMA_CCMD_GET_CAIG_32(v) (((uint32_t)(v) >> 27) & 0x3U)
/* IOTLB_REG */ /* IOTLB_REG */
#define DMA_IOTLB_IVT (((uint64_t)1) << 63) #define DMA_IOTLB_IVT (((uint64_t)1UL) << 63)
#define DMA_IOTLB_IVT_32 (((uint32_t)1) << 31) #define DMA_IOTLB_IVT_32 (((uint32_t)1U) << 31)
#define DMA_IOTLB_GLOBAL_INVL (((uint64_t)1) << 60) #define DMA_IOTLB_GLOBAL_INVL (((uint64_t)1UL) << 60)
#define DMA_IOTLB_DOMAIN_INVL (((uint64_t)2) << 60) #define DMA_IOTLB_DOMAIN_INVL (((uint64_t)2UL) << 60)
#define DMA_IOTLB_PAGE_INVL (((uint64_t)3) << 60) #define DMA_IOTLB_PAGE_INVL (((uint64_t)3UL) << 60)
#define DMA_IOTLB_DR (((uint64_t)1) << 49) #define DMA_IOTLB_DR (((uint64_t)1UL) << 49)
#define DMA_IOTLB_DW (((uint64_t)1) << 48) #define DMA_IOTLB_DW (((uint64_t)1UL) << 48)
#define DMA_IOTLB_DID(d) \ #define DMA_IOTLB_DID(d) \
(((uint64_t)((d) & 0xffff)) << 32) (((uint64_t)((d) & 0xffffUL)) << 32)
#define DMA_IOTLB_GET_IAIG_32(v) (((uint32_t)(v) >> 25) & 0x3) #define DMA_IOTLB_GET_IAIG_32(v) (((uint32_t)(v) >> 25) & 0x3U)
/* INVALIDATE_ADDRESS_REG */ /* INVALIDATE_ADDRESS_REG */
#define DMA_IOTLB_INVL_ADDR_AM(m) ((uint64_t)((m) & 0x3f)) #define DMA_IOTLB_INVL_ADDR_AM(m) ((uint64_t)((m) & 0x3fUL))
#define DMA_IOTLB_INVL_ADDR_IH_UNMODIFIED (((uint64_t)1) << 6) #define DMA_IOTLB_INVL_ADDR_IH_UNMODIFIED (((uint64_t)1UL) << 6)
/* FECTL_REG */ /* FECTL_REG */
#define DMA_FECTL_IM (((uint32_t)1) << 31) #define DMA_FECTL_IM (((uint32_t)1U) << 31)
/* FSTS_REG */ /* FSTS_REG */
#define DMA_FSTS_PFO(s) (((s) >> 0) & 1) #define DMA_FSTS_PFO(s) (((s) >> 0) & 1U)
#define DMA_FSTS_PPF(s) (((s) >> 1) & 1) #define DMA_FSTS_PPF(s) (((s) >> 1) & 1U)
#define DMA_FSTS_AFO(s) (((s) >> 2) & 1) #define DMA_FSTS_AFO(s) (((s) >> 2) & 1U)
#define DMA_FSTS_APF(s) (((s) >> 3) & 1) #define DMA_FSTS_APF(s) (((s) >> 3) & 1U)
#define DMA_FSTS_IQE(s) (((s) >> 4) & 1) #define DMA_FSTS_IQE(s) (((s) >> 4) & 1U)
#define DMA_FSTS_ICE(s) (((s) >> 5) & 1) #define DMA_FSTS_ICE(s) (((s) >> 5) & 1U)
#define DMA_FSTS_ITE(s) (((s) >> 6) & 1) #define DMA_FSTS_ITE(s) (((s) >> 6) & 1U)
#define DMA_FSTS_PRO(s) (((s) >> 7) & 1) #define DMA_FSTS_PRO(s) (((s) >> 7) & 1U)
#define DMA_FSTS_FRI(s) (((s) >> 8) & 0xFF) #define DMA_FSTS_FRI(s) (((s) >> 8) & 0xFFU)
/* FRCD_REGs: upper 64 bits*/ /* FRCD_REGs: upper 64 bits*/
#define DMA_FRCD_UP_F(r) (((r) >> 63) & 1) #define DMA_FRCD_UP_F(r) (((r) >> 63) & 1UL)
#define DMA_FRCD_UP_T(r) (((r) >> 62) & 1) #define DMA_FRCD_UP_T(r) (((r) >> 62) & 1UL)
#define DMA_FRCD_UP_AT(r) (((r) >> 60) & 3) #define DMA_FRCD_UP_AT(r) (((r) >> 60) & 3UL)
#define DMA_FRCD_UP_PASID(r) (((r) >> 40) & 0xfffff) #define DMA_FRCD_UP_PASID(r) (((r) >> 40) & 0xfffffUL)
#define DMA_FRCD_UP_FR(r) (((r) >> 32) & 0xff) #define DMA_FRCD_UP_FR(r) (((r) >> 32) & 0xffUL)
#define DMA_FRCD_UP_PP(r) (((r) >> 31) & 1) #define DMA_FRCD_UP_PP(r) (((r) >> 31) & 1UL)
#define DMA_FRCD_UP_EXE(r) (((r) >> 30) & 1) #define DMA_FRCD_UP_EXE(r) (((r) >> 30) & 1UL)
#define DMA_FRCD_UP_PRIV(r) (((r) >> 29) & 1) #define DMA_FRCD_UP_PRIV(r) (((r) >> 29) & 1UL)
#define DMA_FRCD_UP_SID(r) (((r) >> 0) & 0xffff) #define DMA_FRCD_UP_SID(r) (((r) >> 0) & 0xffffUL)
#define DMAR_CONTEXT_TRANSLATION_TYPE_TRANSLATED 0x00 #define DMAR_CONTEXT_TRANSLATION_TYPE_TRANSLATED 0x00U
#define DMAR_CONTEXT_TRANSLATION_TYPE_RESERVED 0x01 #define DMAR_CONTEXT_TRANSLATION_TYPE_RESERVED 0x01U
#define DMAR_CONTEXT_TRANSLATION_TYPE_PASSED_THROUGH 0x02 #define DMAR_CONTEXT_TRANSLATION_TYPE_PASSED_THROUGH 0x02U
#define DRHD_FLAG_INCLUDE_PCI_ALL_MASK (1) #define DRHD_FLAG_INCLUDE_PCI_ALL_MASK (1U)
#define DEVFUN(dev, fun) (((dev & 0x1F) << 3) | ((fun & 0x7))) #define DEVFUN(dev, fun) (((dev & 0x1FU) << 3) | ((fun & 0x7U)))
struct dmar_dev_scope { struct dmar_dev_scope {
uint8_t bus; uint8_t bus;