Bananymous
6b43d12469
Kernel: AML package doesn't mark ZeroOp as NullName reference
2024-04-12 16:10:16 +03:00
Bananymous
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
Bananymous
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
Bananymous
89c4abc07a
Kernel: Cleanup AML device initialization
...
_STA and _INI are now properly called on call devices
2024-04-12 02:00:30 +03:00
Bananymous
46b5a7697c
Kernel: Implement dummy \_OSI method for AML
...
This always returns Zero (not supported)
2024-04-12 01:49:54 +03:00
Bananymous
dd8060d64f
Kernel: Add FieldElement access attribute for AML interpreter
2024-04-12 01:49:15 +03:00
Bananymous
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
Bananymous
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
Bananymous
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
Bananymous
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
Bananymous
0ff68b7d66
Kernel: Make ACPI load all SSDT headers after DSDT is loaded
2024-04-10 15:03:54 +03:00
Bananymous
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
Bananymous
7a2be05c69
Kernel: Implement poweroff with my AML interpreter
...
This can succesfully poweroff qemu!
2024-04-10 04:32:35 +03:00
Bananymous
5be38d0702
Kernel: My AML parser can now enable ACPI mode on QEMU!
2024-04-10 03:05:27 +03:00
Bananymous
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
Bananymous
23fa39121c
Kernel: Start working on AML method evaluations
...
Also fix namespace lookup and scope creations.
2024-04-09 18:37:51 +03:00
Bananymous
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
Bananymous
22bc4b4271
Kernel: Fix AML package parsing
2024-04-07 20:32:22 +03:00
Bananymous
e01c049401
Kernel: Fix AML buffer parsing
2024-04-07 20:24:05 +03:00
Bananymous
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
Bananymous
e0011d22f2
Kernel: Move ACPI to its own directory and namespace
2024-04-04 15:00:13 +03:00
Bananymous
fa900df5a7
Kernel: Add signals for threads after IRQs
...
This allows signals to be called even if the process does no syscalls
The old scheduler did signal handling but I feel like it should be
enough to handle them only after syscalls and IRQs. ISRs already
handle signals that caused the ISR and there is no other route to
kernel space.
2024-04-03 15:07:18 +03:00
Bananymous
7ef751ba95
Kernel: Fix multiprocessor for i686
...
i686 is now actually ran with multiple processors.
2024-04-03 14:42:17 +03:00
Bananymous
f8c01418b1
Kernel: Fix multiprocessing on x86_64
...
I did not even start APs after initializing them... :D
2024-04-03 14:21:55 +03:00
Bananymous
d2df55b1ac
Kernel: Allow booting with multiple processors on i686
...
Also remove unnecessary ds clearing in x86_64.
2024-04-03 02:30:38 +03:00
Bananymous
0dd74e3c9d
Kernel: Implement syscalls for i686 and cleanup x86_64
...
This actually allows i686 to boot properly!
2024-04-03 02:23:23 +03:00
Bananymous
9e073e9fa0
Kernel: Add offset for interrupt stack in Scheduler::yield()
...
This allows accessing (garbage) sp and ss in interrupt stack.
2024-04-03 00:45:22 +03:00
Bananymous
c95a271821
Kernel: Set ss in i686 tss
2024-04-03 00:43:38 +03:00
Bananymous
fe386fa819
Kernel: Implement thread start trampoline for userspace
...
This is needed on i686 to set segment registers.
2024-04-03 00:42:39 +03:00
Bananymous
4d70322eab
Kernel: Save segment registers on all interrupts on i686
2024-04-03 00:41:13 +03:00
Bananymous
d9b8391968
Kernel: Fix i686 page table global mappings
2024-04-03 00:40:16 +03:00
Bananymous
2106a9e373
Kernel: Rework scheduler/processor stacks.
2024-04-02 12:34:42 +03:00
Bananymous
5050047cef
Kernel: Rewrite whole scheduler
...
Current context saving was very hacky and dependant on compiler
behaviour that was not consistent. Now we always use iret for
context saving. This makes everything more clean.
2024-03-29 18:02:12 +02:00
Bananymous
1b65f850ee
Kernel: Rename thread stacks to more appropriate names
2024-03-27 15:06:24 +02:00
Bananymous
7c2933aae1
Kernel: Fix ISR error code formatting to 32 bit
2024-03-26 21:01:18 +02:00
Bananymous
96babec22a
Kernel: Implement Thread trampolines for x86_32
2024-03-26 21:01:18 +02:00
Bananymous
c12d1e9bd9
Kernel: Implement PageTable for x86_32
...
This is mostly copied from x86_64 with necessary modifications
2024-03-26 20:16:20 +02:00
Bananymous
4d1f0e77f2
Kernel: Fix physical address size for x86_32
...
Having 32 bit address space does not mean physical address space
is also only 32 bits...
2024-03-26 20:16:20 +02:00
Bananymous
d7bf34ecd0
Kernel: Write isr handler for x86_32 and cleanup x86_64
2024-03-26 20:16:20 +02:00
Bananymous
1943c3e7a1
Kernel: Unify IDT and GDT code between x86_64 and x86_32
...
The code is pretty much the same, so there are just couple macros
differiating initialization.
2024-03-26 16:42:02 +02:00
Bananymous
af050cc729
Kernel: Fix boot code for x86_32
...
Boot assembly now initializes processor and jumps to kernel
2024-03-26 13:25:22 +02:00
Bananymous
99e30a4d7d
Kernel: Replace i386 with i686
...
I don't really want to be working with i386 since it doesn't support
compare exchange instruction
2024-03-26 02:48:26 +02:00
Bananymous
93975fdc45
Kernel: Process signal mask is now 2 32 bit values
...
This allows signal mask to be atomic on 32 bit target
2024-03-26 02:46:51 +02:00
Bananymous
fbef90f7cb
Kernel/LibC: Write cxx abi with proper locking
2024-03-26 02:28:10 +02:00
Bananymous
a9db4dd9a3
Kernel: NVMe Queue max simultaneous commands is dependent on arch
...
This allows mask to be atomic on 32 bit architectures
2024-03-26 01:45:43 +02:00
Bananymous
fc7e96fa66
Kernel: Rewrite i386 boot code + linker script
2024-03-26 00:10:42 +02:00
Bananymous
097d9a6479
Kernel: Implement dummy IDT and GDT for i386
2024-03-26 00:10:42 +02:00
Bananymous
2dd0bfdece
Kernel: Make i386 thread tramplines crash
2024-03-26 00:10:42 +02:00
Bananymous
26585bb1d9
Kernel: Implement signal trampoline for i386
2024-03-22 15:41:15 +02:00
Bananymous
0d92719433
Kernel: Remove old i386 spinlock code
2024-03-22 15:41:15 +02:00