mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00: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",
|
||||
"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
|
||||
--------
|
||||
|
||||
|
|
|
@ -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_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;
|
||||
|
||||
rtc_change_mon_event(tm);
|
||||
}
|
||||
|
||||
static void rtc_copy_date(RTCState *s)
|
||||
|
|
|
@ -423,6 +423,9 @@ void monitor_protocol_event(MonitorEvent event, QObject *data)
|
|||
case QEVENT_BLOCK_IO_ERROR:
|
||||
event_name = "BLOCK_IO_ERROR";
|
||||
break;
|
||||
case QEVENT_RTC_CHANGE:
|
||||
event_name = "RTC_CHANGE";
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
break;
|
||||
|
|
|
@ -23,6 +23,7 @@ typedef enum MonitorEvent {
|
|||
QEVENT_VNC_INITIALIZED,
|
||||
QEVENT_VNC_DISCONNECTED,
|
||||
QEVENT_BLOCK_IO_ERROR,
|
||||
QEVENT_RTC_CHANGE,
|
||||
QEVENT_MAX,
|
||||
} 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 usb_info(Monitor *mon);
|
||||
|
||||
void rtc_change_mon_event(struct tm *tm);
|
||||
|
||||
void register_devices(void);
|
||||
|
||||
#endif
|
||||
|
|
9
vl.c
9
vl.c
|
@ -1492,6 +1492,15 @@ int qemu_timedate_diff(struct tm *tm)
|
|||
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)
|
||||
{
|
||||
time_t rtc_start_date;
|
||||
|
|
Loading…
Reference in a new issue