1*cd60bc56SAndroid Build Coastguard Worker /* 2*cd60bc56SAndroid Build Coastguard Worker * Copyright (c) 2018, Intel Corporation 3*cd60bc56SAndroid Build Coastguard Worker * All rights reserved. 4*cd60bc56SAndroid Build Coastguard Worker * 5*cd60bc56SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 6*cd60bc56SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 7*cd60bc56SAndroid Build Coastguard Worker * are met: 8*cd60bc56SAndroid Build Coastguard Worker * 9*cd60bc56SAndroid Build Coastguard Worker * * Redistributions of source code must retain the above copyright 10*cd60bc56SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 11*cd60bc56SAndroid Build Coastguard Worker * * Redistributions in binary form must reproduce the above copyright 12*cd60bc56SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer 13*cd60bc56SAndroid Build Coastguard Worker * in the documentation and/or other materials provided with the 14*cd60bc56SAndroid Build Coastguard Worker * distribution. 15*cd60bc56SAndroid Build Coastguard Worker * 16*cd60bc56SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17*cd60bc56SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18*cd60bc56SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 19*cd60bc56SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 20*cd60bc56SAndroid Build Coastguard Worker * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 21*cd60bc56SAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22*cd60bc56SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23*cd60bc56SAndroid Build Coastguard Worker * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24*cd60bc56SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 25*cd60bc56SAndroid Build Coastguard Worker * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26*cd60bc56SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 27*cd60bc56SAndroid Build Coastguard Worker * OF THE POSSIBILITY OF SUCH DAMAGE. 28*cd60bc56SAndroid Build Coastguard Worker * 29*cd60bc56SAndroid Build Coastguard Worker */ 30*cd60bc56SAndroid Build Coastguard Worker 31*cd60bc56SAndroid Build Coastguard Worker #ifndef _LIBACPI_H 32*cd60bc56SAndroid Build Coastguard Worker #define _LIBACPI_H 33*cd60bc56SAndroid Build Coastguard Worker 34*cd60bc56SAndroid Build Coastguard Worker #include "libfdt.h" 35*cd60bc56SAndroid Build Coastguard Worker 36*cd60bc56SAndroid Build Coastguard Worker #pragma pack(1) 37*cd60bc56SAndroid Build Coastguard Worker typedef struct { 38*cd60bc56SAndroid Build Coastguard Worker uint32_t Signature; /* ASCII Table identifier */ 39*cd60bc56SAndroid Build Coastguard Worker uint32_t Length; /* Length of the table, including the header */ 40*cd60bc56SAndroid Build Coastguard Worker uint8_t Revision; /* Revision of the structure */ 41*cd60bc56SAndroid Build Coastguard Worker uint8_t Checksum; /* Sum of all fields must be 0 */ 42*cd60bc56SAndroid Build Coastguard Worker uint8_t OemId[6]; /* ASCII OEM identifier */ 43*cd60bc56SAndroid Build Coastguard Worker uint64_t OemTableId; /* ASCII OEM table identifier */ 44*cd60bc56SAndroid Build Coastguard Worker uint32_t OemRevision; /* OEM supplied revision number */ 45*cd60bc56SAndroid Build Coastguard Worker uint32_t CreatorId; /* Vendor ID of utility creator of the table */ 46*cd60bc56SAndroid Build Coastguard Worker uint32_t CreatorRevision; /* Revision of utility creator of the table */ 47*cd60bc56SAndroid Build Coastguard Worker } EFI_ACPI_DESCRIPTION_HEADER; 48*cd60bc56SAndroid Build Coastguard Worker #pragma pack() 49*cd60bc56SAndroid Build Coastguard Worker 50*cd60bc56SAndroid Build Coastguard Worker /**********************************************************************/ 51*cd60bc56SAndroid Build Coastguard Worker /* General functions */ 52*cd60bc56SAndroid Build Coastguard Worker /**********************************************************************/ 53*cd60bc56SAndroid Build Coastguard Worker #define acpi_get_header(acpi, field) \ 54*cd60bc56SAndroid Build Coastguard Worker ((const EFI_ACPI_DESCRIPTION_HEADER *)(acpi))->field 55*cd60bc56SAndroid Build Coastguard Worker #define acpi_signature(acpi) (acpi_get_header(acpi, Signature)) 56*cd60bc56SAndroid Build Coastguard Worker #define acpi_length(acpi) (acpi_get_header(acpi, Length)) 57*cd60bc56SAndroid Build Coastguard Worker 58*cd60bc56SAndroid Build Coastguard Worker /* convert 2 bytes ASCII to uint16 */ 59*cd60bc56SAndroid Build Coastguard Worker #define SIGNATURE_16(A, B) ((A) | (B << 8)) 60*cd60bc56SAndroid Build Coastguard Worker /* convert 4 bytes ASCII to uint32 */ 61*cd60bc56SAndroid Build Coastguard Worker #define SIGNATURE_32(A, B, C, D) ((SIGNATURE_16 (A, B)) | (SIGNATURE_16 (C, D) << 16)) 62*cd60bc56SAndroid Build Coastguard Worker /* convert 8 bytes ASCII to uint64 */ 63*cd60bc56SAndroid Build Coastguard Worker #define SIGNATURE_64(A, B, C, D, E, F, G, H) \ 64*cd60bc56SAndroid Build Coastguard Worker (SIGNATURE_32 (A, B, C, D) | ((UINT64) (SIGNATURE_32 (E, F, G, H)) << 32)) 65*cd60bc56SAndroid Build Coastguard Worker 66*cd60bc56SAndroid Build Coastguard Worker #define SSDT_MAGIC (const unsigned)SIGNATURE_32('S', 'S', 'D', 'T') 67*cd60bc56SAndroid Build Coastguard Worker #define DSDT_MAGIC (const unsigned)SIGNATURE_32('D', 'S', 'D', 'T') 68*cd60bc56SAndroid Build Coastguard Worker 69*cd60bc56SAndroid Build Coastguard Worker #define ACPI_TABLE_MAGIC 0x41435049 70*cd60bc56SAndroid Build Coastguard Worker 71*cd60bc56SAndroid Build Coastguard Worker /* checksum byte by byte for acpi table */ 72*cd60bc56SAndroid Build Coastguard Worker uint8_t acpi_csum(const void *base, int n); 73*cd60bc56SAndroid Build Coastguard Worker 74*cd60bc56SAndroid Build Coastguard Worker #endif /* ifndef _LIBACPI_H */ 75