summaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-25 02:24:36 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-25 02:25:19 +0100
commit4931f266a72dccfb439badfa1070563003c80ce3 (patch)
tree8ee554e9d4594fa4916f307dca7edff98137df18 /kernel/src
parentcaba4178bbfd7b3b1ff2e156e24b08015137d16a (diff)
define consts
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/apic/apic.c5
-rw-r--r--kernel/src/apic/ioapic.c2
-rw-r--r--kernel/src/apic/madt.c1
-rw-r--r--kernel/src/boot/boot64.S3
-rw-r--r--kernel/src/mem/paging.c4
-rw-r--r--kernel/src/mem/pmm.c9
-rw-r--r--kernel/src/sys/userspace_asm.S10
7 files changed, 15 insertions, 19 deletions
diff --git a/kernel/src/apic/apic.c b/kernel/src/apic/apic.c
index 3dff70f..06c0661 100644
--- a/kernel/src/apic/apic.c
+++ b/kernel/src/apic/apic.c
@@ -16,11 +16,6 @@ uint8_t cpu_apic_ids[256];
uint8_t curr_cpu_apic_id()
{
-// Initial APIC ID
-// CPUIDinfo info;
-// CpuId(1, 0, &info);
-// return (uint8_t)(info.EBX >> 24);
-
return (uint8_t)(((*((__volatile__ uint32_t*)((uint64_t)lapic_addr + 0x20))) >> 24) & 0xFF);
}
diff --git a/kernel/src/apic/ioapic.c b/kernel/src/apic/ioapic.c
index 1322c47..bcd5a4d 100644
--- a/kernel/src/apic/ioapic.c
+++ b/kernel/src/apic/ioapic.c
@@ -55,8 +55,6 @@ void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector)
ioapic_write((uint8_t)low_index, low);
}
-#define APIC_BASE_MSR 0x0000001B
-
void apic_remap_interrupts()
{
map_addr(ioapic_addr, ioapic_addr, FLAG_PRESENT);
diff --git a/kernel/src/apic/madt.c b/kernel/src/apic/madt.c
index 8a1e51d..f69887d 100644
--- a/kernel/src/apic/madt.c
+++ b/kernel/src/apic/madt.c
@@ -3,7 +3,6 @@
#include <heap.h>
#include <libk/string.h>
#include <libk/stdio.h>
-#include <apic.h>
void parse_madt()
{
diff --git a/kernel/src/boot/boot64.S b/kernel/src/boot/boot64.S
index 8231b3e..848256f 100644
--- a/kernel/src/boot/boot64.S
+++ b/kernel/src/boot/boot64.S
@@ -1,12 +1,13 @@
.code64
.set KERNEL_VMA, 0xffffffff80000000
+.set GDT_KERNEL_CS, 0x10
.section .boot64.text, "a"
.global begin_long_mode
begin_long_mode:
- mov $0x10, %ax
+ mov $GDT_KERNEL_CS, %ax
mov %ax, %ds
mov %ax, %es
mov %ax, %ss
diff --git a/kernel/src/mem/paging.c b/kernel/src/mem/paging.c
index cb9bd70..b8c44c0 100644
--- a/kernel/src/mem/paging.c
+++ b/kernel/src/mem/paging.c
@@ -14,8 +14,8 @@ uint64_t __attribute__((aligned(4096))) page_table_lvl2[512];
void map_addr(uint64_t virt, uint64_t phys, uint32_t flags)
{
- virt -= virt % 0x00200000;
- phys -= phys % 0x00200000;
+ virt -= virt % PAGE_SIZE;
+ phys -= phys % PAGE_SIZE;
// i is in range [0, 511]
size_t pt_lvl4_i = (virt >> 39) % 0x200; // 512gb entry
diff --git a/kernel/src/mem/pmm.c b/kernel/src/mem/pmm.c
index 63bfb07..e8245f2 100644
--- a/kernel/src/mem/pmm.c
+++ b/kernel/src/mem/pmm.c
@@ -7,8 +7,7 @@
#include <multiboot2.h>
#include <pmm.h>
-#define PMM_PAGE_SIZE 4096 * 512
-#define MEM_USED_BELOW 0x03000000
+#define MEM_USED_BELOW 50*1024*1024
uint64_t free_mem_cnt;
uint64_t all_mem_cnt;
@@ -23,8 +22,8 @@ void init_pmm()
mb2_tag_mmap_entry entry = pos->mmap_entry;
if (entry.type != 1)
continue;
- uint64_t base = entry.base_addr & (PMM_PAGE_SIZE - 1) ? (entry.base_addr & (uint64_t)~(PMM_PAGE_SIZE - 1)) + PMM_PAGE_SIZE : entry.base_addr;
- for (uint64_t i = base; i + PMM_PAGE_SIZE <= entry.base_addr + entry.length; i += PMM_PAGE_SIZE) {
+ uint64_t base = entry.base_addr & (PAGE_SIZE - 1) ? (entry.base_addr & (uint64_t)~(PAGE_SIZE - 1)) + PAGE_SIZE : entry.base_addr;
+ for (uint64_t i = base; i + PAGE_SIZE <= entry.base_addr + entry.length; i += PAGE_SIZE) {
if (i >= MEM_USED_BELOW) {
free_mem_cnt++;
map_addr(i, i, FLAG_PRESENT);
@@ -44,6 +43,6 @@ void init_pmm()
void memory_usage()
{
- printf("memory used: %dMB\n", (48 * 1024 * 1024 + (all_mem_cnt - free_mem_cnt) * PAGE_SIZE) / 1024 / 1024);
+ printf("memory used: %dMB\n", (MEM_USED_BELOW + (all_mem_cnt - free_mem_cnt) * PAGE_SIZE) / 1024 / 1024);
printf("memory free: %dMB\n", free_mem_cnt * PAGE_SIZE / 1024 / 1024);
}
diff --git a/kernel/src/sys/userspace_asm.S b/kernel/src/sys/userspace_asm.S
index 4431a84..1bb19a3 100644
--- a/kernel/src/sys/userspace_asm.S
+++ b/kernel/src/sys/userspace_asm.S
@@ -3,6 +3,10 @@
.extern begin_userspace
.extern syscall_handler
+.set IA32_EFER, 0xc0000080
+.set STAR_MSR, 0xc0000081
+.set LSTAR_MSR, 0xc0000082
+
.global jump_userspace
jump_userspace:
mov $0x1b, %ax
@@ -11,17 +15,17 @@ jump_userspace:
mov %ax, %fs
mov %ax, %gs
- mov $0xc0000082, %rcx
+ mov $LSTAR_MSR, %rcx
movabs $__syscall, %rax
shr $32, %rax
mov %eax, %edx
movabs $__syscall, %rax
wrmsr
- mov $0xc0000080, %rcx
+ mov $IA32_EFER, %rcx
rdmsr
or $1, %eax
wrmsr
- mov $0xc0000081, %rcx
+ mov $STAR_MSR, %rcx
rdmsr
mov $0x00130008, %edx
wrmsr