kernel: initial interrupt abstraction implementation

This commit is contained in:
Matheus
2023-04-08 20:13:51 -03:00
parent 1555becce5
commit a9f490b431
3 changed files with 76 additions and 1 deletions
+26
View File
@@ -0,0 +1,26 @@
#ifndef _INTERRUPT_H
#define _INTERRUPT_H
#include <stdbool.h>
#ifdef __x86_64__
#define MAX_ISR_COUNT 256
#else
#error Unsupported architecture!
#endif
struct _isr_t;
typedef struct _isr_t {
void (*func)(struct _isr_t *self); // TODO pass register context as argument as well.
void (*eoi)(struct _isr_t *self);
long id;
long priority;
bool pending;
} isr_t;
void interrupt_register(int vector, void (*func)(isr_t *self), void (*eoi)(isr_t *self), long priority); // TODO pass register context as well.
isr_t *interrupt_allocate(void (*func)(isr_t *self), void (*eoi)(isr_t *self), long priority); // TODO pass register context as well.
void interrupt_raiseipl(long newipl);
void interrupt_loweripl(long newipl);
#endif