1/*
2 * Copyright (C) 2020-2022 The opuntiaOS Project Authors.
3 * + Contributed by Nikita Melekhin <nimelehin@gmail.com>
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#ifndef _KERNEL_TIME_TIME_MANAGER_H
10#define _KERNEL_TIME_TIME_MANAGER_H
11
12#include <drivers/generic/timer.h>
13#include <libkern/atomic.h>
14#include <libkern/bits/time.h>
15#include <libkern/types.h>
16#include <platform/generic/cpu.h>
17
18extern time_t ticks_since_boot;
19extern time_t ticks_since_second;
20
21bool timeman_is_leap_year(uint32_t year);
22uint32_t timeman_days_in_years_since_epoch(uint32_t year);
23uint32_t timeman_days_in_months_since_soy(uint8_t month, uint32_t year);
24time_t timeman_to_seconds_since_epoch(uint8_t secs, uint8_t mins, uint8_t hrs, uint8_t day, uint8_t month, uint32_t year);
25
26int timeman_setup();
27void timeman_timer_tick();
28
29time_t timeman_now();
30time_t timeman_seconds_since_boot();
31time_t timeman_get_ticks_from_last_second();
32static inline time_t timeman_ticks_per_second() { return TIMER_TICKS_PER_SECOND; };
33static inline time_t timeman_ticks_since_boot() { return THIS_CPU->stat_ticks_since_boot; };
34
35#endif /* _KERNEL_TIME_TIME_MANAGER_H */