int vmm_rtcdev_sync_device(struct vmm_rtcdev *rdev) { int rc; struct vmm_timezone tz; struct vmm_timeval tv; struct vmm_rtc_time tm; if (!rdev) { return VMM_EFAIL; } if ((rc = vmm_wallclock_get_timeofday(&tv, &tz))) { return rc; } tv.tv_sec -= tz.tz_minuteswest * 60; vmm_rtc_time_to_tm((unsigned long)tv.tv_sec, &tm); if ((rc = vmm_rtcdev_set_time(rdev, &tm))) { return rc; } return VMM_OK; }
static int cmd_wallclock_get_time(struct vmm_chardev *cdev) { int rc; struct vmm_timeinfo ti; struct vmm_timeval tv; struct vmm_timezone tz; rc = vmm_wallclock_get_timeofday(&tv, &tz); if (rc) { vmm_cprintf(cdev, "Error: get_time failed\n"); return rc; } vmm_wallclock_mkinfo(tv.tv_sec, 0, &ti); switch (ti.tm_wday) { case 0: vmm_cprintf(cdev, "%s ", "Sun"); break; case 1: vmm_cprintf(cdev, "%s ", "Mon"); break; case 2: vmm_cprintf(cdev, "%s ", "Tue"); break; case 3: vmm_cprintf(cdev, "%s ", "Wed"); break; case 4: vmm_cprintf(cdev, "%s ", "Thu"); break; case 5: vmm_cprintf(cdev, "%s ", "Fri"); break; case 6: vmm_cprintf(cdev, "%s ", "Sat"); break; default: vmm_cprintf(cdev, "Error: Invalid day of week\n"); }; switch (ti.tm_mon) { case 0: vmm_cprintf(cdev, "%s ", "Jan"); break; case 1: vmm_cprintf(cdev, "%s ", "Feb"); break; case 2: vmm_cprintf(cdev, "%s ", "Mar"); break; case 3: vmm_cprintf(cdev, "%s ", "Apr"); break; case 4: vmm_cprintf(cdev, "%s ", "May"); break; case 5: vmm_cprintf(cdev, "%s ", "Jun"); break; case 6: vmm_cprintf(cdev, "%s ", "Jul"); break; case 7: vmm_cprintf(cdev, "%s ", "Aug"); break; case 8: vmm_cprintf(cdev, "%s ", "Sep"); break; case 9: vmm_cprintf(cdev, "%s ", "Oct"); break; case 10: vmm_cprintf(cdev, "%s ", "Nov"); break; case 11: vmm_cprintf(cdev, "%s ", "Dec"); break; default: vmm_cprintf(cdev, "Error: Invalid month\n"); }; vmm_cprintf(cdev, "%2d %d:%d:%d ", ti.tm_mday, ti.tm_hour, ti.tm_min, ti.tm_sec); if (tz.tz_minuteswest == 0) { vmm_cprintf(cdev, "UTC "); } else if (tz.tz_minuteswest < 0) { tz.tz_minuteswest *= -1; vmm_cprintf(cdev, "UTC-%d:%d ", tz.tz_minuteswest / 60, tz.tz_minuteswest % 60); } else { vmm_cprintf(cdev, "UTC+%d:%d ", tz.tz_minuteswest / 60, tz.tz_minuteswest % 60); } vmm_cprintf(cdev, "%ld", ti.tm_year + 1900); vmm_cprintf(cdev, "\n"); return VMM_OK; }