GitOS
Operating system exercise
Loading...
Searching...
No Matches
idt.c File Reference
#include "idt.h"
#include <stdint.h>
#include "common/status.h"
#include "memory/memory.h"
#include "drivers/pic/pic.h"
#include "task/task.h"
#include "kernel.h"

Functions

void idt_Load ()
 Loads Interrupt Descriptor Table.
 
void idt_SetDescriptor (int int_no, void *address)
 Fills entry in IDT for specified Interrupt number Use before idt_Load()
 
int idt_SetHandler (int int_no, ISR_HANDLER handler)
 Sets handler for given interrupt number.
 
void idt_Init ()
 Initializes memory for IDT struct Sets default for all interrupts.
 
void idt_Handler (int int_no, struct interrupt_frame *frame)
 Handles interrupt (called by ISR)
 

Variables

struct idt_desc idt_descriptors [MAX_INTERRUPTS]
 
struct idtr_desc idtr_descriptor
 
void * interrupt_pointer_table [MAX_INTERRUPTS]
 
ISR_HANDLER interrupt_handlers [MAX_INTERRUPTS]
 
const char * idt_InterruptLayoutString [32]
 

Function Documentation

◆ idt_Handler()

void idt_Handler ( int  int_no,
struct interrupt_frame frame 
)

Handles interrupt (called by ISR)

Parameters
int_noInterrupt number
frameInterrupt frame

References interrupt_handlers, kernel_page(), task_current_save_state(), and task_page().

◆ idt_Init()

void idt_Init ( )

Initializes memory for IDT struct Sets default for all interrupts.

References idtr_desc::base, idt_descriptors, idt_SetDescriptor(), idtr_descriptor, interrupt_pointer_table, idtr_desc::limit, MAX_INTERRUPTS, and memset().

◆ idt_Load()

void idt_Load ( )

Loads Interrupt Descriptor Table.

References idtr_descriptor.

◆ idt_SetDescriptor()

void idt_SetDescriptor ( int  int_no,
void *  address 
)

Fills entry in IDT for specified Interrupt number Use before idt_Load()

Parameters
int_noInterrupt number
addressPointer to interrupt handler

References idt_descriptors, idt_desc::offset_high, idt_desc::offset_low, idt_desc::selector, idt_desc::type_attr, and idt_desc::zero.

◆ idt_SetHandler()

int idt_SetHandler ( int  int_no,
ISR_HANDLER  handler 
)

Sets handler for given interrupt number.

Parameters
int_noInterrupt number
handlerHandler function
Returns
int Error code

References ALL_OK, EINVARG, interrupt_handlers, and MAX_INTERRUPTS.

Variable Documentation

◆ idt_descriptors

struct idt_desc idt_descriptors[MAX_INTERRUPTS]

◆ idt_InterruptLayoutString

const char* idt_InterruptLayoutString[32]

◆ idtr_descriptor

struct idtr_desc idtr_descriptor

◆ interrupt_handlers

ISR_HANDLER interrupt_handlers[MAX_INTERRUPTS]

◆ interrupt_pointer_table

void* interrupt_pointer_table[MAX_INTERRUPTS]
extern