ACPI: Adding HPET support
authorErwan Velu <erwanaliasr1@gmail.com>
Mon, 31 Jan 2011 20:24:07 +0000 (21:24 +0100)
committerErwan Velu <erwanaliasr1@gmail.com>
Mon, 31 Jan 2011 20:24:07 +0000 (21:24 +0100)
com32/gplinclude/acpi/acpi.h
com32/gplinclude/acpi/hpet.h [new file with mode: 0644]
com32/gpllib/acpi/acpi.c

index 1d9a5a0..490fbca 100644 (file)
@@ -31,6 +31,7 @@ void dbg_printf(const char *fmt, ...);
 #include <acpi/sbst.h>
 #include <acpi/ecdt.h>
 #include <acpi/facs.h>
+#include <acpi/hpet.h>
 
 enum { ACPI_FOUND = 1, ENO_ACPI = 2 , MADT_FOUND = 3 , ENO_MADT = 4 };
 
@@ -76,6 +77,7 @@ typedef struct {
     s_sbst sbst;
     s_ecdt ecdt;
     s_facs facs;
+    s_hpet hpet;
 } s_acpi;
 
 int parse_acpi(s_acpi * acpi);
diff --git a/com32/gplinclude/acpi/hpet.h b/com32/gplinclude/acpi/hpet.h
new file mode 100644 (file)
index 0000000..99dea6a
--- /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 HPET_H
+#define HPET_H
+#include <inttypes.h>
+#include <stdbool.h>
+
+#define HPET "HPET"
+
+enum { HPET_TABLE_FOUND = 1 };
+
+typedef struct {
+    uint64_t *address;
+    s_acpi_description_header header;
+    /* What's inside ? */
+    bool valid;
+} s_hpet;
+
+#endif
index b763e0b..68af84a 100644 (file)
@@ -200,6 +200,14 @@ bool parse_header(uint64_t *address, s_acpi *acpi) {
                e->address = address;
                memcpy(&e->header, &adh, sizeof(adh));
                parse_ecdt(e);
+           }  else if (memcmp(adh.signature, HPET, sizeof(HPET) - 1) == 0) {
+               DEBUG_PRINT(("HPET table found\n"));
+               s_hpet *h = &acpi->hpet;
+               /* This structure is valid, let's fill it */
+               h->valid = true;
+               h->address = address;
+               memcpy(&h->header, &adh, sizeof(adh));
            }
+
            return true;
 }