#ifndef _FMD_TIME_H
#define _FMD_TIME_H
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct fmd_timeval {
uint64_t ftv_sec;
uint64_t ftv_nsec;
} fmd_timeval_t;
typedef struct fmd_timeops {
void *(*fto_init)(void);
void (*fto_fini)(void *);
int (*fto_gettimeofday)(struct timeval *, void *);
hrtime_t (*fto_gethrtime)(void);
void (*fto_addhrtime)(hrtime_t);
void (*fto_waithrtime)(hrtime_t);
void (*fto_waitcancel)(pthread_t);
} fmd_timeops_t;
typedef struct fmd_timesim {
pthread_mutex_t fts_lock;
pthread_cond_t fts_cv;
hrtime_t fts_tod;
hrtime_t fts_hrt;
uint_t fts_cancel;
} fmd_timesim_t;
extern const fmd_timeops_t fmd_timeops_native;
extern const fmd_timeops_t fmd_timeops_simulated;
extern void fmd_time_gettimeofday(struct timeval *);
extern hrtime_t fmd_time_gethrtime(void);
extern void fmd_time_addhrtime(hrtime_t);
extern void fmd_time_waithrtime(hrtime_t);
extern void fmd_time_waitcancel(pthread_t);
extern void fmd_time_sync(fmd_timeval_t *, hrtime_t *, uint_t);
extern void fmd_time_hrt2tod(hrtime_t, const fmd_timeval_t *,
hrtime_t, fmd_timeval_t *);
extern void fmd_time_tod2hrt(hrtime_t, const fmd_timeval_t *,
const fmd_timeval_t *, hrtime_t *);
extern hrtime_t fmd_time_ena2hrt(hrtime_t, uint64_t);
#ifdef __cplusplus
}
#endif
#endif