On 3/7/19 7:32 PM, Philippe Mathieu-Daudé wrote:
> When debugging a paravirtualized guest firmware, it results very
> useful to dump the fw_cfg table.
> Add a QMP command which returns the most useful fields.
> Since the QMP protocol is not designed for passing stream data,
> we don't display a fw_cfg item data, only it's size:
>
> { "execute": "query-fw_cfg-items" }
> {
> "return": [
> {
> "architecture_specific": false,
> "key": 0,
> "writeable": false,
> "size": 4,
> "keyname": "signature"
You could return a base64-encoded representation of the field (we do
that in other interfaces where raw binary can't be passed reliably over
JSON). For 4 bytes, that makes sense,
> {
> "architecture_specific": true,
> "key": 3,
> "writeable": false,
> "size": 324,
> "keyname": "e820_tables"
for 324 bytes, it gets a bit long. Still, may be worth it for the added
debug visibility.
> +++ b/qapi/misc.json
> @@ -3051,3 +3051,47 @@
> 'data': 'NumaOptions',
> 'allow-preconfig': true
> }
> +
> +##
> +# @FirmwareConfigurationItem:
> +#
> +# Firmware Configuration (fw_cfg) item.
> +#
> +# @key: The uint16 selector key.
> +# @keyname: The stringified name if the selector refers to a well-known
> +# numerically defined item.
> +# @architecture_specific: Indicates whether the configuration setting is
Prefer '-' over '_' in new interfaces.
> +# architecture specific.
> +# false: The item is a generic configuration item.
> +# true: The item is specific to a particular architecture.
> +# @writeable: Indicates whether the configuration setting is writeable by
> +# the guest.
writable
> +# @size: The length of @data associated with the item.
> +# @data: A string representating the firmware configuration data.
representing
> +# Note: This field is currently not used.
Either drop the field until it has a use, or let it be the base64
encoding and use it now.
> +# @path: If the key is a 'file', the named file path.
> +# @order: If the key is a 'file', the named file order.
> +#
> +# Since 4.0
> +##
> +{ 'struct': 'FirmwareConfigurationItem',
> + 'data': { 'key': 'uint16',
> + '*keyname': 'str',
> + 'architecture_specific': 'bool',
> + 'writeable': 'bool',
> + '*data': 'str',
> + 'size': 'int',
> + '*path': 'str',
> + '*order': 'int' } }
Is it worth making 'keyname' an enum type, and turning this into a flat
union where 'path' and 'order' appear on the branch associated with
'file', and where all other well-known keynames have smaller branches?
> +
> +
> +##
> +# @query-fw_cfg-items:
That looks weird to mix - and _. Any reason we can't just go with
query-firmware-config?
> +#
> +# Returns the list of Firmware Configuration items.
> +#
> +# Returns: A list of @FirmwareConfigurationItem for each entry.
> +#
> +# Since 4.0
> +##
> +{ 'command': 'query-fw_cfg-items', 'returns': ['FirmwareConfigurationItem']}
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org