feat(pit): add pit isr, empty handler and unmasked pit irq
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
This commit is contained in:
parent
cf020eae84
commit
5064efa101
@ -36,6 +36,7 @@ OBJS = \
|
|||||||
events/isr.o \
|
events/isr.o \
|
||||||
events/pic/pic.o \
|
events/pic/pic.o \
|
||||||
events/pic/keyboard.o \
|
events/pic/keyboard.o \
|
||||||
|
events/pic/pit.o \
|
||||||
utils/ring_buffer.o
|
utils/ring_buffer.o
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "pic/pic.h"
|
#include "pic/pic.h"
|
||||||
#include "pic/keyboard.h"
|
#include "pic/keyboard.h"
|
||||||
|
#include "pic/pit.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
|
|
||||||
static struct idt idt = { 0 };
|
static struct idt idt = { 0 };
|
||||||
@ -39,8 +40,8 @@ static struct idt_entry_descriptor idt_entries_descriptors[IDT_NB_ENTRIES] = {
|
|||||||
{0, {0, 0, 0}, 0}, // 29
|
{0, {0, 0, 0}, 0}, // 29
|
||||||
{0, {0, 0, 0}, 0}, // 30
|
{0, {0, 0, 0}, 0}, // 30
|
||||||
{0, {0, 0, 0}, 0}, // 31
|
{0, {0, 0, 0}, 0}, // 31
|
||||||
{0, {0, 0, 0}, 0}, // 32
|
{(uint32_t)&isr_pit, KERNEL_CS_SEGMENT_SELECTOR, INTERRUPT_TYPE}, // 32
|
||||||
{(uint32_t)&isr_keyboard, KERNEL_CS_SEGMENT_SELECTOR, INTERRUPT_TYPE}, // 33
|
{(uint32_t)&isr_keyboard, KERNEL_CS_SEGMENT_SELECTOR, INTERRUPT_TYPE} // 33
|
||||||
};
|
};
|
||||||
|
|
||||||
void interrupt_handler(struct isr_param *isr_param)
|
void interrupt_handler(struct isr_param *isr_param)
|
||||||
@ -49,6 +50,9 @@ void interrupt_handler(struct isr_param *isr_param)
|
|||||||
|
|
||||||
switch (isr_param->int_vector)
|
switch (isr_param->int_vector)
|
||||||
{
|
{
|
||||||
|
case PIT_INT_VECTOR:
|
||||||
|
pit_handler();
|
||||||
|
break;
|
||||||
case KEYBOARD_INT_VECTOR:
|
case KEYBOARD_INT_VECTOR:
|
||||||
keyboard_handler();
|
keyboard_handler();
|
||||||
break;
|
break;
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define INTERRUPT_TYPE 0x6
|
#define INTERRUPT_TYPE 0x6
|
||||||
#define TRAP_TYPE 0x7
|
#define TRAP_TYPE 0x7
|
||||||
|
|
||||||
|
#define PIT_INT_VECTOR 32
|
||||||
#define KEYBOARD_INT_VECTOR 33
|
#define KEYBOARD_INT_VECTOR 33
|
||||||
|
|
||||||
struct idt_entry
|
struct idt_entry
|
||||||
|
@ -44,4 +44,5 @@ isr_callback_no_error(isr_machine_check, 18)
|
|||||||
isr_callback_no_error(isr_simd_floating_point_exception, 19)
|
isr_callback_no_error(isr_simd_floating_point_exception, 19)
|
||||||
isr_callback_no_error(isr_virtualization_exception, 20)
|
isr_callback_no_error(isr_virtualization_exception, 20)
|
||||||
isr_callback_error(isr_control_protection_exception, 21)
|
isr_callback_error(isr_control_protection_exception, 21)
|
||||||
|
isr_callback_no_error(isr_pit, 32)
|
||||||
isr_callback_no_error(isr_keyboard, 33)
|
isr_callback_no_error(isr_keyboard, 33)
|
||||||
|
@ -28,6 +28,7 @@ void isr_machine_check(void);
|
|||||||
void isr_simd_floating_point_exception(void);
|
void isr_simd_floating_point_exception(void);
|
||||||
void isr_virtualization_exception(void);
|
void isr_virtualization_exception(void);
|
||||||
void isr_control_protection_exception(void);
|
void isr_control_protection_exception(void);
|
||||||
|
void isr_pit(void);
|
||||||
void isr_keyboard(void);
|
void isr_keyboard(void);
|
||||||
|
|
||||||
#endif /* !ISR_H */
|
#endif /* !ISR_H */
|
||||||
|
@ -31,7 +31,8 @@ static void send_icw4(void)
|
|||||||
|
|
||||||
static void mask_irqs(void)
|
static void mask_irqs(void)
|
||||||
{
|
{
|
||||||
outb(MASTER_PIC_B, 0xff ^ 0x2);
|
outb(MASTER_PIC_B, IRQ2_PIN | IRQ3_PIN | IRQ4_PIN | IRQ5_PIN | IRQ6_PIN
|
||||||
|
| IRQ7_PIN);
|
||||||
outb(SLAVE_PIC_B, 0xff);
|
outb(SLAVE_PIC_B, 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,15 @@
|
|||||||
|
|
||||||
#define ICW1 0x11
|
#define ICW1 0x11
|
||||||
|
|
||||||
|
#define IRQ0_PIN 0x1
|
||||||
|
#define IRQ1_PIN 0x2
|
||||||
|
#define IRQ2_PIN 0x4
|
||||||
|
#define IRQ3_PIN 0x8
|
||||||
|
#define IRQ4_PIN 0x10
|
||||||
|
#define IRQ5_PIN 0x20
|
||||||
|
#define IRQ6_PIN 0x40
|
||||||
|
#define IRQ7_PIN 0x80
|
||||||
|
|
||||||
void init_pic(void);
|
void init_pic(void);
|
||||||
void acknowledge(uint32_t int_vector);
|
void acknowledge(uint32_t int_vector);
|
||||||
|
|
||||||
|
9
k/events/pic/pit.c
Normal file
9
k/events/pic/pit.c
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#include "pit.h"
|
||||||
|
|
||||||
|
void pit_handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long gettick(void)
|
||||||
|
{
|
||||||
|
}
|
12
k/events/pic/pit.h
Normal file
12
k/events/pic/pit.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef PIT_H
|
||||||
|
#define PIT_H
|
||||||
|
|
||||||
|
#define PIT_COUNTER_0 0x40
|
||||||
|
#define PIT_COUNTER_1 0x41
|
||||||
|
#define PIT_COUNTER_2 0x42
|
||||||
|
#define PIT_CONTROL_REGISTER 0x43
|
||||||
|
|
||||||
|
void pit_handler(void);
|
||||||
|
unsigned long gettick(void);
|
||||||
|
|
||||||
|
#endif /* !PIT_H */
|
2
k/k.c
2
k/k.c
@ -53,8 +53,6 @@ void k_main(unsigned long magic, multiboot_info_t *info)
|
|||||||
:);
|
:);
|
||||||
printf("bonjour\r\n");
|
printf("bonjour\r\n");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (unsigned i = 0; ; ) {
|
for (unsigned i = 0; ; ) {
|
||||||
*fb = star[i++ % 4];
|
*fb = star[i++ % 4];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user