1#pragma once
2
3#include <uacpi/internal/context.h>
4#include <uacpi/internal/interpreter.h>
5#include <uacpi/types.h>
6#include <uacpi/status.h>
7#include <uacpi/tables.h>
8
9struct uacpi_installed_table {
10 uacpi_phys_addr phys_addr;
11 struct acpi_sdt_hdr hdr;
12 void *ptr;
13
14 uacpi_u16 reference_count;
15
16 uacpi_u8 flags;
17 uacpi_u8 origin;
18};
19
20uacpi_status uacpi_initialize_tables(void);
21void uacpi_deinitialize_tables(void);
22
23uacpi_bool uacpi_signatures_match(const void *const lhs, const void *const rhs);
24uacpi_status uacpi_check_table_signature(void *table, const uacpi_char *expect);
25uacpi_status uacpi_verify_table_checksum(
26 void *table, uacpi_size size, uacpi_u8 *out_flags
27);
28
29uacpi_status uacpi_table_install_physical_with_origin(
30 uacpi_phys_addr phys, enum uacpi_table_origin origin, uacpi_table *out_table
31);
32uacpi_status uacpi_table_install_with_origin(
33 void *virt, enum uacpi_table_origin origin, uacpi_table *out_table
34);
35
36#ifndef UACPI_BAREBONES_MODE
37void uacpi_table_mark_as_loaded(uacpi_size idx);
38
39uacpi_status uacpi_table_load_with_cause(
40 uacpi_size idx, enum uacpi_table_load_cause cause
41);
42#endif // !UACPI_BAREBONES_MODE
43
44typedef uacpi_iteration_decision (*uacpi_installed_table_iteration_callback)
45 (void *user, struct uacpi_installed_table *tbl, uacpi_size idx);
46
47uacpi_status uacpi_for_each_installed_table(
48 uacpi_size base_idx, uacpi_installed_table_iteration_callback, void *user
49);
50
51typedef uacpi_bool (*uacpi_table_match_callback)
52 (struct uacpi_installed_table *tbl);
53
54uacpi_status uacpi_table_match(
55 uacpi_size base_idx, uacpi_table_match_callback, uacpi_table *out_table
56);
57
58#define UACPI_PRI_TBL_HDR "'%.4s' (OEM ID '%.6s' OEM Table ID '%.8s')"
59#define UACPI_FMT_TBL_HDR(hdr) (hdr)->signature, (hdr)->oemid, (hdr)->oem_table_id
60