diff options
author | Erwan Velu <erwanaliasr1@gmail.com> | 2011-01-31 22:21:05 +0100 |
---|---|---|
committer | Erwan Velu <erwanaliasr1@gmail.com> | 2011-01-31 22:21:05 +0100 |
commit | 34c4821049e15b4c2402e908ec4a60f449974ef0 (patch) | |
tree | 93fb8166f4156fc0af42ad8e04fb85bc71b456ce | |
parent | db3b0b8379613fdd32f791000d173e5411775291 (diff) | |
download | syslinux-34c4821049e15b4c2402e908ec4a60f449974ef0.tar.gz |
ACPI: Adding SLIC support
-rw-r--r-- | com32/gplinclude/acpi/acpi.h | 3 | ||||
-rw-r--r-- | com32/gplinclude/acpi/slic.h | 29 | ||||
-rw-r--r-- | com32/gpllib/acpi/acpi.c | 8 |
3 files changed, 40 insertions, 0 deletions
diff --git a/com32/gplinclude/acpi/acpi.h b/com32/gplinclude/acpi/acpi.h index 81268097..3884762e 100644 --- a/com32/gplinclude/acpi/acpi.h +++ b/com32/gplinclude/acpi/acpi.h @@ -34,6 +34,7 @@ void dbg_printf(const char *fmt, ...); #include <acpi/hpet.h> #include <acpi/tcpa.h> #include <acpi/mcfg.h> +#include <acpi/slic.h> enum { ACPI_FOUND = 1, ENO_ACPI = 2 , MADT_FOUND = 3 , ENO_MADT = 4 }; @@ -61,6 +62,7 @@ enum { ACPI_FOUND = 1, ENO_ACPI = 2 , MADT_FOUND = 3 , ENO_MADT = 4 }; #define WDAT "WDAT" #define WDRT "WDRT" #define WSPT "WSPT" +#define SLIC "SLIC" /* This macro are used to extract ACPI structures * please be careful about the q (interator) naming */ @@ -82,6 +84,7 @@ typedef struct { s_hpet hpet; s_tcpa tcpa; s_mcfg mcfg; + s_slic slic; } s_acpi; int parse_acpi(s_acpi * acpi); diff --git a/com32/gplinclude/acpi/slic.h b/com32/gplinclude/acpi/slic.h new file mode 100644 index 00000000..2c7627de --- /dev/null +++ b/com32/gplinclude/acpi/slic.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 SLIC_H +#define SLIC_H +#include <inttypes.h> +#include <stdbool.h> + +#define SLIC "SLIC" + +enum { SLIC_TABLE_FOUND = 1 }; + +typedef struct { + uint64_t *address; + s_acpi_description_header header; + /* What's inside ? */ + bool valid; +} s_slic; + +#endif diff --git a/com32/gpllib/acpi/acpi.c b/com32/gpllib/acpi/acpi.c index 55c6d1a1..7670d163 100644 --- a/com32/gpllib/acpi/acpi.c +++ b/com32/gpllib/acpi/acpi.c @@ -221,8 +221,16 @@ bool parse_header(uint64_t *address, s_acpi *acpi) { m->valid = true; m->address = address; memcpy(&m->header, &adh, sizeof(adh)); + } else if (memcmp(adh.signature, SLIC, sizeof(SLIC) - 1) == 0) { + DEBUG_PRINT(("SLIC table found\n")); + s_slic *s = &acpi->slic; + /* This structure is valid, let's fill it */ + s->valid = true; + s->address = address; + memcpy(&s->header, &adh, sizeof(adh)); } + return true; } |