Bananymous
e5bb843059
LibC/Kernel: Implement ttyname
2024-07-30 11:41:18 +03:00
Bananymous
681d8327f5
LibC/Kernel: Cleanup termios code
...
This is still not correct, but much better than it used to be
2024-07-30 11:10:43 +03:00
Bananymous
9bc02c81f8
Kernel: Map DMA and PCI MMIO as uncached
2024-07-30 11:10:08 +03:00
Bananymous
bb1738db8c
Kernel: Make thread unblocking O(1)
...
This is still bit broken. VirtualBox seems to freeze sometimes, but I
could not recreate this on qemu (with and without kvm) or real hardware.
2024-07-24 00:31:01 +03:00
Bananymous
9548c592a3
Kernel: Always print basic info about xHCI controller
...
Its nice to see that the controller is getting initalized
2024-07-23 09:09:08 +03:00
Bananymous
cda0276d39
Kernel: Force PCI irq line usage when not using APIC
...
afaik PIC does not support MSI
2024-07-23 09:08:00 +03:00
Bananymous
539afb329a
Kernel: All processors use LAPIC timer when running with APIC
...
This makes scheduler preemption much cleaner as bsb does not have to
send smp messages to notify other processes about timer interrupt.
Also PIT percision is now "full" 0.8 us instead of 1 ms that I was using
before.
2024-07-23 02:28:52 +03:00
Bananymous
3e0150f847
Kernel: Pressing F1 now toggles rendering of CPU loads to the terminal
...
This can be nice for seeing the performance and problems on the load
balancing algorithm.
2024-07-22 00:43:13 +03:00
Bananymous
f8261c60c0
Kernel: Rewrite the whole scheduler and re-architecture SMP handling
...
Change Semaphore -> ThreadBlocker
This was not a semaphore, I just named it one because I didn't know
what semaphore was. I have meant to change this sooner, but it was in
no way urgent :D
Implement SMP events. Processors can now be sent SMP events through
IPIs. SMP events can be sent either to a single processor or broadcasted
to every processor.
PageTable::{map_page,map_range,unmap_page,unmap_range}() now send SMP
event to invalidate TLB caches for the changed pages.
Scheduler no longer uses a global run queue. Each processor has its own
scheduler that keeps track of the load on the processor. Once every
second schedulers do load balancing. Schedulers have no access to other
processors' schedulers, they just see approximate loads. If scheduler
decides that it has too much load, it will send a thread to another
processor through a SMP event.
Schedulers are currently run using the timer interrupt on BSB. This
should be not the case, and each processor should use its LAPIC timer
for interrupts. There is no reason to broadcast SMP event to all
processors when BSB gets timer interrupt.
Old scheduler only achieved 20% idle load on qemu. That was probably a
very inefficient implementation. This new scheduler seems to average
around 1% idle load. This is much closer to what I would expect. On my
own laptop idle load seems to be only around 0.5% on each processor.
2024-07-22 00:33:50 +03:00
Bananymous
9f90eeab05
Kernel: Fix stack pointer OOB check
...
i686 does not push the stack pointer on interrupt when no CPL change
happens.
2024-07-22 00:27:08 +03:00
Bananymous
1ee37cb671
Kernel: Make sure stack is aligned on interrupts for i686 target
...
I just realized that only x86_64 aligns stack pointer when interrupt is
triggered.
2024-07-22 00:10:42 +03:00
Bananymous
8fe798de6d
Kernel: Make PIT counter atomic with spinlock
2024-07-21 18:56:41 +03:00
Bananymous
86b6714777
Kernel: Add command line option to boot without smp
2024-07-21 17:40:57 +03:00
Bananymous
77b5e6d44a
Kernel: Make ATABus use BAN::Atomic<> instead of gcc builtin atomics
2024-07-21 17:39:26 +03:00
Bananymous
ffe73165f9
Kernel: Fix PCI typo serail -> serial
2024-07-21 17:36:29 +03:00
Bananymous
96c7e9e29d
Kernel: Cleanup VirtualRange code
...
Virtual range does not need to look into the page table for mapped
physcial pages. It can (and should) just keep track of them itself.
2024-07-21 17:35:07 +03:00
Bananymous
02051ed60f
Kernel: Move keyboard kernel panic to the general input device
...
This will allow command to work without requiring it per keyboard driver
2024-07-21 17:33:38 +03:00
Bananymous
f49689caac
Kernel: Implement API for sending IPIs for only one processor
...
Also move the spin wait to check for pending IPI sends to the start of
ipi sending function. There is no need to wait for IPI send succeeding
right after it. It is enough to make sure there are not multiple IPIs
being sent at the same time.
2024-07-21 17:30:59 +03:00
Bananymous
974b9b992d
Kernel: Fix process exiting infinite loop
...
If process was exiting and had a process waiting for it and that waiting
process got interrupted, the exiting process could never exit.
2024-07-18 21:40:44 +03:00
Bananymous
4b917390ac
Kernel: Fix sse state saving
...
This was broken when I added SMP support. This patch makes sse kind of
dumb as it is saved and restored on every interrupt, but now it at least
works properly... I'll have to look into how sse can get optimized
nicely with SMP. Simple way would be pinning each thread to a specific
processor and doing pretty much what I had before, but sse thread saved
in processor rather than static global.
2024-07-16 23:15:11 +03:00
Bananymous
7a0fb9a57f
Kernel: Fix TTY scroll clearing first and/or last characters from line
2024-07-16 22:49:49 +03:00
Bananymous
58fcd2b2fe
Kernel: Fix multi-interface USB device initialization
2024-07-16 22:29:18 +03:00
Bananymous
e30952efee
Kernel: Implement key repeating for USB keyboard
...
USB keyboards don't send repeating keys automatically, so it has to be
emulated in software.
2024-07-16 11:54:57 +03:00
Bananymous
1337758660
Kernel: Make USB HID interfaces configure all endpoints
2024-07-16 00:23:26 +03:00
Bananymous
339e8a7910
Kernel: Fix USB keyboard state updating with variable reports
2024-07-16 00:03:00 +03:00
Bananymous
a60b460701
Kernel: Update USB HID code to support multiple top-level collections
...
This allows me to use my laptops own keyboard!
2024-07-16 00:01:53 +03:00
Bananymous
a5cb4057f9
Kernel: Implement unified input files for device hot-plugging support
...
/dev/keyboard and /dev/mouse can be read for events from any attached
keyboard or mouse respectively. This makes device hot-plugging support
pretty much automatic for TTY, GUI, and whatever takes input.
2024-07-15 22:11:15 +03:00
Bananymous
9d7f97ccd5
Kernel: Implement DevFileSystem::remove_device
...
This function cleanly removes the devices from the whole filesystem.
USB devices are now removed from the filesystem as soon as they are
destroyed.
2024-07-15 22:10:42 +03:00
Bananymous
0578d41500
Kernel: Implement WriteCombining memory
...
This makes framebuffer much faster on real hardware
2024-07-15 22:09:09 +03:00
Bananymous
42c3fa24f0
Kernel: Add support for HID Report ID and parsing all collections
...
Only the first top-level collection is used for the device, but that
seems to generally be what keyboard and mouse use for input.
2024-07-15 15:51:07 +03:00
Bananymous
60b396fee5
Kernel: Add mouse move and scroll event merging back
...
This makes mouse work much faster when reading can't keep up with the
amount of events.
2024-07-15 15:45:20 +03:00
Bananymous
4cd9252ff6
Kernel: Fix USB code
...
Fix USB Keyboard scan code table for bottom row of keyboard
Support multiple interfaces on a single USB device
Add usb mouse to default qemu settings
2024-07-15 11:48:48 +03:00
Bananymous
75875d3a8f
Kernel: Set interval and average trb length on configure endpoint
...
Real controllers seem to require this while spec 4.8.2.4 says that they
should be left as zero.
2024-07-15 11:46:28 +03:00
Bananymous
86e9d92ecb
Kernel: Take ownership of xHCI controller from bios
2024-07-14 03:31:35 +03:00
Bananymous
baa4e6475a
Kernel: Implement basic USB Mouse
...
This has the same problem I described in previous commit for keyboard
2024-07-14 02:11:32 +03:00
Bananymous
ac5c77ee2c
Kernel: Implement USB Keyboard
...
This is kinda hacky, as I had disable the PS/2 initialization so that
usb keyboard gets /dev/keyboard0. I should add device hot plugging
support for TTY and GUI...
2024-07-14 02:09:18 +03:00
Bananymous
1efc6a1385
Kernel: Implement simple USB HID driver
...
This should be easily expandable to add HID devices
2024-07-14 02:04:48 +03:00
Bananymous
749be67df3
Kernel: Fix cxxabi for function static variable guards
2024-07-14 01:53:50 +03:00
Bananymous
a97a574718
Kernel: Rewrite the whole input system
...
PS/2 code is now kind of messed up, but it works. Keyboards and mice are
now an abstract class that is automatically exposed to userspace. This
will make adding USB input much nicer.
2024-07-14 01:53:50 +03:00
Bananymous
f120da3aca
Kernel: USB device now sets the current configuration
2024-07-12 11:26:06 +03:00
Bananymous
240684bc1f
Kernel: Refactor some xHCI code and add new definitions
2024-07-12 11:25:24 +03:00
Bananymous
e905634343
Kernel: Fix bugs and cleanup USB and xHCI code and API
2024-07-11 14:10:55 +03:00
Bananymous
14dce1abac
Kernel: Start work on USB stack
...
Current code can enumerate all xHCI devices and detect their type based
on the class code on device or interface descriptors.
2024-07-10 12:06:00 +03:00
Bananymous
5dc441c4af
Kernel/userspace: Implement KD_LOADFONT and loadfont program
2024-07-03 09:02:49 +03:00
Bananymous
f18c33563d
Kernel: Fix PCI MSI-X allocation
2024-06-30 20:36:43 +03:00
Bananymous
08cbd009ac
Kernel: PCI don't report multi function bit with header_type()
2024-06-29 22:11:55 +03:00
Bananymous
3d4219bfee
Kernel: Don't panic if nvme initialization fails
2024-06-29 22:07:55 +03:00
Bananymous
1a844426c3
Kernel: Add fast path for framembuffer sync if bpp == 32
2024-06-28 23:34:11 +03:00
Bananymous
42237a3bc8
Kernel: Implement fast scrolling for TTY
2024-06-28 23:15:03 +03:00
Bananymous
48a76426e7
BAN: Add more APIs for Atomic and make compare_exchage take a reference
2024-06-28 21:47:47 +03:00
Bananymous
31568fc5a1
Kernel: Rewrite Sockets to not be TmpInodes
...
TmpInodes just caused issues because TmpFS kept them alive. There was
really no reason for sockets to even be stored inside a TmpFS...
2024-06-27 00:35:19 +03:00
Bananymous
cb07142832
Kernel: ACPI allow more calling or \_S5
...
Spec says that \_Sx must have 4 fields, but virtual box seems to only
have the two defined once. This patch allows shutodown on virtual box
2024-06-25 23:25:10 +03:00
Bananymous
60a05412c9
Kernel: ACPI implement SizeOf
2024-06-25 23:24:51 +03:00
Bananymous
0179f5ea09
Kernel: ACPI add \_OS string
2024-06-25 23:24:19 +03:00
Bananymous
f671ed7e3f
Kernel: ACPI implement integer stores to registers as copies
...
Before storing const integer and then modifying the register it would
error.
2024-06-25 23:23:52 +03:00
Bananymous
2fccff5a35
Kernel: Implement ACPI IndexOp into Strings
2024-06-25 23:23:00 +03:00
Bananymous
af4b138094
Kernel/LibC: Implement realpath
...
realpath is implemented as a syscall. This is not really required but it
was the easiest way to get it working as there is already path
canonicalization at kernel level.
2024-06-25 19:32:40 +03:00
Bananymous
25099b4c98
Kernel: Don't validate O_SEARCH for non-directories
2024-06-25 19:27:55 +03:00
Bananymous
d7b8458a56
Kernel: Fix TCP sending
...
TCP send was effectively always waiting for connection to close and then
return a value of 0.
2024-06-25 11:04:03 +03:00
Bananymous
67dfe0bcf3
BAN: Allow String::formatted to fail
2024-06-25 11:04:03 +03:00
Bananymous
9e1b5cbaab
BuildSystem: Cleanup CMake code to allow libc only installation
...
There was no way to just install libc which is required for stdlibc++
2024-06-21 01:45:14 +03:00
Bananymous
4f0457a268
Kernel: Rewrite a lot of TCP code and implement TCP server sockets
...
TCP stack is now implemented much closer to spec
2024-06-20 13:26:50 +03:00
Bananymous
bce16cdd6e
Kernel: Fix how socket closing works
...
Sockets are now closed only when they are not referenced any more. This
allows child process to close socket and still keep it open for the
parent.
2024-06-19 10:39:44 +03:00
Bananymous
ad6d95ba52
BuildSystem: Rework the whole cmake build system
...
Now files are installed using the install() command instead of manually
copying files to their destinations. This allows automatic recompilation
of headers that did not work previously
2024-06-19 09:40:03 +03:00
Bananymous
318ce5dec8
All: Fix a lot of compiler warnings from header files
...
While reworking build system, header files started to report warnings.
2024-06-18 23:02:10 +03:00
Bananymous
c69919738b
BuildSystem: Move all userpace libraries under the userspace directory
...
As the number of libraries is increasing, root directory starts to
expand. This adds better organization for libraries
2024-06-18 13:14:35 +03:00
Bananymous
f1e366d36f
Kernel: Free keyboard mutex while waiting for data to read
...
This was making select hang if one thread was trying to read from
keyboard.
2024-06-17 23:04:37 +03:00
Bananymous
be7ed8e74a
Kernel/LibC: Implement {get,set}sockopt()
...
These are pretty much dummy functions in the kernel side. Only case that
is handled is SOL_SOCKET with SO_ERROR. This is hard coded to return no
error. Network stack is currently synchronous, so all errors are already
reported through synchronous network functions.
2024-06-17 20:56:48 +03:00
Bananymous
cad55a4da5
Kernel/LibC: Implement getsockname for ipv4 sockets
2024-06-17 20:54:45 +03:00
Bananymous
511fc870a1
BAN: Mark RefPtr and WeakPtr operator bool() as explicit
2024-06-17 20:19:36 +03:00
Bananymous
ea7fc7f6c4
Kernel: Implement read-only FAT12/16/32 driver with long name support
...
You can now mount FAT filesystems! This code might not work perfectly
but my quick testing seemed to work on all (FAT12/16/32) variants.
2024-06-14 01:04:12 +03:00
Bananymous
6b1d5d28be
Kernel: VFS root now has to be block device instead of partition
2024-06-14 00:19:12 +03:00
Bananymous
766439db6d
Kernel: Start work on adding support for new filesystems
...
Old code tried to create ext2 filesystem from all devices.
2024-06-11 10:50:26 +03:00
Bananymous
d4903caafa
Kernel: Combine consecutive mouse move and scroll events
...
This makes mouse work much smoother when running without kvm.
2024-06-11 00:07:31 +03:00
Bananymous
ffacff67cf
LibFont: Move PSF code to separate file
2024-06-10 16:10:05 +03:00
Bananymous
530c259e71
Kernel: Close unix domain socket when it gets destoyed
...
Inode closing is something that needs a complete rework. Currently all
sockets are closed when close() is called, which leads to connection
closing if you fork()/exec() with socket being marked as CLOEXEC.
Inodes should probably only be closed once they are not referenced
anywhere.
2024-06-03 18:06:01 +03:00
Bananymous
765ccfa18c
Kernel: Deliver SIGCHLD on process exit and ignore it properly
2024-06-03 17:58:24 +03:00
Bananymous
bd1290706a
Kernel: Implement SharedMemoryObject cloning
2024-06-03 03:41:00 +03:00
Bananymous
aec5a09caf
Kernel/LibC: Implement SYS_ISATTY and isatty()
2024-06-03 03:36:25 +03:00
Bananymous
446220494e
Kernel: Unix domain sockets close can now be detected
...
When a unix domain socket is closed and it has a connection to another
socket, it will make the other socket readable and recv will return 0.
This allows detection of socket closing
2024-06-02 16:48:55 +03:00
Bananymous
8bfacb0091
Kernel: Implement deletion of SMO objects
2024-05-31 13:04:23 +03:00
Bananymous
0501f3bd99
Kernel: Move font code to its own library LibFont
2024-05-31 10:47:05 +03:00
Bananymous
84b3289a2a
Kernel: Move Scheduler::yield() lock check after interrupts disabled
...
I have no idea why this solves a bug where current processor has
scheduler lock at the beginning of yield.
2024-05-31 02:56:39 +03:00
Bananymous
b760892de2
Kernel: Make pselect use nanosecods instead of milliseconds
2024-05-31 02:56:17 +03:00
Bananymous
6840a8983c
Kernel: Make sure MSB is not set on SMO keys
2024-05-29 20:01:12 +03:00
Bananymous
a1b3490764
Kernel: Improve random number generation for unsigned types
2024-05-29 20:00:47 +03:00
Bananymous
076f1efecb
Kernel: Fix 32 bit fast page locking
...
I forgot to change this when changing the lock type. 32 bit boots again
fine :D
2024-05-29 19:44:39 +03:00
Bananymous
53e572f072
Kernel: Fix s_fast_page_lock type on 32 bit target
2024-05-29 18:04:23 +03:00
Bananymous
d4d530e6c8
Kernel: Implement basic shared memory objects
...
These can allocate memory that can be shared between processes using
a global key. There is currenly no safety checks meaning anyone can
map any shared memory object just by trying to map every possible key.
2024-05-29 15:58:46 +03:00
Bananymous
99270e96a9
Kernel: Lock debug lock while printing fault details
...
This allows multiprocessor to dump clean output on concurrent faults
2024-05-29 15:49:24 +03:00
Bananymous
4bf7a08c80
Kernel: Allow SYS_PSELECT to work with timeout of zero
2024-05-29 15:32:18 +03:00
Bananymous
3823de6552
Kernel: Add templated get function for Random
2024-05-29 15:32:00 +03:00
Bananymous
8bc6c2eb20
Kernel: Move KeyEvent/MouseEvent from kernel to LibInput
2024-05-28 23:30:08 +03:00
Bananymous
87d52e5ebe
Kernel: Fix timer early wake message
...
When printing early return message, current time was read twice. This
could lead to early return check failing, but when printing and reading
the time again subtraction overflow would happen.
2024-05-28 16:04:18 +03:00
Bananymous
598a09c13d
Kernel: Allow select to work on any type of inode
2024-05-28 16:03:54 +03:00
Bananymous
18e2559b1e
Kernel/LibC: Add SYS_TRUNCATE
2024-05-28 01:08:04 +03:00
Bananymous
a1ab44d39f
Kernel: Optimize disk reads to read multiple sectors at once
...
Old StorageDevice::read_sectors() read each sector separately if the
underlying disk had a disk cache. This patch allows multiple sectors to
be read even if the disk cache exists and contains some of the sectors.
Only sectors that could not be found from the disk cache are actually
read from the disk. This optimization is not done for writing, which
still will write each sector separately, if disk cache has no memory to
store new sectors. It would feel kind of unnecessary optimization as you
have greater problems if disk cache cannot allocate a single page.
2024-05-27 15:52:34 +03:00
Bananymous
8b1514e575
Kernel: Make all storage devices readable and writable
...
I only had a {read,write}_impl defined for ATABaseDevice. This patch
moves that implmentation to general storage device.
2024-05-27 13:41:55 +03:00
Bananymous
2d3810874d
Kernel: Fix thread signal handling
...
Threads will now only handle signals once they are not holding any
mutexes. This removes some dead locks.
2024-05-26 20:08:35 +03:00
Bananymous
2a4d986da5
Kernel: Add preliminary support for PCIe
...
Only segment 0 is supported, but devices can now be accessed through
mmio.
Adding more segments would require adding argument to every PCI API so
it is left for later.
2024-05-25 20:50:07 +03:00
Bananymous
df260fe0e8
Kernel: Process::validate_pointer_access now maps the whole range
...
This fixes a bug where userspace provided address is not fully mapped
and the kernel tries to read/write it while using PageTable fast page.
In the future userspace input should be copied on syscall entry, so
userspace could not modify the input during syscall. Currently there
is change that userspace input passes kernel syscall validation and
after that userspace could modify the input before the value is
actually used.
2024-05-24 14:14:17 +03:00
Bananymous
2be4fe8404
Kernel: Make PageTable::s_fast_page_lock non-recursive
...
This lock is only used in wrapper of PageTable. There is no possiblity
of taking the lock outside of these wrappers.
2024-05-24 14:12:35 +03:00
Bananymous
06f4b0b29a
BAN: Make String and StringView header only
...
This allows linking with libc without having to link ban
2024-05-23 15:43:26 +03:00
Bananymous
83e3409bd8
Kernel/LibC: Update SYS_SEEK to return new offset and implement lseek
2024-05-23 14:49:23 +03:00
Bananymous
0af74fccda
Kernel/LibC: Rework dirent structure
...
dirent now contains statically sized d_name. This allows using
sizeof on the name and dirent properly, which some programs seem
to be using.
2024-05-22 20:19:59 +03:00
Bananymous
e77de1804f
Kernel: Fix some race conditions in TCP stack
...
Remove race condition if two acks are to be sent one after another.
Always unblock semaphore once TCP thread has done something. This
allows better chance of TCP sending to succeed.
There are multiple places in the networking code that would require
thread-safe entering to blocking mode. I should add some API for this
so that a lot of race conditions could be removed.
2024-05-21 01:53:45 +03:00
Bananymous
e00b92225d
Kernel: Fix E1000 interrupt handling condition
...
I had written the ICR register check backwards which lead to interrupt
handling only when it was not needed, and no handling when it was
needed. This somehow still worked, just much slower often requiring tcp
resends from the server.
2024-05-21 01:52:19 +03:00
Bananymous
e7e1dd91c7
Kernel: Implement ACPI reset
2024-04-22 21:12:13 +03:00
Bananymous
195c5e92a4
Kernel: Add floating bus detection for ATA Bus
2024-04-22 21:12:13 +03:00
Bananymous
26922ebb51
Kernel: Remove stack size check for keyboard layout initialization
...
Keyboard layout loading can take around 1 KB of stack for i686 target
2024-04-22 21:11:04 +03:00
Bananymous
693f90449f
Kernel: Rework AML package and implement indexing in to packages
2024-04-19 11:26:48 +03:00
Bananymous
34b10f61ce
Kernel: Make PIT reserve its IRQ
...
PIT did not reserve IRQ leading to kernel panic if it was being
initialized.
2024-04-18 13:34:28 +03:00
Bananymous
1479b42112
Kernel: Don't even loop over processor when system has only BSP
2024-04-18 13:33:52 +03:00
Bananymous
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
Bananymous
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
Bananymous
a698f91db4
Kernel: Fix PriorityMutex::try_lock()
...
Forgot to check this when I updated Mutex::try_lock()
2024-04-18 01:36:15 +03:00
Bananymous
30d12a76bc
Kernel: Fix 32 bit compilation
2024-04-18 01:35:56 +03:00
Bananymous
687fa44eff
Kernel: Add support for ACPI general purpose events
2024-04-17 21:51:03 +03:00
Bananymous
aefb33efff
Kernel: Implement dummy AML NotifyOp
2024-04-17 15:40:11 +03:00
Bananymous
da0c45b7ee
Kernel: Cleanup AML debug dump output
2024-04-17 15:35:42 +03:00
Bananymous
956335e844
Kernel: Implement AML WhileOp
2024-04-17 15:00:14 +03:00
Bananymous
701fc600cd
Kernel: Implement evaluate and store for BankFieldElement
2024-04-17 14:59:51 +03:00
Bananymous
e38b2cff4f
Kernel: Implement proper synchronization for AML opregions
2024-04-17 14:59:26 +03:00
Bananymous
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
Bananymous
45b9dc8be9
Kernel: Make ACPI \\_OSI return true for Linux
2024-04-17 02:19:35 +03:00
Bananymous
0ad7025a17
Kernel: Actually map FACS (and global lock)
2024-04-17 02:14:56 +03:00
Bananymous
49b7467840
Kernel: Simplify AML method invocation API
2024-04-17 01:20:58 +03:00
Bananymous
a40ef610a2
Kernel: Allow demand paging only for userspace threads
2024-04-17 01:16:43 +03:00
Bananymous
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
Bananymous
f97fb1b35d
Kernel: Evaluate _REG on devices for embedded controller if needed
2024-04-17 01:16:43 +03:00
Bananymous
b959181afd
Kernel: Remove ACPI namespace from itself
...
This removes unnecessary cyclic reference
2024-04-17 00:52:05 +03:00
Bananymous
cbc27a94ac
Kernel: AML cleanup IfElse code
2024-04-17 00:49:07 +03:00
Bananymous
6a4f999b88
Kernel: Cleanup AML code and add evaluate for string
2024-04-16 17:39:16 +03:00
Bananymous
7707e01352
Kernel: AML add flag to force absolute lookup for ACPI namespace
2024-04-16 17:38:23 +03:00
Bananymous
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
Bananymous
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
Bananymous
b6587b32b9
Kernel: ACPI ignore events from non-existent ports
2024-04-16 00:00:07 +03:00
Bananymous
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
Bananymous
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
Bananymous
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
Bananymous
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
Bananymous
8f2f98b7b4
Kernel: AML implement SleepOp
2024-04-12 16:17:14 +03:00
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
Bananymous
1ab2722850
Kernel: Add PageTable stub to progress linking
2024-03-22 15:41:15 +02:00
Bananymous
fe17958b9f
Kernel: Rename rsp->sp and rip->ip
...
This makes more sense if we support i386
2024-03-22 15:41:15 +02:00
Bananymous
3e4d410646
Kernel: Fix AHCI device physical address writing on i386 target
2024-03-22 15:41:15 +02:00
Bananymous
b5aae34d86
Kernel: Specify template paramenters where they cannot be deduced
2024-03-22 15:41:15 +02:00
Bananymous
7f029b2713
Kernel: Allow Processor compilation for i386 targets
...
This is achieved by rewriting some inline assembly and changing
ProcessorID to be 32 bit value. For some reason if processor id
is 8 bits gcc runs out of 8 bit registers on i386.
2024-03-22 15:41:15 +02:00
Bananymous
0424082e7b
Kernel: Only compile lai for x86_64 targets
...
I will be dropping lai entirely soon. Once I get to writing AML
interpreter.
2024-03-22 15:41:15 +02:00
Bananymous
2352c86048
Kernel: i386 has 14 indirect blocks in TmpInode instead of 2
...
This allows keeping size of TmpInodeInfo as 128
2024-03-22 14:01:27 +02:00
Bananymous
c0dff5e203
Kernel: Scheduler/Thread add inline assembly for i386
2024-03-22 14:01:27 +02:00
Bananymous
d920785256
Kernel: RDRAND on i386 is called twice with 32 bit register
2024-03-22 14:01:27 +02:00
Bananymous
45cea14165
Kernel: Move sys_fork trampolines to kernel/arch/ directory
2024-03-22 12:48:54 +02:00
Bananymous
26ed689d30
Kernel: Remove old GDT, IDT and MMU code from i386
...
It will be easier to just rewrite them
2024-03-22 12:47:34 +02:00
Bananymous
7ce0370b6a
Kernel: Define KERNEL_OFFSET for i386 target
2024-03-22 12:35:49 +02:00
Bananymous
aa2e53c4f8
Kernel: E1000 fix physical address on 32 bit target
2024-03-22 12:35:38 +02:00
Bananymous
9ecd156622
Kenrel: Ext2 fix signed-unsigned comparisons
2024-03-22 12:35:29 +02:00
Bananymous
62f6128ba1
Kernel: Cleanup NVMe Queue command submission
...
There is techically a race condition on thread sleep and checking
done mask. This patch allows read to success even if this race
condition is hit, although the full timeout has to be waited.
This can be fixed in future with some sort of wait queues that
can properly handle this race condition.
2024-03-19 13:01:27 +02:00
Bananymous
9607b4205a
Kernel: Fix kernel panic on signal
...
Signals are now added/handled without Scheduler's lock
2024-03-18 16:05:47 +02:00
Bananymous
090c3c9930
Kernel: NVMe queues now supports upto 64 simultaneous operations
2024-03-15 13:46:35 +02:00
Bananymous
48ea9e1c1d
Kernel: PS2Controller uses RecursiveSpinLock so timeouts don't panic
2024-03-15 13:45:44 +02:00
Bananymous
42469b83fe
Kernel: kernel panic is now sent to all processors
2024-03-15 13:45:01 +02:00
Bananymous
e65bc040af
Kernel: Now all active processors are used in scheduling
...
When a timer reschedule happens, ipi is broadcasted too all
processors for them to perform a reschedule!
2024-03-09 23:53:50 +02:00
Bananymous
89ca4c8a8b
Kernel: Implement IPI broadcasting
2024-03-09 23:53:38 +02:00
Bananymous
2323a55517
Kernel: Debug lock is locked while dumping stack trace
2024-03-09 23:52:06 +02:00
Bananymous
45d6caa1d0
Kernel: APs now start their idle threads when scheduler is started
2024-03-09 23:51:40 +02:00
Bananymous
55d2a64f54
Kernel: Map interrupt handlers for all processors
...
This doesn't mean that processors will actually handle the irqs
2024-03-09 23:50:57 +02:00
Bananymous
2420886c2c
Kernel: Move current and idle thread to Processor
2024-03-08 23:39:29 +02:00
Bananymous
e636dce919
Kernel: Rewrite scheduler thread lists
...
Scheduler now has its own data SchedulerQueue which holds active nad
blocking thread lists. This removes need for BAN/Errors.h and making
current thread separate element instead of iterator into linked list.
This makes it possible to have current_thread on each processor
instead of a global one in Scheduler.
2024-03-08 22:13:45 +02:00
Bananymous
1a1f9b1cf2
Kernel: Fix {read,write}_gs_sized input operands to work always
2024-03-08 22:12:33 +02:00
Bananymous
23a2f8b903
Kernel: Cleanup multiprocessor startup by removing magic numbers
2024-03-07 17:01:17 +02:00
Bananymous
29fd682672
Kernel: Store current processor pointer in IA32_GS_BASE
...
This allows easier access to processors fields
2024-03-07 16:05:29 +02:00
Bananymous
6234a5bc0b
Kernel: Move multiprocessor initialize after framebuffer is created
...
This allows getting output before multiprocessor is started.
2024-03-06 16:00:19 +02:00
Bananymous
54f64e7618
Kernel: Move current page table to Processor
...
APs can now map kernel page table and print current time!
2024-03-06 02:19:59 +02:00
Bananymous
f0105cb7fb
Kernel: Move Interruptable from InterruptController.h to its own file
2024-03-06 00:47:02 +02:00
Bananymous
76b0f80169
Kernel: Move IDT to Processor
2024-03-06 00:45:54 +02:00
Bananymous
f84df175ce
Kernel: Save BSB id
2024-03-06 00:36:09 +02:00
Bananymous
58aca68726
Kernel: Move GDT to Processor
2024-03-06 00:35:45 +02:00
Bananymous
8670364f44
BAN: Remove unnecessary include from Array.h
2024-03-06 00:01:06 +02:00
Bananymous
418bc54f2b
Kernel: Move SpinLock definition to header and fix Scheduler locking
...
This patch allows inlining of spinlocks :)
2024-03-04 22:36:41 +02:00
Bananymous
9c36d7c338
BAN/Kernel: Rework assertion/panic system
...
BAN/Assert.h does not need any includes meaning it can be included
anywhere without problems.
2024-03-04 11:41:54 +02:00
Bananymous
8141b9977d
Kernel: Per processor information is now stored in class Processor
...
This allows us to allocate processor stacks, and other per processor
structures dynamically in runtime. Giving processor stack to
ap_trampoline feels super hacky, but it works for now.
2024-03-03 22:30:06 +02:00
Bananymous
c035d3c82c
Kernel: Start all processors on kernel boot
...
Processors don't do anything, except print hello message and halt.
2024-03-03 02:19:43 +02:00
Bananymous
1de9daa40f
Kernel: Move interrupt status stuff to Processor.h
...
SpinLocks are now locked with processor id instead of thread id. This
allows having multiple processors running while scheduler is not yet
activated.
2024-03-03 01:47:22 +02:00
Bananymous
a667d88f93
Kernel: Remove now obsolete CriticalScope
...
All critical scopes in kernel are now replaced by SpinLocks. This
allows proper locking in actual multiprocessing with multiple cores.
2024-03-01 15:51:02 +02:00
Bananymous
8d7dd577ab
Kernel: Replace last CriticalScopes in kernel with SpinLocks
2024-03-01 15:49:39 +02:00
Bananymous
054b41383f
Kernel: Implement SpinLock unsafe that does not keep track of locker
...
This will be used in scheduler where thread ids are changing
2024-03-01 15:48:08 +02:00
Bananymous
02ad199138
Kernel: Move interrupt status functions to kernel/Interrupts.h
2024-03-01 02:13:28 +02:00
Bananymous
65c4f9db5b
Kernel: Replace CriticalScopes with SpinLocks in Process/Thread
2024-03-01 02:13:28 +02:00
Bananymous
51e38b7614
Kernel: Replace CriticalScope with SpinLock in SerialTTY
2024-02-29 19:17:28 +02:00
Bananymous
90878a7c2b
Kernel: Replace CriticalScopes with SpinLocks in networking code
2024-02-29 19:17:28 +02:00
Bananymous
7f028f70d5
Kernel: Replace CriticalScopes with SpinLock in PS/2 and input code
2024-02-29 19:17:28 +02:00
Bananymous
ec0cb5fd54
Kernel: Remove CriticalScopes from memory handing code
2024-02-29 19:16:41 +02:00
Bananymous
682de62c57
Kernel: Replace HPET CriticalScope with SpinLock
2024-02-29 19:15:33 +02:00
Bananymous
18253b6966
Kernel: Replace InterruptController CriticalScopes with SpinLock
2024-02-29 19:15:33 +02:00
Bananymous
d94f6388b7
Kernel: Fix all broken locks from new mutexes
2024-02-28 22:45:34 +02:00
Bananymous
5c39903323
Kernel: Simplify writing to threads stacks
...
This can be done more simply as all stacks are now page aligned
2024-02-28 13:20:17 +02:00
Bananymous
6d59a2b45d
Kernel: Remove VirtualRanges created in kmalloc memory
...
These were only used as stacks of kernel threads, but they can just
as well be allocated as full pages from Heap
2024-02-28 13:19:18 +02:00
Bananymous
09c24088a2
Kernel: Cleanup kmalloc VirtualRange creation
2024-02-28 13:19:18 +02:00
Bananymous
efdc4817bb
Kernel: Print to debug log ICMP unreachable messages
...
These messages should be forwarded to underlying sockets
2024-02-28 13:19:18 +02:00
Bananymous
59abb5d344
Kernel: Make HPET read_main_counter() atomic with 32 bit main counter
2024-02-23 13:42:04 +02:00