Commit Graph

128 Commits

Author SHA1 Message Date
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
Bananymous
ba53582f23 Kernel: Rewrite APIC and PIC more OOP friendly
x86_64 port is slowly coming together
2023-01-23 20:13:57 +02:00
Bananymous
b50bb03ed4 Kernel: Panic now halts machine even if we get spurious irqs 2023-01-23 18:25:48 +02:00