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
Bananymous
9594ee8e47
Kernel: Start making device numbers unique for each device
2024-02-22 15:53:48 +02:00
Bananymous
7a4ec7f7a3
Kernel: Use static_cast instead of c-style cast in HPET
2024-02-22 14:44:39 +02:00
Bananymous
51db1706e9
Kernel: Fix checking of partition boundaries on write
2024-02-22 13:31:12 +02:00
Bananymous
f3f5ca1bd8
Kernel: Seed RNG by real time if no RDRAND available
2024-02-20 13:00:26 +02:00
Bananymous
f73e954b28
Kernel: Remove SpinLock from Pipe
...
Pipe already is using lock on the inode. If you read from pipe when
there was no data, pipe blocked indefinately since writes were blocked
by Inode::m_lock.
2024-02-14 17:21:32 +02:00
Bananymous
198dde8365
Kernel: Add klibc for kernel
...
Now building same source as libc is not needed and libc doesn't
have to do hacks to allow kernel compilation
2024-02-14 15:00:04 +02:00
Bananymous
b165340662
Kernel: Don't use strcat in kernel code
2024-02-14 14:59:13 +02:00
Bananymous
00662bad46
Kernel: Rewrite HPET code
...
Now the set timer frequency actually works... :D
2024-02-13 17:59:48 +02:00
Bananymous
2ab3eb4109
Kernel: Fix bugs in select
...
Unix domain socket is now select readable when it has pending
connection
2024-02-12 23:46:27 +02:00
Bananymous
9314528b9b
Kernel: Improve syscall handling
...
Syscalls are now called from a list of function pointers
2024-02-12 21:51:11 +02:00
Bananymous
3fc1edede0
Kernel/LibC: Implement super basic select
...
This does not really even block but it works... :D
2024-02-12 17:26:33 +02:00
Bananymous
f50b4be162
Kernel: Cleanup TCP code
2024-02-12 15:44:40 +02:00
Bananymous
435636a655
Kernel: Implement super simple TCP stack
...
No SACK support and windows are fixed size
2024-02-12 04:45:42 +02:00
Bananymous
ba06269b14
Kernel: Move on_close_impl from network socket to udp socket
2024-02-12 04:45:42 +02:00
Bananymous
be01ccdb08
Kernel: Fix E1000 mtu
2024-02-12 04:25:39 +02:00
Bananymous
b45d27593f
Kernel: Implement super simple PRNG
2024-02-12 04:25:06 +02:00
Bananymous
ff49d8b84f
Kernel: Cleanup OSI layer overlapping
2024-02-09 17:05:07 +02:00
Bananymous
5d78cd3016
Kernel: Add spin lock assert back. I had accidentally deleted it
2024-02-09 16:58:55 +02:00
Bananymous
ed0b1a86aa
Kernel: Semaphores and Threads can now be blocked with timeout
2024-02-09 15:28:15 +02:00
Bananymous
534b3e6a9a
Kernel: Add LockFreeGuard to LockGuard.h
2024-02-09 15:13:54 +02:00
Bananymous
d452cf4170
Kernel: Fix checksum for packets with odd number of bytes
2024-02-09 01:20:40 +02:00
Bananymous
acf79570ef
Kernel: Cleanup network APIs and error messages
2024-02-08 18:33:49 +02:00
Bananymous
9bc7a72a25
Kernel: Implement unix domain sockets with SOCK_DGRAM
...
Also unbind sockets on close
2024-02-08 13:18:54 +02:00
Bananymous
49889858fa
Kernel: Allow chmod on TmpSocketInode
2024-02-08 03:16:01 +02:00
Bananymous
e7dd03e551
Kernel: Implement basic connection-mode unix domain sockets
2024-02-08 02:28:19 +02:00
Bananymous
e26f360d93
Kernel: allow kmalloc of size 0
2024-02-07 22:36:24 +02:00
Bananymous
572c4052f6
Kernel: Fix Process APIs
2024-02-07 15:57:45 +02:00
Bananymous
132286895f
Kernel: Implement Socket inodes for tmpfs
2024-02-07 15:57:45 +02:00
Bananymous
41cad88d6e
Kernel/LibC: Implement dummy syscalls for accept, connect, listen
2024-02-07 15:57:45 +02:00
Bananymous
5da59c9151
Kernel: Make better abstractions for networking
2024-02-06 16:45:39 +02:00
Bananymous
f804e87f7d
Kernel: Implement basic gateway for network interfaces
2024-02-05 18:18:56 +02:00
Bananymous
dd3641f054
Kernel: Cleanup ARPTable code
...
Packet process is now killed if ARPTable dies.
ARP wait loop now just reschecules so timeout actually works.
2024-02-05 18:18:56 +02:00
Bananymous
b2291ce162
Kernel/BAN: Fix network strucute endianness
2024-02-05 18:18:56 +02:00
Bananymous
d15cbb2d6a
Kernel: Fix IPv4 header checksum calculation
2024-02-05 18:18:56 +02:00
Bananymous
692cec8458
Kernel/Userspace/LibC: Implement basic dprintln for userspace
2024-02-05 01:24:09 +02:00
Bananymous
649e9f4500
Kernel: ARP now replies to requests
2024-02-03 18:04:12 +02:00
Bananymous
5cfe249945
Kernel: Cleanup network code and implement basic ARP request
2024-02-03 02:39:26 +02:00
Bananymous
a0138955cd
Kernel: Implement barebones arp table
2024-02-03 01:50:10 +02:00
Bananymous
e1ffbb710b
Kernel/LibC: Implement basic ioctl for network addresses
2024-02-03 01:50:10 +02:00
Bananymous
0f154c3173
Kernel: Implement basic recvfrom
2024-02-02 13:50:00 +02:00
Bananymous
4b332b5d42
Kernel: Cleanup PCI code
2024-02-02 03:16:37 +02:00
Bananymous
ec2f21bb9f
Kernel/LibC: Implement SYS_SENDTO
2024-02-02 03:16:01 +02:00
Bananymous
ab150b458a
Kernel/LibC: Implement basic socket binding
2024-02-02 01:31:58 +02:00
Bananymous
cf28ecd5a6
Kernel/LibC: Add SYS_SOCKET
2024-02-01 23:39:09 +02:00
Bananymous
99eed9c37a
Kernel: Start work on network stack
2024-02-01 23:38:06 +02:00
Bananymous
f4e86028d0
Kernel: Write simple working E1000 and E1000E drivers
2024-02-01 22:08:59 +02:00
Bananymous
c69efc040c
Kernel: Scheduler now uses the new LinkedList API for moving threads
...
Scheduler doesn't have to depend on the fact that allocations should
work when same amount of memory is just deallocated
2024-02-01 15:22:28 +02:00
Bananymous
139bb5c2a5
Kernel: Fix linker script
...
I have no idea why rodata was executable :D
2024-01-30 17:32:50 +02:00
Bananymous
95e861bcdd
Kernel: Optimize all SpinLocks. All locking operations are atomic
2024-01-30 12:39:37 +02:00
Bananymous
ca8e7b40bc
Kernel: Implement SpinLock without CriticalScope
...
This actually is not even spinlock since it yields the current
thread. It will become one when I get to SMP though...
2024-01-30 01:21:15 +02:00
Bananymous
a1faa836c5
Kernel: Hack NVMe controller to work :)
2024-01-30 01:06:00 +02:00
Bananymous
6bfe833aa5
Kernel: Parse RSDP from multiboot headers if exists
2024-01-26 00:49:42 +02:00
Bananymous
dfe5a2d665
All: Cleanup all files
...
Add newline to end of files and remove whitespace from end of lines
2024-01-24 15:53:38 +02:00
Bananymous
3441f63298
Kernel: Don't panic kernel if no interrupt could be reserved
2024-01-24 14:34:59 +02:00
Bananymous
2cee2a85e6
Kernel: DevFS now stores all devices
...
This allows removing hack in PCI that was required to keep NVMe
controller alive.
2024-01-24 14:33:50 +02:00
Bananymous
5001fa58e0
Kernel: Fix wait syscall with atomics
2024-01-24 14:32:52 +02:00
Bananymous
54a92293da
Kernel: Implement NVMe driver
...
I'm actually able to boot this os fine on own laptop now!
2024-01-17 08:26:58 +01:00
Bananymous
812e9efd41
Kernel: StorageDevices now specify prefix for partition names
2024-01-14 01:16:48 +02:00
Bananymous
c6130f33d7
Kernel: Implement MSI, MSI-X and interrupt reservation
2024-01-13 18:21:21 +02:00
Bananymous
56a29dc176
Kernel: Fix PS/2 Controller if port 0 is empty
2024-01-13 17:05:29 +02:00
Bananymous
7adc7e55a5
Kernel: Fix timeouts in AHCI code and add more volatile keywords
2024-01-12 19:26:20 +02:00
Bananymous
4be726b130
Kernel: Implement more error handling in IDE controller
2024-01-12 02:55:06 +02:00
Bananymous
db933d5466
Kernel: Improve keymap file loading
...
Now you can include other files in keymaps and set which keys are
modifier keys
Only keys that are set in keymap file are actually updated
2024-01-12 02:55:06 +02:00
Bananymous
83ca469ed7
Kernel: Modifier keys are taken from current keyboard layout
...
I used to assume where all modifiers were, but they are now taken
from keyboard layout.
2024-01-11 11:53:11 +02:00
Bananymous
d2c0718f7d
Kernel: Fix toggleable modifier keys and add two more keys
2024-01-11 11:43:05 +02:00
Bananymous
ab39c6541a
Kernel: Require keymap loading superuser privileges
2024-01-10 14:50:30 +02:00
Bananymous
51214ea1bf
Kernel: Add load_keymap syscall and load Finnish keymap in init
2024-01-10 14:46:29 +02:00
Bananymous
8f89519bcf
Kernel: Keymaps can now be loaded from files
2024-01-10 14:43:19 +02:00
Bananymous
e6d42e5c45
Kernel: Add timeout for device commands on PS/2 devices
2024-01-10 12:51:24 +02:00
Bananymous
961ab9768a
Kernel: KeyEvent is now well known keycode
...
Keycodes are easier to handle as you need only one keyboard layout
for keycodes. Otherwise you would need to implement keyboard layout
for every keyboard driver in every language.
2024-01-10 12:51:24 +02:00
Bananymous
e4f48cbc73
Kernel: Move PS/2 command queue to controller instead of device
2024-01-09 20:00:19 +02:00
Bananymous
e8f853a197
Kernel: After device updates, reschedule instead of sleeping
2024-01-09 11:21:00 +02:00
Bananymous
d760239748
Kernel: Do a big rewrite of PS/2 code
...
Command sending+response reading is now synchronized. This allows
bochs to properly initialize both mouse and keyboard simultaneously.
Also status register is checked EVERY time read/write to other IO
ports is performed.
2024-01-08 10:50:55 +02:00
Bananymous
f0cf54e194
Kernel: Reads from PS/2 keyboard and mouse can be terminated
2024-01-05 12:13:44 +02:00
Bananymous
41ae05dd6e
Kernel: Update block_or_eintr API to return ErrorOr<>
2024-01-05 12:13:11 +02:00
Bananymous
54c811ac2e
Kernel: Fix some mouse scrolling bugs and cleanup event generation
2024-01-04 19:50:26 +02:00
Bananymous
12a78c822e
Kernel: Explicitly construct ByteSpan from Span<uint8_t>
...
VSC complains about not finding proper constructor, this fixes that.
2024-01-04 12:17:55 +02:00
Bananymous
e45b544a39
Kernel: Implement PS/2 mouse driver
...
This is realtively simple driver that queries extensions (scroll +
extra buttons) from mouse and reads mouse packages.
2024-01-04 12:17:55 +02:00
Bananymous
d1e187570e
Kernel: Fix old keyboard command
2024-01-04 12:08:23 +02:00
Bananymous
d4191c0d94
Kernel: Reorganize PS/2 files to their own directory
2024-01-04 12:04:45 +02:00
Bananymous
c2957d8761
Kernel: PS/2 device automatically sends commands when appended
2024-01-04 12:04:45 +02:00