#ifndef _SYS_DDI_PERIODIC_H
#define _SYS_DDI_PERIODIC_H
#include <sys/list.h>
#include <sys/taskq_impl.h>
#include <sys/cyclic.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _KERNEL
typedef struct __timeout *timeout_t;
typedef enum ddi_periodic_flags {
DPF_DISPATCHED = 0x01,
DPF_EXECUTING = 0x02,
DPF_CANCELLED = 0x04
} ddi_periodic_flags_t;
typedef struct ddi_periodic_impl {
struct list_node dpr_link;
struct list_node dpr_softint_link;
id_t dpr_id;
hrtime_t dpr_interval;
kmutex_t dpr_lock;
kcondvar_t dpr_cv;
ddi_periodic_flags_t dpr_flags;
uint_t dpr_level;
taskq_ent_t dpr_taskq_ent;
uint64_t dpr_fire_count;
kthread_t *dpr_thread;
cyclic_id_t dpr_cyclic_id;
void (*dpr_handler)(void *);
void *dpr_arg;
} ddi_periodic_impl_t;
void ddi_periodic_init(void);
void ddi_periodic_fini(void);
void ddi_periodic_softintr(int level);
timeout_t i_timeout(void (*)(void *), void *, hrtime_t, int);
void i_untimeout(timeout_t);
#endif
#ifdef __cplusplus
}
#endif
#endif