bb061d2a0a
Kernel: Make 32bit not use large pages during boot
...
There is no guarantee that they are supported
2024-04-18 13:33:15 +03:00
061012a268
Kernel: Fix signal trampoline
...
32 bit did not even support it and 64 bit did not align stack
2024-04-18 13:32:40 +03:00
a698f91db4
Kernel: Fix PriorityMutex::try_lock()
...
Forgot to check this when I updated Mutex::try_lock()
2024-04-18 01:36:15 +03:00
30d12a76bc
Kernel: Fix 32 bit compilation
2024-04-18 01:35:56 +03:00
687fa44eff
Kernel: Add support for ACPI general purpose events
2024-04-17 21:51:03 +03:00
aefb33efff
Kernel: Implement dummy AML NotifyOp
2024-04-17 15:40:11 +03:00
da0c45b7ee
Kernel: Cleanup AML debug dump output
2024-04-17 15:35:42 +03:00
956335e844
Kernel: Implement AML WhileOp
2024-04-17 15:00:14 +03:00
701fc600cd
Kernel: Implement evaluate and store for BankFieldElement
2024-04-17 14:59:51 +03:00
e38b2cff4f
Kernel: Implement proper synchronization for AML opregions
2024-04-17 14:59:26 +03:00
b268293402
Kernel: Fix Buffer evaluate and store for sizes >= byte
...
All reads and writes were to the first byte. This patch adds the
correct offset for reading and writing.
2024-04-17 14:57:13 +03:00
45b9dc8be9
Kernel: Make ACPI \\_OSI return true for Linux
2024-04-17 02:19:35 +03:00
0ad7025a17
Kernel: Actually map FACS (and global lock)
2024-04-17 02:14:56 +03:00
49b7467840
Kernel: Simplify AML method invocation API
2024-04-17 01:20:58 +03:00
a40ef610a2
Kernel: Allow demand paging only for userspace threads
2024-04-17 01:16:43 +03:00
f9943b60e4
Kernel: Fix mutex try_lock return value
...
WHY IS GCC NOT COMPLAINING FROM HEADERS... I used almost 2 hours
trying to locate why AML was broken
2024-04-17 01:16:43 +03:00
f97fb1b35d
Kernel: Evaluate _REG on devices for embedded controller if needed
2024-04-17 01:16:43 +03:00
b959181afd
Kernel: Remove ACPI namespace from itself
...
This removes unnecessary cyclic reference
2024-04-17 00:52:05 +03:00
cbc27a94ac
Kernel: AML cleanup IfElse code
2024-04-17 00:49:07 +03:00
6a4f999b88
Kernel: Cleanup AML code and add evaluate for string
2024-04-16 17:39:16 +03:00
7707e01352
Kernel: AML add flag to force absolute lookup for ACPI namespace
2024-04-16 17:38:23 +03:00
e667326df5
Kernel: Fix AML if parsing
...
Parse else case unconditionally, even if _if_ case evaluates to true
2024-04-16 17:36:04 +03:00
f1b2d7530d
Kernel: Rework AML namespace and object hierarchy
...
Remove tree-like structure from AML. This allows more spec compliant
parsing of named objects inside not yet declared devices.
This also allows AML to be run thread safely. All object adds/removes
are now guarded by a mutex.
2024-04-16 16:47:45 +03:00
b6587b32b9
Kernel: ACPI ignore events from non-existent ports
2024-04-16 00:00:07 +03:00
b89bafa165
Kernel: Add support for power button shutdown
...
This patch implements basic support for power button using ACPI
fixed events. I still need to implement general purpose events
and embedded controller for full power button support.
2024-04-15 23:55:25 +03:00
9fac5f94ba
Kernel: Fix entering ACPI mode
...
My condition to check wheter to enter ACPI mode was incorrect.
I only entered ACPI mode if I already was in ACPI mode :DD
2024-04-15 15:05:48 +03:00
5affc73ee6
Kernel: Parse ACPI namespace only after TTY is initialized
...
This allows better debugging when there is no serial port available.
2024-04-12 16:47:17 +03:00
027016ddae
Kernel: Load all SSDTs and PSDTs
...
Spec says to load all tables with unique OEM table IDs but that seem
wrong.
2024-04-12 16:45:00 +03:00
8f2f98b7b4
Kernel: AML implement SleepOp
2024-04-12 16:17:14 +03:00
6b43d12469
Kernel: AML package doesn't mark ZeroOp as NullName reference
2024-04-12 16:10:16 +03:00
74940ed33c
Kernel: Cleanup AML code and fix bugs
...
I can enter ACPI mode on my own laptop!
2024-04-12 16:03:14 +03:00
17871bb3ca
Kernel: Fix ACPI namespace initialization
...
ACPI spec says that only SSDTS with unique OEM table IDs are to be
loaded.
Add loading of ACPI 1.0 PSDTs
2024-04-12 12:41:30 +03:00
89c4abc07a
Kernel: Cleanup AML device initialization
...
_STA and _INI are now properly called on call devices
2024-04-12 02:00:30 +03:00
46b5a7697c
Kernel: Implement dummy \_OSI method for AML
...
This always returns Zero (not supported)
2024-04-12 01:49:54 +03:00
dd8060d64f
Kernel: Add FieldElement access attribute for AML interpreter
2024-04-12 01:49:15 +03:00
afb1d7ef0c
Kernel: Implement more features for AML parser/interpreter
...
Added
- BankField
- BufferField
- PowerResource
- ThermalZone
- Reference
- Package element forward declare
2024-04-12 01:47:40 +03:00
93ddee5956
Kernel: Implement locking for AML
...
Now global lock uses the actual global lock. Currenly if no lock
can be acquired, we just panic the kernel so that I remember to
implement it properly once AML is running concurrently.
2024-04-11 01:48:46 +03:00
0184e5beb5
Kernel: AML tries to initialize processors when entering ACPI mode
...
I had forgotten that Processors used to be a different definition
in AML.
I also implemented reads/writes for FieldElement/IndexFieldElement
that fit in 64 bits. Reads and writes to buffer are still a TODO.
2024-04-11 01:48:46 +03:00
3f2e110eab
Kernel: Entering ACPI mode now actually enables ACPI
...
I used to only initialize devices, but now I send ACPI_ENABLE if
machine is not hardware reduced.
2024-04-11 00:17:03 +03:00
0ff68b7d66
Kernel: Make ACPI load all SSDT headers after DSDT is loaded
2024-04-10 15:03:54 +03:00
cdbdc1a822
Kernel: Remove lai as a dependecy
...
I don't think lai is needed anymore, since my own AML interpreter
can do ACPI poweroff which was all that lai was used for.
2024-04-10 04:39:48 +03:00
7a2be05c69
Kernel: Implement poweroff with my AML interpreter
...
This can succesfully poweroff qemu!
2024-04-10 04:32:35 +03:00
5be38d0702
Kernel: My AML parser can now enable ACPI mode on QEMU!
2024-04-10 03:05:27 +03:00
ff203d8d34
Kernel: Implement more AML method invocation stuff
...
Method invocation is starting to come together. This implemenetation
can interpret some of the qemu's functions to enter ACPI mode.
PCI config space access is currently the one thing is between
entering ACPI mode.
2024-04-10 01:52:14 +03:00
23fa39121c
Kernel: Start working on AML method evaluations
...
Also fix namespace lookup and scope creations.
2024-04-09 18:37:51 +03:00
b16e65168f
Kernel: Rewrite whole AML parser
...
Now AML parsing is actually done while respecting namespaces and
scopes. I implemented the minimal functionality to parse qemu's AML.
Next step is to implement AML interpreting and then we can drop lai
as a dependency.
2024-04-09 01:16:07 +03:00
090a294017
BAN: Add {little,big}_endian_to_host
...
These just call host_to_{little,big}_endian but are more verbose
and cleaner.
2024-04-09 01:13:28 +03:00
22bc4b4271
Kernel: Fix AML package parsing
2024-04-07 20:32:22 +03:00
e01c049401
Kernel: Fix AML buffer parsing
2024-04-07 20:24:05 +03:00
e7ef7a9e55
Kernel: Implement barebones AML parser
...
This implements only parsing for AML in qemu. InvokeMethods are not
parsed since number of arguments to Methods is not yet known.
Parsing AML uses multiple kilobytes of stack space, so I increased
boot stack size by a lot :D
I am not sure where my own AML is going, but this is good start if
I decide to implement full ACPI on my own.
This code is very much just ugly macro expansion.
Qemu has 2 DefPackage elements that I am not able to parse. Package
data ends while there should be still multiple elements.
2024-04-07 17:03:30 +03:00