acpi: enable INTR for DMAR report structure
In ACPI DMA remapping report structure, enable INTR flag when specified. Signed-off-by: Peter Xu <peterx@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
1121e0afdc
commit
d46114f9ec
@ -59,6 +59,7 @@
|
|||||||
|
|
||||||
#include "qapi/qmp/qint.h"
|
#include "qapi/qmp/qint.h"
|
||||||
#include "qom/qom-qobject.h"
|
#include "qom/qom-qobject.h"
|
||||||
|
#include "hw/i386/x86-iommu.h"
|
||||||
|
|
||||||
#include "hw/acpi/ipmi.h"
|
#include "hw/acpi/ipmi.h"
|
||||||
|
|
||||||
@ -2454,6 +2455,10 @@ build_mcfg_q35(GArray *table_data, BIOSLinker *linker, AcpiMcfgInfo *info)
|
|||||||
build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL, NULL);
|
build_header(linker, table_data, (void *)mcfg, sig, len, 1, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VT-d spec 8.1 DMA Remapping Reporting Structure
|
||||||
|
* (version Oct. 2014 or later)
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
build_dmar_q35(GArray *table_data, BIOSLinker *linker)
|
build_dmar_q35(GArray *table_data, BIOSLinker *linker)
|
||||||
{
|
{
|
||||||
@ -2461,10 +2466,17 @@ build_dmar_q35(GArray *table_data, BIOSLinker *linker)
|
|||||||
|
|
||||||
AcpiTableDmar *dmar;
|
AcpiTableDmar *dmar;
|
||||||
AcpiDmarHardwareUnit *drhd;
|
AcpiDmarHardwareUnit *drhd;
|
||||||
|
uint8_t dmar_flags = 0;
|
||||||
|
X86IOMMUState *iommu = x86_iommu_get_default();
|
||||||
|
|
||||||
|
assert(iommu);
|
||||||
|
if (iommu->intr_supported) {
|
||||||
|
dmar_flags |= 0x1; /* Flags: 0x1: INT_REMAP */
|
||||||
|
}
|
||||||
|
|
||||||
dmar = acpi_data_push(table_data, sizeof(*dmar));
|
dmar = acpi_data_push(table_data, sizeof(*dmar));
|
||||||
dmar->host_address_width = VTD_HOST_ADDRESS_WIDTH - 1;
|
dmar->host_address_width = VTD_HOST_ADDRESS_WIDTH - 1;
|
||||||
dmar->flags = 0; /* No intr_remap for now */
|
dmar->flags = dmar_flags;
|
||||||
|
|
||||||
/* DMAR Remapping Hardware Unit Definition structure */
|
/* DMAR Remapping Hardware Unit Definition structure */
|
||||||
drhd = acpi_data_push(table_data, sizeof(*drhd));
|
drhd = acpi_data_push(table_data, sizeof(*drhd));
|
||||||
|
@ -44,6 +44,8 @@
|
|||||||
#define VTD_HOST_ADDRESS_WIDTH 39
|
#define VTD_HOST_ADDRESS_WIDTH 39
|
||||||
#define VTD_HAW_MASK ((1ULL << VTD_HOST_ADDRESS_WIDTH) - 1)
|
#define VTD_HAW_MASK ((1ULL << VTD_HOST_ADDRESS_WIDTH) - 1)
|
||||||
|
|
||||||
|
#define DMAR_REPORT_F_INTR (1)
|
||||||
|
|
||||||
typedef struct VTDContextEntry VTDContextEntry;
|
typedef struct VTDContextEntry VTDContextEntry;
|
||||||
typedef struct VTDContextCacheEntry VTDContextCacheEntry;
|
typedef struct VTDContextCacheEntry VTDContextCacheEntry;
|
||||||
typedef struct IntelIOMMUState IntelIOMMUState;
|
typedef struct IntelIOMMUState IntelIOMMUState;
|
||||||
|
Loading…
Reference in New Issue
Block a user