Voxia OS v0.0.1
Hobby Project Operating System Targeting x86-64
Loading...
Searching...
No Matches
timer.c
Go to the documentation of this file.
1#include "hal/apic/apic.h"
2#include <hal/cpu/core.h>
3#include "hal/cpu/interrupt.h"
4#include "init/init.h"
5#include "libk/serial.h"
6#include <type.h>
7#include <hal/acpi/hpet.h>
8#include <hal/timer/timer.h>
9
10extern void vxInitializeAPICTimer();
13
15
18 core->usleep_trigerred = true;
19 trigerred = true;
20
21 if (core->core_id > 1)
22 LOG2_DEBUG("TIMER", "usleep backend triggerred on core %d",
23 core->core_id);
24}
25
30
31void usleep(const uint64_t time_ns) {
32 if (time_ns < 1000000 || !g__scheduler__is__running) {
33 if (vxHPETIsAvailable()) {
34 vxHPETSleep(time_ns);
35 return;
36 }
37 }
38
40 core->usleep_trigerred = false;
41
42 vxAPICCreateTimer(APIC_TIMER_ONE_SHOT, time_ns / 1000, 0x24);
43
44 while (!core->usleep_trigerred)
45 __asm__ volatile("pause");
46}
47
48INIT(Timer) {
49 LOG2_INFO("TIMER", "Initializing HPET timer");
50
52
54}
55
57 counter->current = vxHPETGetMainCount();
58}
59
63
68
void vxAPICCreateTimer(uint32_t type, uint64_t freq_us, uint16_t vector)
Definition apic_timer.c:162
#define APIC_TIMER_ONE_SHOT
Definition apic.h:22
each_core_data * get_current_core_data(void)
Definition core.c:54
boolean_t vxHPETIsAvailable()
Definition hpet.c:14
void vxHPETSleep(uint64_t ns)
Definition hpet.c:86
uint64_t vxHPETGetMainCount()
Definition hpet.c:82
uint64_t vxHPETMinTickNs(void)
Definition hpet.c:36
#define ns2ms(x)
Definition hpet.h:14
uint8_t get_current_core_cpuid()
#define INIT(fn)
Definition init.h:26
boolean_t g__scheduler__is__running
Definition scheduler.c:19
void irq_register(uint8_t core, int n, void *handler, boolean_t use_default_isr, uint16_t selector, uint8_t ist, uint8_t type_attr)
Definition interrupt.c:70
#define INTERRUPT_ATTR_KERNEL
Definition interrupt.h:28
each_core_data
Definition core.h:32
#define LOG2_DEBUG(mod, fmt,...)
Definition serial.h:35
#define LOG2_INFO(mod, fmt,...)
Definition serial.h:33
uint64_t current
Definition timer.h:10
uint64_t get_timer_counter_count_ns(time_counter_t *counter)
Definition timer.c:69
void setup_timer_interrupt()
Definition timer.c:26
void vxInitializeAPICTimer()
Definition apic_timer.c:148
static void usleep_backend(interrupt_stack_frame_t *_)
Definition timer.c:16
void init_timer_counter(time_counter_t *counter)
Definition timer.c:56
void usleep(const uint64_t time_ns)
Definition timer.c:31
uint64_t get_timer_counter_count_ms(time_counter_t *counter)
Definition timer.c:64
static boolean_t trigerred
Definition timer.c:14
uint64_t calibrated_ticks_1us
uint64_t get_timer_counter_count(time_counter_t *counter)
Definition timer.c:60
uint8_t boolean_t
Definition type.h:89
unsigned long uint64_t
Definition type.h:25
int core
Definition vm_manager.h:5