}
+int
+qemuMonitorEmitAcpiOstInfo(qemuMonitorPtr mon,
+ const char *alias,
+ const char *slotType,
+ const char *slot,
+ unsigned int source,
+ unsigned int status)
+{
+ int ret = -1;
+ VIR_DEBUG("mon=%p, alias='%s', slotType='%s', slot='%s', source='%u' status=%u",
+ mon, NULLSTR(alias), slotType, slot, source, status);
+
+ QEMU_MONITOR_CALLBACK(mon, ret, domainAcpiOstInfo, mon->vm,
+ alias, slotType, slot, source, status);
+
+ return ret;
+}
+
+
int
qemuMonitorSetCapabilities(qemuMonitorPtr mon)
{
int pass,
void *opaque);
+typedef int (*qemuMonitorDomainAcpiOstInfoCallback)(qemuMonitorPtr mon,
+ virDomainObjPtr vm,
+ const char *alias,
+ const char *slotType,
+ const char *slot,
+ unsigned int source,
+ unsigned int status,
+ void *opaque);
+
+
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks {
qemuMonitorDomainSpiceMigratedCallback domainSpiceMigrated;
qemuMonitorDomainMigrationStatusCallback domainMigrationStatus;
qemuMonitorDomainMigrationPassCallback domainMigrationPass;
+ qemuMonitorDomainAcpiOstInfoCallback domainAcpiOstInfo;
};
char *qemuMonitorEscapeArg(const char *in);
int qemuMonitorEmitMigrationPass(qemuMonitorPtr mon,
int pass);
+int qemuMonitorEmitAcpiOstInfo(qemuMonitorPtr mon,
+ const char *alias,
+ const char *slotType,
+ const char *slot,
+ unsigned int source,
+ unsigned int status);
+
int qemuMonitorStartCPUs(qemuMonitorPtr mon,
virConnectPtr conn);
int qemuMonitorStopCPUs(qemuMonitorPtr mon);
static void qemuMonitorJSONHandleSpiceMigrated(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleMigrationStatus(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleMigrationPass(qemuMonitorPtr mon, virJSONValuePtr data);
+static void qemuMonitorJSONHandleAcpiOstInfo(qemuMonitorPtr mon, virJSONValuePtr data);
typedef struct {
const char *type;
} qemuEventHandler;
static qemuEventHandler eventHandlers[] = {
+ { "ACPI_DEVICE_OST", qemuMonitorJSONHandleAcpiOstInfo, },
{ "BALLOON_CHANGE", qemuMonitorJSONHandleBalloonChange, },
{ "BLOCK_IO_ERROR", qemuMonitorJSONHandleIOError, },
{ "BLOCK_JOB_CANCELLED", qemuMonitorJSONHandleBlockJobCanceled, },
}
+static void
+qemuMonitorJSONHandleAcpiOstInfo(qemuMonitorPtr mon, virJSONValuePtr data)
+{
+ virJSONValuePtr info;
+ const char *alias;
+ const char *slotType;
+ const char *slot;
+ unsigned int source;
+ unsigned int status;
+
+ if (!(info = virJSONValueObjectGetObject(data, "info")))
+ goto error;
+
+ /* optional */
+ alias = virJSONValueObjectGetString(info, "device");
+
+ if (!(slotType = virJSONValueObjectGetString(info, "slot-type")))
+ goto error;
+
+ if (!(slot = virJSONValueObjectGetString(info, "slot")))
+ goto error;
+
+ if (virJSONValueObjectGetNumberUint(info, "source", &source) < 0)
+ goto error;
+
+ if (virJSONValueObjectGetNumberUint(info, "status", &status) < 0)
+ goto error;
+
+ qemuMonitorEmitAcpiOstInfo(mon, alias, slotType, slot, source, status);
+ return;
+
+ error:
+ VIR_WARN("malformed ACPI_DEVICE_OST event");
+ return;
+}
+
+
int
qemuMonitorJSONHumanCommandWithFd(qemuMonitorPtr mon,
const char *cmd_str,