#ifndef _SYS_CYCLIC_H
#define _SYS_CYCLIC_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _ASM
#include <sys/time.h>
#endif
#define CY_LOW_LEVEL 0
#define CY_LOCK_LEVEL 1
#define CY_HIGH_LEVEL 2
#define CY_SOFT_LEVELS 2
#define CY_LEVELS 3
#ifndef _ASM
typedef uintptr_t cyclic_id_t;
typedef int cyc_index_t;
typedef int cyc_cookie_t;
typedef uint16_t cyc_level_t;
typedef void (*cyc_func_t)(void *);
typedef void *cyb_arg_t;
#define CYCLIC_NONE ((cyclic_id_t)0)
typedef struct cyc_handler {
cyc_func_t cyh_func;
void *cyh_arg;
cyc_level_t cyh_level;
} cyc_handler_t;
typedef struct cyc_time {
hrtime_t cyt_when;
hrtime_t cyt_interval;
} cyc_time_t;
#define CY_INFINITY INT64_MAX
#if defined(_KERNEL) || defined(_FAKE_KERNEL)
extern cyclic_id_t cyclic_add(cyc_handler_t *, cyc_time_t *);
extern void cyclic_remove(cyclic_id_t);
extern int cyclic_reprogram(cyclic_id_t, hrtime_t);
extern hrtime_t cyclic_getres();
extern void cyclic_suspend();
extern void cyclic_resume();
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif