1
0
Fork 0
mirror of https://github.com/tailix/kernel.git synced 2025-02-10 15:36:37 -05:00

Add file "arch/interrupt.h"

This commit is contained in:
Braiden Vasco 2017-11-05 12:44:57 +00:00
parent baf6bfd6bb
commit be7b16afc0
5 changed files with 19 additions and 20 deletions

View file

@ -1,13 +1,7 @@
#include "interrupt.h"
#include "config.h"
#include "logger.h"
struct IsrRegisters {
unsigned int ds; // Data segment selector
unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha.
unsigned int int_no, err_code; // Interrupt number and error code (if applicable)
unsigned int eip, cs, eflags, useresp, ss; // Pushed by the processor automatically.
};
static const char *const messages[] = {
"Unhandled protected-mode exception: 0x0",
"Unhandled protected-mode exception: 0x1",

View file

@ -1,16 +1,10 @@
#include "hwint.h"
#include "interrupt.h"
#include "config.h"
#include "asm.h"
#include "logger.h"
struct IsrRegisters {
unsigned int ds; // Data segment selector
unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha.
unsigned int int_no, err_code; // Interrupt number and error code (if applicable)
unsigned int eip, cs, eflags, useresp, ss; // Pushed by the processor automatically.
};
static const char *const messages[] = {
"Unhandled hardware interrupt: 0",
"Unhandled hardware interrupt: 1",

11
arch/interrupt.h Normal file
View file

@ -0,0 +1,11 @@
#ifndef KERNELMQ_INCLUDED_INTERRUPT
#define KERNELMQ_INCLUDED_INTERRUPT 1
struct IsrRegisters {
unsigned int ds; // Data segment selector
unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha.
unsigned int int_no, err_code; // Interrupt number and error code (if applicable)
unsigned int eip, cs, eflags, useresp, ss; // Pushed by the processor automatically.
};
#endif

View file

@ -7,6 +7,9 @@
syscall_gate:
cli
push byte 0
push byte INT_SYSCALL
pusha ; Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax
mov ax, ds ; Lower 16-bits of eax = ds.
@ -28,5 +31,7 @@ syscall_gate:
popa ; Pops edi,esi,ebp...
add esp, 8 ; Cleans up the pushed error code and pushed ISR number
sti
iret ; pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP

View file

@ -1,11 +1,6 @@
#include "interrupt.h"
#include "kprintf.h"
struct IsrRegisters {
unsigned int ds; // Data segment selector
unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax; // Pushed by pusha.
unsigned int eip, cs, eflags, useresp, ss; // Pushed by the processor automatically.
};
void syscall_handler(struct IsrRegisters regs)
{
const unsigned int id = regs.eax;