Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
interrupt.h
Go to the documentation of this file.
1#ifndef __HAL__CPU__INTERRUPT_H__
2#define __HAL__CPU__INTERRUPT_H__
3#include <type.h>
4
5#define PIC1 0x20 /* IO base address for master PIC */
6#define PIC2 0xA0 /* IO base address for slave PIC */
7#define PIC1_COMMAND PIC1
8#define PIC1_DATA (PIC1 + 1)
9#define PIC2_COMMAND PIC2
10#define PIC2_DATA (PIC2 + 1)
11
12#define ICW1_ICW4 0x01 /* Indicates that ICW4 will be present */
13#define ICW1_SINGLE 0x02 /* Single (cascade) mode */
14#define ICW1_INTERVAL4 0x04 /* Call address interval 4 (8) */
15#define ICW1_LEVEL 0x08 /* Level triggered (edge) mode */
16#define ICW1_INIT 0x10 /* Initialization - required! */
17
18#define ICW4_8086 0x01 /* 8086/88 (MCS-80/85) mode */
19#define ICW4_AUTO 0x02 /* Auto (normal) EOI */
20#define ICW4_BUF_SLAVE 0x08 /* Buffered mode/slave */
21#define ICW4_BUF_MASTER 0x0C /* Buffered mode/master */
22#define ICW4_SFNM 0x10 /* Special fully nested (not) */
23
24#define MAX_INTERRUPTS 256
25#define MAX_HANDLERS_PER_INTERRUPT 16
26
27#define INTERRUPT_ATTR_USER 0x8E
28#define INTERRUPT_ATTR_KERNEL 0xEE
29
30typedef struct {
38} __attribute__((packed)) interrupt_entry_t;
39
40typedef struct {
41 uint16_t limit;
43} __attribute__((packed)) interrupt_pointers_t;
44
58
59typedef struct {
61} __attribute__((aligned(16))) fpu_state_t;
62
70
77
78void irq_register(uint8_t core, int n, void* handler, boolean_t use_default_isr,
79 uint16_t selector, uint8_t ist, uint8_t type_attr);
82
83extern __attribute__((no_stack_protector)) void
84vxInterruptHandler(interrupt_stack_frame_t* rsp, fpu_state_t* fpu);
85
86
87#endif // __HAL__CPU__INTERRUPT_H__
elf_section_map uintptr_t base
Definition elf.h:296
uint64_t ist[7]
Definition gdt.h:3
uint64_t rsp[3]
Definition gdt.h:1
typedef __attribute__
Definition msi.c:47
fpu_state_t * fpu
Definition interrupt.h:84
#define MAX_HANDLERS_PER_INTERRUPT
Definition interrupt.h:25
uint16_t irq_alloc_entry(uint8_t core)
Definition interrupt.c:109
#define MAX_INTERRUPTS
Definition interrupt.h:24
void irq_register(uint8_t core, int n, void *handler, boolean_t use_default_isr, uint16_t selector, uint8_t ist, uint8_t type_attr)
Definition interrupt.c:70
void irq_setup(uint16_t core)
Definition interrupt.c:125
uint8_t ist
Definition interrupt.h:33
uint16_t selector
Definition interrupt.h:32
uint8_t data[512]
Definition interrupt.h:60
uint16_t offset_low
Definition interrupt.h:31
uint32_t offset_high
Definition interrupt.h:36
uint32_t zero
Definition interrupt.h:37
uint16_t offset_mid
Definition interrupt.h:35
uint8_t type_attr
Definition interrupt.h:34
irq_entry_t irq_entries[256]
Definition interrupt.h:73
interrupt_entry_t interrupt_entries[256]
Definition interrupt.h:74
interrupt_pointers_t interrupt_pointers
Definition interrupt.h:75
Definition interrupt.h:63
void * handler[16]
Definition interrupt.h:68
boolean_t allocated
Definition interrupt.h:67
uint8_t mask
Definition interrupt.h:64
boolean_t use_default_isr
Definition interrupt.h:65
boolean_t configured
Definition interrupt.h:66
unsigned short uint16_t
Definition type.h:13
unsigned int uint32_t
Definition type.h:19
uint8_t boolean_t
Definition type.h:89
unsigned long uint64_t
Definition type.h:25
unsigned char uint8_t
Definition type.h:7
int core
Definition vm_manager.h:5