28 lines
1017 B
C
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); |