Xyris  0.5
Interrupts Namespace Reference

Typedefs

typedef void(* InterruptHandler_t) (struct registers *)
 

Enumerations

enum  Exception {
  EXCEPTION_DIVIDE_BY_ZERO = 0x00, EXCEPTION_DEBUG = 0x01, EXCEPTION_NON_MASK_INT = 0x02, EXCEPTION_BREAKPOINT = 0x03,
  EXCEPTION_OVERFLOW = 0x04, EXCEPTION_BOUND_RANGE = 0x05, EXCEPTION_INVALID_OPCODE = 0x06, EXCEPTION_DEVICE_UNAVAIL = 0x07,
  EXCEPTION_DOUBLE_FAULT = 0x08, EXCEPTION_COPROCESSOR_SEG = 0x09, EXCEPTION_INVALID_TSS = 0x0A, EXCEPTION_SEGMENT_MISSING = 0x0B,
  EXCEPTION_STACK_SEG_FAULT = 0x0C, EXCEPTION_PROTECT_FAULT = 0x0D, EXCEPTION_PAGE_FAULT = 0x0E, EXCEPTION_FPU_EXCEPTION = 0x10,
  EXCEPTION_ALIGNMENT_CHECK = 0x11, EXCEPTION_MACHINE_CHECK = 0x12, EXCEPTION_SIMD_FLOATPOINT = 0x13, EXCEPTION_VIRTUALIZATION = 0x14,
  EXCEPTION_SECURITY = 0x1E
}
 
enum  Interrupt {
  INTERRUPT_0 = 0x20, INTERRUPT_1 = 0x21, INTERRUPT_2 = 0x22, INTERRUPT_3 = 0x23,
  INTERRUPT_4 = 0x24, INTERRUPT_5 = 0x35, INTERRUPT_6 = 0x26, INTERRUPT_7 = 0x27,
  INTERRUPT_8 = 0x28, INTERRUPT_9 = 0x29, INTERRUPT_10 = 0x2A, INTERRUPT_11 = 0x2B,
  INTERRUPT_12 = 0x2C, INTERRUPT_13 = 0x2D, INTERRUPT_14 = 0x2E, INTERRUPT_15 = 0x2F
}
 

Functions

void exception0 ()
 
void exception1 ()
 
void exception2 ()
 
void exception3 ()
 
void exception4 ()
 
void exception5 ()
 
void exception6 ()
 
void exception7 ()
 
void exception8 ()
 
void exception9 ()
 
void exception10 ()
 
void exception11 ()
 
void exception12 ()
 
void exception13 ()
 
void exception14 ()
 
void exception15 ()
 
void exception16 ()
 
void exception17 ()
 
void exception18 ()
 
void exception19 ()
 
void exception20 ()
 
void exception21 ()
 
void exception22 ()
 
void exception23 ()
 
void exception24 ()
 
void exception25 ()
 
void exception26 ()
 
void exception27 ()
 
void exception28 ()
 
void exception29 ()
 
void exception30 ()
 
void exception31 ()
 
void interrupt0 ()
 
void interrupt1 ()
 
void interrupt2 ()
 
void interrupt3 ()
 
void interrupt4 ()
 
void interrupt5 ()
 
void interrupt6 ()
 
void interrupt7 ()
 
void interrupt8 ()
 
void interrupt9 ()
 
void interrupt10 ()
 
void interrupt11 ()
 
void interrupt12 ()
 
void interrupt13 ()
 
void interrupt14 ()
 
void interrupt15 ()
 
void exceptionHandler (struct registers *regs)
 
void interruptHandler (struct registers *regs)
 
void init ()
 
void registerHandler (uint8_t interrupt, InterruptHandler_t handler)
 

Variables

InterruptHandler_t interruptHandlers [256]
 
void(* exceptionHandlerStubs [ARCH_EXCEPTION_NUM])(void)
 
void(* interruptHandlerStubs [ARCH_INTERRUPT_NUM])(void)
 

Typedef Documentation

◆ InterruptHandler_t

typedef void(* Interrupts::InterruptHandler_t) (struct registers *)

Definition at line 79 of file isr.hpp.

Enumeration Type Documentation

◆ Exception

Enumerator for mapping hardware exceptions to their purpose.

Enumerator
EXCEPTION_DIVIDE_BY_ZERO 
EXCEPTION_DEBUG 
EXCEPTION_NON_MASK_INT 
EXCEPTION_BREAKPOINT 
EXCEPTION_OVERFLOW 
EXCEPTION_BOUND_RANGE 
EXCEPTION_INVALID_OPCODE 
EXCEPTION_DEVICE_UNAVAIL 
EXCEPTION_DOUBLE_FAULT 
EXCEPTION_COPROCESSOR_SEG 
EXCEPTION_INVALID_TSS 
EXCEPTION_SEGMENT_MISSING 
EXCEPTION_STACK_SEG_FAULT 
EXCEPTION_PROTECT_FAULT 
EXCEPTION_PAGE_FAULT 
EXCEPTION_FPU_EXCEPTION 
EXCEPTION_ALIGNMENT_CHECK 
EXCEPTION_MACHINE_CHECK 
EXCEPTION_SIMD_FLOATPOINT 
EXCEPTION_VIRTUALIZATION 
EXCEPTION_SECURITY 

Definition at line 25 of file isr.hpp.

25  {
27  EXCEPTION_DEBUG = 0x01,
29  EXCEPTION_BREAKPOINT = 0x03,
30  EXCEPTION_OVERFLOW = 0x04,
31  EXCEPTION_BOUND_RANGE = 0x05,
36  EXCEPTION_INVALID_TSS = 0x0A,
40  EXCEPTION_PAGE_FAULT = 0x0E,
41  // Exception 0xF is reserved
47  // Exceptions 0x15-0x1D are reserved
48  EXCEPTION_SECURITY = 0x1E,
49  // Exception 0x1F is reserved
50 };

◆ Interrupt

Enumerator for mapping hardware interrupt values to zero-indexed interrupts for programming ease. Unlike the exceptions, which are defined by the CPU manufacturer, interrupts can have multiple purposes, so it would be counter-productive to name them here.

Enumerator
INTERRUPT_0 
INTERRUPT_1 
INTERRUPT_2 
INTERRUPT_3 
INTERRUPT_4 
INTERRUPT_5 
INTERRUPT_6 
INTERRUPT_7 
INTERRUPT_8 
INTERRUPT_9 
INTERRUPT_10 
INTERRUPT_11 
INTERRUPT_12 
INTERRUPT_13 
INTERRUPT_14 
INTERRUPT_15 

Definition at line 59 of file isr.hpp.

59  {
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 };

Function Documentation

◆ exception0()

void Interrupts::exception0 ( )

◆ exception1()

void Interrupts::exception1 ( )

◆ exception10()

void Interrupts::exception10 ( )

◆ exception11()

void Interrupts::exception11 ( )

◆ exception12()

void Interrupts::exception12 ( )

◆ exception13()

void Interrupts::exception13 ( )

◆ exception14()

void Interrupts::exception14 ( )

◆ exception15()

void Interrupts::exception15 ( )

◆ exception16()

void Interrupts::exception16 ( )

◆ exception17()

void Interrupts::exception17 ( )

◆ exception18()

void Interrupts::exception18 ( )

◆ exception19()

void Interrupts::exception19 ( )

◆ exception2()

void Interrupts::exception2 ( )

◆ exception20()

void Interrupts::exception20 ( )

◆ exception21()

void Interrupts::exception21 ( )

◆ exception22()

void Interrupts::exception22 ( )

◆ exception23()

void Interrupts::exception23 ( )

◆ exception24()

void Interrupts::exception24 ( )

◆ exception25()

void Interrupts::exception25 ( )

◆ exception26()

void Interrupts::exception26 ( )

◆ exception27()

void Interrupts::exception27 ( )

◆ exception28()

void Interrupts::exception28 ( )

◆ exception29()

void Interrupts::exception29 ( )

◆ exception3()

void Interrupts::exception3 ( )

◆ exception30()

void Interrupts::exception30 ( )

◆ exception31()

void Interrupts::exception31 ( )

◆ exception4()

void Interrupts::exception4 ( )

◆ exception5()

void Interrupts::exception5 ( )

◆ exception6()

void Interrupts::exception6 ( )

◆ exception7()

void Interrupts::exception7 ( )

◆ exception8()

void Interrupts::exception8 ( )

◆ exception9()

void Interrupts::exception9 ( )

◆ exceptionHandler()

void Interrupts::exceptionHandler ( struct registers regs)

CPU exception handler. Must be available for each exception stub to be able to call.

Hardware exception handler. Called by each exception handler stub.

Parameters
regsCPU registers structure
regsCPU registers structure. Includes interrupt number.

Definition at line 29 of file isr.cpp.

30 {
31  panic(regs);
32 }
+ Here is the call graph for this function:

◆ init()

void Interrupts::init ( )

Definition at line 70 of file isr.cpp.

71 {
72  // Set all of the gate addresses
73  for (int exception = 0; exception < 32; exception++) {
74  IDT::setGate(exception, (uint32_t)exceptionHandlerStubs[exception]);
75  }
76 
77  // Remap the programmable interrupt controller
78  writeByte(0x20, 0x11);
79  writeByte(0xA0, 0x11);
80  writeByte(0x21, 0x20);
81  writeByte(0xA1, 0x28);
82  writeByte(0x21, 0x04);
83  writeByte(0xA1, 0x02);
84  writeByte(0x21, 0x01);
85  writeByte(0xA1, 0x01);
86  writeByte(0x21, 0x0);
87  writeByte(0xA1, 0x0);
88 
89  // Install the interrupt requests
90  for (int interrupt = 0; interrupt < ARCH_INTERRUPT_NUM; interrupt++) {
91  IDT::setGate(32 + interrupt, (uint32_t)interruptHandlerStubs[interrupt]);
92  }
93 
94  // Load the IDT now that we've registered all of our IDT, IRQ, and ISR addresses
95  IDT::init();
96 }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ interrupt0()

void Interrupts::interrupt0 ( )

◆ interrupt1()

void Interrupts::interrupt1 ( )

◆ interrupt10()

void Interrupts::interrupt10 ( )

◆ interrupt11()

void Interrupts::interrupt11 ( )

◆ interrupt12()

void Interrupts::interrupt12 ( )

◆ interrupt13()

void Interrupts::interrupt13 ( )

◆ interrupt14()

void Interrupts::interrupt14 ( )

◆ interrupt15()

void Interrupts::interrupt15 ( )

◆ interrupt2()

void Interrupts::interrupt2 ( )

◆ interrupt3()

void Interrupts::interrupt3 ( )

◆ interrupt4()

void Interrupts::interrupt4 ( )

◆ interrupt5()

void Interrupts::interrupt5 ( )

◆ interrupt6()

void Interrupts::interrupt6 ( )

◆ interrupt7()

void Interrupts::interrupt7 ( )

◆ interrupt8()

void Interrupts::interrupt8 ( )

◆ interrupt9()

void Interrupts::interrupt9 ( )

◆ interruptHandler()

void Interrupts::interruptHandler ( struct registers regs)

CPU interrupt handler. Must be available for each interrupt stub to be able to call.

Hardware interrupt handler. Called by each interrupt handler stub.

Parameters
regsCPU registers structure
regsCPU registers structure. Includes interrupt number.

Definition at line 39 of file isr.cpp.

40 {
41  // After every interrupt we need to send an EOI to the PICs or it won't send another
42  if (regs->int_num >= 0x28) {
43  // Respond to secondard PIC
44  writeByte(0xA0, 0x20);
45  }
46 
47  // Respond to primary PIC
48  writeByte(0x20, 0x20);
49 
50  if (interruptHandlers[regs->int_num]) {
52  handler(regs);
53  }
54 }
+ Here is the call graph for this function:

◆ registerHandler()

void Interrupts::registerHandler ( uint8_t  interrupt,
InterruptHandler_t  handler 
)
Parameters
interrupt
handler

Definition at line 98 of file isr.cpp.

99 {
100  interruptHandlers[interrupt] = handler;
101 }
+ Here is the caller graph for this function:

Variable Documentation

◆ exceptionHandlerStubs

◆ interruptHandlers

InterruptHandler_t Interrupts::interruptHandlers[256]

Definition at line 20 of file isr.cpp.

◆ interruptHandlerStubs

void(* Interrupts::interruptHandlerStubs[ARCH_INTERRUPT_NUM])(void)
Interrupts::exception2
void exception2()
Interrupts::exception30
void exception30()
Interrupts::INTERRUPT_10
@ INTERRUPT_10
Definition: isr.hpp:70
Interrupts::interrupt15
void interrupt15()
Interrupts::interrupt1
void interrupt1()
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::exception24
void exception24()
Interrupts::EXCEPTION_BOUND_RANGE
@ EXCEPTION_BOUND_RANGE
Definition: isr.hpp:31
Interrupts::interrupt6
void interrupt6()
Interrupts::EXCEPTION_MACHINE_CHECK
@ EXCEPTION_MACHINE_CHECK
Definition: isr.hpp:44
Interrupts::INTERRUPT_12
@ INTERRUPT_12
Definition: isr.hpp:72
Interrupts::interrupt5
void interrupt5()
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::exception17
void exception17()
Interrupts::exception12
void exception12()
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::exception18
void exception18()
Interrupts::INTERRUPT_6
@ INTERRUPT_6
Definition: isr.hpp:66
Interrupts::exception31
void exception31()
Interrupts::EXCEPTION_DIVIDE_BY_ZERO
@ EXCEPTION_DIVIDE_BY_ZERO
Definition: isr.hpp:26
IDT::init
void init()
Calls the lidt instruction and installs the IDT onto the CPU.
Definition: idt.cpp:41
Interrupts::interrupt3
void interrupt3()
Interrupts::INTERRUPT_0
@ INTERRUPT_0
Definition: isr.hpp:60
Interrupts::EXCEPTION_FPU_EXCEPTION
@ EXCEPTION_FPU_EXCEPTION
Definition: isr.hpp:42
Interrupts::exception19
void exception19()
Interrupts::interrupt8
void interrupt8()
Interrupts::exception7
void exception7()
Interrupts::interrupt10
void interrupt10()
Interrupts::EXCEPTION_NON_MASK_INT
@ EXCEPTION_NON_MASK_INT
Definition: isr.hpp:28
Interrupts::exception16
void exception16()
Interrupts::interruptHandlerStubs
void(* interruptHandlerStubs[ARCH_INTERRUPT_NUM])(void)
Definition: isr.cpp:65
Interrupts::exception0
void exception0()
Interrupts::interrupt13
void interrupt13()
ARCH_INTERRUPT_NUM
#define ARCH_INTERRUPT_NUM
Definition: isr.hpp:16
Interrupts::exception5
void exception5()
Interrupts::exception1
void exception1()
Interrupts::interrupt4
void interrupt4()
Interrupts::INTERRUPT_8
@ INTERRUPT_8
Definition: isr.hpp:68
Interrupts::exception26
void exception26()
Interrupts::EXCEPTION_STACK_SEG_FAULT
@ EXCEPTION_STACK_SEG_FAULT
Definition: isr.hpp:38
Interrupts::exception10
void exception10()
Interrupts::interrupt12
void interrupt12()
Interrupts::exception4
void exception4()
Interrupts::interrupt0
void interrupt0()
Interrupts::exception9
void exception9()
Interrupts::EXCEPTION_COPROCESSOR_SEG
@ EXCEPTION_COPROCESSOR_SEG
Definition: isr.hpp:35
Interrupts::INTERRUPT_7
@ INTERRUPT_7
Definition: isr.hpp:67
Interrupts::exception14
void exception14()
Interrupts::EXCEPTION_INVALID_TSS
@ EXCEPTION_INVALID_TSS
Definition: isr.hpp:36
Interrupts::EXCEPTION_DEBUG
@ EXCEPTION_DEBUG
Definition: isr.hpp:27
Interrupts::exception8
void exception8()
Interrupts::EXCEPTION_SEGMENT_MISSING
@ EXCEPTION_SEGMENT_MISSING
Definition: isr.hpp:37
Interrupts::exception27
void exception27()
Interrupts::exception28
void exception28()
Interrupts::INTERRUPT_14
@ INTERRUPT_14
Definition: isr.hpp:74
Interrupts::exception13
void exception13()
Interrupts::exception21
void exception21()
Interrupts::exception15
void exception15()
Interrupts::interrupt2
void interrupt2()
IDT::setGate
void setGate(int n, uint32_t handler_addr)
Sets the handler function (via address) for a specific IDT.
Definition: idt.cpp:21
Interrupts::exception23
void exception23()
Interrupts::interrupt11
void interrupt11()
writeByte
void writeByte(uint16_t port, uint8_t data)
Writes a byte (8 bits) to the CPU bus at a given port address.
Definition: ports.cpp:19
Interrupts::exception29
void exception29()
Interrupts::EXCEPTION_OVERFLOW
@ EXCEPTION_OVERFLOW
Definition: isr.hpp:30
Interrupts::INTERRUPT_11
@ INTERRUPT_11
Definition: isr.hpp:71
registers::int_num
uint32_t int_num
Definition: regs.hpp:22
Interrupts::exception3
void exception3()
Interrupts::EXCEPTION_DOUBLE_FAULT
@ EXCEPTION_DOUBLE_FAULT
Definition: isr.hpp:34
Interrupts::exception11
void exception11()
Interrupts::exception22
void exception22()
Interrupts::exception25
void exception25()
panic
void panic(const char *msg)
Halt the system and print the provided message on the panic screen.
Definition: Panic.cpp:82
Interrupts::EXCEPTION_DEVICE_UNAVAIL
@ EXCEPTION_DEVICE_UNAVAIL
Definition: isr.hpp:33
Interrupts::exception6
void exception6()
Interrupts::interrupt14
void interrupt14()
Interrupts::exception20
void exception20()
Interrupts::INTERRUPT_9
@ INTERRUPT_9
Definition: isr.hpp:69
Interrupts::exceptionHandlerStubs
void(* exceptionHandlerStubs[ARCH_EXCEPTION_NUM])(void)
Definition: isr.cpp:58
Interrupts::interrupt7
void interrupt7()
Interrupts::INTERRUPT_13
@ INTERRUPT_13
Definition: isr.hpp:73
Interrupts::EXCEPTION_SIMD_FLOATPOINT
@ EXCEPTION_SIMD_FLOATPOINT
Definition: isr.hpp:45
Interrupts::interruptHandlers
InterruptHandler_t interruptHandlers[256]
Definition: isr.cpp:20
Interrupts::interrupt9
void interrupt9()