feat: added basic ACPI support using LAI
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
//
|
||||
// Created by rick on 22-08-21.
|
||||
//
|
||||
#include <stdbool.h>
|
||||
#include <myke/cpu/pic.h>
|
||||
#include <myke/drivers/ports.h>
|
||||
|
||||
@@ -17,15 +18,17 @@
|
||||
#define ICW4_BUF_MASTER 0x0C /* Buffered mode/master */
|
||||
#define ICW4_SFNM 0x10 /* Special fully nested (not) */
|
||||
|
||||
void pic_init() {
|
||||
#define PIC_END_OF_INTERRUPT 0x20
|
||||
|
||||
void pic_init(uint8_t isr_offset) {
|
||||
// init both master and slave pic's
|
||||
port_byte_out(PORT_PIC_MASTER_COMMAND, ICW1_INIT | ICW1_ICW4);
|
||||
port_byte_out(PORT_PIC_SLAVE_COMMAND, ICW1_INIT | ICW1_ICW4);
|
||||
|
||||
// master with ICW4 offset 20, Slave on IRQ2, 8086 mode,
|
||||
// master with ICW4 offset isr_offset, Slave on IRQ2, 8086 mode,
|
||||
// ICW2
|
||||
port_byte_out(PORT_PIC_MASTER_DATA, 0x20); // offset master
|
||||
port_byte_out(PORT_PIC_SLAVE_DATA, 0x28); // offset slave
|
||||
port_byte_out(PORT_PIC_MASTER_DATA, isr_offset); // offset master
|
||||
port_byte_out(PORT_PIC_SLAVE_DATA, isr_offset + 8); // offset slave
|
||||
// ICW3
|
||||
port_byte_out(PORT_PIC_MASTER_DATA, 0x04); // slave PIC at IRQ2
|
||||
port_byte_out(PORT_PIC_SLAVE_DATA, 0x02); // cascade identity
|
||||
@@ -39,5 +42,10 @@ void pic_init() {
|
||||
|
||||
void pic_set_mask(uint16_t mask) {
|
||||
port_byte_out(PORT_PIC_MASTER_DATA, mask & 0xFF);
|
||||
port_byte_out(PORT_PIC_SLAVE_DATA, mask << 8);
|
||||
port_byte_out(PORT_PIC_SLAVE_DATA, mask >> 8);
|
||||
}
|
||||
|
||||
void pic_eoi(bool slave) {
|
||||
if (slave) port_byte_out(PORT_PIC_SLAVE_COMMAND, PIC_END_OF_INTERRUPT); /* slave */
|
||||
port_byte_out(PORT_PIC_MASTER_COMMAND, PIC_END_OF_INTERRUPT); /* master */
|
||||
}
|
||||
Reference in New Issue
Block a user