aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/acpi.h
diff options
context:
space:
mode:
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-09-12 15:42:39 +0100
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-09-12 15:42:39 +0100
commitf8fc0c5815e7f6b84092a9cf1f5b3c9e99322dd2 (patch)
treec7b5ec9ad0fcf965ea4ec7a1ae056e622df9ad14 /xen/include/xen/acpi.h
parent62916af3ba5007e0a883b735a0d89a87b65170a6 (diff)
downloadxen-f8fc0c5815e7f6b84092a9cf1f5b3c9e99322dd2.tar.gz
xen-f8fc0c5815e7f6b84092a9cf1f5b3c9e99322dd2.tar.bz2
xen-f8fc0c5815e7f6b84092a9cf1f5b3c9e99322dd2.zip
Generic and VT-d specific Xen header changes for PCI passthru.
Signed-off-by: Allen Kay <allen.m.kay@intel.com> Signed-off-by: Guy Zana <guy@neocleus.com>
Diffstat (limited to 'xen/include/xen/acpi.h')
-rw-r--r--xen/include/xen/acpi.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
index aa7a36aba4..ea29c09b9a 100644
--- a/xen/include/xen/acpi.h
+++ b/xen/include/xen/acpi.h
@@ -367,9 +367,79 @@ enum acpi_table_id {
ACPI_SPMI,
ACPI_HPET,
ACPI_MCFG,
+ ACPI_DMAR,
ACPI_TABLE_COUNT
};
+/* DMA Remapping Reporting Table (DMAR) */
+
+#define DMAR_FLAGS_INTR_REMAP 0x1 /* intr remap supported */
+struct acpi_table_dmar {
+ struct acpi_table_header header;
+ u8 haw; /* Host address Width */
+ u8 flags;
+ u8 reserved[10];
+} __attribute__ ((packed));
+
+struct acpi_dmar_entry_header {
+ u16 type;
+ u16 length;
+} __attribute__((packed));
+
+enum acpi_dmar_entry_type {
+ ACPI_DMAR_DRHD = 0,
+ ACPI_DMAR_RMRR,
+ ACPI_DMAR_ATSR,
+ ACPI_DMAR_ENTRY_COUNT
+};
+
+#define DRHD_FLAGS_INCLUDE_ALL 0x1 /* drhd remaps remaining devices */
+struct acpi_table_drhd {
+ struct acpi_dmar_entry_header header;
+ u8 flags;
+ u8 reserved;
+ u16 segment;
+ u64 address; /* register base address for this drhd */
+} __attribute__ ((packed));
+
+struct acpi_table_rmrr {
+ struct acpi_dmar_entry_header header;
+ u16 reserved;
+ u16 segment;
+ u64 base_address;
+ u64 end_address;
+} __attribute__ ((packed));
+
+struct acpi_table_atsr {
+ struct acpi_dmar_entry_header header;
+ u8 flags;
+ u8 reserved;
+ u16 segment;
+} __attribute__ ((packed));
+
+enum acpi_dev_scope_type {
+ ACPI_DEV_ENDPOINT=0x01, /* PCI Endpoing device */
+ ACPI_DEV_P2PBRIDGE, /* PCI-PCI Bridge */
+ ACPI_DEV_IOAPIC, /* IOAPIC device*/
+ ACPI_DEV_MSI_HPET, /* MSI capable HPET*/
+ ACPI_DEV_ENTRY_COUNT
+};
+
+struct acpi_dev_scope {
+ u8 dev_type;
+ u8 length;
+ u8 reserved[2];
+ u8 enum_id;
+ u8 start_bus;
+} __attribute__((packed));
+
+struct acpi_pci_path {
+ u8 dev;
+ u8 fn;
+} __attribute__((packed));
+
+typedef int (*acpi_dmar_entry_handler) (struct acpi_dmar_entry_header *header, const unsigned long end);
+
typedef int (*acpi_table_handler) (unsigned long phys_addr, unsigned long size);
extern acpi_table_handler acpi_table_ops[ACPI_TABLE_COUNT];