ACPICA: ACPI 6.4: PMTT: add new fields/structures
[linux-2.6-microblaze.git] / include / acpi / actbl2.h
index d6478c4..d8e1db5 100644 (file)
@@ -276,6 +276,7 @@ struct acpi_ivrs_header {
 enum acpi_ivrs_type {
        ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
        ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
+       ACPI_IVRS_TYPE_HARDWARE3 = 0x40,
        ACPI_IVRS_TYPE_MEMORY1 = 0x20,
        ACPI_IVRS_TYPE_MEMORY2 = 0x21,
        ACPI_IVRS_TYPE_MEMORY3 = 0x22
@@ -364,7 +365,11 @@ enum acpi_ivrs_device_entry_type {
        ACPI_IVRS_TYPE_ALIAS_START = 67,        /* Uses struct acpi_ivrs_device8a */
        ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */
        ACPI_IVRS_TYPE_EXT_START = 71,  /* Uses struct acpi_ivrs_device8b */
-       ACPI_IVRS_TYPE_SPECIAL = 72     /* Uses struct acpi_ivrs_device8c */
+       ACPI_IVRS_TYPE_SPECIAL = 72,    /* Uses struct acpi_ivrs_device8c */
+
+       /* Variable-length device entries */
+
+       ACPI_IVRS_TYPE_HID = 240        /* Uses ACPI_IVRS_DEVICE_HID */
 };
 
 /* Values for Data field above */
@@ -416,6 +421,16 @@ struct acpi_ivrs_device8c {
 #define ACPI_IVHD_IOAPIC            1
 #define ACPI_IVHD_HPET              2
 
+/* Type 240: variable-length device entry */
+
+struct acpi_ivrs_device_hid {
+       struct acpi_ivrs_de_header header;
+       u64 acpi_hid;
+       u64 acpi_cid;
+       u8 uid_type;
+       u8 uid_length;
+};
+
 /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
 
 struct acpi_ivrs_memory {
@@ -516,7 +531,8 @@ enum acpi_madt_type {
        ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
        ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
        ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
-       ACPI_MADT_TYPE_RESERVED = 16    /* 16 and greater are reserved */
+       ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
+       ACPI_MADT_TYPE_RESERVED = 17    /* 17 and greater are reserved */
 };
 
 /*
@@ -723,6 +739,15 @@ struct acpi_madt_generic_translator {
        u32 reserved2;
 };
 
+/* 16: Multiprocessor wakeup (ACPI 6.4) */
+
+struct acpi_madt_multiproc_wakeup {
+       struct acpi_subtable_header header;
+       u16 mailbox_version;
+       u32 reserved;           /* reserved - must be zero */
+       u64 base_address;
+};
+
 /*
  * Common flags fields for MADT subtables
  */
@@ -983,12 +1008,14 @@ struct acpi_nfit_system_address {
        u64 address;
        u64 length;
        u64 memory_mapping;
+       u64 location_cookie;    /* ACPI 6.4 */
 };
 
 /* Flags */
 
 #define ACPI_NFIT_ADD_ONLINE_ONLY       (1)    /* 00: Add/Online Operation Only */
 #define ACPI_NFIT_PROXIMITY_VALID       (1<<1) /* 01: Proximity Domain Valid */
+#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */
 
 /* Range Type GUIDs appear in the include/acuuid.h file */
 
@@ -1184,7 +1211,8 @@ enum acpi_pcct_type {
        ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,   /* ACPI 6.1 */
        ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,     /* ACPI 6.2 */
        ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,      /* ACPI 6.2 */
-       ACPI_PCCT_TYPE_RESERVED = 5     /* 5 and greater are reserved */
+       ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,        /* ACPI 6.4 */
+       ACPI_PCCT_TYPE_RESERVED = 6     /* 6 and greater are reserved */
 };
 
 /*
@@ -1299,6 +1327,24 @@ struct acpi_pcct_ext_pcc_slave {
        u64 error_status_mask;
 };
 
+/* 5: HW Registers based Communications Subspace */
+
+struct acpi_pcct_hw_reg {
+       struct acpi_subtable_header header;
+       u16 version;
+       u64 base_address;
+       u64 length;
+       struct acpi_generic_address doorbell_register;
+       u64 doorbell_preserve;
+       u64 doorbell_write;
+       struct acpi_generic_address cmd_complete_register;
+       u64 cmd_complete_mask;
+       struct acpi_generic_address error_status_register;
+       u64 error_status_mask;
+       u32 nominal_latency;
+       u32 min_turnaround_time;
+};
+
 /* Values for doorbell flags above */
 
 #define ACPI_PCCT_INTERRUPT_POLARITY    (1)
@@ -1364,7 +1410,11 @@ struct acpi_pdtt_channel {
 
 struct acpi_table_pmtt {
        struct acpi_table_header header;        /* Common ACPI table header */
-       u32 reserved;
+       u32 memory_device_count;
+       /*
+        * Immediately followed by:
+        * MEMORY_DEVICE memory_device_struct[memory_device_count];
+        */
 };
 
 /* Common header for PMTT subtables that follow main table */
@@ -1375,6 +1425,12 @@ struct acpi_pmtt_header {
        u16 length;
        u16 flags;
        u16 reserved2;
+       u32 memory_device_count;        /* Zero means no memory device structs follow */
+       /*
+        * Immediately followed by:
+        * u8 type_specific_data[]
+        * MEMORY_DEVICE memory_device_struct[memory_device_count];
+        */
 };
 
 /* Values for Type field above */
@@ -1382,7 +1438,8 @@ struct acpi_pmtt_header {
 #define ACPI_PMTT_TYPE_SOCKET           0
 #define ACPI_PMTT_TYPE_CONTROLLER       1
 #define ACPI_PMTT_TYPE_DIMM             2
-#define ACPI_PMTT_TYPE_RESERVED         3      /* 0x03-0xFF are reserved */
+#define ACPI_PMTT_TYPE_RESERVED         3      /* 0x03-0xFE are reserved */
+#define ACPI_PMTT_TYPE_VENDOR           0xFF
 
 /* Values for Flags field above */
 
@@ -1401,37 +1458,43 @@ struct acpi_pmtt_socket {
        u16 socket_id;
        u16 reserved;
 };
+       /*
+        * Immediately followed by:
+        * MEMORY_DEVICE memory_device_struct[memory_device_count];
+        */
 
 /* 1: Memory Controller subtable */
 
 struct acpi_pmtt_controller {
        struct acpi_pmtt_header header;
-       u32 read_latency;
-       u32 write_latency;
-       u32 read_bandwidth;
-       u32 write_bandwidth;
-       u16 access_width;
-       u16 alignment;
+       u16 controller_id;
        u16 reserved;
-       u16 domain_count;
-};
-
-/* 1a: Proximity Domain substructure */
-
-struct acpi_pmtt_domain {
-       u32 proximity_domain;
 };
+       /*
+        * Immediately followed by:
+        * MEMORY_DEVICE memory_device_struct[memory_device_count];
+        */
 
 /* 2: Physical Component Identifier (DIMM) */
 
 struct acpi_pmtt_physical_component {
        struct acpi_pmtt_header header;
-       u16 component_id;
-       u16 reserved;
-       u32 memory_size;
        u32 bios_handle;
 };
 
+/* 0xFF: Vendor Specific Data */
+
+struct acpi_pmtt_vendor_specific {
+       struct acpi_pmtt_header header;
+       u8 type_uuid[16];
+       u8 specific[];
+       /*
+        * Immediately followed by:
+        * u8 vendor_specific_data[];
+        * MEMORY_DEVICE memory_device_struct[memory_device_count];
+        */
+};
+
 /*******************************************************************************
  *
  * PPTT - Processor Properties Topology Table (ACPI 6.2)
@@ -1485,6 +1548,12 @@ struct acpi_pptt_cache {
        u16 line_size;
 };
 
+/* 1: Cache Type Structure for PPTT version 3 */
+
+struct acpi_pptt_cache_v1 {
+       u32 cache_id;
+};
+
 /* Flags */
 
 #define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)        /* Physical property valid */
@@ -1494,6 +1563,7 @@ struct acpi_pptt_cache {
 #define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)     /* Cache type valid */
 #define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)     /* Write policy valid */
 #define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)     /* Line size valid */
+#define ACPI_PPTT_CACHE_ID_VALID            (1<<7)     /* Cache ID valid */
 
 /* Masks for Attributes */
 
@@ -1679,6 +1749,7 @@ enum acpi_sdev_type {
 /* Values for flags above */
 
 #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
+#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
 
 /*
  * SDEV subtables
@@ -1694,6 +1765,46 @@ struct acpi_sdev_namespace {
        u16 vendor_data_length;
 };
 
+struct acpi_sdev_secure_component {
+       u16 secure_component_offset;
+       u16 secure_component_length;
+};
+
+/*
+ * SDEV sub-subtables ("Components") for above
+ */
+struct acpi_sdev_component {
+       struct acpi_sdev_header header;
+};
+
+/* Values for sub-subtable type above */
+
+enum acpi_sac_type {
+       ACPI_SDEV_TYPE_ID_COMPONENT = 0,
+       ACPI_SDEV_TYPE_MEM_COMPONENT = 1
+};
+
+struct acpi_sdev_id_component {
+       struct acpi_sdev_header header;
+       u16 hardware_id_offset;
+       u16 hardware_id_length;
+       u16 subsystem_id_offset;
+       u16 subsystem_id_length;
+       u16 hardware_revision;
+       u8 hardware_rev_present;
+       u8 class_code_present;
+       u8 pci_base_class;
+       u8 pci_sub_class;
+       u8 pci_programming_xface;
+};
+
+struct acpi_sdev_mem_component {
+       struct acpi_sdev_header header;
+       u32 reserved;
+       u64 memory_base_address;
+       u64 memory_length;
+};
+
 /* 1: PCIe Endpoint Device Based Device Structure */
 
 struct acpi_sdev_pcie {