ACPI: Adding TCPA support
authorErwan Velu <erwanaliasr1@gmail.com>
Mon, 31 Jan 2011 21:01:26 +0000 (22:01 +0100)
committerErwan Velu <erwanaliasr1@gmail.com>
Mon, 31 Jan 2011 21:02:30 +0000 (22:02 +0100)
com32/gplinclude/acpi/acpi.h
com32/gplinclude/acpi/tcpa.h [new file with mode: 0644]
com32/gpllib/acpi/acpi.c

index 490fbca..8b9bec4 100644 (file)
@@ -32,6 +32,7 @@ void dbg_printf(const char *fmt, ...);
 #include <acpi/ecdt.h>
 #include <acpi/facs.h>
 #include <acpi/hpet.h>
+#include <acpi/tcpa.h>
 
 enum { ACPI_FOUND = 1, ENO_ACPI = 2 , MADT_FOUND = 3 , ENO_MADT = 4 };
 
@@ -78,6 +79,7 @@ typedef struct {
     s_ecdt ecdt;
     s_facs facs;
     s_hpet hpet;
+    s_tcpa tcpa;
 } s_acpi;
 
 int parse_acpi(s_acpi * acpi);
diff --git a/com32/gplinclude/acpi/tcpa.h b/com32/gplinclude/acpi/tcpa.h
new file mode 100644 (file)
index 0000000..a7ec376
--- /dev/null
@@ -0,0 +1,29 @@
+/* ----------------------------------------------------------------------- *
+ *
+ *   Copyright 2009-2011 Erwan Velu - All Rights Reserved
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
+ *   Boston MA 02111-1307, USA; either version 2 of the License, or
+ *   (at your option) any later version; incorporated herein by reference.
+ *
+ * ----------------------------------------------------------------------- */
+
+#ifndef TCPA_H
+#define TCPA_H
+#include <inttypes.h>
+#include <stdbool.h>
+
+#define HPET "HPET"
+
+enum { TCPA_TABLE_FOUND = 1 };
+
+typedef struct {
+    uint64_t *address;
+    s_acpi_description_header header;
+    /* What's inside ? */
+    bool valid;
+} s_tcpa;
+
+#endif
index 68af84a..ba53239 100644 (file)
@@ -207,7 +207,15 @@ bool parse_header(uint64_t *address, s_acpi *acpi) {
                h->valid = true;
                h->address = address;
                memcpy(&h->header, &adh, sizeof(adh));
+           } else if (memcmp(adh.signature, TCPA, sizeof(TCPA) - 1) == 0) {
+               DEBUG_PRINT(("TCPA table found\n"));
+               s_tcpa *t = &acpi->tcpa;
+               /* This structure is valid, let's fill it */
+               t->valid = true;
+               t->address = address;
+               memcpy(&t->header, &adh, sizeof(adh));
            }
 
+
            return true;
 }