IDT: set entry, load into IDTR, interrupt stub + dispatcher for common faults
This commit is contained in:
54
src/idt/idt.h
Normal file
54
src/idt/idt.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef IDT_H
|
||||
#define IDT_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
struct interrupt_descriptor
|
||||
{
|
||||
uint16_t address_low;
|
||||
uint16_t selector;
|
||||
uint8_t ist;
|
||||
uint8_t flags;
|
||||
uint16_t address_mid;
|
||||
uint32_t address_high;
|
||||
uint32_t reserved;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct idtr
|
||||
{
|
||||
uint16_t limit;
|
||||
uint64_t base;
|
||||
} __attribute__((packed));
|
||||
|
||||
// All general-purpose registers (except rsp) as stored on the stack,
|
||||
// plus the values we pushed (vector number, error code) and the iret frame
|
||||
// In reverse order because the stack grows downwards.
|
||||
struct cpu_status_t
|
||||
{
|
||||
uint64_t r15;
|
||||
uint64_t r14;
|
||||
uint64_t r13;
|
||||
uint64_t r12;
|
||||
uint64_t r11;
|
||||
uint64_t r10;
|
||||
uint64_t r9;
|
||||
uint64_t r8;
|
||||
uint64_t rbp;
|
||||
uint64_t rdi;
|
||||
uint64_t rsi;
|
||||
uint64_t rdx;
|
||||
uint64_t rcx;
|
||||
uint64_t rbx;
|
||||
uint64_t rax;
|
||||
|
||||
uint64_t vector_number;
|
||||
uint64_t error_code;
|
||||
|
||||
uint64_t iret_rip;
|
||||
uint64_t iret_cs;
|
||||
uint64_t iret_flags;
|
||||
uint64_t iret_rsp;
|
||||
uint64_t iret_ss;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user