#pragma once #include #include 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);