From 7c9a76021519d03f2c6816692b25985509192ddf Mon Sep 17 00:00:00 2001 From: Erwan Velu Date: Mon, 31 Jan 2011 21:24:07 +0100 Subject: [PATCH] ACPI: Adding HPET support --- com32/gplinclude/acpi/acpi.h | 2 ++ com32/gplinclude/acpi/hpet.h | 29 +++++++++++++++++++++++++++++ com32/gpllib/acpi/acpi.c | 8 ++++++++ 3 files changed, 39 insertions(+) create mode 100644 com32/gplinclude/acpi/hpet.h diff --git a/com32/gplinclude/acpi/acpi.h b/com32/gplinclude/acpi/acpi.h index 1d9a5a0..490fbca 100644 --- a/com32/gplinclude/acpi/acpi.h +++ b/com32/gplinclude/acpi/acpi.h @@ -31,6 +31,7 @@ void dbg_printf(const char *fmt, ...); #include #include #include +#include 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 index 0000000..99dea6a --- /dev/null +++ b/com32/gplinclude/acpi/hpet.h @@ -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 +#include + +#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 diff --git a/com32/gpllib/acpi/acpi.c b/com32/gpllib/acpi/acpi.c index b763e0b..68af84a 100644 --- a/com32/gpllib/acpi/acpi.c +++ b/com32/gpllib/acpi/acpi.c @@ -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; } -- 2.7.4