Commit Graph

1592 Commits

Author SHA1 Message Date
Bananymous f778bca3f2 Kernel: Remove accidentally commited debug code :) 2025-05-28 03:10:01 +03:00
Bananymous a945d19750 Kernel: Partially fix PCI PIN interrupt routing
Don't fail early if the first device is not the one we are looking for
2025-05-28 03:10:01 +03:00
Bananymous 7f04b2c96c Kernel: Fix E1000 interrupt handling
E1000 does not support MSI-X and thus does not generate RxQ0 interrupts.
2025-05-28 03:10:01 +03:00
Bananymous 79a2b84c81 Kernel: Fix process exit when there are multiple threads 2025-05-28 03:10:01 +03:00
Bananymous 44b762f916 Kernel/LibC: Implement pwrite and make pread non-locking 2025-05-28 03:10:01 +03:00
Bananymous 6be3b1d7f2 commit from banan-os :D 2025-05-27 23:57:43 +00:00
Bananymous 0e0d7016b3 Kernel: Rename has_hangup -> has_hungup 2025-05-17 12:39:23 +03:00
Bananymous 553c76ab0f Kernel: Add locking to inode's epoll list
This was prone to crashing :)
2025-05-17 12:36:36 +03:00
Bananymous d1bb72f6fb Kernel: Don't allow CPU load printing underflow 2025-05-13 10:19:13 +03:00
Bananymous 1bcd1edbf5 Kernel/LibC: Implement basic epoll
This implementation is on top of inodes instead of fds as linux does it.
If I start finding ports/software that relies on epoll allowing
duplicate inodes, I will do what linux does.

I'm probably missing multiple epoll_notify's which may cause hangs but
the system seems to work fine :dd:
2025-05-13 10:18:05 +03:00
Bananymous 143a00626b Kernel: Fix fork cmdline copying and copy environ 2025-05-13 10:16:21 +03:00
Bananymous 0eb981f51c Kernel: Fix Random.h includes 2025-05-13 10:16:21 +03:00
Bananymous 6cc01349f7 Kernel: Fix unblocking recv through read 2025-05-13 10:16:21 +03:00
Bananymous a7bd4acd46 Kernel: Remove static variables from virtual tty 2025-05-13 10:16:21 +03:00
Bananymous 8e0a56b49a Kernel: Implement loopback network interface 2025-05-13 10:16:21 +03:00
Bananymous 96496da0ab Kernel: Allow USB mouse to send extra2 button events 2025-05-05 22:32:26 +03:00
Bananymous 592675022e Kernel: Allow tcgetpgrp on pseudo terminal masters 2025-05-05 19:09:01 +03:00
Bananymous b2e10d7e6e Kernel: Remove unnecessary locks 2025-05-05 19:08:57 +03:00
Bananymous 9ff9d679e9 Kernel: Fix text mode cursor
Apparently text mode renders cursor in the *foreground* color. My
current clear function used the same color for foreground and background
making the cursor effectively invisible.

Also cursor hiding is now done by moving the cursor off bounds (0, height)
some website I read said this to be valid even on VGA compatible cards
without disable bit.

http://www.osdever.net/FreeVGA/vga/textcur.htm
2025-04-25 02:31:33 +03:00
Bananymous 9f3f8f950a Kernel: Add better panic message for failed shutdown
ACPI shutdown does not work on the web emulator and running `poweroff`
crashes on `ASSERT_NOT_REACHED()`.
2025-04-25 01:52:33 +03:00
Bananymous 418678466c Kernel: Fix text mode palette
ANSI and text mode color indices are not in the same order
2025-04-23 23:07:47 +03:00
Bananymous 9f4cb5c4dd Kernel: Make pseudo terminals not overwrite old data
If pseudo terminal buffer was filled, old implementation would overwrite
old data. This is bad if producer is capable of producing more data than
consumer can handle.
2025-04-23 22:03:53 +03:00
Bananymous a8edb8870e Kernel: Add support for 8bit and 24bit ANSI SGR 2025-04-23 22:03:53 +03:00
Bananymous dabc3c6cc4 Kernel: Don't wrap cursor immediatly at cols()
This prevents unwanted scrolling when writing to bottom right cell
2025-04-23 22:03:53 +03:00
Bananymous cc7c1ad30d Kernel: Add per terminal palette for TerminalDriver
This allows better color approximation on text mode and in future will
allow user to possibly change the palette
2025-04-23 18:44:37 +03:00
Bananymous 35b3c3c98c Kernel: Fix scheduler load balancing
I was not updating the current queue of the thread which lead to blocked
threads think they were in run queue
2025-04-23 08:09:51 +03:00
Bananymous 20e17a28cf Kernel: Fix \b handling
Don't clear the character, only move cursor backwards
2025-04-23 06:33:11 +03:00
Bananymous 28bf2d6374 Kernel/Terminal: Add support for ANSI DSR 2025-04-23 06:14:56 +03:00
Bananymous 8a00b53050 Kernel/Terminal: Fix ANSI SGR m for multiple values 2025-04-23 05:29:22 +03:00
Bananymous b853d29992 Kernel: Fix unix domain socket close detection 2025-04-22 08:36:44 +03:00
Bananymous f8e3ae0525 Kernel: Fix deadlock caused by multithreading
This allows multiple threads to concurrently call the most common
blocking syscalls:
- read
- write
- accept
- connect
- sendto
- recv
- pselect

This prevents a dead lock when for example process is waiting on a pipe,
but unable to write to it since process is locked.

This is the beginning of starting to remove processes own lock from
syscall and locking only necessary parts.
2025-04-22 04:51:53 +03:00
Bananymous c790bad667 Kernel: Make OpenFileDescriptorSet thread safe
Also this allows concurrent calling of read/write/send/recv
2025-04-22 04:31:18 +03:00
Bananymous d54489bbcb Kernel: Implement MemoryRegion pinning
This allows process to pin a MemoryRegion into users memory space for
syscall duration without allowing user to munmap the region.
2025-04-22 04:30:07 +03:00
Bananymous 808c97020a Kernel/LibC: Implement SA_RESTART
I have been thinking how to do this for a long time but I finally
figured out a semi-clean way
2025-04-22 02:42:44 +03:00
Bananymous 107b31a0b5 Kernel: Fix E1000{,E} driver for older qemu versions
This patch adds clearing of *Interrupt Cause Registers*, which allows
older qemu versions to send new interrupts. Apparently this is not
needed on newer releases.
2025-04-22 00:31:13 +03:00
Bananymous 1c44d24b76 Kernel: Fix TCP closing state machine 2025-04-21 20:02:32 +03:00
Bananymous 99fc7817c6 Kernel: Cleanup stack alignment assembly 2025-04-20 16:55:18 +03:00
Bananymous 252784ff5b Kernel: Preserve kernel command line on fork 2025-04-19 21:29:52 +03:00
Bananymous 6f9dc2a9b8 Kernel/LibC: Implement `fchdir`, cleanup `chdir` and `getcwd` 2025-04-19 21:28:31 +03:00
Bananymous 201d752850 Kernel: Allow pipe to write partial data
This allows potential blocking
2025-04-19 00:39:42 +03:00
Bananymous 63b3d9875d Kernel: Fix `Thread::block_with_eintr*` functions
I was using wrong block function, `block_with_timeout` instead of
`block_with_wake_time`. This caused functions to block way too long and
caused a lot of hangs.
2025-04-19 00:39:42 +03:00
Bananymous 85505b0482 Kernel: Fix ANSI SGR color invert 2025-04-18 17:31:46 +03:00
Bananymous 703c1a485c Kernel: Fix Ext2 bug for big files
My ext2 implementation was reading wrong blocks for very big block
indices.
2025-04-18 04:17:31 +03:00
Bananymous 9258c73484 Kernel: Optimize VTTY cursor rendering
cursor is now only updated once after all consecutive `putchar`s are
handled.
2025-04-18 03:55:56 +03:00
Bananymous 6858546ce9 Kernel: Fix rendering bugs with framebuffer cursor 2025-04-18 03:54:17 +03:00
Bananymous 7c6966a9c4 Kernel: Add support for text mode terminal
This probably won't be used at all but it was so simple and made me do
really nice refactorings so i decided to add it :)
2025-04-18 02:45:06 +03:00
Bananymous 40d1d20cd6 Kernel: Move cursor handling from TTY -> TerminalDriver 2025-04-18 02:43:41 +03:00
Bananymous c0942d78cb Kernel: Fix TTY ANSI ? handling 2025-04-18 02:42:49 +03:00
Bananymous cef8779bf7 Kernel: Improve error handling when setting TTY font 2025-04-18 02:42:24 +03:00
Bananymous d6667844de Kernel: Fix fcntl F_SETFL and masking 2025-04-18 02:37:44 +03:00
Bananymous 4cdf218145 Kernel: Don't allow opening file with path "" 2025-04-18 02:37:16 +03:00
Bananymous 994713d04c Kernel: Implement FramebufferDevice::get_pixel() 2025-04-18 02:35:28 +03:00
Bananymous 554b13ac50 Kernel: Restructure terminal initialization
This is still very ugly and will be rewritten in the future :D
2025-04-18 01:19:59 +03:00
Bananymous 439fb57d88 Kernel: Fix ANSI CSI @ and b for VirtualTTY 2025-04-17 23:24:17 +03:00
Bananymous ac90800c3c Kernel/LibC/DynamicLoader: Implement thread local storage
For some reason this does not work on 32 bit version, so it is disabled
on that platform. I'll have to look into it later to find the bug :)
2025-04-15 23:33:39 +03:00
Bananymous 08f5833ca8 Kernel/LibC: Implement pthread_attr_init 2025-04-15 23:31:17 +03:00
Bananymous 4bcd3ed86f Kernel: Start working on TLS, add SYS_{SET,GET}_TLS 2025-04-15 23:31:17 +03:00
Bananymous a933fabb86 Kernel: Define constant USERSPACE_END
This should be used for userspace generic allocations. Currently I used
KERNEL_OFFSET, but I want to limit userspace to the actual lower half of
the address space
2025-04-15 23:31:17 +03:00
Bananymous 36baf7b0af Kernel/LibC/DynamicLoader: Update process start ABI
We now use SysV abi for process startup
2025-04-15 23:05:52 +03:00
Bananymous 4b1c20fa36 Kernel: Make SYS_{,P}READ work with count == 0 2025-04-15 21:36:00 +03:00
Bananymous 00015285ab Kernel: Add vaddr->paddr getter to VirtualRange 2025-04-15 21:25:15 +03:00
Bananymous 0f936fc163 Kernel: Cleanup 32 bit interrupt stack alignment 2025-04-15 21:21:23 +03:00
Bananymous 15045cc486 Kernel: Make nonblocking sockets unblocking :) 2025-04-05 18:42:02 +03:00
Bananymous c9132d984b Kernel: Fix TCP window scaling 2025-04-05 18:40:23 +03:00
Bananymous a0123e7c2d Kernel: save and load sse context in more spaces 2025-04-02 12:58:39 +03:00
Bananymous be786be67d Kernel/LibC: Implement pthread_join 2025-04-02 12:58:39 +03:00
Bananymous 9066e62a97 Kernel/LibC: Implement sched_yield 2025-04-02 12:58:39 +03:00
Bananymous 5549696c3a Kernel/LibC: Implement pthread_self 2025-04-02 02:39:29 +03:00
Bananymous 9fb161c320 Kernel: Move thread stacks 1 MiB back 2025-04-01 23:26:13 +03:00
Bananymous c1618e2b5d Kernel/LibC: Add basic support for pthread_{create,exit} 2025-04-01 23:26:13 +03:00
Bananymous 36026d4ec6 Kernel: Cleanup TCP and add basic window scaling support 2025-04-01 23:09:30 +03:00
Bananymous 96767f5ca8 Kernel: Implement PCI interrupt routing
This does not really work but I have no idea what I'm doing wrong
2025-04-01 23:09:30 +03:00
Bananymous 76bad31dd5 Kernel: Reorder locking with VirtualRange 2025-04-01 23:09:30 +03:00
Bananymous 2e3b917192 Kernel: Cleanup PS2 mouse button event generation 2025-04-01 23:09:30 +03:00
Bananymous 95f262b3e6 Kernel: Print process pid through /dev/debug 2025-04-01 23:09:30 +03:00
Bananymous aebacb6b6a Kernel: Bypass PS2 detection if scancode set is forced 2025-04-01 23:09:30 +03:00
Bananymous 27613da5ea Kernel: Route PCI Interrupt Link Device interrupts 2025-04-01 23:09:30 +03:00
Bananymous 28ac6c2267 Kernel: Implement AML FindSet{Left,Right}Bit 2025-04-01 23:09:30 +03:00
Bananymous 1c1fc65c7c Kernel: Add API to reserve GSI instead of irq
This also fixes a bug with IOAPIC gsi_base != 0
2025-04-01 23:09:30 +03:00
Bananymous ba74b352bd Kernel: Make BufferField actually access the buffer and not copy 2025-04-01 23:09:30 +03:00
Bananymous 0474ac4262 Kernel: Expose ACPI resolve_package_element to outside 2025-04-01 23:09:30 +03:00
Bananymous aba49cc93f Kernel: Add API to get ACPI reference paths 2025-04-01 23:09:30 +03:00
Bananymous b3b5b40163 Kernel: Add _OS an _REV to ACPI namespace 2025-04-01 23:09:30 +03:00
Bananymous 0e085b30cc Kernel: ACPI add easier API for calling methods with arguments 2025-04-01 23:09:30 +03:00
Bananymous 35149b6960 Kernel: Add helper functions to create AML String and Buffer 2025-04-01 23:09:30 +03:00
Bananymous 3800d5420e Kernel: Collect created AML nodes in add_{named,alias}...
This makes it harder to miss adding scoped objects. Before I was not
deleting all types of nodes on method return
2025-04-01 23:09:25 +03:00
Bananymous b145c1ab64 Kernel: Add easier api for evaluating ACPI nodes 2025-04-01 23:09:20 +03:00
Bananymous b8a3439219 Kernel: Add getter for ACPI namespace 2025-04-01 23:09:15 +03:00
Bananymous 83c66901f8 Kernel: Fix reboot when ACPI is disabled
If ACPI was disabled ACPI::reset() would page fault when accessing
namespace instead of checking wheter namespace is initialized :D
2025-02-11 21:53:20 +02:00
Bananymous 088f77a226 Kernel: Add super basic support for USB keyboard LEDs
This is very hacky but it seems to mostly work. Also for some reason
this fixed my Razer Mamba mouse????
2025-02-11 02:18:50 +02:00
Bananymous 4dd6c85df2 Kernel: Fix USB keyboard Scroll lock
I was using 8 bit modifier and ScrollLock bit does not fit this. Also I
was not generating ScrollLock keypresses
2025-02-11 02:16:38 +02:00
Bananymous d0452a3510 Kernel: Fix xHCI controller destruction
Port updater task was not actually able to exit without a kernel panic.
This patch makes controller wait until port updater exits itself :D
2025-02-10 22:58:57 +02:00
Bananymous 11310e7615 Kernel: Don't manually clear xHCI interrupt flag if using MSI 2025-02-10 22:58:14 +02:00
Bananymous 22b32a0fe5 Kernel: Expose PCI interrupt mechanism from PCIDevice 2025-02-10 22:57:25 +02:00
Bananymous ad143c184f Kernel: Add basic support for USB hubs
This is still buggy and some hubs lead to usb transaction errors. I'll
have to debug this but this shouldn't prevent any already working device
from working
2025-02-10 22:56:25 +02:00
Bananymous 803a4cd163 Kernel: Don't enable ACPI devices when ACPI is disabled
This really didn't make any sense. There are no ACPI device to be
initialized when AML is not parsed :D
2025-02-07 21:35:25 +02:00
Bananymous 267fdf9fa1 Kernel: Remove storage devices after unplugging them 2025-02-07 18:04:54 +02:00
Bananymous 26d2a4420e Kernel: Don't limit xHCI TRB transfer length to max packet size
This made no sense and just used a ton of TRBs.

This patch also fixes some incorrectly set flags in data/status stage
TRBs.
2025-02-06 23:18:14 +02:00
Bananymous c623ad7da0 Kernel: Use correct USB endpoint field to determine interval
I was using the wrong endpoint descriptor field which caused intervals
to be messed up.
2025-02-06 23:18:14 +02:00
Bananymous 7de689055c Kernel: Pass xHCI device information in structs
This makes code more readable and extendable
2025-02-06 23:18:14 +02:00