Bananymous
8b8e3cbbf0
Kernel/Userspace: Start initial work on userspace and syscalls
2023-03-13 15:32:46 +02:00
Bananymous
af854ec9e1
Kernel: Thread creation now takes void(*)() as entry and void* as data
...
This simplifies threading for the future and gets rid of (undefined?)
cast of member function pointer to address
2023-03-09 15:33:42 +02:00
Bananymous
8940ff8002
Kernel: You don't have to check whether VFS is initialized or not
...
VFS now returns Error when attempting to traverse inodes if it did
not find root partition
2023-03-09 02:31:24 +02:00
Bananymous
371dfe8ef3
BAN: Formatter now uses perfect forwarding on its arguments
2023-03-08 21:31:26 +02:00
Bananymous
7458f68c38
BAN: Error can now be constructed from c_string or format string
...
If the resulting string would overflow, we just truncate it to fit
the error message buffer (128) bytes
2023-03-08 17:05:37 +02:00
Bananymous
d90aba0963
Kernel: Create CriticalScope and fix kmalloc
...
This disables interrupts for the current scope and restores them
after the scope. This is used in kmalloc, since scheduler might
call into kmalloc/kfree, but deadlock if some thread is currently
trying to allocate. This allows us to use kmalloc in Scheduler.
2023-03-08 13:55:53 +02:00
Bananymous
a068d828fe
Kernel: ATA reads go through the ata controller and not only device
2023-03-08 03:26:25 +02:00
Bananymous
1dabe7a222
Kernel: More rework on Scheduler
2023-03-08 03:26:25 +02:00
Bananymous
e7a577f54a
Kernel: fix includes
2023-03-08 03:26:25 +02:00
Bananymous
23b3028e15
Kernel: Rename RefCounted -> RefPtr and implement RefCounted
2023-03-08 03:26:25 +02:00
Bananymous
f7ebda3bf1
Kernel: Move interrupt related functions to InterruptController
2023-03-08 03:16:51 +02:00
Bananymous
b8ee77eb78
Kernel: Initial work on new scheduler with queues
...
Sleeping is definately broken
2023-03-08 02:41:44 +02:00
Bananymous
a9acf1f6dc
Kernel: PCIDevice is now class with getters and constructor
2023-03-08 02:41:44 +02:00
Bananymous
1dd61e93b6
Kernel: Threads cannot take arguments anymore
2023-03-02 01:56:09 +02:00
Bananymous
7fcbb869e1
Kernel: Initialize GDT in kernel code
...
We dont use the boot GDT only while booting
2023-03-01 21:21:56 +02:00
Bananymous
ba8c4dbc7f
Kernel: panic now disables interrupts as the first thing
2023-03-01 21:21:56 +02:00
Bananymous
9756de02ef
Kernel: MMU now takes flags when allocating pages
2023-03-01 21:21:56 +02:00
Bananymous
7d84f290a1
Kernel: Add lock to Disk reads before I forget
2023-02-26 03:48:11 +02:00
Bananymous
ee5d02aa70
Kernel: Rewrite basically all current disk io stuff
...
This is a big commit that was kinda hard to split to smaller ones.
Essentially we now look at all the mass storage devices from PCI
and initialize (P)ATA devices. This doesn't provide any more functionality
but better abstractions and everything doesn't have to be on its old
default port that might be different for modern computers.
2023-02-26 03:00:29 +02:00
Bananymous
04bb08d27f
Kernel: Add basic PCI enumeration
2023-02-26 02:56:53 +02:00
Bananymous
34f9912a1d
Kernel: Add IO functions inl, outl, and ins{b,w,l} to read into buffer
2023-02-24 12:39:38 +02:00
Bananymous
390a747768
Kernel: Add prefs font for terminal output before file system
2023-02-23 01:22:50 +02:00
Bananymous
a4980acc88
Kernel: Fonts can now be parsed from the filesystem and set to terminal
...
We currently dont have a fallback font if we cannot get to filesystem
initialization, but that will come later. I can't test on real hardware
for this reason.
2023-02-22 22:29:31 +02:00
Bananymous
0e668738dc
Kernel: Make some basic bitmap font parsing code
2023-02-22 22:28:12 +02:00
Bananymous
d9c05b7378
Kernel: rewrite the whole kmalloc (again)
...
Performance of the old kmalloc implementation was terrible.
We now use fixed-width linked list allocations for sizes <= 60 bytes.
This is much faster than variable size allocation.
We don't use bitmap scanning anymore since it was probably the slow
part. Instead we use headers that tell allocations size and aligment.
I removed the kmalloc_eternal, even though it was very fast, there is
not really any need for it, since the only place it was used in was IDT.
These changes allowed my psf (font) parsing to go from ~500 ms to ~20 ms.
(coming soon :D)
2023-02-22 16:32:50 +02:00
Bananymous
5d31e89574
Kernel: Update ErrorOr API and add path find to VFS
...
These two are done on the same commit since Changes to Shell were
annoying to make work with only one change
2023-02-22 01:23:11 +02:00
Bananymous
038379274e
Kernel: Inode can now return full mode value
...
Kernel::Inode::Mode is an union of bitmasked fields for every
possible bit
2023-02-20 21:39:24 +02:00
Bananymous
efaca469ee
Kernel: Ext2Inode now supports indirect blocks through for_each_block()
2023-02-20 10:25:15 +02:00
Bananymous
80006ea137
Kernel: Initial work on filesystem
...
We support now ext2 directory listing. File reading is not yet supported.
2023-02-20 01:46:00 +02:00
Bananymous
247f03c79e
BAN: Make ErrorOr<> have attribute [[nodiscard]]
...
We don't have to specify it everytime we make function return ErrorOr
2023-02-19 20:10:30 +02:00
Bananymous
feaeee11e5
Kernel: fix ARCH() macro and add helper macros for push/pop
2023-02-19 18:52:25 +02:00
Bananymous
1bd8b0fe5c
Kernel: Sleep now actually sleeps and allows idling
2023-02-19 18:52:25 +02:00
Bananymous
8f1b6da2af
Kernel: Use Vector instead of raw poiters in Disk stuff
...
We now don't have to manually free allocated data
2023-02-16 20:48:41 +02:00
Bananymous
460fc3a29f
Kernel: Start working on filesystem
...
We have a basic PATA driver (for reading) and gpt parser.
2023-02-16 20:00:31 +02:00
Bananymous
94cbacc998
Kernel: PIT now has very barebones sleep
2023-02-16 17:53:25 +02:00
Bananymous
6a133782ed
All: Move to c++20
2023-02-09 23:05:26 +02:00
Bananymous
fb7fe73d49
Kernel: Add inw and outw to IO
2023-02-04 23:37:34 +02:00
Bananymous
5b5e620d8a
Kernel: Improve multithreading support
...
We can now use arbitary BAN::function<void(...)> as the Thread.
I also implemented multithreading for i386 since it was not done
on the initial multithreading commit.
2023-02-02 23:24:12 +02:00
Bananymous
777ede328e
Kernel: Add helper functions for reading current rsp and rbp
2023-02-02 23:19:44 +02:00
Bananymous
117d1de038
Kernel: panic does not need to include <kernel/kprint.h>
...
This allows us to not have kprint available literally everywhere
2023-02-02 15:51:15 +02:00
Bananymous
f6b05212e0
Kernel: Add is_locked() to spinlock
...
I think this is atomic read
2023-02-02 15:49:30 +02:00
Bananymous
9b8de5025a
All: rename every function from UpperCamelCase to snake_case
...
This was a mess since I didn't know which to use but now I decided
to go with snake_case :)
2023-02-01 21:05:44 +02:00
Bananymous
6a9d60a8fb
Kernel: Implement somewhat functioning multithread support
...
This still uses only a single cpu, but we can now have 'parallelization'
This seems to work fine in qemu and bochs, but my own computer did not
like this when I last tried.
I have absolutely no idea how multithreading should actually be
implmemented and I just thought and implemented the most simple one I
could think of. This might not be in any way correct :D
2023-02-01 01:53:35 +02:00
Bananymous
7d8aafa0b5
Kernel: Add macros for current archutecture
2023-02-01 01:52:52 +02:00
Bananymous
337569b0ca
Kernel: Implement basic SpinLock
2023-02-01 01:52:52 +02:00
Bananymous
1687028ed5
Kernel: Add constructor and destructor to MMU
2023-01-30 18:54:04 +02:00
Bananymous
6dc22b7251
Kernel: Add actual register values to x86_64 kernel panic
...
Very hackish implementation, but we now get actual registers at the
time of the interrupt happening
2023-01-30 18:52:38 +02:00
Bananymous
aa0757e135
Kernel: Move dump_stacktrace from panic -> debug
2023-01-26 02:57:14 +02:00
Bananymous
e87026f01d
Kernel: I have no idea what this commit does
...
I had committed a change in IDT but reverted it now.
This propably only adds a spurious interrupt detection to common cpp
interrupt handler?
2023-01-26 02:55:37 +02:00
Bananymous
c0bc002ac6
Kernel: Move debug printing to its own file
...
It didn't make sense that dprint was defined in Serial.h.
We also now dump dprint to tty if there is no serial and tty is initialized
2023-01-25 22:51:42 +02:00