ACPI: Make DMAR flags settable
Add a parameter to acpi_create_dmar() for the flags field and define flags given by the spec [1]. [1] Intel Virtualization Technology for Directed I/O Architecture Specification Document-Number: D51397 Change-Id: I03ae32f13bb0061bd3b9bef607db175d9b0bc5e1 Signed-off-by: Nico Huber <nico.huber@secunet.com> Reviewed-on: http://review.coreboot.org/12191 Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Tested-by: build bot (Jenkins) Reviewed-by: Duncan Laurie <dlaurie@google.com> Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
parent
50a29f8170
commit
e561f35fa5
|
@ -389,7 +389,7 @@ void acpi_create_srat(acpi_srat_t *srat,
|
||||||
header->checksum = acpi_checksum((void *)srat, header->length);
|
header->checksum = acpi_checksum((void *)srat, header->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void acpi_create_dmar(acpi_dmar_t *dmar,
|
void acpi_create_dmar(acpi_dmar_t *dmar, enum dmar_flags flags,
|
||||||
unsigned long (*acpi_fill_dmar) (unsigned long))
|
unsigned long (*acpi_fill_dmar) (unsigned long))
|
||||||
{
|
{
|
||||||
acpi_header_t *header = &(dmar->header);
|
acpi_header_t *header = &(dmar->header);
|
||||||
|
@ -407,7 +407,7 @@ void acpi_create_dmar(acpi_dmar_t *dmar,
|
||||||
header->revision = 1;
|
header->revision = 1;
|
||||||
|
|
||||||
dmar->host_address_width = 40 - 1; /* FIXME: == MTRR size? */
|
dmar->host_address_width = 40 - 1; /* FIXME: == MTRR size? */
|
||||||
dmar->flags = 0;
|
dmar->flags = flags;
|
||||||
|
|
||||||
current = acpi_fill_dmar(current);
|
current = acpi_fill_dmar(current);
|
||||||
|
|
||||||
|
|
|
@ -220,6 +220,11 @@ enum {
|
||||||
DRHD_INCLUDE_PCI_ALL = 1
|
DRHD_INCLUDE_PCI_ALL = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum dmar_flags {
|
||||||
|
DMAR_INTR_REMAP = 1,
|
||||||
|
DMAR_X2APIC_OPT_OUT = 2,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct dmar_entry {
|
typedef struct dmar_entry {
|
||||||
u16 type;
|
u16 type;
|
||||||
u16 length;
|
u16 length;
|
||||||
|
@ -543,7 +548,7 @@ void acpi_create_mcfg(acpi_mcfg_t *mcfg);
|
||||||
|
|
||||||
void acpi_create_facs(acpi_facs_t *facs);
|
void acpi_create_facs(acpi_facs_t *facs);
|
||||||
|
|
||||||
void acpi_create_dmar(acpi_dmar_t *dmar,
|
void acpi_create_dmar(acpi_dmar_t *dmar, enum dmar_flags flags,
|
||||||
unsigned long (*acpi_fill_dmar) (unsigned long));
|
unsigned long (*acpi_fill_dmar) (unsigned long));
|
||||||
unsigned long acpi_create_dmar_drhd(unsigned long current, u8 flags,
|
unsigned long acpi_create_dmar_drhd(unsigned long current, u8 flags,
|
||||||
u16 segment, u32 bar);
|
u16 segment, u32 bar);
|
||||||
|
|
|
@ -116,7 +116,7 @@ unsigned long northbridge_write_acpi_tables(device_t device,
|
||||||
|
|
||||||
printk(BIOS_DEBUG, "ACPI: * DMAR\n");
|
printk(BIOS_DEBUG, "ACPI: * DMAR\n");
|
||||||
dmar = (acpi_dmar_t *) current;
|
dmar = (acpi_dmar_t *) current;
|
||||||
acpi_create_dmar(dmar, acpi_fill_dmar);
|
acpi_create_dmar(dmar, 0, acpi_fill_dmar);
|
||||||
current += dmar->header.length;
|
current += dmar->header.length;
|
||||||
ALIGN_CURRENT;
|
ALIGN_CURRENT;
|
||||||
acpi_add_table(rsdp, dmar);
|
acpi_add_table(rsdp, dmar);
|
||||||
|
|
Loading…
Reference in New Issue