mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 21:18:14 +00:00
Revert "Kernel: Replace IRQHandler with the new InterruptHandler class"
This reverts commit 6c72736b26
.
I am unable to boot on my home machine with this change in the tree.
This commit is contained in:
parent
8e21e31b3a
commit
e64c335e5a
29 changed files with 169 additions and 193 deletions
|
@ -26,12 +26,12 @@
|
|||
|
||||
#include "APIC.h"
|
||||
#include "Assertions.h"
|
||||
#include "IRQHandler.h"
|
||||
#include "PIC.h"
|
||||
#include "Process.h"
|
||||
#include <AK/Types.h>
|
||||
#include <Kernel/Arch/i386/CPU.h>
|
||||
#include <Kernel/KSyms.h>
|
||||
#include <Kernel/SharedInterruptHandler.h>
|
||||
#include <Kernel/VM/MemoryManager.h>
|
||||
#include <LibC/mallocdefs.h>
|
||||
|
||||
|
@ -48,7 +48,7 @@ static DescriptorTablePointer s_gdtr;
|
|||
static Descriptor s_idt[256];
|
||||
static Descriptor s_gdt[256];
|
||||
|
||||
static SharedInterruptHandler* s_irq_handler[256];
|
||||
static IRQHandler* s_irq_handler[16];
|
||||
|
||||
static Vector<u16>* s_gdt_freelist;
|
||||
|
||||
|
@ -435,25 +435,18 @@ static void unimp_trap()
|
|||
hang();
|
||||
}
|
||||
|
||||
void register_shared_interrupt_handler(u8 irq, SharedInterruptHandler& handler)
|
||||
void register_irq_handler(u8 irq, IRQHandler& handler)
|
||||
{
|
||||
ASSERT(!s_irq_handler[irq]);
|
||||
s_irq_handler[irq] = &handler;
|
||||
}
|
||||
|
||||
void unregister_shared_interrupt_handler(u8 irq, SharedInterruptHandler& handler)
|
||||
void unregister_irq_handler(u8 irq, IRQHandler& handler)
|
||||
{
|
||||
ASSERT(s_irq_handler[irq] == &handler);
|
||||
s_irq_handler[irq] = nullptr;
|
||||
}
|
||||
|
||||
SharedInterruptHandler& get_interrupt_handler(u8 number)
|
||||
{
|
||||
ASSERT(number < 256);
|
||||
ASSERT(s_irq_handler[number] != nullptr);
|
||||
return *s_irq_handler[number];
|
||||
}
|
||||
|
||||
void register_interrupt_handler(u8 index, void (*f)())
|
||||
{
|
||||
s_idt[index].low = 0x00080000 | LSW((f));
|
||||
|
@ -531,8 +524,8 @@ void idt_init()
|
|||
register_interrupt_handler(0x5e, irq_14_asm_entry);
|
||||
register_interrupt_handler(0x5f, irq_15_asm_entry);
|
||||
|
||||
for (u8 i = 0; i < 255; ++i) {
|
||||
SharedInterruptHandler::initialize(i);
|
||||
for (u8 i = 0; i < 16; ++i) {
|
||||
s_irq_handler[i] = nullptr;
|
||||
}
|
||||
|
||||
flush_idt();
|
||||
|
@ -548,9 +541,8 @@ void handle_irq(RegisterDump regs)
|
|||
clac();
|
||||
ASSERT(regs.isr_number >= 0x50 && regs.isr_number <= 0x5f);
|
||||
u8 irq = (u8)(regs.isr_number - 0x50);
|
||||
ASSERT(s_irq_handler[irq] != nullptr);
|
||||
s_irq_handler[irq]->handle_interrupt();
|
||||
// FIXME: Determine if we use IRQs or MSIs (in the future) to send EOI...
|
||||
if (s_irq_handler[irq])
|
||||
s_irq_handler[irq]->handle_irq();
|
||||
PIC::eoi(irq);
|
||||
}
|
||||
|
||||
|
|
|
@ -240,7 +240,7 @@ public:
|
|||
u64 raw[4];
|
||||
};
|
||||
|
||||
class SharedInterruptHandler;
|
||||
class IRQHandler;
|
||||
struct RegisterDump;
|
||||
|
||||
void gdt_init();
|
||||
|
@ -248,9 +248,8 @@ void idt_init();
|
|||
void sse_init();
|
||||
void register_interrupt_handler(u8 number, void (*f)());
|
||||
void register_user_callable_interrupt_handler(u8 number, void (*f)());
|
||||
void register_shared_interrupt_handler(u8 number, SharedInterruptHandler&);
|
||||
SharedInterruptHandler& get_interrupt_handler(u8 number);
|
||||
void unregister_shared_interrupt_handler(u8 number, SharedInterruptHandler&);
|
||||
void register_irq_handler(u8 number, IRQHandler&);
|
||||
void unregister_irq_handler(u8 number, IRQHandler&);
|
||||
void flush_idt();
|
||||
void flush_gdt();
|
||||
void load_task_register(u16 selector);
|
||||
|
|
|
@ -75,20 +75,6 @@ void enable(u8 irq)
|
|||
}
|
||||
}
|
||||
|
||||
bool is_enabled(u8 irq)
|
||||
{
|
||||
InterruptDisabler disabler;
|
||||
u8 imr;
|
||||
if (irq & 8) {
|
||||
imr = IO::in8(PIC1_CMD);
|
||||
imr &= (1 << (irq - 8));
|
||||
} else {
|
||||
imr = IO::in8(PIC0_CMD);
|
||||
imr &= (1 << irq);
|
||||
}
|
||||
return (!!imr);
|
||||
}
|
||||
|
||||
void eoi(u8 irq)
|
||||
{
|
||||
if (irq & 8)
|
||||
|
|
|
@ -34,7 +34,6 @@ void enable(u8 number);
|
|||
void disable(u8 number);
|
||||
void eoi(u8 number);
|
||||
void initialize();
|
||||
bool is_enabled(u8 number);
|
||||
u16 get_isr();
|
||||
u16 get_irr();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue