summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-08 15:01:50 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-08 15:01:50 +0200
commitce832186460563db9cdfb59bd438f242600c0edf (patch)
treefa0b716951b089a367446a5e9b6735f42f0ebd2f
parent3b01fe6cbe94a4f0edaca0e07456bd0589d648d9 (diff)
downloadabaos-ce832186460563db9cdfb59bd438f242600c0edf.tar.gz
abaos-ce832186460563db9cdfb59bd438f242600c0edf.tar.bz2
forgot to set the backpointer to the interrupt manager (interrupts_t) in the
interrupt_handler_init_void (clang and O1 crashed it while initializing the empty interrupt vectors)
-rw-r--r--src/hardware/interrupts.c6
-rw-r--r--src/hardware/interrupts.h2
2 files changed, 5 insertions, 3 deletions
diff --git a/src/hardware/interrupts.c b/src/hardware/interrupts.c
index 4ca0f14..bec0896 100644
--- a/src/hardware/interrupts.c
+++ b/src/hardware/interrupts.c
@@ -53,9 +53,11 @@
// OCW2
#define OCW2_EOI 0x20 // non-specific End Of Interrupt
-void interrupt_handler_init_void( interrupt_handler_t *handler )
+void interrupt_handler_init_void( interrupt_handler_t *handler, struct interrupt_t *interrupt )
{
memset( handler, 0, sizeof( interrupt_handler_t ) );
+
+ handler->interrupt = interrupt;
}
void interrupt_handler_init( interrupt_handler_t *handler, uint8_t interrupt_no, struct interrupt_t *interrupt, interrupt_handler_func_t handle, void *driver )
@@ -77,7 +79,7 @@ void interrupts_init( interrupt_t *interrupt, uint16_t gdt_code_segment_selector
memset( interrupt, 0, sizeof( interrupt_t ) );
interrupt_handler_t empty_interrupt_handler;
- interrupt_handler_init_void( &empty_interrupt_handler );
+ interrupt_handler_init_void( &empty_interrupt_handler, interrupt );
interrupt->task_manager = task_manager;
diff --git a/src/hardware/interrupts.h b/src/hardware/interrupts.h
index 767bb2e..c325d4f 100644
--- a/src/hardware/interrupts.h
+++ b/src/hardware/interrupts.h
@@ -63,7 +63,7 @@ typedef struct interrupt_handler_t {
void *driver;
} interrupt_handler_t;
-void interrupt_handler_init_void( interrupt_handler_t *handler );
+void interrupt_handler_init_void( interrupt_handler_t *handler, struct interrupt_t *interrupt );
void interrupt_handler_init( interrupt_handler_t *handler, uint8_t interrupt_no, struct interrupt_t *interrupt, interrupt_handler_func_t handle, void *driver );
typedef struct interrupt_t {