1#pragma once
2
3#include <uacpi/internal/types.h>
4#include <uacpi/acpi.h>
5#include <uacpi/io.h>
6
7#ifndef UACPI_BAREBONES_MODE
8
9typedef struct uacpi_mapped_gas {
10 uacpi_handle mapping;
11 uacpi_u8 access_bit_width;
12 uacpi_u8 total_bit_width;
13 uacpi_u8 bit_offset;
14
15 uacpi_status (*read)(
16 uacpi_handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out
17 );
18 uacpi_status (*write)(
19 uacpi_handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in
20 );
21
22 void (*unmap)(uacpi_handle, uacpi_size);
23} uacpi_mapped_gas;
24
25uacpi_status uacpi_map_gas_noalloc(
26 const struct acpi_gas *gas, uacpi_mapped_gas *out_mapped
27);
28void uacpi_unmap_gas_nofree(uacpi_mapped_gas *gas);
29
30uacpi_size uacpi_round_up_bits_to_bytes(uacpi_size bit_length);
31
32void uacpi_read_buffer_field(
33 const uacpi_buffer_field *field, void *dst
34);
35void uacpi_write_buffer_field(
36 uacpi_buffer_field *field, const void *src, uacpi_size size
37);
38
39uacpi_status uacpi_field_unit_get_read_type(
40 struct uacpi_field_unit *field, uacpi_object_type *out_type
41);
42
43uacpi_status uacpi_field_unit_get_bit_length(
44 struct uacpi_field_unit *field, uacpi_size *out_length
45);
46
47uacpi_status uacpi_read_field_unit(
48 uacpi_field_unit *field, void *dst, uacpi_size size,
49 uacpi_data_view *wtr_response
50);
51uacpi_status uacpi_write_field_unit(
52 uacpi_field_unit *field, const void *src, uacpi_size size,
53 uacpi_data_view *wtr_response
54);
55
56#ifdef UACPI_NATIVE_MMIO
57#define uacpi_mmio_read8 uacpi_kernel_mmio_read8
58#define uacpi_mmio_read16 uacpi_kernel_mmio_read16
59#define uacpi_mmio_read32 uacpi_kernel_mmio_read32
60#define uacpi_mmio_read64 uacpi_kernel_mmio_read64
61
62#define uacpi_mmio_write8 uacpi_kernel_mmio_write8
63#define uacpi_mmio_write16 uacpi_kernel_mmio_write16
64#define uacpi_mmio_write32 uacpi_kernel_mmio_write32
65#define uacpi_mmio_write64 uacpi_kernel_mmio_write64
66#else
67uacpi_u8 uacpi_builtin_mmio_read8(void *ptr);
68uacpi_u16 uacpi_builtin_mmio_read16(void *ptr);
69uacpi_u32 uacpi_builtin_mmio_read32(void *ptr);
70uacpi_u64 uacpi_builtin_mmio_read64(void *ptr);
71
72void uacpi_builtin_mmio_write8(void *ptr, uacpi_u8 data);
73void uacpi_builtin_mmio_write16(void *ptr, uacpi_u16 data);
74void uacpi_builtin_mmio_write32(void *ptr, uacpi_u32 data);
75void uacpi_builtin_mmio_write64(void *ptr, uacpi_u64 data);
76
77#define uacpi_mmio_read8 uacpi_builtin_mmio_read8
78#define uacpi_mmio_read16 uacpi_builtin_mmio_read16
79#define uacpi_mmio_read32 uacpi_builtin_mmio_read32
80#define uacpi_mmio_read64 uacpi_builtin_mmio_read64
81
82#define uacpi_mmio_write8 uacpi_builtin_mmio_write8
83#define uacpi_mmio_write16 uacpi_builtin_mmio_write16
84#define uacpi_mmio_write32 uacpi_builtin_mmio_write32
85#define uacpi_mmio_write64 uacpi_builtin_mmio_write64
86#endif
87
88uacpi_status uacpi_system_memory_read(
89 void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out
90);
91uacpi_status uacpi_system_memory_write(
92 void *ptr, uacpi_size offset, uacpi_u8 width, uacpi_u64 in
93);
94
95uacpi_status uacpi_system_io_read(
96 uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out
97);
98uacpi_status uacpi_system_io_write(
99 uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in
100);
101
102uacpi_status uacpi_pci_read(
103 uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 *out
104);
105uacpi_status uacpi_pci_write(
106 uacpi_handle handle, uacpi_size offset, uacpi_u8 width, uacpi_u64 in
107);
108
109#endif // !UACPI_BAREBONES_MODE
110