Commit Graph

410 Commits

Author SHA1 Message Date
Bananymous e5ffc1686f BAN: Vector::const_iterator now uses const T* as underlying type 2023-02-09 23:06:49 +02:00
Bananymous bfc9a2377c BAN: LinkedList now uses iterators instead of const_iterators on methods 2023-02-09 23:06:16 +02:00
Bananymous 6a133782ed All: Move to c++20 2023-02-09 23:05:26 +02:00
Bananymous 338771c5b0 BAN: Cleanup Vector code
*Applies to last patch also!*

Remove duplicate code in iterators. We used to have separate iterator
and const_iterator but now they are the same class with some enable_if
magic to disable references from const_iterator

This introduces some 'bad things' you can for example call
const_iterator.operator*<false>() to obtain non const reference. I
don't think this matters since you could use const_cast or something
else to work around const if you really tried
2023-02-07 11:08:05 +02:00
Bananymous 08dfb0e1db BAN: Cleanup LinkedList code 2023-02-06 19:01:52 +02:00
Bananymous 0eb1fb8bae Buildsystem: Build disk image manually
We don't use grub-mkrescue anymore. Instead we build the disk image
manually. This allows us to have known disk layout for easier testing
when I get to implementing disk reading. For now I made the root
partition ext2 since I think that will be the first format that I'll
implement.
2023-02-05 18:08:40 +02:00
Bananymous fb7fe73d49 Kernel: Add inw and outw to IO 2023-02-04 23:37:34 +02:00
Bananymous 6fab26692b Kernel: remove unnecessary function from x86_64 Thread.S 2023-02-02 23:48:18 +02:00
Bananymous 2161528cb6 Kernel: Shell is now launched as a capturing lambda 2023-02-02 23:27:51 +02:00
Bananymous cdbad56ed7 Kernel: Update shell thread command to run following command as thread
'thread echo "Hello World"' runs the command 'echo "Hello World"' after
5 seconds have passed. This was just my test code for threading
2023-02-02 23:26:19 +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 2403df50bb BAN: Add getter for Function size 2023-02-02 23:19:18 +02:00
Bananymous c85b97abee Kernel: fix some of i368 IDT. This was really broken 2023-02-02 15:52:06 +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 6cbad718fb Kernel: Add some more cxxabi functionality
We can now declate static variables in functions
2023-02-02 15:50:26 +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 01f267a321 Kernel: fix spinlock for i386 2023-02-02 15:49:00 +02:00
Bananymous 0d2d6e5348 BAN: Fix all emplace functions to actually do perfect forwarding 2023-02-01 21:41:51 +02:00
Bananymous 99cf1c0330 BAN: Add destructor to function if it needs to deallocate something someday 2023-02-01 21:41:18 +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 4faa662a59 BAN: Rewrite Traits and add some more of them 2023-02-01 20:05:34 +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 1945b716ad BAN: Implement basic LinkedList 2023-02-01 01:22:41 +02:00
Bananymous 5127da9ecc BAN: Add more traits 2023-02-01 01:22:19 +02:00
Bananymous 56d6b2af3d BAN: TRY() now returns the error itself and not ErrorOr<>
This allows us to use TRY with different ErrorOr<> templates
2023-02-01 01:21:14 +02:00
Bananymous 3a1f068bac BAN: Add needed include to Function 2023-01-31 18:43:24 +02:00
Bananymous be502ae616 Kernel: Debug stacktrace now detects if it kernel panics itself 2023-01-31 18:43:09 +02:00
Bananymous cb3b62d665 Kernel: Only allocate single GDT entry during boot.S
When we need more, we should probably initialize rest of them
in cpp code
2023-01-31 18:43:09 +02:00
Bananymous 1954f223ad Kernel: Add no sse and sse2 for kernel code 2023-01-31 18:43:09 +02:00
Bananymous f10a57dcec BAN: Add RefCounted<> and Unique<>
We have now maybe functional smart pointers
2023-01-31 18:43:09 +02:00
Bananymous 1687028ed5 Kernel: Add constructor and destructor to MMU 2023-01-30 18:54:04 +02:00
Bananymous 3d5f1b5a86 Kernel: Change default host to x86_64 2023-01-30 18:53:30 +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 bfe3426f6d Kernel: Add processor dump flag to APIC 2023-01-26 13:13:46 +02:00
Bananymous 6418d7cfc3 Kernel: Add Other GDT entries to x86_64 2023-01-26 12:53:04 +02:00
Bananymous f0093ed2fd Kernel: kmalloc_eternal now updates the used/free values
I also improved the kmalloc_dump_info() formatting. We format the
values as 8-digit hex numbers since (atleast for now) the kmalloc
will always be under 4 GiB address and size :)
2023-01-26 03:04:19 +02:00
Bananymous e00d18029d Kernel: rewrite some of APIC since it didn't work with xsdts for some reason 2023-01-26 02:57:14 +02:00
Bananymous 35d2e27292 Kernel: Improve MMU
We don't have to invalidate page in AllocatePage() if we don't make
any changes. We also should not assert on deallocating non-present
pages, just return early :)
2023-01-26 02:57:14 +02:00
Bananymous 589f338357 Kernel: Cleanup IDT register dump inline assembly 2023-01-26 02:57:14 +02:00
Bananymous 05b48fa71c Kernel: add gcc option to make sure we have (r/e)bp saved on stack 2023-01-26 02:57:14 +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 9c31790359 Kernel: Add option to disable Serial output
This makes all debug output to appear on the TTY
2023-01-25 22:51:42 +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 b315fdc27f Kernel: Finally managed to get 64-bit working
I had weird problems with interrupts but everything should work now
2023-01-25 19:19:28 +02:00
Bananymous c4670f49d4 Kernel: Refactor some IDT code 2023-01-25 19:19:28 +02:00
Bananymous 48348c9e57 Kernel: Cleanup APIC code. Remove unnecessary defines and add consts 2023-01-25 19:00:41 +02:00