From 5fbf41e967ed8e413ecf1e6abb72e8d285169df4 Mon Sep 17 00:00:00 2001 From: Alexey Gavrilov Date: Fri, 24 May 2024 14:07:47 +0700 Subject: Pic + Tuple + refactor PrimaryInitialization class --- arch/x86/PrimaryInit.h | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'arch/x86/PrimaryInit.h') diff --git a/arch/x86/PrimaryInit.h b/arch/x86/PrimaryInit.h index 540ad41..239595d 100644 --- a/arch/x86/PrimaryInit.h +++ b/arch/x86/PrimaryInit.h @@ -1,10 +1,49 @@ #include "gdt/Gdt.h" #include "io/VGADisplay.h" #include "idt/Idt.h" +#include "ic/Pic.h" +#include +struct InterruptFrame +{ +#ifdef X86_64 + uint64 ip; + uint64 cs; + uint64 flags; +#else + uint32 ip; + uint32 cs; + uint32 flags; +#endif +}; + +using isr = void (*)(const InterruptFrame *frame); +using isrExc= void (*)(const InterruptFrame *frame, uword errorCode); +using null = decltype(nullptr); +using InterruptFuncs = parameters::toList, + isrExc, + null, + repeat<5, isrExc>::toList, + null, + isr, + isrExc, + repeat<3, isr>::toList, + isrExc, + repeat<10, null>::toList, + repeat<2, isr>::toList + >::submitTo; +struct isrPerform +{ + static void perform(isr funp, DescInterrupt32 &desc); + static void perform(isrExc funp, DescInterrupt32 &desc); + static void perform(null null, DescInterrupt32 &desc); +}; + class PrimaryInitialization { + private: + SingletonPic picSingle; protected: virtual void processorInitialize(); virtual void devicesInitialize(); -- cgit v1.2.3