#ifndef HWCLOCK_CLOCK_H
#define HWCLOCK_CLOCK_H

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include "c.h"

struct clock_ops {
	char *interface_name;
	int (*get_permissions) (void);
	int (*read_hardware_clock) (struct tm * tm);
	int (*set_hardware_clock) (const struct tm * tm);
	int (*synchronize_to_clock_tick) (void);
};

extern struct clock_ops *probe_for_cmos_clock(void);
extern struct clock_ops *probe_for_rtc_clock(void);

typedef int bool;

/* hwclock.c */
extern int debug;
extern unsigned long epoch_option;
extern double time_diff(struct timeval subtrahend, struct timeval subtractor);
/* cmos.c */
extern void set_cmos_epoch(int ARCconsole, int SRM);
extern void set_cmos_access(int Jensen, int funky_toy);

/* rtc.c */
extern int get_epoch_rtc(unsigned long *epoch, int silent);
extern int set_epoch_rtc(unsigned long epoch);
extern char *rtc_dev_name;

#ifdef HAVE_LIBAUDIT
extern void hwaudit_exit(int status);
# define hwclock_exit(_status)	hwaudit_exit(_status)
#else
# define hwclock_exit(_status)	exit(_status)
#endif

#endif				/* HWCLOCK_CLOCK_H */
