Commit Graph

1165 Commits

Author SHA1 Message Date
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