ACPI: Add SATC structure for DMAR table

The SoC integrated address translation cache(SATC) reporting structure
is added to Virtualization Technology for Directed I/O specification
Rev3.2. This change adds an ACPI Name-Space Device Declaration structure
SATC which has type 5 reporting structure.

BUG=None
TEST=Built image successfully.

Signed-off-by: John Zhao <john.zhao@intel.com>
Change-Id: I91d1384083c98b75bcbdddd9cc7b7a26fab25d9d
Reviewed-on: https://review.coreboot.org/c/coreboot/+/51776
Reviewed-by: Lance Zhao
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/acpi/acpi.c b/src/acpi/acpi.c
index 867e163..b350bc3 100644
--- a/src/acpi/acpi.c
+++ b/src/acpi/acpi.c
@@ -638,6 +638,21 @@
 	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 @@
 	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)
 {