From e693b12915398062922e81da9ad19315272c8560 Mon Sep 17 00:00:00 2001 From: Rick Rongen Date: Mon, 30 Aug 2021 19:58:50 +0200 Subject: [PATCH] feat: added missing lapic code --- include/myke/cpu/lapic.h | 23 +++++++++++++++++++++++ kernel/cpu/lapic.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 include/myke/cpu/lapic.h create mode 100644 kernel/cpu/lapic.c diff --git a/include/myke/cpu/lapic.h b/include/myke/cpu/lapic.h new file mode 100644 index 0000000..49df902 --- /dev/null +++ b/include/myke/cpu/lapic.h @@ -0,0 +1,23 @@ +// +// Created by rick on 23-08-21. +// + +#ifndef NEW_KERNEL_LAPIC_H +#define NEW_KERNEL_LAPIC_H + +#include + +#define LAPIC_REG_ID 0x20 +#define LAPIC_REG_VERSION 0x30 + +void lapic_set_addr(uint32_t addr); + +void lapic_write(uint32_t offset, uint32_t value); + +uint32_t lapic_read(uint32_t offset); + +uint32_t lapic_get_id(); + +uint32_t lapic_get_version(); + +#endif //NEW_KERNEL_LAPIC_H diff --git a/kernel/cpu/lapic.c b/kernel/cpu/lapic.c new file mode 100644 index 0000000..05ab6e1 --- /dev/null +++ b/kernel/cpu/lapic.c @@ -0,0 +1,30 @@ +// +// Created by rick on 23-08-21. +// + +#include + +void *lapic = NULL; + +void lapic_set_addr(uint32_t addr) { + lapic = (void *) addr; +} + +void lapic_write(uint32_t offset, uint32_t value) { + *(volatile uint32_t *) ((uintptr_t) lapic + offset) = value; +} + +uint32_t lapic_read(uint32_t offset) { + if (lapic == NULL) { + return UINT32_MAX; + } + return *(volatile uint32_t *) ((uintptr_t) lapic + offset); +} + +uint32_t lapic_get_id() { + return lapic_read(LAPIC_REG_ID); +} + +uint32_t lapic_get_version() { + return lapic_read(LAPIC_REG_VERSION); +} \ No newline at end of file