176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* ----------------------------------------------------------------------- * 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Copyright 2009-2011 Erwan Velu - All Rights Reserved 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * This program is free software; you can redistribute it and/or modify 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * it under the terms of the GNU General Public License as published by 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * the Free Software Foundation, Inc., 53 Temple Place Ste 330, 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Boston MA 02111-1307, USA; either version 2 of the License, or 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * (at your option) any later version; incorporated herein by reference. 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ----------------------------------------------------------------------- */ 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef ACPI_H 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ACPI_H 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DEBUG_ACPI 0 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid dbg_printf(const char *fmt, ...); 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DEBUG_PRINT(x) do { if (DEBUG_ACPI) dbg_printf x; } while (0) 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <inttypes.h> 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdbool.h> 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/structs.h> 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/rsdp.h> 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/rsdt.h> 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/xsdt.h> 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/fadt.h> 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/madt.h> 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/dsdt.h> 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/ssdt.h> 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/sbst.h> 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/ecdt.h> 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/facs.h> 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/hpet.h> 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/tcpa.h> 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/mcfg.h> 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/slic.h> 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <acpi/boot.h> 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanenum { ACPI_FOUND = 1, ENO_ACPI = 2 , MADT_FOUND = 3 , ENO_MADT = 4 }; 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_SSDT 128 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Some other description HEADERS : ACPI doc: 5.2.6*/ 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define OEMX "OEMx" 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SRAR "SRAT" 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BERT "BERT" 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define BOOT "BOOT" 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define CPEP "CPEP" 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DBGP "DGBP" 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define DMAR "DMAR" 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ERST "ERST" 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ETDT "ETDT" 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HEST "HEST" 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define HPET "HPET" 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define IBFT "IBFT" 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MCFG "MCFG" 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SPCR "SPCR" 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SPMI "SPMI" 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define TCPA "TCPA" 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define UEFI "UEFI" 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define WAET "WAET" 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define WDAT "WDAT" 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define WDRT "WDRT" 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define WSPT "WSPT" 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SLIC "SLIC" 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* This macro are used to extract ACPI structures 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * please be careful about the q (interator) naming */ 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define cp_struct(dest) memcpy(dest,q,sizeof(*dest)); q+=sizeof(*dest) 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define cp_str_struct(dest) memcpy(dest,q,sizeof(dest)-1); dest[sizeof(dest)-1]=0;q+=sizeof(dest)-1 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_rsdp rsdp; 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_rsdt rsdt; 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_xsdt xsdt; 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_fadt fadt; 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_madt madt; 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_dsdt dsdt; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_ssdt *ssdt[MAX_SSDT]; 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman uint8_t ssdt_count; 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_sbst sbst; 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_ecdt ecdt; 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_facs facs; 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_hpet hpet; 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_tcpa tcpa; 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_mcfg mcfg; 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_slic slic; 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman s_boot boot; 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} s_acpi; 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint parse_acpi(s_acpi * acpi); 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint parse_xsdt(s_acpi * acpi); 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid parse_madt(s_acpi * acpi); 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanint search_rsdp(s_acpi *acpi); 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanvoid get_acpi_description_header(uint8_t *q, s_acpi_description_header * adh); 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanbool parse_header(uint64_t *address, s_acpi *acpi); 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanchar *flags_to_string(char *buffer, uint16_t flags); 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 100