|
1 | 1 | #include <efi.h>
|
2 |
| -#include <io.h> |
3 | 2 | #include <printf.h>
|
4 | 3 | #include "csmwrap.h"
|
5 | 4 |
|
@@ -36,312 +35,6 @@ void *uacpi_kernel_map(uacpi_phys_addr addr, EFI_UNUSED uacpi_size len) {
|
36 | 35 | void uacpi_kernel_unmap(EFI_UNUSED void *ptr, EFI_UNUSED uacpi_size len) {
|
37 | 36 | }
|
38 | 37 |
|
39 |
| -uacpi_status uacpi_kernel_pci_device_open(uacpi_pci_address address, uacpi_handle *out_handle) { |
40 |
| - void *handle; |
41 |
| - if (gBS->AllocatePool(EfiLoaderData, sizeof(uacpi_pci_address), &handle) != EFI_SUCCESS) { |
42 |
| - return UACPI_STATUS_OUT_OF_MEMORY; |
43 |
| - } |
44 |
| - |
45 |
| - memcpy(handle, &address, sizeof(uacpi_pci_address)); |
46 |
| - *out_handle = handle; |
47 |
| - return UACPI_STATUS_OK; |
48 |
| -} |
49 |
| - |
50 |
| -void uacpi_kernel_pci_device_close(uacpi_handle handle) { |
51 |
| - gBS->FreePool(handle); |
52 |
| -} |
53 |
| - |
54 |
| -uacpi_status uacpi_kernel_pci_read8(uacpi_handle device, uacpi_size offset, uacpi_u8 *value) { |
55 |
| - uacpi_pci_address *address = (uacpi_pci_address *)device; |
56 |
| - *value = pciConfigReadByte(address->bus, address->device, address->function, offset); |
57 |
| - return UACPI_STATUS_OK; |
58 |
| -} |
59 |
| - |
60 |
| -uacpi_status uacpi_kernel_pci_read16(uacpi_handle device, uacpi_size offset, uacpi_u16 *value) { |
61 |
| - uacpi_pci_address *address = (uacpi_pci_address *)device; |
62 |
| - *value = pciConfigReadWord(address->bus, address->device, address->function, offset); |
63 |
| - return UACPI_STATUS_OK; |
64 |
| -} |
65 |
| - |
66 |
| -uacpi_status uacpi_kernel_pci_read32(uacpi_handle device, uacpi_size offset, uacpi_u32 *value) { |
67 |
| - uacpi_pci_address *address = (uacpi_pci_address *)device; |
68 |
| - *value = pciConfigReadDWord(address->bus, address->device, address->function, offset); |
69 |
| - return UACPI_STATUS_OK; |
70 |
| -} |
71 |
| - |
72 |
| -uacpi_status uacpi_kernel_pci_write8(uacpi_handle device, uacpi_size offset, uacpi_u8 value) { |
73 |
| - uacpi_pci_address *address = (uacpi_pci_address *)device; |
74 |
| - pciConfigWriteByte(address->bus, address->device, address->function, offset, value); |
75 |
| - return UACPI_STATUS_OK; |
76 |
| -} |
77 |
| - |
78 |
| -uacpi_status uacpi_kernel_pci_write16(uacpi_handle device, uacpi_size offset, uacpi_u16 value) { |
79 |
| - uacpi_pci_address *address = (uacpi_pci_address *)device; |
80 |
| - pciConfigWriteWord(address->bus, address->device, address->function, offset, value); |
81 |
| - return UACPI_STATUS_OK; |
82 |
| -} |
83 |
| - |
84 |
| -uacpi_status uacpi_kernel_pci_write32(uacpi_handle device, uacpi_size offset, uacpi_u32 value) { |
85 |
| - uacpi_pci_address *address = (uacpi_pci_address *)device; |
86 |
| - pciConfigWriteDWord(address->bus, address->device, address->function, offset, value); |
87 |
| - return UACPI_STATUS_OK; |
88 |
| -} |
89 |
| - |
90 |
| -struct mapped_io { |
91 |
| - uacpi_io_addr base; |
92 |
| - uacpi_size len; |
93 |
| -}; |
94 |
| - |
95 |
| -uacpi_status uacpi_kernel_io_map(uacpi_io_addr base, uacpi_size len, uacpi_handle *out_handle) { |
96 |
| - void *handle; |
97 |
| - if (gBS->AllocatePool(EfiLoaderData, sizeof(uacpi_pci_address), &handle) != EFI_SUCCESS) { |
98 |
| - return UACPI_STATUS_OUT_OF_MEMORY; |
99 |
| - } |
100 |
| - |
101 |
| - struct mapped_io *io = (struct mapped_io *)handle; |
102 |
| - io->base = base; |
103 |
| - io->len = len; |
104 |
| - |
105 |
| - *out_handle = handle; |
106 |
| - return UACPI_STATUS_OK; |
107 |
| -} |
108 |
| - |
109 |
| -void uacpi_kernel_io_unmap(uacpi_handle handle) { |
110 |
| - gBS->FreePool(handle); |
111 |
| -} |
112 |
| - |
113 |
| -uacpi_status uacpi_kernel_io_read8(uacpi_handle handle, uacpi_size offset, uacpi_u8 *out_value) { |
114 |
| - struct mapped_io *io = (struct mapped_io *)handle; |
115 |
| - if (offset >= io->len) { |
116 |
| - return UACPI_STATUS_INVALID_ARGUMENT; |
117 |
| - } |
118 |
| - |
119 |
| - *out_value = inb(io->base + offset); |
120 |
| - return UACPI_STATUS_OK; |
121 |
| -} |
122 |
| - |
123 |
| -uacpi_status uacpi_kernel_io_read16(uacpi_handle handle, uacpi_size offset, uacpi_u16 *out_value) { |
124 |
| - struct mapped_io *io = (struct mapped_io *)handle; |
125 |
| - if (offset >= io->len) { |
126 |
| - return UACPI_STATUS_INVALID_ARGUMENT; |
127 |
| - } |
128 |
| - |
129 |
| - *out_value = inw(io->base + offset); |
130 |
| - return UACPI_STATUS_OK; |
131 |
| -} |
132 |
| - |
133 |
| -uacpi_status uacpi_kernel_io_read32(uacpi_handle handle, uacpi_size offset, uacpi_u32 *out_value) { |
134 |
| - struct mapped_io *io = (struct mapped_io *)handle; |
135 |
| - if (offset >= io->len) { |
136 |
| - return UACPI_STATUS_INVALID_ARGUMENT; |
137 |
| - } |
138 |
| - |
139 |
| - *out_value = inl(io->base + offset); |
140 |
| - return UACPI_STATUS_OK; |
141 |
| -} |
142 |
| - |
143 |
| -uacpi_status uacpi_kernel_io_write8(uacpi_handle handle, uacpi_size offset, uacpi_u8 in_value) { |
144 |
| - struct mapped_io *io = (struct mapped_io *)handle; |
145 |
| - if (offset >= io->len) { |
146 |
| - return UACPI_STATUS_INVALID_ARGUMENT; |
147 |
| - } |
148 |
| - |
149 |
| - outb(io->base + offset, in_value); |
150 |
| - return UACPI_STATUS_OK; |
151 |
| -} |
152 |
| - |
153 |
| -uacpi_status uacpi_kernel_io_write16(uacpi_handle handle, uacpi_size offset, uacpi_u16 in_value) { |
154 |
| - struct mapped_io *io = (struct mapped_io *)handle; |
155 |
| - if (offset >= io->len) { |
156 |
| - return UACPI_STATUS_INVALID_ARGUMENT; |
157 |
| - } |
158 |
| - |
159 |
| - outw(io->base + offset, in_value); |
160 |
| - return UACPI_STATUS_OK; |
161 |
| -} |
162 |
| - |
163 |
| -uacpi_status uacpi_kernel_io_write32(uacpi_handle handle, uacpi_size offset, uacpi_u32 in_value) { |
164 |
| - struct mapped_io *io = (struct mapped_io *)handle; |
165 |
| - if (offset >= io->len) { |
166 |
| - return UACPI_STATUS_INVALID_ARGUMENT; |
167 |
| - } |
168 |
| - |
169 |
| - outl(io->base + offset, in_value); |
170 |
| - return UACPI_STATUS_OK; |
171 |
| -} |
172 |
| - |
173 |
| -uacpi_handle uacpi_kernel_create_spinlock(void) { |
174 |
| - void *handle; |
175 |
| - if (gBS->AllocatePool(EfiLoaderData, 0x1, &handle) != EFI_SUCCESS) { |
176 |
| - return NULL; |
177 |
| - } |
178 |
| - |
179 |
| - return handle; |
180 |
| -} |
181 |
| - |
182 |
| -void uacpi_kernel_free_spinlock(uacpi_handle handle) { |
183 |
| - gBS->FreePool(handle); |
184 |
| -} |
185 |
| - |
186 |
| -uacpi_cpu_flags uacpi_kernel_lock_spinlock(uacpi_handle handle) { |
187 |
| - (void)handle; |
188 |
| - return 0; |
189 |
| -} |
190 |
| - |
191 |
| -void uacpi_kernel_unlock_spinlock(uacpi_handle handle, uacpi_cpu_flags cpu_flags) { |
192 |
| - (void)handle; |
193 |
| - (void)cpu_flags; |
194 |
| -} |
195 |
| - |
196 |
| -uacpi_handle uacpi_kernel_create_event(void) { |
197 |
| - void *handle; |
198 |
| - if (gBS->AllocatePool(EfiLoaderData, 0x1, &handle) != EFI_SUCCESS) { |
199 |
| - return NULL; |
200 |
| - } |
201 |
| - |
202 |
| - return handle; |
203 |
| -} |
204 |
| - |
205 |
| -void uacpi_kernel_free_event(uacpi_handle handle) { |
206 |
| - gBS->FreePool(handle); |
207 |
| -} |
208 |
| - |
209 |
| -uacpi_bool uacpi_kernel_wait_for_event(uacpi_handle handle, uacpi_u16 timeout) { |
210 |
| - (void)handle; |
211 |
| - (void)timeout; |
212 |
| - return UACPI_TRUE; |
213 |
| -} |
214 |
| - |
215 |
| -void uacpi_kernel_signal_event(uacpi_handle handle) { |
216 |
| - (void)handle; |
217 |
| -} |
218 |
| - |
219 |
| -void uacpi_kernel_reset_event(uacpi_handle handle) { |
220 |
| - (void)handle; |
221 |
| -} |
222 |
| - |
223 |
| -// Borrowed from https://github.com/limine-bootloader/limine/blob/v9.x/common/lib/time.c |
224 |
| - |
225 |
| -static int get_jdn(int days, int months, int years) { |
226 |
| - return (1461 * (years + 4800 + (months - 14) / 12)) / 4 |
227 |
| - + (367 * (months - 2 - 12 * ((months - 14) / 12))) / 12 |
228 |
| - - (3 * ((years + 4900 + (months - 14) / 12) / 100)) / 4 |
229 |
| - + days - 32075; |
230 |
| -} |
231 |
| - |
232 |
| -#define NS_PER_S UINT64_C(1000000000) |
233 |
| - |
234 |
| -static uint64_t get_unix_epoch( |
235 |
| - uint16_t nanoseconds, uint8_t seconds, uint8_t minutes, uint8_t hours, |
236 |
| - uint8_t days, uint8_t months, uint16_t years) { |
237 |
| - uint64_t jdn_current = get_jdn(days, months, years); |
238 |
| - uint64_t jdn_1970 = get_jdn(1, 1, 1970); |
239 |
| - uint64_t jdn_diff = jdn_current - jdn_1970; |
240 |
| - |
241 |
| - return (jdn_diff * 60 * 60 * 24 * NS_PER_S) |
242 |
| - + (hours * 3600 * NS_PER_S) |
243 |
| - + (minutes * 60 * NS_PER_S) |
244 |
| - + (seconds * NS_PER_S) |
245 |
| - + nanoseconds; |
246 |
| -} |
247 |
| - |
248 |
| -uacpi_u64 uacpi_kernel_get_nanoseconds_since_boot(void) { |
249 |
| - EFI_TIME time; |
250 |
| - if (gRT->GetTime(&time, NULL) != EFI_SUCCESS) { |
251 |
| - return 0; |
252 |
| - } |
253 |
| - |
254 |
| - uint64_t boot_time = get_unix_epoch( |
255 |
| - gTimeAtBoot.Nanosecond, gTimeAtBoot.Second, gTimeAtBoot.Minute, |
256 |
| - gTimeAtBoot.Hour, gTimeAtBoot.Day, gTimeAtBoot.Month, gTimeAtBoot.Year); |
257 |
| - uint64_t current_time = get_unix_epoch( |
258 |
| - time.Nanosecond, time.Second, time.Minute, time.Hour, time.Day, time.Month, time.Year); |
259 |
| - |
260 |
| - return current_time - boot_time; |
261 |
| -} |
262 |
| - |
263 |
| -void uacpi_kernel_stall(uacpi_u8 usec) { |
264 |
| - gBS->Stall(usec); |
265 |
| -} |
266 |
| - |
267 |
| -void uacpi_kernel_sleep(uacpi_u64 msec) { |
268 |
| - gBS->Stall(msec * 1000); |
269 |
| -} |
270 |
| - |
271 |
| -uacpi_thread_id uacpi_kernel_get_thread_id(void) { |
272 |
| - return (uacpi_thread_id)1; |
273 |
| -} |
274 |
| - |
275 |
| -uacpi_status uacpi_kernel_handle_firmware_request(uacpi_firmware_request *request) { |
276 |
| - (void)request; |
277 |
| - return UACPI_STATUS_UNIMPLEMENTED; |
278 |
| -} |
279 |
| - |
280 |
| -uacpi_status uacpi_kernel_install_interrupt_handler( |
281 |
| - uacpi_u32 irq, uacpi_interrupt_handler handler, uacpi_handle ctx, |
282 |
| - uacpi_handle *out_irq_handle) { |
283 |
| - (void)irq; |
284 |
| - (void)handler; |
285 |
| - (void)ctx; |
286 |
| - (void)out_irq_handle; |
287 |
| - return UACPI_STATUS_OK; |
288 |
| -} |
289 |
| - |
290 |
| -uacpi_status uacpi_kernel_uninstall_interrupt_handler(uacpi_interrupt_handler handler, uacpi_handle irq_handle) { |
291 |
| - (void)handler; |
292 |
| - (void)irq_handle; |
293 |
| - return UACPI_STATUS_UNIMPLEMENTED; |
294 |
| -} |
295 |
| - |
296 |
| -uacpi_status uacpi_kernel_schedule_work(uacpi_work_type work_type, uacpi_work_handler handler, uacpi_handle ctx) { |
297 |
| - (void)work_type; |
298 |
| - (void)handler; |
299 |
| - (void)ctx; |
300 |
| - return UACPI_STATUS_UNIMPLEMENTED; |
301 |
| -} |
302 |
| - |
303 |
| -uacpi_status uacpi_kernel_wait_for_work_completion(void) { |
304 |
| - return UACPI_STATUS_UNIMPLEMENTED; |
305 |
| -} |
306 |
| - |
307 |
| -void *uacpi_kernel_alloc(uacpi_size size) { |
308 |
| - void *result; |
309 |
| - if (gBS->AllocatePool(EfiLoaderData, size, &result) != EFI_SUCCESS) { |
310 |
| - return NULL; |
311 |
| - } |
312 |
| - |
313 |
| - return result; |
314 |
| -} |
315 |
| - |
316 |
| -void uacpi_kernel_free(void *mem) { |
317 |
| - if (mem != NULL) { |
318 |
| - gBS->FreePool(mem); |
319 |
| - } |
320 |
| -} |
321 |
| - |
322 |
| -uacpi_handle uacpi_kernel_create_mutex(void) { |
323 |
| - void *handle; |
324 |
| - if (gBS->AllocatePool(EfiLoaderData, 0x1, &handle) != EFI_SUCCESS) { |
325 |
| - return NULL; |
326 |
| - } |
327 |
| - |
328 |
| - return handle; |
329 |
| -} |
330 |
| - |
331 |
| -void uacpi_kernel_free_mutex(uacpi_handle handle) { |
332 |
| - gBS->FreePool(handle); |
333 |
| -} |
334 |
| - |
335 |
| -uacpi_status uacpi_kernel_acquire_mutex(uacpi_handle handle, uacpi_u16 timeout) { |
336 |
| - (void)handle; |
337 |
| - (void)timeout; |
338 |
| - return UACPI_STATUS_OK; |
339 |
| -} |
340 |
| - |
341 |
| -void uacpi_kernel_release_mutex(uacpi_handle handle) { |
342 |
| - (void)handle; |
343 |
| -} |
344 |
| - |
345 | 38 | uacpi_status uacpi_kernel_get_rsdp(uacpi_phys_addr *rsdp) {
|
346 | 39 | if (!g_rsdp) {
|
347 | 40 | return UACPI_STATUS_NOT_FOUND;
|
@@ -406,38 +99,7 @@ bool acpi_init(struct csmwrap_priv *priv) {
|
406 | 99 | return false;
|
407 | 100 | }
|
408 | 101 |
|
409 |
| -bool acpi_full_init(void) { |
410 |
| - enum uacpi_status uacpi_status; |
411 |
| - |
412 |
| - uacpi_status = uacpi_initialize(UACPI_FLAG_NO_ACPI_MODE); |
413 |
| - if (uacpi_status != UACPI_STATUS_OK) { |
414 |
| - printf("uACPI initialization failed: %s\n", uacpi_status_to_string(uacpi_status)); |
415 |
| - return false; |
416 |
| - } |
417 |
| - |
418 |
| - uacpi_status = uacpi_namespace_load(); |
419 |
| - if (uacpi_status != UACPI_STATUS_OK) { |
420 |
| - printf("uACPI namespace load failed: %s\n", uacpi_status_to_string(uacpi_status)); |
421 |
| - return false; |
422 |
| - } |
423 |
| - |
424 |
| - uacpi_status = uacpi_namespace_initialize(); |
425 |
| - if (uacpi_status != UACPI_STATUS_OK) { |
426 |
| - printf("uACPI namespace initialization failed: %s\n", uacpi_status_to_string(uacpi_status)); |
427 |
| - return false; |
428 |
| - } |
429 |
| - |
430 |
| - if (early_table_buffer != NULL) { |
431 |
| - gBS->FreePool(early_table_buffer); |
432 |
| - early_table_buffer = NULL; |
433 |
| - } |
434 |
| - |
435 |
| - return true; |
436 |
| -} |
437 |
| - |
438 | 102 | void acpi_prepare_exitbs(void) {
|
439 |
| - uacpi_state_reset(); |
440 |
| - |
441 | 103 | if (early_table_buffer != NULL) {
|
442 | 104 | gBS->FreePool(early_table_buffer);
|
443 | 105 | early_table_buffer = NULL;
|
|
0 commit comments