mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-09-01 14:31:52 -06:00
QMP: Introduce RTC_CHANGE event
Emitted whenever the RTC time changes. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
d74c7dfd1b
commit
80cd34787f
6 changed files with 32 additions and 0 deletions
|
@ -38,6 +38,21 @@ Example:
|
||||||
{ "event": "RESET",
|
{ "event": "RESET",
|
||||||
"timestamp": { "seconds": 1267041653, "microseconds": 9518 } }
|
"timestamp": { "seconds": 1267041653, "microseconds": 9518 } }
|
||||||
|
|
||||||
|
RTC_CHANGE
|
||||||
|
----------
|
||||||
|
|
||||||
|
Emitted when the RTC time changes.
|
||||||
|
|
||||||
|
Data:
|
||||||
|
|
||||||
|
- "offset": delta against the host UTC in seconds (json-number)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
{ "event": "RTC_CHANGE",
|
||||||
|
"data": { "offset": 78 },
|
||||||
|
"timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
|
||||||
|
|
||||||
SHUTDOWN
|
SHUTDOWN
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
|
|
@ -297,6 +297,8 @@ static void rtc_set_time(RTCState *s)
|
||||||
tm->tm_mday = rtc_from_bcd(s, s->cmos_data[RTC_DAY_OF_MONTH]);
|
tm->tm_mday = rtc_from_bcd(s, s->cmos_data[RTC_DAY_OF_MONTH]);
|
||||||
tm->tm_mon = rtc_from_bcd(s, s->cmos_data[RTC_MONTH]) - 1;
|
tm->tm_mon = rtc_from_bcd(s, s->cmos_data[RTC_MONTH]) - 1;
|
||||||
tm->tm_year = rtc_from_bcd(s, s->cmos_data[RTC_YEAR]) + s->base_year - 1900;
|
tm->tm_year = rtc_from_bcd(s, s->cmos_data[RTC_YEAR]) + s->base_year - 1900;
|
||||||
|
|
||||||
|
rtc_change_mon_event(tm);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtc_copy_date(RTCState *s)
|
static void rtc_copy_date(RTCState *s)
|
||||||
|
|
|
@ -423,6 +423,9 @@ void monitor_protocol_event(MonitorEvent event, QObject *data)
|
||||||
case QEVENT_BLOCK_IO_ERROR:
|
case QEVENT_BLOCK_IO_ERROR:
|
||||||
event_name = "BLOCK_IO_ERROR";
|
event_name = "BLOCK_IO_ERROR";
|
||||||
break;
|
break;
|
||||||
|
case QEVENT_RTC_CHANGE:
|
||||||
|
event_name = "RTC_CHANGE";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
abort();
|
abort();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -23,6 +23,7 @@ typedef enum MonitorEvent {
|
||||||
QEVENT_VNC_INITIALIZED,
|
QEVENT_VNC_INITIALIZED,
|
||||||
QEVENT_VNC_DISCONNECTED,
|
QEVENT_VNC_DISCONNECTED,
|
||||||
QEVENT_BLOCK_IO_ERROR,
|
QEVENT_BLOCK_IO_ERROR,
|
||||||
|
QEVENT_RTC_CHANGE,
|
||||||
QEVENT_MAX,
|
QEVENT_MAX,
|
||||||
} MonitorEvent;
|
} MonitorEvent;
|
||||||
|
|
||||||
|
|
2
sysemu.h
2
sysemu.h
|
@ -256,6 +256,8 @@ void do_usb_add(Monitor *mon, const QDict *qdict);
|
||||||
void do_usb_del(Monitor *mon, const QDict *qdict);
|
void do_usb_del(Monitor *mon, const QDict *qdict);
|
||||||
void usb_info(Monitor *mon);
|
void usb_info(Monitor *mon);
|
||||||
|
|
||||||
|
void rtc_change_mon_event(struct tm *tm);
|
||||||
|
|
||||||
void register_devices(void);
|
void register_devices(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
9
vl.c
9
vl.c
|
@ -1492,6 +1492,15 @@ int qemu_timedate_diff(struct tm *tm)
|
||||||
return seconds - time(NULL);
|
return seconds - time(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rtc_change_mon_event(struct tm *tm)
|
||||||
|
{
|
||||||
|
QObject *data;
|
||||||
|
|
||||||
|
data = qobject_from_jsonf("{ 'offset': %d }", qemu_timedate_diff(tm));
|
||||||
|
monitor_protocol_event(QEVENT_RTC_CHANGE, data);
|
||||||
|
qobject_decref(data);
|
||||||
|
}
|
||||||
|
|
||||||
static void configure_rtc_date_offset(const char *startdate, int legacy)
|
static void configure_rtc_date_offset(const char *startdate, int legacy)
|
||||||
{
|
{
|
||||||
time_t rtc_start_date;
|
time_t rtc_start_date;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue