Files
ksOS/Kernel/Include/Arch/GIC.h
T
2026-04-29 17:00:11 +04:00

28 lines
1017 B
C

#pragma once
#include <Types.h>
#include <Arch/IO.h>
#include <Arch/Exceptions.h>
enum {
kGICDBaseAddress = 0x08000000,
kGICCBaseAddress = kGICDBaseAddress + 0x10000,
// GIC Distributor (GICD), offsets from GICD base
kGICDCTLR = 0x000, // control
kGICDTYPER = 0x004, // controller type
kGICDISENABLER = 0x100, // interrupt set-enable
kGICDICENABLER = 0x180, // interrupt clear-enable
kGICDICPENDR = 0x280, // interrupt clear-pending
kGICDIPRIORITYR = 0x400, // interrupt priority
kGICDITARGETSR = 0x800, // interrupt processor targets
// GIC CPU interface (GICC), offsets from CPU interface base
kGICCCTLR = 0x000, // CPU interface control
kGICCPMR = 0x004, // priority mask
kGICCIAR = 0x00C, // interrupt acknowledge
kGICCEOIR = 0x010, // end of interrupt
};
void GICInitialize(Pointer gicdVirtBase, Pointer giccVirtBase);
void GICEnableInterrupt(UInt32 irqID);
Address GICDispatch(ExceptionsContext* frame, ExceptionsType type);