81 lines
1.7 KiB
C
81 lines
1.7 KiB
C
#include <exec/hal.h>
|
|
#include <platform/i8259.h>
|
|
#include <platform/i8253.h>
|
|
#include <platform/x86.h>
|
|
#include <platform/bdadetect.h>
|
|
#include <platform/pcidetect.h>
|
|
|
|
void HalEnableInterrupts(void) {
|
|
X86_EnableInterrupts();
|
|
}
|
|
|
|
void HalDisableInterrupts(void) {
|
|
X86_DisableInterrupts();
|
|
}
|
|
|
|
int HalCheckInterrupts(void) {
|
|
return X86_CheckInterrupts();
|
|
}
|
|
|
|
void HalWriteIO8(enum HalAddressSpace space, uintptr_t port, uint8_t value) {
|
|
X86_WriteIO8(space, port, value);
|
|
}
|
|
|
|
void HalWriteIO16(enum HalAddressSpace space, uintptr_t port, uint16_t value) {
|
|
X86_WriteIO16(space, port, value);
|
|
}
|
|
|
|
void HalWriteIO32(enum HalAddressSpace space, uintptr_t port, uint32_t value) {
|
|
X86_WriteIO32(space, port, value);
|
|
}
|
|
|
|
uint8_t HalReadIO8(enum HalAddressSpace space, uintptr_t port) {
|
|
return X86_ReadIO8(space, port);
|
|
}
|
|
|
|
uint16_t HalReadIO16(enum HalAddressSpace space, uintptr_t port) {
|
|
return X86_ReadIO16(space, port);
|
|
}
|
|
|
|
uint32_t HalReadIO32(enum HalAddressSpace space, uintptr_t port) {
|
|
return X86_ReadIO32(space, port);
|
|
}
|
|
|
|
void HalMaskInterrupt(int irq) {
|
|
I8259_Mask(irq);
|
|
}
|
|
|
|
void HalUnmaskInterrupt(int irq) {
|
|
I8259_Unmask(irq);
|
|
}
|
|
|
|
void HalAcknowledgeInterrupt(int irq) {
|
|
I8259_Acknowledge(irq);
|
|
}
|
|
|
|
void HalSetTimerFrequency(uint32_t frequency) {
|
|
I8253_SetFrequency(0, frequency);
|
|
}
|
|
|
|
void HalInit(void) {
|
|
IDT32_Initialize();
|
|
I8259_Init(0x20, 0xA0);
|
|
I8253_Init(0x40);
|
|
}
|
|
|
|
void HalDetect(void) {
|
|
BDA_Detect();
|
|
PCI_Detect(AS_IO, 0xCF8, 0xCFC);
|
|
}
|
|
|
|
uint16_t HalGetIRQCount(void) {
|
|
return 16;
|
|
}
|
|
|
|
void HalPrintChar(char c) {
|
|
HalWriteIO8(AS_IO, 0xE9, (uint8_t)c);
|
|
}
|
|
|
|
void HalSetupTask(struct Task *task, uintptr_t initial_pc, uintptr_t final_pc) {
|
|
X86_SetupTask(task, initial_pc, final_pc);
|
|
} |