fix: changed phyisical timer to virtual timer
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
#include <Types.h>
|
#include <Types.h>
|
||||||
|
|
||||||
static const UInt64 kTimerFrequency = 1000; // 1ms
|
static const UInt64 kTimerFrequency = 1000; // 1ms
|
||||||
static const UInt8 kTimerIRQ = 30;
|
static const UInt8 kTimerIRQ = 27;
|
||||||
|
|
||||||
void TimerInitialize();
|
void TimerInitialize();
|
||||||
void TimerReset(UInt64 interval);
|
void TimerReset(UInt64 interval);
|
||||||
@@ -53,11 +53,13 @@ void GICCWriteEOIR(UInt32 irqID) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GICDispatch(ExceptionsType type) {
|
void GICDispatch(ExceptionsType type) {
|
||||||
|
OSLog("GICDispatch: %d\n", type);
|
||||||
if (type != ExceptionsIRQEl1h && type != ExceptionsIRQEl064) return;
|
if (type != ExceptionsIRQEl1h && type != ExceptionsIRQEl064) return;
|
||||||
UInt32 irqID = GICCReadIAR() & 0x3FF;
|
UInt32 irqID = GICCReadIAR() & 0x3FF;
|
||||||
if (irqID == 1023) return; // spurious interrupt
|
if (irqID == 1023) return; // spurious interrupt
|
||||||
|
|
||||||
if (irqID == 30) {
|
if (irqID == kTimerIRQ) {
|
||||||
|
OSLog("Timer IRQ\n");
|
||||||
TimerReset(kTimerFrequency);
|
TimerReset(kTimerFrequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,6 @@ void TimerInitialize() {
|
|||||||
void TimerReset(UInt64 interval) {
|
void TimerReset(UInt64 interval) {
|
||||||
UInt64 frequency;
|
UInt64 frequency;
|
||||||
__asm__ volatile ("mrs %0, cntfrq_el0" : "=r"(frequency));
|
__asm__ volatile ("mrs %0, cntfrq_el0" : "=r"(frequency));
|
||||||
__asm__ volatile ("msr cntp_tval_el0, %0" :: "r"(frequency /interval));
|
__asm__ volatile ("msr cntv_tval_el0, %0" :: "r"(frequency /interval));
|
||||||
__asm__ volatile ("msr cntp_ctl_el0, %0" :: "r" (1));
|
__asm__ volatile ("msr cntv_ctl_el0, %0" :: "r" (1));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user