mirror of
https://github.com/limine-bootloader/limine
synced 2024-12-12 17:47:19 +03:00
102 lines
2.9 KiB
C
102 lines
2.9 KiB
C
#ifndef __LIB__ACPI_H__
|
||
#define __LIB__ACPI_H__
|
||
|
||
#include <stdint.h>
|
||
#include <stddef.h>
|
||
|
||
#define EBDA ((size_t)(*((volatile uint16_t *)0x40e)) * 16)
|
||
|
||
struct sdt {
|
||
char signature[4];
|
||
uint32_t length;
|
||
uint8_t rev;
|
||
uint8_t checksum;
|
||
char oem_id[6];
|
||
char oem_table_id[8];
|
||
uint32_t oem_rev;
|
||
char creator_id[4];
|
||
uint32_t creator_rev;
|
||
} __attribute__((packed));
|
||
|
||
struct rsdp {
|
||
char signature[8];
|
||
uint8_t checksum;
|
||
char oem_id[6];
|
||
uint8_t rev;
|
||
uint32_t rsdt_addr;
|
||
// Revision 2 only after this comment
|
||
uint32_t length;
|
||
uint64_t xsdt_addr;
|
||
uint8_t ext_checksum;
|
||
uint8_t reserved[3];
|
||
} __attribute__((packed));
|
||
|
||
struct rsdt {
|
||
struct sdt header;
|
||
char ptrs_start[];
|
||
} __attribute__((packed));
|
||
|
||
struct smbios_entry_point_32 {
|
||
char anchor_str[4];
|
||
/// This value summed with all the values of the table.
|
||
uint8_t checksum;
|
||
/// Length of the entry point table.
|
||
uint8_t length;
|
||
/// Major version of SMBIOS.
|
||
uint8_t major_version;
|
||
/// Minor version of SMBIOS.
|
||
uint8_t minor_version;
|
||
/// Size of the largest SMBIOS structure, in bytes, and encompasses the
|
||
/// structure’s formatted area and text strings
|
||
uint16_t max_structure_size;
|
||
uint8_t entry_point_revision;
|
||
char formatted_area[5];
|
||
|
||
char intermediate_anchor_str[5];
|
||
/// Checksum for values from intermediate anchor str to the
|
||
/// end of table.
|
||
uint8_t intermediate_checksum;
|
||
/// Total length of SMBIOS Structure Table, pointed to by the structure
|
||
/// table address, in bytes.
|
||
uint16_t table_length;
|
||
/// 32-bit physical starting address of the read-only SMBIOS Structure
|
||
/// Table.
|
||
uint32_t table_address;
|
||
/// Total number of structures present in the SMBIOS Structure Table.
|
||
uint16_t number_of_structures;
|
||
/// Indicates compliance with a revision of this specification.
|
||
uint8_t bcd_revision;
|
||
} __attribute__((packed));
|
||
|
||
struct smbios_entry_point_64 {
|
||
char anchor_str[5];
|
||
/// This value summed with all the values of the table.
|
||
uint8_t checksum;
|
||
/// Length of the entry point table.
|
||
uint8_t length;
|
||
/// Major version of SMBIOS.
|
||
uint8_t major_version;
|
||
/// Minor version of SMBIOS.
|
||
uint8_t minor_version;
|
||
uint8_t docrev;
|
||
uint8_t entry_point_revision;
|
||
uint8_t reserved;
|
||
/// Size of the largest SMBIOS structure, in bytes, and encompasses the
|
||
/// structure’s formatted area and text strings
|
||
uint16_t max_structure_size;
|
||
/// 64-bit physical starting address of the read-only SMBIOS Structure
|
||
/// Table.
|
||
uint64_t table_address;
|
||
} __attribute__((packed));
|
||
|
||
uint8_t acpi_checksum(void *ptr, size_t size);
|
||
void *acpi_get_rsdp(void);
|
||
|
||
void *acpi_get_rsdp_v1(void);
|
||
void *acpi_get_rsdp_v2(void);
|
||
|
||
void *acpi_get_table(const char *signature, int index);
|
||
void acpi_get_smbios(void **smbios32, void **smbios64);
|
||
|
||
#endif
|