void read_persistent_clock(struct timespec *ts) { struct rtc_time time; ts->tv_sec = 0; ts->tv_nsec = 0; if (mach_hwclk) { mach_hwclk(0, &time); if ((time.tm_year += 1900) < 1970) time.tm_year += 100; ts->tv_sec = mktime(time.tm_year, time.tm_mon, time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec); } }
void time_init(void) { struct rtc_time time; if (mach_hwclk) { mach_hwclk(0, &time); if ((time.tm_year += 1900) < 1970) time.tm_year += 100; xtime.tv_sec = mktime(time.tm_year, time.tm_mon, time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec); xtime.tv_nsec = 0; } wall_to_monotonic.tv_sec = -xtime.tv_sec; mach_sched_init(timer_interrupt); }
static int rtc_generic_set_time(struct device *dev, struct rtc_time *tm) { if (mach_hwclk(1, tm) < 0) return -EOPNOTSUPP; return 0; }
static int rtc_generic_get_time(struct device *dev, struct rtc_time *tm) { mach_hwclk(0, tm); return rtc_valid_tm(tm); }