|
POK(kernelpart)
|
#include <types.h>Go to the source code of this file.
Data Structures | |
| struct | interrupt_frame |
Defines | |
| #define | INTERRUPT_HANDLER(name) |
| #define | INTERRUPT_HANDLER_errorcode(name) |
| #define | INTERRUPT_HANDLER_syscall(name) |
Functions | |
| void | update_tss (interrupt_frame *frame) |
Variables | |
| uint32_t | pok_tss |
| #define INTERRUPT_HANDLER | ( | name | ) |
void name (void); \ void name##_handler(interrupt_frame* frame); \ asm ( \ ".global "#name " \n" \ "\t.type "#name",@function \n" \ #name": \n" \ "cli \n" \ "subl $4, %esp \n" \ "pusha \n" \ "push %ds \n" \ "push %es \n" \ "push %esp \n" \ "mov $0x10, %ax \n" \ "mov %ax, %ds \n" \ "mov %ax, %es \n" \ "call " #name"_handler \n" \ "call update_tss \n" \ "addl $4, %esp \n" \ "pop %es \n" \ "pop %ds \n" \ "popa \n" \ "addl $4, %esp \n" \ "sti \n" \ "iret \n" \ ); \ void name##_handler(interrupt_frame* frame)
Definition at line 53 of file interrupt.h.
| #define INTERRUPT_HANDLER_errorcode | ( | name | ) |
void name (void); \ void name##_handler(interrupt_frame* frame); \ asm ( \ ".global "#name " \n" \ "\t.type "#name",@function \n" \ #name": \n" \ "cli \n" \ "pusha \n" \ "push %ds \n" \ "push %es \n" \ "push %esp \n" \ "mov $0x10, %ax \n" \ "mov %ax, %ds \n" \ "mov %ax, %es \n" \ "call " #name"_handler \n" \ "call update_tss \n" \ "addl $4, %esp \n" \ "pop %es \n" \ "pop %ds \n" \ "popa \n" \ "addl $4, %esp \n" \ "sti \n" \ "iret \n" \ ); \ void name##_handler(interrupt_frame* frame)
Definition at line 81 of file interrupt.h.
| #define INTERRUPT_HANDLER_syscall | ( | name | ) |
int name (void); \ void name##_handler(interrupt_frame* frame); \ asm ( \ ".global "#name " \n" \ "\t.type "#name",@function \n" \ #name": \n" \ "cli \n" \ "subl $4, %esp \n" \ "pusha \n" \ "push %ds \n" \ "push %es \n" \ "push %esp \n" \ "mov $0x10, %ax \n" \ "mov %ax, %ds \n" \ "mov %ax, %es \n" \ "call " #name"_handler \n" \ "movl %eax, 40(%esp) \n" /* return value */ \ "call update_tss \n" \ "addl $4, %esp \n" \ "pop %es \n" \ "pop %ds \n" \ "popa \n" \ "addl $4, %esp \n" \ "sti \n" \ "iret \n" \ ); \ void name##_handler(interrupt_frame* frame)
Definition at line 108 of file interrupt.h.
| void update_tss | ( | interrupt_frame * | frame | ) |
Definition at line 20 of file interrupt.c.
{
uint32_t* esp0 = (&pok_tss) + 1;
if ((frame->cs & 0xffff) != 0x8)
{
*esp0 = (uint32_t)frame + sizeof (interrupt_frame);
}
}