19#include <FreeNOS/System.h>
20#include <FreeNOS/ProcessManager.h>
38 m_intControl = &m_bcmIntr;
47 NOTICE(
"sysfreq = " << system_frequency);
51 m_timer = &m_armTimer;
52 m_timerIrq = ARMTIMER_IRQ;
53 m_armTimer.setFrequency(100);
66 bool tick, is_uart0 =
false;
89 is_uart0 = i == UART0_IRQ;
Represents the ARM64 kernel implementation.
ARM64 specific process implementation.
void setCpuState(const CPUState *cpuState)
Overwrite the saved CPU registers for this task.
bool getCoreTimerIrqStatus(Timer timer) const
Get core timer interrupt status.
virtual bool isTriggered(uint irq)
Check if an IRQ vector is set.
virtual void executeIntVector(u32 vec, CPUState *state)
Execute an interrupt handler.
IntController * m_intControl
Interrupt Controller.
Timer * m_timer
Timer device.
ProcessManager * getProcessManager()
Get process manager.
static Size copy(void *dest, const void *src, Size count)
Copy memory from one place to another.
Result schedule()
Schedule next process to run.
Process * current()
Current process running.
ProcessID getID() const
Retrieve our ID number.
Represents the Raspberry Pi kernel implementation.
Broadcom2836 m_bcm
Broadcom specific registers.
u8 m_timerIrq
Interrupt number for the timer.
ARM64Timer m_armTimer
ARM generic timer.
static void interrupt(CPUState state)
Interrupt handler routine.
RaspberryKernel(CoreInfo *info)
Constructor function.
virtual Result tick()
Process timer tick.
static Kernel * instance()
Retrieve the instance.
#define BCM_IRQ_SYSTIMERM1
Triggered when the system timer matches the C1 register.
unsigned int u32
Unsigned 32-bit number.
#define NOTICE(msg)
Output a notice message.
unsigned int uint
Unsigned integer number.
#define DEBUG(msg)
Output a debug message to standard output.
u64 read(Register reg)
Read a register from the CP15.
Contains all the CPU registers.
Per-Core information structure.