From 1eecad21db3a9f4ae91c6c32504c1c6e3b74461a Mon Sep 17 00:00:00 2001 From: belliash Date: Mon, 20 Nov 2023 15:26:03 +0100 Subject: [PATCH] Implement HlReadApicRegister() and HlWriteApicRegister() routines for basic APIC support --- xtoskrnl/CMakeLists.txt | 1 + xtoskrnl/hl/apic.c | 48 +++++++++++++++++++++++++++++++++++++++++ xtoskrnl/includes/hl.h | 9 ++++++++ 3 files changed, 58 insertions(+) create mode 100644 xtoskrnl/hl/apic.c diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index 730f302..8cb0c0e 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -13,6 +13,7 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/procsup.c ${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/traps.c ${XTOSKRNL_SOURCE_DIR}/ex/rundown.c + ${XTOSKRNL_SOURCE_DIR}/hl/apic.c ${XTOSKRNL_SOURCE_DIR}/hl/cport.c ${XTOSKRNL_SOURCE_DIR}/hl/efifb.c ${XTOSKRNL_SOURCE_DIR}/hl/globals.c diff --git a/xtoskrnl/hl/apic.c b/xtoskrnl/hl/apic.c new file mode 100644 index 0000000..59a5566 --- /dev/null +++ b/xtoskrnl/hl/apic.c @@ -0,0 +1,48 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/hl/apic.c + * DESCRIPTION: Advanced Programmable Interrupt Controller (APIC) support + * DEVELOPERS: Rafal Kupiec + */ + +#include + + +/** + * Reads from the local APIC register. + * + * @param Register + * Supplies the APIC register to read from. + * + * @return This routine returns the value read from the APIC register. + * + * @since XT 1.0 + */ +XTFASTCALL +ULONG +HlReadApicRegister(IN APIC_REGISTER Register) +{ + return RtlReadRegisterLong((PULONG)APIC_BASE + (Register << 4)); +} + +/** + * Writes to the local APIC register. + * + * @param Register + * Supplies the APIC register to write to. + * + * @param Value + * Supplies the value to write to the APIC register. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTFASTCALL +VOID +HlWriteApicRegister(IN APIC_REGISTER Register, + IN ULONG Value) +{ + RtlWriteRegisterLong((PULONG)APIC_BASE + (Register << 4), Value); +} diff --git a/xtoskrnl/includes/hl.h b/xtoskrnl/includes/hl.h index 918e9e5..4d976fc 100644 --- a/xtoskrnl/includes/hl.h +++ b/xtoskrnl/includes/hl.h @@ -51,4 +51,13 @@ XTAPI XTSTATUS HlInitializeDisplay(VOID); +XTFASTCALL +ULONG +HlReadApicRegister(IN APIC_REGISTER Register); + +XTFASTCALL +VOID +HlWriteApicRegister(IN APIC_REGISTER Register, + IN ULONG Value); + #endif /* __XTOSKRNL_HL_H */