PIT
This commit is contained in:
0
kernel/drivers/pic/pic.c
Normal file
0
kernel/drivers/pic/pic.c
Normal file
7
kernel/drivers/pic/pic.h
Normal file
7
kernel/drivers/pic/pic.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#define PIC1_ADDR 0x20
|
||||
#define PIC2_ADDR 0xA0
|
||||
#define PIC1_COMMAND PIC1_ADDR
|
||||
#define PIC1_DATA (PIC1_ADDR+1)
|
||||
#define PIC2_COMMAND PIC2_ADDR
|
||||
#define PIC2_DATA (PIC2_ADDR+1)
|
||||
#define PIC_EOI 0x20
|
||||
51
kernel/drivers/pic/pic_stubs.S
Normal file
51
kernel/drivers/pic/pic_stubs.S
Normal file
@@ -0,0 +1,51 @@
|
||||
#include "drivers/pic/pic.h"
|
||||
|
||||
.code32
|
||||
.global init_pic
|
||||
init_pic:
|
||||
# init command
|
||||
mov $0x11, %al
|
||||
outb %al, $PIC1_COMMAND
|
||||
outb %al, $PIC2_COMMAND
|
||||
|
||||
# vector offsets
|
||||
mov $0x20, %al
|
||||
outb %al, $PIC1_DATA
|
||||
mov $0x28, %al
|
||||
outb %al, $PIC2_DATA
|
||||
|
||||
# cascade
|
||||
mov $0x04, %al
|
||||
outb %al, $PIC1_DATA
|
||||
mov $0x02, %al
|
||||
outb %al, $PIC2_DATA
|
||||
|
||||
# env
|
||||
mov $0x01, %al
|
||||
outb %al, $PIC1_DATA
|
||||
outb %al, $PIC2_DATA
|
||||
|
||||
# mask all
|
||||
mov $0xFC, %al
|
||||
outb %al, $PIC1_DATA
|
||||
mov $0xFF, %al
|
||||
outb %al, $PIC2_DATA
|
||||
|
||||
ret
|
||||
|
||||
.global io_wait
|
||||
io_wait:
|
||||
ret
|
||||
|
||||
.global send_eoi_master
|
||||
send_eoi_master:
|
||||
mov $0x20, %al
|
||||
outb %al, $PIC1_COMMAND
|
||||
ret
|
||||
|
||||
.global send_eoi_slave
|
||||
send_eoi_slave:
|
||||
mov $0x20, %al
|
||||
outb %al, $PIC2_COMMAND
|
||||
call send_eoi_master
|
||||
ret
|
||||
Reference in New Issue
Block a user