summaryrefslogtreecommitdiff
path: root/src/acpi/acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/acpi/acpi.c')
-rw-r--r--src/acpi/acpi.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c
index 6c1828aba4..0874e6e21f 100644
--- a/src/acpi/acpi.c
+++ b/src/acpi/acpi.c
@@ -508,6 +508,23 @@ int acpi_create_srat_mem(acpi_srat_mem_t *mem, u8 node, u32 basek, u32 sizek,
return mem->length;
}
+int acpi_create_srat_gia_pci(acpi_srat_gia_t *gia, u32 proximity_domain,
+ u16 seg, u8 bus, u8 dev, u8 func, u32 flags)
+{
+ gia->type = ACPI_SRAT_STRUCTURE_GIA;
+ gia->length = sizeof(acpi_srat_gia_t);
+ gia->proximity_domain = proximity_domain;
+ gia->dev_handle_type = ACPI_SRAT_GIA_DEV_HANDLE_PCI;
+ /* First two bytes has segment number */
+ memcpy(gia->dev_handle, &seg, 2);
+ gia->dev_handle[2] = bus; /* Byte 2 has bus number */
+ /* Byte 3 has bits 7:3 for dev, bits 2:0 for func */
+ gia->dev_handle[3] = PCI_SLOT(dev) | PCI_FUNC(func);
+ gia->flags = flags;
+
+ return gia->length;
+}
+
/* http://www.microsoft.com/whdc/system/sysinternals/sratdwn.mspx */
void acpi_create_srat(acpi_srat_t *srat,
unsigned long (*acpi_fill_srat)(unsigned long current))