]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - include/acpi/ghes.h
Merge tag 'leds_for_4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszews...
[mirror_ubuntu-artful-kernel.git] / include / acpi / ghes.h
index 720446cb243e81f07a02a8763eea0994ce43e772..9f26e01186aea6ccd37d1c7771de3978d9111bb5 100644 (file)
@@ -1,3 +1,6 @@
+#ifndef GHES_H
+#define GHES_H
+
 #include <acpi/apei.h>
 #include <acpi/hed.h>
 
 #define GHES_EXITING           0x0002
 
 struct ghes {
-       struct acpi_hest_generic *generic;
+       union {
+               struct acpi_hest_generic *generic;
+               struct acpi_hest_generic_v2 *generic_v2;
+       };
        struct acpi_hest_generic_status *estatus;
        u64 buffer_paddr;
        unsigned long flags;
@@ -70,3 +76,43 @@ static inline void ghes_edac_unregister(struct ghes *ghes)
 {
 }
 #endif
+
+static inline int acpi_hest_get_version(struct acpi_hest_generic_data *gdata)
+{
+       return gdata->revision >> 8;
+}
+
+static inline void *acpi_hest_get_payload(struct acpi_hest_generic_data *gdata)
+{
+       if (acpi_hest_get_version(gdata) >= 3)
+               return (void *)(((struct acpi_hest_generic_data_v300 *)(gdata)) + 1);
+
+       return gdata + 1;
+}
+
+static inline int acpi_hest_get_error_length(struct acpi_hest_generic_data *gdata)
+{
+       return ((struct acpi_hest_generic_data *)(gdata))->error_data_length;
+}
+
+static inline int acpi_hest_get_size(struct acpi_hest_generic_data *gdata)
+{
+       if (acpi_hest_get_version(gdata) >= 3)
+               return sizeof(struct acpi_hest_generic_data_v300);
+
+       return sizeof(struct acpi_hest_generic_data);
+}
+
+static inline int acpi_hest_get_record_size(struct acpi_hest_generic_data *gdata)
+{
+       return (acpi_hest_get_size(gdata) + acpi_hest_get_error_length(gdata));
+}
+
+static inline void *acpi_hest_get_next(struct acpi_hest_generic_data *gdata)
+{
+       return (void *)(gdata) + acpi_hest_get_record_size(gdata);
+}
+
+int ghes_notify_sea(void);
+
+#endif /* GHES_H */