|
@@ -71,6 +71,7 @@
|
|
|
#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
|
|
|
#define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */
|
|
|
#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
|
|
|
+#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */
|
|
|
|
|
|
/*
|
|
|
* All tables must be byte-packed to match the ACPI specification, since
|
|
@@ -920,6 +921,159 @@ struct acpi_msct_proximity {
|
|
|
u64 memory_capacity; /* In bytes */
|
|
|
};
|
|
|
|
|
|
+/*******************************************************************************
|
|
|
+ *
|
|
|
+ * NFIT - NVDIMM Interface Table (ACPI 6.0)
|
|
|
+ * Version 1
|
|
|
+ *
|
|
|
+ ******************************************************************************/
|
|
|
+
|
|
|
+struct acpi_table_nfit {
|
|
|
+ struct acpi_table_header header; /* Common ACPI table header */
|
|
|
+ u32 reserved; /* Reserved, must be zero */
|
|
|
+};
|
|
|
+
|
|
|
+/* Subtable header for NFIT */
|
|
|
+
|
|
|
+struct acpi_nfit_header {
|
|
|
+ u16 type;
|
|
|
+ u16 length;
|
|
|
+};
|
|
|
+
|
|
|
+/* Values for subtable type in struct acpi_nfit_header */
|
|
|
+
|
|
|
+enum acpi_nfit_type {
|
|
|
+ ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
|
|
|
+ ACPI_NFIT_TYPE_MEMORY_MAP = 1,
|
|
|
+ ACPI_NFIT_TYPE_INTERLEAVE = 2,
|
|
|
+ ACPI_NFIT_TYPE_SMBIOS = 3,
|
|
|
+ ACPI_NFIT_TYPE_CONTROL_REGION = 4,
|
|
|
+ ACPI_NFIT_TYPE_DATA_REGION = 5,
|
|
|
+ ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
|
|
|
+ ACPI_NFIT_TYPE_RESERVED = 7 /* 7 and greater are reserved */
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * NFIT Subtables
|
|
|
+ */
|
|
|
+
|
|
|
+/* 0: System Physical Address Range Structure */
|
|
|
+
|
|
|
+struct acpi_nfit_system_address {
|
|
|
+ struct acpi_nfit_header header;
|
|
|
+ u16 range_index;
|
|
|
+ u16 flags;
|
|
|
+ u32 reserved; /* Reseved, must be zero */
|
|
|
+ u32 proximity_domain;
|
|
|
+ u8 range_guid[16];
|
|
|
+ u64 address;
|
|
|
+ u64 length;
|
|
|
+ u64 memory_mapping;
|
|
|
+};
|
|
|
+
|
|
|
+/* Flags */
|
|
|
+
|
|
|
+#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */
|
|
|
+#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */
|
|
|
+
|
|
|
+/* Range Type GUIDs appear in the include/acuuid.h file */
|
|
|
+
|
|
|
+/* 1: Memory Device to System Address Range Map Structure */
|
|
|
+
|
|
|
+struct acpi_nfit_memory_map {
|
|
|
+ struct acpi_nfit_header header;
|
|
|
+ u32 device_handle;
|
|
|
+ u16 physical_id;
|
|
|
+ u16 region_id;
|
|
|
+ u16 range_index;
|
|
|
+ u16 region_index;
|
|
|
+ u64 region_size;
|
|
|
+ u64 region_offset;
|
|
|
+ u64 address;
|
|
|
+ u16 interleave_index;
|
|
|
+ u16 interleave_ways;
|
|
|
+ u16 flags;
|
|
|
+ u16 reserved; /* Reserved, must be zero */
|
|
|
+};
|
|
|
+
|
|
|
+/* Flags */
|
|
|
+
|
|
|
+#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */
|
|
|
+#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */
|
|
|
+#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */
|
|
|
+#define ACPI_NFIT_MEM_ARMED (1<<3) /* 03: Memory Device observed to be not armed */
|
|
|
+#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */
|
|
|
+#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */
|
|
|
+
|
|
|
+/* 2: Interleave Structure */
|
|
|
+
|
|
|
+struct acpi_nfit_interleave {
|
|
|
+ struct acpi_nfit_header header;
|
|
|
+ u16 interleave_index;
|
|
|
+ u16 reserved; /* Reserved, must be zero */
|
|
|
+ u32 line_count;
|
|
|
+ u32 line_size;
|
|
|
+ u32 line_offset[1]; /* Variable length */
|
|
|
+};
|
|
|
+
|
|
|
+/* 3: SMBIOS Management Information Structure */
|
|
|
+
|
|
|
+struct acpi_nfit_smbios {
|
|
|
+ struct acpi_nfit_header header;
|
|
|
+ u32 reserved; /* Reserved, must be zero */
|
|
|
+ u8 data[1]; /* Variable length */
|
|
|
+};
|
|
|
+
|
|
|
+/* 4: NVDIMM Control Region Structure */
|
|
|
+
|
|
|
+struct acpi_nfit_control_region {
|
|
|
+ struct acpi_nfit_header header;
|
|
|
+ u16 region_index;
|
|
|
+ u16 vendor_id;
|
|
|
+ u16 device_id;
|
|
|
+ u16 revision_id;
|
|
|
+ u16 subsystem_vendor_id;
|
|
|
+ u16 subsystem_device_id;
|
|
|
+ u16 subsystem_revision_id;
|
|
|
+ u8 reserved[6]; /* Reserved, must be zero */
|
|
|
+ u32 serial_number;
|
|
|
+ u16 code;
|
|
|
+ u16 windows;
|
|
|
+ u64 window_size;
|
|
|
+ u64 command_offset;
|
|
|
+ u64 command_size;
|
|
|
+ u64 status_offset;
|
|
|
+ u64 status_size;
|
|
|
+ u16 flags;
|
|
|
+ u8 reserved1[6]; /* Reserved, must be zero */
|
|
|
+};
|
|
|
+
|
|
|
+/* Flags */
|
|
|
+
|
|
|
+#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */
|
|
|
+
|
|
|
+/* 5: NVDIMM Block Data Window Region Structure */
|
|
|
+
|
|
|
+struct acpi_nfit_data_region {
|
|
|
+ struct acpi_nfit_header header;
|
|
|
+ u16 region_index;
|
|
|
+ u16 windows;
|
|
|
+ u64 offset;
|
|
|
+ u64 size;
|
|
|
+ u64 capacity;
|
|
|
+ u64 start_address;
|
|
|
+};
|
|
|
+
|
|
|
+/* 6: Flush Hint Address Structure */
|
|
|
+
|
|
|
+struct acpi_nfit_flush_address {
|
|
|
+ struct acpi_nfit_header header;
|
|
|
+ u32 device_handle;
|
|
|
+ u16 hint_count;
|
|
|
+ u8 reserved[6]; /* Reserved, must be zero */
|
|
|
+ u64 hint_address[1]; /* Variable length */
|
|
|
+};
|
|
|
+
|
|
|
/*******************************************************************************
|
|
|
*
|
|
|
* SBST - Smart Battery Specification Table
|