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
30
typedef
struct
{
31
uint16_t
offset_low
;
32
uint16_t
selector
;
33
uint8_t
ist
;
34
uint8_t
type_attr
;
35
uint16_t
offset_mid
;
36
uint32_t
offset_high
;
37
uint32_t
zero
;
38
}
__attribute__
((packed)) interrupt_entry_t;
39
40
typedef
struct
{
41
uint16_t
limit;
42
uint64_t
base
;
43
}
__attribute__
((packed)) interrupt_pointers_t;
44
45
typedef
struct
{
46
uint64_t
r15
,
r14
,
r13
,
r12
,
r11
,
r10
,
r9
,
r8
;
47
uint64_t
rbp
,
rdi
,
rsi
,
rdx
,
rcx
,
rbx
,
rax
;
48
49
uint64_t
int_no
;
50
uint64_t
err_code
;
51
52
uint64_t
rip
;
53
uint64_t
cs
;
54
uint64_t
rflags
;
55
uint64_t
rsp
;
56
uint64_t
ss
;
57
}
interrupt_stack_frame_t
;
58
59
typedef
struct
{
60
uint8_t
data
[512];
61
}
__attribute__
((aligned(16))) fpu_state_t;
62
63
typedef struct {
64
uint8_t
mask
;
65
boolean_t
use_default_isr
;
66
boolean_t
configured
;
67
boolean_t
allocated
;
68
void
*
handler
[
MAX_HANDLERS_PER_INTERRUPT
];
69
}
irq_entry_t
;
70
71
typedef
struct
{
72
uint8_t
bitmap
[
MAX_INTERRUPTS
];
73
irq_entry_t
irq_entries
[
MAX_INTERRUPTS
];
74
interrupt_entry_t
interrupt_entries
[
MAX_INTERRUPTS
];
75
interrupt_pointers_t
interrupt_pointers
;
76
}
interrupt_per_core_data_t
;
77
78
void
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);
80
void
irq_setup
(
uint16_t
core
);
81
uint16_t
irq_alloc_entry
(
uint8_t
core
);
82
83
extern
__attribute__
((no_stack_protector))
void
84
vxInterruptHandler(
interrupt_stack_frame_t
*
rsp
, fpu_state_t*
fpu
);
85
86
87
#endif
// __HAL__CPU__INTERRUPT_H__
base
elf_section_map uintptr_t base
Definition
elf.h:296
ist
uint64_t ist[7]
Definition
gdt.h:3
rsp
uint64_t rsp[3]
Definition
gdt.h:1
__attribute__
typedef __attribute__
Definition
msi.c:47
fpu
fpu_state_t * fpu
Definition
interrupt.h:84
MAX_HANDLERS_PER_INTERRUPT
#define MAX_HANDLERS_PER_INTERRUPT
Definition
interrupt.h:25
irq_alloc_entry
uint16_t irq_alloc_entry(uint8_t core)
Definition
interrupt.c:109
MAX_INTERRUPTS
#define MAX_INTERRUPTS
Definition
interrupt.h:24
irq_register
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
irq_setup
void irq_setup(uint16_t core)
Definition
interrupt.c:125
__attribute__::ist
uint8_t ist
Definition
interrupt.h:33
__attribute__::selector
uint16_t selector
Definition
interrupt.h:32
__attribute__::data
uint8_t data[512]
Definition
interrupt.h:60
__attribute__::offset_low
uint16_t offset_low
Definition
interrupt.h:31
__attribute__::offset_high
uint32_t offset_high
Definition
interrupt.h:36
__attribute__::zero
uint32_t zero
Definition
interrupt.h:37
__attribute__::offset_mid
uint16_t offset_mid
Definition
interrupt.h:35
__attribute__::type_attr
uint8_t type_attr
Definition
interrupt.h:34
interrupt_per_core_data_t
Definition
interrupt.h:71
interrupt_per_core_data_t::bitmap
uint8_t bitmap[256]
Definition
interrupt.h:72
interrupt_per_core_data_t::irq_entries
irq_entry_t irq_entries[256]
Definition
interrupt.h:73
interrupt_per_core_data_t::interrupt_entries
interrupt_entry_t interrupt_entries[256]
Definition
interrupt.h:74
interrupt_per_core_data_t::interrupt_pointers
interrupt_pointers_t interrupt_pointers
Definition
interrupt.h:75
interrupt_stack_frame_t
Definition
interrupt.h:45
interrupt_stack_frame_t::rdi
uint64_t rdi
Definition
interrupt.h:47
interrupt_stack_frame_t::cs
uint64_t cs
Definition
interrupt.h:53
interrupt_stack_frame_t::rdx
uint64_t rdx
Definition
interrupt.h:47
interrupt_stack_frame_t::err_code
uint64_t err_code
Definition
interrupt.h:50
interrupt_stack_frame_t::r9
uint64_t r9
Definition
interrupt.h:46
interrupt_stack_frame_t::ss
uint64_t ss
Definition
interrupt.h:56
interrupt_stack_frame_t::r15
uint64_t r15
Definition
interrupt.h:46
interrupt_stack_frame_t::r11
uint64_t r11
Definition
interrupt.h:46
interrupt_stack_frame_t::rax
uint64_t rax
Definition
interrupt.h:47
interrupt_stack_frame_t::r12
uint64_t r12
Definition
interrupt.h:46
interrupt_stack_frame_t::rsi
uint64_t rsi
Definition
interrupt.h:47
interrupt_stack_frame_t::r10
uint64_t r10
Definition
interrupt.h:46
interrupt_stack_frame_t::r13
uint64_t r13
Definition
interrupt.h:46
interrupt_stack_frame_t::rip
uint64_t rip
Definition
interrupt.h:52
interrupt_stack_frame_t::r14
uint64_t r14
Definition
interrupt.h:46
interrupt_stack_frame_t::rbp
uint64_t rbp
Definition
interrupt.h:47
interrupt_stack_frame_t::rsp
uint64_t rsp
Definition
interrupt.h:55
interrupt_stack_frame_t::rflags
uint64_t rflags
Definition
interrupt.h:54
interrupt_stack_frame_t::rbx
uint64_t rbx
Definition
interrupt.h:47
interrupt_stack_frame_t::int_no
uint64_t int_no
Definition
interrupt.h:49
interrupt_stack_frame_t::r8
uint64_t r8
Definition
interrupt.h:46
interrupt_stack_frame_t::rcx
uint64_t rcx
Definition
interrupt.h:47
irq_entry_t
Definition
interrupt.h:63
irq_entry_t::handler
void * handler[16]
Definition
interrupt.h:68
irq_entry_t::allocated
boolean_t allocated
Definition
interrupt.h:67
irq_entry_t::mask
uint8_t mask
Definition
interrupt.h:64
irq_entry_t::use_default_isr
boolean_t use_default_isr
Definition
interrupt.h:65
irq_entry_t::configured
boolean_t configured
Definition
interrupt.h:66
type.h
uint16_t
unsigned short uint16_t
Definition
type.h:13
uint32_t
unsigned int uint32_t
Definition
type.h:19
boolean_t
uint8_t boolean_t
Definition
type.h:89
uint64_t
unsigned long uint64_t
Definition
type.h:25
uint8_t
unsigned char uint8_t
Definition
type.h:7
core
int core
Definition
vm_manager.h:5
kernel
hal
cpu
interrupt.h
Generated on Sat May 30 2026 11:09:57 for Voxia OS by
1.13.2