diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2017-03-06 02:52:05 +0100 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2017-03-06 02:52:05 +0100 |
commit | 05b9ca73793047e795e46a2ae13db02c34b8a7c3 (patch) | |
tree | 5ab672db87c57cbe01662547e7733e71aa748743 /include | |
parent | 28301499381cb541eec4eb99f61e3d1a193c5a2d (diff) | |
download | garmos-05b9ca73793047e795e46a2ae13db02c34b8a7c3.tar.gz garmos-05b9ca73793047e795e46a2ae13db02c34b8a7c3.tar.bz2 |
idt: add interruption handling
The Interruption Descriptor Table (IDT) is implemented in idt.{c,h} as
part of the core, but the setup and activation of the IDT and the
registration of specific interruption request handlers is part of
arch.{c,h}. The request handlers are implemented in idt.s and
delegate to kernel_handle_interrupt.
Diffstat (limited to 'include')
-rw-r--r-- | include/garmos/arch.h | 15 | ||||
-rw-r--r-- | include/garmos/idt.h | 25 |
2 files changed, 40 insertions, 0 deletions
diff --git a/include/garmos/arch.h b/include/garmos/arch.h index 6d0f54d..ff1627e 100644 --- a/include/garmos/arch.h +++ b/include/garmos/arch.h @@ -44,4 +44,19 @@ struct gdtp { } __attribute__((packed)); void gdtset(struct gdtp gdtp); +/* interrupt description table initialization and activation */ +struct idtp { + uint16_t limit; + void *pointer; +} __attribute((packed)); +void idtset(struct idtp idtp); +void idtact(void); + +/* interrupt handler for ignores and a list of handlers to register */ +extern uint8_t irqnos[]; +extern uint32_t irqhdls[]; +void irqign(void); +void irqhdl0x00(void); +void irqhdl0x01(void); + #endif diff --git a/include/garmos/idt.h b/include/garmos/idt.h new file mode 100644 index 0000000..05fb1bd --- /dev/null +++ b/include/garmos/idt.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Robin Krahl <robin.krahl@ireas.org> + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + */ + +#ifndef GARMOS_IDT_H +#define GARMOS_IDT_H + +#include <garmos/types.h> + +void idt_init(void); +void idt_activate(void); + +uint32_t idt_handle_interrupt(uint8_t no, uint32_t esp); + +#endif |