Xyris  0.5
isr.hpp
Go to the documentation of this file.
1 /**
2  * @file isr.hpp
3  * @author Keeton Feavel ([email protected])
4  * @brief Interrupt Service Routine header.
5  * @version 0.3
6  * @date 2019-11-15
7  *
8  * @copyright Copyright the Xyris Contributors (c) 2019
9  *
10  */
11 #pragma once
12 #include <Arch/i686/Arch.i686.hpp>
13 #include <stdint.h>
14 
15 #define ARCH_EXCEPTION_NUM 32 // Hardware exception count
16 #define ARCH_INTERRUPT_NUM 16 // Hardware interrupt count
17 #define ARCH_INTERRUPT_HANDLER_MAX 256 // Max number of registered interrupt handlers
18 
19 namespace Interrupts {
20 
21 /**
22  * @brief Enumerator for mapping hardware exceptions to their purpose
23  *
24  */
25 enum Exception {
41  // Exception 0xF is reserved
47  // Exceptions 0x15-0x1D are reserved
49  // Exception 0x1F is reserved
50 };
51 
52 /**
53  * @brief Enumerator for mapping hardware interrupt values to zero-indexed
54  * interrupts for programming ease. Unlike the exceptions, which are defined
55  * by the CPU manufacturer, interrupts can have multiple purposes, so it would
56  * be counter-productive to name them here.
57  *
58  */
59 enum Interrupt {
60  INTERRUPT_0 = 0x20,
61  INTERRUPT_1 = 0x21,
62  INTERRUPT_2 = 0x22,
63  INTERRUPT_3 = 0x23,
64  INTERRUPT_4 = 0x24,
65  INTERRUPT_5 = 0x35,
66  INTERRUPT_6 = 0x26,
67  INTERRUPT_7 = 0x27,
68  INTERRUPT_8 = 0x28,
69  INTERRUPT_9 = 0x29,
70  INTERRUPT_10 = 0x2A,
71  INTERRUPT_11 = 0x2B,
72  INTERRUPT_12 = 0x2C,
73  INTERRUPT_13 = 0x2D,
74  INTERRUPT_14 = 0x2E,
75  INTERRUPT_15 = 0x2F,
76 };
77 
78 /* Interrupt Service Routines */
79 typedef void (*InterruptHandler_t)(struct registers*);
80 
81 /**
82  * @brief
83  *
84  * @param interrupt
85  * @param handler
86  */
87 void registerHandler(uint8_t interrupt, InterruptHandler_t handler);
88 
89 /**
90  * @brief
91  *
92  */
93 void init();
94 
95 } // !namespace Interrupts
Interrupts::init
void init()
Definition: isr.cpp:70
Interrupts::INTERRUPT_10
@ INTERRUPT_10
Definition: isr.hpp:70
Interrupts::Exception
Exception
Enumerator for mapping hardware exceptions to their purpose.
Definition: isr.hpp:25
Interrupts::EXCEPTION_PROTECT_FAULT
@ EXCEPTION_PROTECT_FAULT
Definition: isr.hpp:39
Interrupts::INTERRUPT_15
@ INTERRUPT_15
Definition: isr.hpp:75
Interrupts::EXCEPTION_SECURITY
@ EXCEPTION_SECURITY
Definition: isr.hpp:48
Interrupts::EXCEPTION_VIRTUALIZATION
@ EXCEPTION_VIRTUALIZATION
Definition: isr.hpp:46
Interrupts::InterruptHandler_t
void(* InterruptHandler_t)(struct registers *)
Definition: isr.hpp:79
Interrupts::EXCEPTION_BOUND_RANGE
@ EXCEPTION_BOUND_RANGE
Definition: isr.hpp:31
Interrupts::EXCEPTION_MACHINE_CHECK
@ EXCEPTION_MACHINE_CHECK
Definition: isr.hpp:44
Interrupts::INTERRUPT_12
@ INTERRUPT_12
Definition: isr.hpp:72
Interrupts::EXCEPTION_ALIGNMENT_CHECK
@ EXCEPTION_ALIGNMENT_CHECK
Definition: isr.hpp:43
Interrupts::INTERRUPT_3
@ INTERRUPT_3
Definition: isr.hpp:63
Interrupts::EXCEPTION_PAGE_FAULT
@ EXCEPTION_PAGE_FAULT
Definition: isr.hpp:40
Interrupts::INTERRUPT_1
@ INTERRUPT_1
Definition: isr.hpp:61
Interrupts::EXCEPTION_BREAKPOINT
@ EXCEPTION_BREAKPOINT
Definition: isr.hpp:29
Interrupts::EXCEPTION_INVALID_OPCODE
@ EXCEPTION_INVALID_OPCODE
Definition: isr.hpp:32
Interrupts::INTERRUPT_4
@ INTERRUPT_4
Definition: isr.hpp:64
Interrupts::INTERRUPT_5
@ INTERRUPT_5
Definition: isr.hpp:65
Interrupts::INTERRUPT_2
@ INTERRUPT_2
Definition: isr.hpp:62
Interrupts::INTERRUPT_6
@ INTERRUPT_6
Definition: isr.hpp:66
Interrupts
Definition: Interrupts.h:14
Interrupts::EXCEPTION_DIVIDE_BY_ZERO
@ EXCEPTION_DIVIDE_BY_ZERO
Definition: isr.hpp:26
Arch.i686.hpp
i686 architecture implementation of Arch.hpp
registers
A structure definining values for all x86 registers. Cannot be namespaced due to C linkage and ASM in...
Definition: regs.hpp:19
Interrupts::INTERRUPT_0
@ INTERRUPT_0
Definition: isr.hpp:60
Interrupts::EXCEPTION_FPU_EXCEPTION
@ EXCEPTION_FPU_EXCEPTION
Definition: isr.hpp:42
Interrupts::registerHandler
void registerHandler(uint8_t interrupt, InterruptHandler_t handler)
Definition: isr.cpp:98
Interrupts::EXCEPTION_NON_MASK_INT
@ EXCEPTION_NON_MASK_INT
Definition: isr.hpp:28
Interrupts::INTERRUPT_8
@ INTERRUPT_8
Definition: isr.hpp:68
Interrupts::EXCEPTION_STACK_SEG_FAULT
@ EXCEPTION_STACK_SEG_FAULT
Definition: isr.hpp:38
Interrupts::EXCEPTION_COPROCESSOR_SEG
@ EXCEPTION_COPROCESSOR_SEG
Definition: isr.hpp:35
Interrupts::INTERRUPT_7
@ INTERRUPT_7
Definition: isr.hpp:67
Interrupts::EXCEPTION_INVALID_TSS
@ EXCEPTION_INVALID_TSS
Definition: isr.hpp:36
Interrupts::EXCEPTION_DEBUG
@ EXCEPTION_DEBUG
Definition: isr.hpp:27
Interrupts::EXCEPTION_SEGMENT_MISSING
@ EXCEPTION_SEGMENT_MISSING
Definition: isr.hpp:37
Interrupts::INTERRUPT_14
@ INTERRUPT_14
Definition: isr.hpp:74
Interrupts::Interrupt
Interrupt
Enumerator for mapping hardware interrupt values to zero-indexed interrupts for programming ease....
Definition: isr.hpp:59
Interrupts::EXCEPTION_OVERFLOW
@ EXCEPTION_OVERFLOW
Definition: isr.hpp:30
Interrupts::INTERRUPT_11
@ INTERRUPT_11
Definition: isr.hpp:71
Interrupts::EXCEPTION_DOUBLE_FAULT
@ EXCEPTION_DOUBLE_FAULT
Definition: isr.hpp:34
Interrupts::EXCEPTION_DEVICE_UNAVAIL
@ EXCEPTION_DEVICE_UNAVAIL
Definition: isr.hpp:33
Interrupts::INTERRUPT_9
@ INTERRUPT_9
Definition: isr.hpp:69
Interrupts::INTERRUPT_13
@ INTERRUPT_13
Definition: isr.hpp:73
Interrupts::EXCEPTION_SIMD_FLOATPOINT
@ EXCEPTION_SIMD_FLOATPOINT
Definition: isr.hpp:45