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:
Luiz Capitulino 2010-02-25 12:11:44 -03:00 committed by Anthony Liguori
parent d74c7dfd1b
commit 80cd34787f
6 changed files with 32 additions and 0 deletions

View File

@ -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
--------

View File

@ -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)

View File

@ -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;

View File

@ -23,6 +23,7 @@ typedef enum MonitorEvent {
QEVENT_VNC_INITIALIZED,
QEVENT_VNC_DISCONNECTED,
QEVENT_BLOCK_IO_ERROR,
QEVENT_RTC_CHANGE,
QEVENT_MAX,
} MonitorEvent;

View File

@ -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
View File

@ -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;