[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 1/8] acpi: Add VIOT structure definitions
From: |
Jean-Philippe Brucker |
Subject: |
[PATCH v2 1/8] acpi: Add VIOT structure definitions |
Date: |
Fri, 3 Sep 2021 16:32:02 +0200 |
The ACPI Virtual I/O Translation table (VIOT) table describes I/O
topology for paravirtual devices. At the moment it describes the
relation between virtio-iommu devices and their endpoints. Add the
structure definitions for VIOT.
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
---
Following the latest spec draft, and related acpica change
https://jpbrucker.net/virtio-iommu/viot/viot-v9.pdf
https://github.com/acpica/acpica/commit/fc4e33319c1ee08f20f5c44853dd8426643f6dfd
---
include/hw/acpi/acpi-defs.h | 60 +++++++++++++++++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/include/hw/acpi/acpi-defs.h b/include/hw/acpi/acpi-defs.h
index cf9f44299c..adbf7d7b77 100644
--- a/include/hw/acpi/acpi-defs.h
+++ b/include/hw/acpi/acpi-defs.h
@@ -618,4 +618,64 @@ struct AcpiIortRC {
} QEMU_PACKED;
typedef struct AcpiIortRC AcpiIortRC;
+/*
+ * Virtual I/O Translation Table
+ */
+struct AcpiViot {
+ ACPI_TABLE_HEADER_DEF
+ uint16_t node_count;
+ uint16_t node_offset;
+ uint8_t reserved[8];
+} QEMU_PACKED;
+typedef struct AcpiViot AcpiViot;
+
+#define ACPI_VIOT_NODE_HEADER_DEF /* Fields common to all nodes */ \
+ uint8_t type; \
+ uint8_t reserved; \
+ uint16_t length;
+
+/* Values for node Type above */
+enum {
+ ACPI_VIOT_NODE_PCI_RANGE = 0x01,
+ ACPI_VIOT_NODE_MMIO = 0x02,
+ ACPI_VIOT_NODE_VIRTIO_IOMMU_PCI = 0x03,
+ ACPI_VIOT_NODE_VIRTIO_IOMMU_MMIO = 0x04,
+};
+
+struct AcpiViotPciRange {
+ ACPI_VIOT_NODE_HEADER_DEF
+ uint32_t endpoint_start;
+ uint16_t segment_start;
+ uint16_t segment_end;
+ uint16_t bdf_start;
+ uint16_t bdf_end;
+ uint16_t output_node;
+ uint8_t reserved1[6];
+} QEMU_PACKED;
+typedef struct AcpiViotPciRange AcpiViotPciRange;
+
+struct AcpiViotMmio {
+ ACPI_VIOT_NODE_HEADER_DEF
+ uint32_t endpoint;
+ uint64_t base_address;
+ uint16_t output_node;
+ uint8_t reserved1[6];
+} QEMU_PACKED;
+typedef struct AcpiViotMmio AcpiViotMmio;
+
+struct AcpiViotVirtioIommuPci {
+ ACPI_VIOT_NODE_HEADER_DEF
+ uint16_t segment;
+ uint16_t bdf;
+ uint8_t reserved1[8];
+} QEMU_PACKED;
+typedef struct AcpiViotVirtioIommuPci AcpiViotVirtioIommuPci;
+
+struct AcpiViotVirtioIommuMmio {
+ ACPI_VIOT_NODE_HEADER_DEF
+ uint8_t reserved1[4];
+ uint64_t base_address;
+} QEMU_PACKED;
+typedef struct AcpiViotVirtioIommuMmio AcpiViotVirtioIommuMmio;
+
#endif
--
2.33.0