Files
net/platform/pchal.c
2025-12-20 18:49:21 -08:00

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);
}