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:
Julien CLEMENT 2021-07-26 11:17:52 +02:00
parent cf020eae84
commit 5064efa101
10 changed files with 42 additions and 5 deletions

@ -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

@ -0,0 +1,9 @@
#include "pit.h"
void pit_handler(void)
{
}
unsigned long gettick(void)
{
}

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

@ -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];
} }