mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-05 13:42:07 +00:00
MISRA C required that return value should be used, missing for it should add "(void)" prefix before the function call. Some function can be declared without return value to avoid this problem. Signed-off-by: Huihuang Shi <huihuang.shi@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
/*
|
|
* Copyright (C) 2018 Intel Corporation. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef TIMER_H
|
|
#define TIMER_H
|
|
|
|
typedef int (*timer_handle_t)(void *);
|
|
|
|
enum tick_mode {
|
|
TICK_MODE_ONESHOT = 0,
|
|
TICK_MODE_PERIODIC,
|
|
};
|
|
|
|
struct per_cpu_timers {
|
|
struct list_head timer_list; /* it's for runtime active timer list */
|
|
};
|
|
|
|
struct timer {
|
|
struct list_head node; /* link all timers */
|
|
int mode; /* timer mode: one-shot or periodic */
|
|
uint64_t fire_tsc; /* tsc deadline to interrupt */
|
|
uint64_t period_in_cycle; /* period of the periodic timer in unit of TSC cycles */
|
|
timer_handle_t func; /* callback if time reached */
|
|
void *priv_data; /* func private data */
|
|
};
|
|
|
|
/*
|
|
* Don't initialize a timer twice if it has been add to the timer list
|
|
* after call add_timer. If u want, delete the timer from the list first.
|
|
*/
|
|
static inline void initialize_timer(struct timer *timer,
|
|
timer_handle_t func,
|
|
void *priv_data,
|
|
uint64_t fire_tsc,
|
|
int mode,
|
|
uint64_t period_in_cycle)
|
|
{
|
|
if (timer) {
|
|
timer->func = func;
|
|
timer->priv_data = priv_data;
|
|
timer->fire_tsc = fire_tsc;
|
|
timer->mode = mode;
|
|
timer->period_in_cycle = period_in_cycle;
|
|
INIT_LIST_HEAD(&timer->node);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Don't call add_timer/del_timer in the timer callback function.
|
|
*/
|
|
int add_timer(struct timer *timer);
|
|
void del_timer(struct timer *timer);
|
|
|
|
void timer_softirq(int pcpu_id);
|
|
void timer_init(void);
|
|
void timer_cleanup(void);
|
|
void check_tsc(void);
|
|
void calibrate_tsc(void);
|
|
|
|
#endif /* TIMER_H */
|