diff options
Diffstat (limited to 'com32/gplinclude/acpi/acpi.h')
-rw-r--r-- | com32/gplinclude/acpi/acpi.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/com32/gplinclude/acpi/acpi.h b/com32/gplinclude/acpi/acpi.h new file mode 100644 index 0000000..bf3ffdb --- /dev/null +++ b/com32/gplinclude/acpi/acpi.h @@ -0,0 +1,99 @@ +/* ----------------------------------------------------------------------- * + * + * 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 ACPI_H +#define ACPI_H + +#define DEBUG_ACPI 0 + +void dbg_printf(const char *fmt, ...); +#define DEBUG_PRINT(x) do { if (DEBUG_ACPI) dbg_printf x; } while (0) + +#include <inttypes.h> +#include <stdbool.h> +#include <acpi/structs.h> +#include <acpi/rsdp.h> +#include <acpi/rsdt.h> +#include <acpi/xsdt.h> +#include <acpi/fadt.h> +#include <acpi/madt.h> +#include <acpi/dsdt.h> +#include <acpi/ssdt.h> +#include <acpi/sbst.h> +#include <acpi/ecdt.h> +#include <acpi/facs.h> +#include <acpi/hpet.h> +#include <acpi/tcpa.h> +#include <acpi/mcfg.h> +#include <acpi/slic.h> +#include <acpi/boot.h> + +enum { ACPI_FOUND = 1, ENO_ACPI = 2 , MADT_FOUND = 3 , ENO_MADT = 4 }; + +#define MAX_SSDT 128 + +/* Some other description HEADERS : ACPI doc: 5.2.6*/ +#define OEMX "OEMx" +#define SRAR "SRAT" +#define BERT "BERT" +#define BOOT "BOOT" +#define CPEP "CPEP" +#define DBGP "DGBP" +#define DMAR "DMAR" +#define ERST "ERST" +#define ETDT "ETDT" +#define HEST "HEST" +#define HPET "HPET" +#define IBFT "IBFT" +#define MCFG "MCFG" +#define SPCR "SPCR" +#define SPMI "SPMI" +#define TCPA "TCPA" +#define UEFI "UEFI" +#define WAET "WAET" +#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 */ +#define cp_struct(dest) memcpy(dest,q,sizeof(*dest)); q+=sizeof(*dest) +#define cp_str_struct(dest) memcpy(dest,q,sizeof(dest)-1); dest[sizeof(dest)-1]=0;q+=sizeof(dest)-1 + +typedef struct { + s_rsdp rsdp; + s_rsdt rsdt; + s_xsdt xsdt; + s_fadt fadt; + s_madt madt; + s_dsdt dsdt; + s_ssdt *ssdt[MAX_SSDT]; + uint8_t ssdt_count; + s_sbst sbst; + s_ecdt ecdt; + s_facs facs; + s_hpet hpet; + s_tcpa tcpa; + s_mcfg mcfg; + s_slic slic; + s_boot boot; +} s_acpi; + +int parse_acpi(s_acpi * acpi); +int parse_xsdt(s_acpi * acpi); +void parse_madt(s_acpi * acpi); +int search_rsdp(s_acpi *acpi); +void get_acpi_description_header(uint8_t *q, s_acpi_description_header * adh); +bool parse_header(uint64_t *address, s_acpi *acpi); +char *flags_to_string(char *buffer, uint16_t flags); +#endif |