aboutsummaryrefslogtreecommitdiff
path: root/src/acpi/acpi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/acpi/acpi.c')
-rw-r--r--src/acpi/acpi.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c
index 867e163c99..b350bc389e 100644
--- a/src/acpi/acpi.c
+++ b/src/acpi/acpi.c
@@ -638,6 +638,21 @@ unsigned long acpi_create_dmar_andd(unsigned long current, u8 device_number,
return andd->length;
}
+unsigned long acpi_create_dmar_satc(unsigned long current, u8 flags,
+ u16 segment, const char *device_scope)
+{
+ dmar_satc_entry_t *satc = (dmar_satc_entry_t *)current;
+ int satc_len = sizeof(dmar_satc_entry_t) + strlen(device_scope) + 1;
+ memset(satc, 0, satc_len);
+ satc->type = DMAR_SATC;
+ satc->length = satc_len;
+ satc->flags = flags;
+ satc->segment_number = segment;
+ memcpy(&satc->device_scope, device_scope, strlen(device_scope));
+
+ return satc->length;
+}
+
void acpi_dmar_drhd_fixup(unsigned long base, unsigned long current)
{
dmar_entry_t *drhd = (dmar_entry_t *)base;
@@ -656,6 +671,12 @@ void acpi_dmar_atsr_fixup(unsigned long base, unsigned long current)
atsr->length = current - base;
}
+void acpi_dmar_satc_fixup(unsigned long base, unsigned long current)
+{
+ dmar_satc_entry_t *satc = (dmar_satc_entry_t *)base;
+ satc->length = current - base;
+}
+
static unsigned long acpi_create_dmar_ds(unsigned long current,
enum dev_scope_type type, u8 enumeration_id, u8 bus, u8 dev, u8 fn)
{