forked from lolo859/vystem
Vystem 0.2
This commit is contained in:
57
shelter/lib/include/irq/irq.h
Normal file
57
shelter/lib/include/irq/irq.h
Normal file
@@ -0,0 +1,57 @@
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
#ifndef SH_LIB_IRQ_H
|
||||
#define SH_LIB_IRQ_H
|
||||
#include "std/stdlib.h"
|
||||
// Interrupt frame structure
|
||||
#pragma pack(1)
|
||||
typedef struct {
|
||||
sh_uint64 r11,r10,r9,r8,rdx,rcx,rax;
|
||||
sh_uint64 vector;
|
||||
sh_uint64 error_code;
|
||||
sh_uint64 rip;
|
||||
sh_uint64 cs;
|
||||
sh_uint64 rflags;
|
||||
} sh_irq_INTERRUPT_FRAME;
|
||||
#pragma pack()
|
||||
#define SH_IRQ_DIV_BY_ZERO_FAULT_STRING "Division by Zero #DE"
|
||||
#define SH_IRQ_DEBUG_STRING "Debug #DB\nWarning: Usage of debugger in Shelter isn't supported and any #DB fault will result in a dead kernel."
|
||||
#define SH_IRQ_PAGE_FAULT_STRING "Page fault #PF"
|
||||
#define SH_IRQ_NMI_FAULT_STRING "Non maskable interrupt"
|
||||
#define SH_IRQ_BREAKPOINT_STRING "Breakpoint #BP\nWarning: Usage of debugger in Shelter isn't supported but usage of #BP fault will not block the kernel."
|
||||
#define SH_IRQ_OVERFLOW_STRING "Overflow #OF"
|
||||
#define SH_IRQ_BOUND_RANGE_STRING "Bound range Exceedeed #BR"
|
||||
#define SH_IRQ_INVALID_OPCODE_STRING "Invalid Opcode #UD"
|
||||
#define SH_IRQ_DEVICE_NOT_AVAILABLE_STRING "Device Not Available #NM"
|
||||
#define SH_IRQ_DOUBLE_FAULT_STRING "Double Fault #DF"
|
||||
#define SH_IRQ_COPROCESSOR_SEGMENT_OVRERRUN_STRING "Coprocessor segment overrun"
|
||||
#define SH_IRQ_INVALID_TSS_STRING "Invalid TSS #TS"
|
||||
#define SH_IRQ_SEGMENT_NOT_PRESENT_STRING "Segment Not Present #NP"
|
||||
#define SH_IRQ_STACK_SEGMENT_FAULT_STRING "Stack Segment Fault #SS"
|
||||
#define SH_IRQ_GENERAL_PROTECTION_FAULT_STRING "General Protection Fault #GP"
|
||||
#define SH_IRQ_X87_FLOATING_POINT_EXCEPTION_STRING "x87 Floating Point Exception #MF"
|
||||
#define SH_IRQ_ALIGNMENT_CHECK_STRING "Alignment Check #AC"
|
||||
#define SH_IRQ_MACHINE_CHECK_STRING "Machine Check #MC"
|
||||
#define SH_IRQ_SIMD_FLOATING_POINT_EXCEPTION_STRING "SIMD Floating Point Exception #XM"
|
||||
#define SH_IRQ_VIRTUALIZATION_EXCEPTION_STRING "Virtualization Exception #VE"
|
||||
#define SH_IRQ_CONTROL_PROTECTION_EXCEPTION_STRING "Control Protection Exception #CP"
|
||||
#define SH_IRQ_HYPERVISOR_INJECTION_EXCEPTION_STRING "Hypervisor Injection Exception #HV\nWarning: Shelter will never communicate with an hypervisor."
|
||||
#define SH_IRQ_VMM_COMMUNICATION_EXCEPTION_STRING "VMM Communication Exception #VC\nWarning: Shelter will never communicate with an hypervisor."
|
||||
#define SH_IRQ_SECURITY_EXCEPTION_STRING "Security Exception #SX\nWarning: Shelter will never communicate with an hypervisor."
|
||||
typedef void (*sh_irq_HANDLER_PTR)();
|
||||
// Start TSC calibration
|
||||
void sh_irq_start_tsc();
|
||||
// Return TSC delta mesured between two PIC interrupts
|
||||
sh_uint64 sh_irq_get_tsc_delta();
|
||||
// Set timer state of this CPU to SH_TRUE
|
||||
void sh_irq_start_timer();
|
||||
// Get timer state of this CPU
|
||||
sh_bool sh_irq_get_timer_state();
|
||||
// Set the irq_managed_by_ioapic to SH_TRUE
|
||||
SH_STATUS sh_irq_switch_irq_management();
|
||||
// Register a legacy IRQ handler, unmask the corresponding GSI
|
||||
SH_STATUS sh_irq_legacy_register_handler(sh_uint8 legacy_irq,sh_irq_HANDLER_PTR handler);
|
||||
// Present interrupt frame if it's a fault
|
||||
void sh_irq_present_frame(sh_irq_INTERRUPT_FRAME *frame);
|
||||
// Dispatch interrupts
|
||||
void sh_irq_dispatch(sh_irq_INTERRUPT_FRAME *frame);
|
||||
#endif
|
||||
Reference in New Issue
Block a user