qemu/include
Laszlo Ersek 50de920b37 hw/isa/lpc_ich9: add SMI feature negotiation via fw_cfg
Introduce the following fw_cfg files:

- "etc/smi/supported-features": a little endian uint64_t feature bitmap,
  presenting the features known by the host to the guest. Read-only for
  the guest.

  The content of this file will be determined via bit-granularity ICH9-LPC
  device properties, to be introduced later. For now, the bitmask is left
  zeroed. The bits will be set from machine type compat properties and on
  the QEMU command line, hence this file is not migrated.

- "etc/smi/requested-features": a little endian uint64_t feature bitmap,
  representing the features the guest would like to request. Read-write
  for the guest.

  The guest can freely (re)write this file, it has no direct consequence.
  Initial value is zero. A nonzero value causes the SMI-related fw_cfg
  files and fields that are under guest influence to be migrated.

- "etc/smi/features-ok": contains a uint8_t value, and it is read-only for
  the guest. When the guest selects the associated fw_cfg key, the guest
  features are validated against the host features. In case of error, the
  negotiation doesn't proceed, and the "features-ok" file remains zero. In
  case of success, the "features-ok" file becomes (uint8_t)1, and the
  negotiated features are locked down internally (to which no further
  changes are possible until reset).

  The initial value is zero.  A nonzero value causes the SMI-related
  fw_cfg files and fields that are under guest influence to be migrated.

The C-language fields backing the "supported-features" and
"requested-features" files are uint8_t arrays. This is because they carry
guest-side representation (our choice is little endian), while
VMSTATE_UINT64() assumes / implies host-side endianness for any uint64_t
fields. If we migrate a guest between hosts with different endiannesses
(which is possible with TCG), then the host-side value is preserved, and
the host-side representation is translated. This would be visible to the
guest through fw_cfg, unless we used plain byte arrays. So we do.

Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
Message-Id: <20170126014416.11211-2-lersek@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-01-27 18:07:31 +01:00
..
block aio: document locking 2017-01-16 13:25:18 +00:00
crypto crypto: add CTR mode support 2016-10-19 10:09:24 +01:00
disas nios2: Add disas entries 2017-01-24 13:10:35 -08:00
exec memory: hmp: add "-f" for "info mtree" 2017-01-27 18:07:31 +01:00
fpu fpu: add mechanism to check for invalid long double formats 2016-09-15 12:43:18 +01:00
hw hw/isa/lpc_ich9: add SMI feature negotiation via fw_cfg 2017-01-27 18:07:31 +01:00
io io: introduce a DNS resolver API 2017-01-23 15:32:46 +00:00
libdecnumber Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
migration migration: re-active images while migration been canceled after inactive them 2017-01-24 18:00:31 +00:00
monitor qdev: add function qdev_set_id() 2016-11-22 10:29:37 -08:00
net vhost-net: Notify the backend about the host MTU 2017-01-10 07:02:53 +02:00
qapi include: Fix typos found by codespell 2017-01-24 23:26:52 +03:00
qemu hbitmap: Add hbitmap_is_serializable() 2017-01-26 10:25:01 +08:00
qom object: make some funcs static 2017-01-24 23:26:53 +03:00
standard-headers virtio_crypto: header update 2017-01-18 22:59:53 +02:00
sysemu replay: save/load initial state 2017-01-27 18:07:30 +01:00
ui curses: Fix compiler warnings (Mingw-w64 redefinition of macro KEY_EVENT) 2017-01-10 08:14:20 +01:00
elf.h nios2: Add usermode binaries emulation 2017-01-24 13:10:35 -08:00
glib-compat.h win32: use glib gpoll if glib >= 2.50 2017-01-24 23:26:53 +03:00
qemu-common.h tcg: Add EXCP_ATOMIC 2016-10-26 08:29:00 -07:00
qemu-io.h qemu-io: Use BlockBackend 2015-02-16 15:07:19 +00:00
trace-tcg.h trace: get rid of generated-events.h/generated-events.c 2016-10-12 09:54:52 +02:00
trace.h trace: get rid of generated-events.h/generated-events.c 2016-10-12 09:54:52 +02:00