Lines Matching refs:rtc

44 #include <isa/rtc.h>
106 static MALLOC_DEFINE(M_VRTC, "vrtc", "bhyve virtual rtc");
168 rtcset(struct rtcdev *rtc, int val)
174 return ((rtc->reg_b & RTCSB_BIN) ? val : bin2bcd_data[val]);
182 struct rtcdev *rtc;
220 rtc = &vrtc->rtcdev;
221 rtc->sec = rtcset(rtc, ct.sec);
222 rtc->min = rtcset(rtc, ct.min);
224 if (rtc->reg_b & RTCSB_24HR) {
246 rtc->hour = rtcset(rtc, hour);
248 if ((rtc->reg_b & RTCSB_24HR) == 0 && ct.hour >= 12)
249 rtc->hour |= 0x80; /* set MSB to indicate PM */
251 rtc->day_of_week = rtcset(rtc, ct.dow + 1);
252 rtc->day_of_month = rtcset(rtc, ct.day);
253 rtc->month = rtcset(rtc, ct.mon);
254 rtc->year = rtcset(rtc, ct.year % 100);
255 rtc->century = rtcset(rtc, ct.year / 100);
259 rtcget(struct rtcdev *rtc, int val, int *retval)
263 if (rtc->reg_b & RTCSB_BIN) {
283 struct rtcdev *rtc;
290 rtc = &vrtc->rtcdev;
294 error = rtcget(rtc, rtc->sec, &ct.sec);
296 VM_CTR2(vm, "Invalid RTC sec %#x/%d", rtc->sec, ct.sec);
300 error = rtcget(rtc, rtc->min, &ct.min);
302 VM_CTR2(vm, "Invalid RTC min %#x/%d", rtc->min, ct.min);
307 hour = rtc->hour;
308 if ((rtc->reg_b & RTCSB_24HR) == 0) {
314 error = rtcget(rtc, hour, &ct.hour);
315 if ((rtc->reg_b & RTCSB_24HR) == 0) {
333 rtc->hour, ct.hour);
339 VM_CTR2(vm, "Invalid RTC hour %#x/%d", rtc->hour, ct.hour);
344 * Ignore 'rtc->dow' because some guests like Linux don't bother
351 error = rtcget(rtc, rtc->day_of_month, &ct.day);
353 VM_CTR2(vm, "Invalid RTC mday %#x/%d", rtc->day_of_month,
358 error = rtcget(rtc, rtc->month, &ct.mon);
360 VM_CTR2(vm, "Invalid RTC month %#x/%d", rtc->month, ct.mon);
364 error = rtcget(rtc, rtc->year, &year);
366 VM_CTR2(vm, "Invalid RTC year %#x/%d", rtc->year, year);
370 error = rtcget(rtc, rtc->century, &century);
373 VM_CTR2(vm, "Invalid RTC century %#x/%d", rtc->century,
399 struct rtcdev *rtc;
406 rtc = &vrtc->rtcdev;
407 alarm_sec = rtc->alarm_sec;
408 alarm_min = rtc->alarm_min;
409 alarm_hour = rtc->alarm_hour;
461 if ((alarm_sec >= 0xC0 || alarm_sec == rtc->sec) &&
462 (alarm_min >= 0xC0 || alarm_min == rtc->min) &&
463 (alarm_hour >= 0xC0 || alarm_hour == rtc->hour)) {
464 vrtc_set_reg_c(vrtc, rtc->reg_c | RTCIR_ALARM);
470 vrtc_set_reg_c(vrtc, rtc->reg_c | RTCIR_UPDATE);
591 struct rtcdev *rtc;
597 rtc = &vrtc->rtcdev;
600 oldirqf = rtc->reg_c & RTCIR_INT;
609 oldval = rtc->reg_c;
610 rtc->reg_c = newirqf | newval;
611 changed = oldval ^ rtc->reg_c;
614 oldval, rtc->reg_c);
629 struct rtcdev *rtc;
637 rtc = &vrtc->rtcdev;
638 oldval = rtc->reg_b;
641 rtc->reg_b = newval;
674 rtc->reg_b &= ~RTCSB_UINTR;
871 struct rtcdev *rtc;
877 rtc = &vrtc->rtcdev;
913 *val = *((uint8_t *)rtc + offset);
944 *((uint8_t *)rtc + offset) = *val;
967 struct rtcdev *rtc;
971 rtc = &vrtc->rtcdev;
972 vrtc_set_reg_b(vrtc, rtc->reg_b & ~(RTCSB_ALL_INTRS | RTCSB_SQWE));
974 KASSERT(!callout_active(&vrtc->callout), ("rtc callout still active"));
983 struct rtcdev *rtc;
992 rtc = &vrtc->rtcdev;
993 rtc->reg_a = 0x20;
994 rtc->reg_b = RTCSB_24HR;
995 rtc->reg_c = 0;
996 rtc->reg_d = RTCSD_PWR;