Files

33 lines
777 B
C
Raw Permalink Normal View History

2024-03-31 16:06:11 +00:00
#include "arch.h"
#include "thread.h"
#include "futex.h"
2024-04-09 16:07:36 +00:00
#include <asm/arm_local_reg.h>
#include <arm_gicv2.h>
#include <sche_arch.h>
#include <timer.h>
2024-04-27 03:47:45 +00:00
#include <pre_cpu.h>
static PER_CPU(umword_t, sys_tick_cnt);
2024-03-31 16:06:11 +00:00
umword_t sys_tick_cnt_get(void)
{
2024-04-27 03:47:45 +00:00
return (*((umword_t *)pre_cpu_get_var_cpu(0, &sys_tick_cnt)));
2024-03-31 16:06:11 +00:00
}
umword_t sys_tick_cnt_get_current(void)
{
2024-04-09 16:07:36 +00:00
return (*((umword_t *)pre_cpu_get_current_cpu_var(&sys_tick_cnt)));
}
2024-04-09 16:07:36 +00:00
void systick_handler(irq_entry_t *irq)
2024-03-31 16:06:11 +00:00
{
2024-04-27 03:47:45 +00:00
mword_t status = cpulock_lock();
(*((umword_t *)pre_cpu_get_current_cpu_var(&sys_tick_cnt)))++;
2024-03-31 16:06:11 +00:00
thread_timeout_check(1);
futex_timeout_times_tick();
2024-04-27 03:47:45 +00:00
gic2_eoi_irq(arm_gicv2_get_global(), SYSTICK_INTR_NO);
handle_timer_irq();
thread_sched(TRUE);
cpulock_set(status);
2024-03-31 16:06:11 +00:00
}