sp1: acpi: Add ACPI table defs

Signed-off-by: Ian Moffett <ian@mirocom.org>
This commit is contained in:
2026-04-19 21:13:09 -04:00
parent 458d2f4c83
commit 81d6454205
+152
View File
@@ -0,0 +1,152 @@
/*
* Copyright (c) 2026, Mirocom Laboratories
* All rights reserved.
*
* The following sources are CONFIDENTIAL and PROPRIETARY
* property of Mirocom Laboratories. Unauthorized copying,
* use, distrubution or modification of this file, in whole
* and in part, is strictly prohibited without the prior written
* consent from Mirocom Laboratories.
*/
#ifndef _ACPI_TABLES_H_
#define _ACPI_TABLES_H_ 1
#include <sys/types.h>
#include <sys/cdefs.h>
/* MADT APIC header types */
#define APIC_TYPE_LOCAL_APIC 0
#define APIC_TYPE_IO_APIC 1
#define APIC_TYPE_INTERRUPT_OVERRIDE 2
#define OEMID_SIZE 6
struct __packed acpi_header {
char signature[4]; /* ASCII signature string */
uint32_t length; /* Length of table in bytes */
uint8_t revision; /* Revision of the structure */
uint8_t checksum; /* Checksum of the header */
char oemid[OEMID_SIZE]; /* OEM-supplied string that IDs the OEM */
char oem_table_id[8]; /* OEM-supplied string (used by OEM) */
uint32_t oem_revision; /* OEM-supplied revision number */
uint32_t creator_id; /* Vendor ID of creator utility */
uint32_t creator_revision; /* Revision of creator utility */
};
struct __packed acpi_rsdp {
uint64_t signature; /* RSD PTR */
uint8_t checksum; /* Structure checksum */
char oemid[OEMID_SIZE]; /* OEM-supplied string that IDs the OEM */
uint8_t revision; /* Revision of the structure */
uint32_t rsdt_addr; /* RSDT physical address */
/* Reserved if revision < 2 */
uint32_t length; /* Length of table in bytes */
uint64_t xsdt_addr; /* XSDT physical address */
uint8_t ext_checksum; /* Extended checksum */
uint8_t reserved[3];
};
/*
* XSDT or RSDT depending
* on what revision the header
* says.
*/
struct __packed acpi_root_sdt {
struct acpi_header hdr;
uint32_t tables[];
};
struct __packed acpi_madt {
struct acpi_header hdr;
uint32_t lapic_addr;
uint32_t flags;
};
struct __packed apic_header {
uint8_t type;
uint8_t length;
};
struct __packed local_apic {
struct apic_header hdr;
uint8_t processor_id;
uint8_t apic_id;
uint32_t flags;
};
struct __packed ioapic {
struct apic_header hdr;
uint8_t ioapic_id;
uint8_t reserved;
uint32_t ioapic_addr;
uint32_t gsi_base;
};
struct __packed interrupt_override {
struct apic_header hdr;
uint8_t bus;
uint8_t source; /* IRQ */
uint32_t interrupt; /* GSI */
uint16_t flags;
};
struct __packed acpi_gas {
uint8_t address_space_id;
uint8_t register_bit_width;
uint8_t register_bit_offset;
uint8_t reserved;
uint64_t address;
};
/*
* ACPI Address Space ID definitions for GAS
*
* See section 5.2.3.2 of the ACPI software programming
* manual.
*
* XXX: 0x0B->0x7E is reserved as well as 0x80->0xBF
* and 0xC0->0xFF is OEM defined. Values other than
* the ones specified below are either garbage or
* OEM specific values.
*/
#define ACPI_GAS_SYSMEM 0x00 /* System memory space */
#define ACPI_GAS_SYSIO 0x01 /* System I/O space */
#define ACPI_GAS_PCICONF 0x02 /* PCI configuration space */
#define ACPI_GAS_EC 0x03 /* Embedded controller */
#define ACPI_GAS_SMBUS 0x04 /* System management bus */
#define ACPI_GAS_CMOS 0x05 /* System CMOS */
#define ACPI_GAS_PCIBAR 0x06 /* PCI BAR target */
#define ACPI_GAS_IPMI 0x07 /* IPMI (sensor monitoring) */
#define ACPI_GAS_GPIO 0x08 /* General Purpose I/O */
#define ACPI_GAS_GSBUS 0x09 /* GenericSerialBus */
#define ACPI_GAS_PLATCOM 0x0A /* Platform Communications Channel */
/*
* ACPI address size definitions for GAS
*
* See section 5.2.3.2 of the ACPI software programming
* manual.
*/
#define ACPI_GAS_UNDEF 0 /* Undefined (legacy reasons) */
#define ACPI_GAS_BYTE 1 /* Byte access */
#define ACPI_GAS_WORD 2 /* Word access */
#define ACPI_GAS_DWORD 3 /* Dword access */
#define ACPI_GAS_QWORD 4 /* Qword access */
struct __packed acpi_hpet {
struct acpi_header hdr;
uint8_t hardware_rev_id;
uint8_t comparator_count : 5;
uint8_t counter_size : 1;
uint8_t reserved : 1;
uint8_t legacy_replacement : 1;
uint16_t pci_vendor_id;
struct acpi_gas gas;
uint8_t hpet_number;
uint16_t minimum_tick;
uint8_t page_protection;
};
#endif /* _ACPI_TABLES_H_ */