| # -*- Mode: Python -*- | |
| # vim: filetype=python | |
| # | |
| # Copyright (C) 2018 Red Hat, Inc. | |
| # | |
| # Authors: | |
| # Marc-André Lureau <marcandre.lureau@redhat.com> | |
| # | |
| # This work is licensed under the terms of the GNU GPL, version 2 or | |
| # later. See the COPYING file in the top-level directory. | |
| ## | |
| # = vhost user backend discovery & capabilities | |
| ## | |
| ## | |
| # @VHostUserBackendType: | |
| # | |
| # List the various vhost user backend types. | |
| # | |
| # @9p: 9p virtio console | |
| # @balloon: virtio balloon | |
| # @block: virtio block | |
| # @caif: virtio caif | |
| # @console: virtio console | |
| # @crypto: virtio crypto | |
| # @gpu: virtio gpu | |
| # @input: virtio input | |
| # @net: virtio net | |
| # @rng: virtio rng | |
| # @rpmsg: virtio remote processor messaging | |
| # @rproc-serial: virtio remoteproc serial link | |
| # @scsi: virtio scsi | |
| # @vsock: virtio vsock transport | |
| # @fs: virtio fs (since 4.2) | |
| # | |
| # Since: 4.0 | |
| ## | |
| { | |
| 'enum': 'VHostUserBackendType', | |
| 'data': [ | |
| '9p', | |
| 'balloon', | |
| 'block', | |
| 'caif', | |
| 'console', | |
| 'crypto', | |
| 'gpu', | |
| 'input', | |
| 'net', | |
| 'rng', | |
| 'rpmsg', | |
| 'rproc-serial', | |
| 'scsi', | |
| 'vsock', | |
| 'fs' | |
| ] | |
| } | |
| ## | |
| # @VHostUserBackendBlockFeature: | |
| # | |
| # List of vhost user "block" features. | |
| # | |
| # @read-only: The --read-only command line option is supported. | |
| # @blk-file: The --blk-file command line option is supported. | |
| # | |
| # Since: 5.0 | |
| ## | |
| { | |
| 'enum': 'VHostUserBackendBlockFeature', | |
| 'data': [ 'read-only', 'blk-file' ] | |
| } | |
| ## | |
| # @VHostUserBackendCapabilitiesBlock: | |
| # | |
| # Capabilities reported by vhost user "block" backends | |
| # | |
| # @features: list of supported features. | |
| # | |
| # Since: 5.0 | |
| ## | |
| { | |
| 'struct': 'VHostUserBackendCapabilitiesBlock', | |
| 'data': { | |
| 'features': [ 'VHostUserBackendBlockFeature' ] | |
| } | |
| } | |
| ## | |
| # @VHostUserBackendInputFeature: | |
| # | |
| # List of vhost user "input" features. | |
| # | |
| # @evdev-path: The --evdev-path command line option is supported. | |
| # @no-grab: The --no-grab command line option is supported. | |
| # | |
| # Since: 4.0 | |
| ## | |
| { | |
| 'enum': 'VHostUserBackendInputFeature', | |
| 'data': [ 'evdev-path', 'no-grab' ] | |
| } | |
| ## | |
| # @VHostUserBackendCapabilitiesInput: | |
| # | |
| # Capabilities reported by vhost user "input" backends | |
| # | |
| # @features: list of supported features. | |
| # | |
| # Since: 4.0 | |
| ## | |
| { | |
| 'struct': 'VHostUserBackendCapabilitiesInput', | |
| 'data': { | |
| 'features': [ 'VHostUserBackendInputFeature' ] | |
| } | |
| } | |
| ## | |
| # @VHostUserBackendGPUFeature: | |
| # | |
| # List of vhost user "gpu" features. | |
| # | |
| # @render-node: The --render-node command line option is supported. | |
| # @virgl: The --virgl command line option is supported. | |
| # | |
| # Since: 4.0 | |
| ## | |
| { | |
| 'enum': 'VHostUserBackendGPUFeature', | |
| 'data': [ 'render-node', 'virgl' ] | |
| } | |
| ## | |
| # @VHostUserBackendCapabilitiesGPU: | |
| # | |
| # Capabilities reported by vhost user "gpu" backends. | |
| # | |
| # @features: list of supported features. | |
| # | |
| # Since: 4.0 | |
| ## | |
| { | |
| 'struct': 'VHostUserBackendCapabilitiesGPU', | |
| 'data': { | |
| 'features': [ 'VHostUserBackendGPUFeature' ] | |
| } | |
| } | |
| ## | |
| # @VHostUserBackendCapabilities: | |
| # | |
| # Capabilities reported by vhost user backends. | |
| # | |
| # @type: The vhost user backend type. | |
| # | |
| # Since: 4.0 | |
| ## | |
| { | |
| 'union': 'VHostUserBackendCapabilities', | |
| 'base': { 'type': 'VHostUserBackendType' }, | |
| 'discriminator': 'type', | |
| 'data': { | |
| 'input': 'VHostUserBackendCapabilitiesInput', | |
| 'gpu': 'VHostUserBackendCapabilitiesGPU' | |
| } | |
| } | |
| ## | |
| # @VhostUserBackend: | |
| # | |
| # Describes a vhost user backend to management software. | |
| # | |
| # It is possible for multiple @VhostUserBackend elements to match the | |
| # search criteria of management software. Applications thus need rules | |
| # to pick one of the many matches, and users need the ability to | |
| # override distro defaults. | |
| # | |
| # It is recommended to create vhost user backend JSON files (each | |
| # containing a single @VhostUserBackend root element) with a | |
| # double-digit prefix, for example "50-qemu-gpu.json", | |
| # "50-crosvm-gpu.json", etc, so they can be sorted in predictable | |
| # order. The backend JSON files should be searched for in three | |
| # directories: | |
| # | |
| # - /usr/share/qemu/vhost-user -- populated by distro-provided | |
| # packages (XDG_DATA_DIRS covers | |
| # /usr/share by default), | |
| # | |
| # - /etc/qemu/vhost-user -- exclusively for sysadmins' local additions, | |
| # | |
| # - $XDG_CONFIG_HOME/qemu/vhost-user -- exclusively for per-user local | |
| # additions (XDG_CONFIG_HOME | |
| # defaults to $HOME/.config). | |
| # | |
| # Top-down, the list of directories goes from general to specific. | |
| # | |
| # Management software should build a list of files from all three | |
| # locations, then sort the list by filename (i.e., basename | |
| # component). Management software should choose the first JSON file on | |
| # the sorted list that matches the search criteria. If a more specific | |
| # directory has a file with same name as a less specific directory, | |
| # then the file in the more specific directory takes effect. If the | |
| # more specific file is zero length, it hides the less specific one. | |
| # | |
| # For example, if a distro ships | |
| # | |
| # - /usr/share/qemu/vhost-user/50-qemu-gpu.json | |
| # | |
| # - /usr/share/qemu/vhost-user/50-crosvm-gpu.json | |
| # | |
| # then the sysadmin can prevent the default QEMU GPU being used at all with | |
| # | |
| # $ touch /etc/qemu/vhost-user/50-qemu-gpu.json | |
| # | |
| # The sysadmin can replace/alter the distro default QEMU GPU with | |
| # | |
| # $ vim /etc/qemu/vhost-user/50-qemu-gpu.json | |
| # | |
| # or they can provide a parallel QEMU GPU with higher priority | |
| # | |
| # $ vim /etc/qemu/vhost-user/10-qemu-gpu.json | |
| # | |
| # or they can provide a parallel QEMU GPU with lower priority | |
| # | |
| # $ vim /etc/qemu/vhost-user/99-qemu-gpu.json | |
| # | |
| # @type: The vhost user backend type. | |
| # | |
| # @description: Provides a human-readable description of the backend. | |
| # Management software may or may not display @description. | |
| # | |
| # @binary: Absolute path to the backend binary. | |
| # | |
| # @tags: An optional list of auxiliary strings associated with the | |
| # backend for which @description is not appropriate, due to the | |
| # latter's possible exposure to the end-user. @tags serves | |
| # development and debugging purposes only, and management | |
| # software shall explicitly ignore it. | |
| # | |
| # Since: 4.0 | |
| # | |
| # Example: | |
| # | |
| # { | |
| # "description": "QEMU vhost-user-gpu", | |
| # "type": "gpu", | |
| # "binary": "/usr/libexec/qemu/vhost-user-gpu", | |
| # "tags": [ | |
| # "CONFIG_OPENGL=y", | |
| # "CONFIG_GBM=y" | |
| # ] | |
| # } | |
| # | |
| ## | |
| { | |
| 'struct' : 'VhostUserBackend', | |
| 'data' : { | |
| 'description': 'str', | |
| 'type': 'VHostUserBackendType', | |
| 'binary': 'str', | |
| '*tags': [ 'str' ] | |
| } | |
| } |