1*482580a6SMarc-André Lureau# -*- Mode: Python -*- 2*482580a6SMarc-André Lureau# 3*482580a6SMarc-André Lureau# Copyright (C) 2018 Red Hat, Inc. 4*482580a6SMarc-André Lureau# 5*482580a6SMarc-André Lureau# Authors: 6*482580a6SMarc-André Lureau# Marc-André Lureau <marcandre.lureau@redhat.com> 7*482580a6SMarc-André Lureau# 8*482580a6SMarc-André Lureau# This work is licensed under the terms of the GNU GPL, version 2 or 9*482580a6SMarc-André Lureau# later. See the COPYING file in the top-level directory. 10*482580a6SMarc-André Lureau 11*482580a6SMarc-André Lureau## 12*482580a6SMarc-André Lureau# = vhost user backend discovery & capabilities 13*482580a6SMarc-André Lureau## 14*482580a6SMarc-André Lureau 15*482580a6SMarc-André Lureau## 16*482580a6SMarc-André Lureau# @VHostUserBackendType: 17*482580a6SMarc-André Lureau# 18*482580a6SMarc-André Lureau# List the various vhost user backend types. 19*482580a6SMarc-André Lureau# 20*482580a6SMarc-André Lureau# @9p: 9p virtio console 21*482580a6SMarc-André Lureau# @balloon: virtio balloon 22*482580a6SMarc-André Lureau# @block: virtio block 23*482580a6SMarc-André Lureau# @caif: virtio caif 24*482580a6SMarc-André Lureau# @console: virtio console 25*482580a6SMarc-André Lureau# @crypto: virtio crypto 26*482580a6SMarc-André Lureau# @gpu: virtio gpu 27*482580a6SMarc-André Lureau# @input: virtio input 28*482580a6SMarc-André Lureau# @net: virtio net 29*482580a6SMarc-André Lureau# @rng: virtio rng 30*482580a6SMarc-André Lureau# @rpmsg: virtio remote processor messaging 31*482580a6SMarc-André Lureau# @rproc-serial: virtio remoteproc serial link 32*482580a6SMarc-André Lureau# @scsi: virtio scsi 33*482580a6SMarc-André Lureau# @vsock: virtio vsock transport 34*482580a6SMarc-André Lureau# 35*482580a6SMarc-André Lureau# Since: 4.0 36*482580a6SMarc-André Lureau## 37*482580a6SMarc-André Lureau{ 38*482580a6SMarc-André Lureau 'enum': 'VHostUserBackendType', 39*482580a6SMarc-André Lureau 'data': [ 40*482580a6SMarc-André Lureau '9p', 41*482580a6SMarc-André Lureau 'balloon', 42*482580a6SMarc-André Lureau 'block', 43*482580a6SMarc-André Lureau 'caif', 44*482580a6SMarc-André Lureau 'console', 45*482580a6SMarc-André Lureau 'crypto', 46*482580a6SMarc-André Lureau 'gpu', 47*482580a6SMarc-André Lureau 'input', 48*482580a6SMarc-André Lureau 'net', 49*482580a6SMarc-André Lureau 'rng', 50*482580a6SMarc-André Lureau 'rpmsg', 51*482580a6SMarc-André Lureau 'rproc-serial', 52*482580a6SMarc-André Lureau 'scsi', 53*482580a6SMarc-André Lureau 'vsock' 54*482580a6SMarc-André Lureau ] 55*482580a6SMarc-André Lureau} 56*482580a6SMarc-André Lureau 57*482580a6SMarc-André Lureau## 58*482580a6SMarc-André Lureau# @VHostUserBackendInputFeature: 59*482580a6SMarc-André Lureau# 60*482580a6SMarc-André Lureau# List of vhost user "input" features. 61*482580a6SMarc-André Lureau# 62*482580a6SMarc-André Lureau# @evdev-path: The --evdev-path command line option is supported. 63*482580a6SMarc-André Lureau# @no-grab: The --no-grab command line option is supported. 64*482580a6SMarc-André Lureau# 65*482580a6SMarc-André Lureau# Since: 4.0 66*482580a6SMarc-André Lureau## 67*482580a6SMarc-André Lureau{ 68*482580a6SMarc-André Lureau 'enum': 'VHostUserBackendInputFeature', 69*482580a6SMarc-André Lureau 'data': [ 'evdev-path', 'no-grab' ] 70*482580a6SMarc-André Lureau} 71*482580a6SMarc-André Lureau 72*482580a6SMarc-André Lureau## 73*482580a6SMarc-André Lureau# @VHostUserBackendCapabilitiesInput: 74*482580a6SMarc-André Lureau# 75*482580a6SMarc-André Lureau# Capabilities reported by vhost user "input" backends 76*482580a6SMarc-André Lureau# 77*482580a6SMarc-André Lureau# @features: list of supported features. 78*482580a6SMarc-André Lureau# 79*482580a6SMarc-André Lureau# Since: 4.0 80*482580a6SMarc-André Lureau## 81*482580a6SMarc-André Lureau{ 82*482580a6SMarc-André Lureau 'struct': 'VHostUserBackendCapabilitiesInput', 83*482580a6SMarc-André Lureau 'data': { 84*482580a6SMarc-André Lureau 'features': [ 'VHostUserBackendInputFeature' ] 85*482580a6SMarc-André Lureau } 86*482580a6SMarc-André Lureau} 87*482580a6SMarc-André Lureau 88*482580a6SMarc-André Lureau## 89*482580a6SMarc-André Lureau# @VHostUserBackendGPUFeature: 90*482580a6SMarc-André Lureau# 91*482580a6SMarc-André Lureau# List of vhost user "gpu" features. 92*482580a6SMarc-André Lureau# 93*482580a6SMarc-André Lureau# @render-node: The --render-node command line option is supported. 94*482580a6SMarc-André Lureau# @virgl: The --virgl command line option is supported. 95*482580a6SMarc-André Lureau# 96*482580a6SMarc-André Lureau# Since: 4.0 97*482580a6SMarc-André Lureau## 98*482580a6SMarc-André Lureau{ 99*482580a6SMarc-André Lureau 'enum': 'VHostUserBackendGPUFeature', 100*482580a6SMarc-André Lureau 'data': [ 'render-node', 'virgl' ] 101*482580a6SMarc-André Lureau} 102*482580a6SMarc-André Lureau 103*482580a6SMarc-André Lureau## 104*482580a6SMarc-André Lureau# @VHostUserBackendCapabilitiesGPU: 105*482580a6SMarc-André Lureau# 106*482580a6SMarc-André Lureau# Capabilities reported by vhost user "gpu" backends. 107*482580a6SMarc-André Lureau# 108*482580a6SMarc-André Lureau# @features: list of supported features. 109*482580a6SMarc-André Lureau# 110*482580a6SMarc-André Lureau# Since: 4.0 111*482580a6SMarc-André Lureau## 112*482580a6SMarc-André Lureau{ 113*482580a6SMarc-André Lureau 'struct': 'VHostUserBackendCapabilitiesGPU', 114*482580a6SMarc-André Lureau 'data': { 115*482580a6SMarc-André Lureau 'features': [ 'VHostUserBackendGPUFeature' ] 116*482580a6SMarc-André Lureau } 117*482580a6SMarc-André Lureau} 118*482580a6SMarc-André Lureau 119*482580a6SMarc-André Lureau## 120*482580a6SMarc-André Lureau# @VHostUserBackendCapabilities: 121*482580a6SMarc-André Lureau# 122*482580a6SMarc-André Lureau# Capabilities reported by vhost user backends. 123*482580a6SMarc-André Lureau# 124*482580a6SMarc-André Lureau# @type: The vhost user backend type. 125*482580a6SMarc-André Lureau# 126*482580a6SMarc-André Lureau# Since: 4.0 127*482580a6SMarc-André Lureau## 128*482580a6SMarc-André Lureau{ 129*482580a6SMarc-André Lureau 'union': 'VHostUserBackendCapabilities', 130*482580a6SMarc-André Lureau 'base': { 'type': 'VHostUserBackendType' }, 131*482580a6SMarc-André Lureau 'discriminator': 'type', 132*482580a6SMarc-André Lureau 'data': { 133*482580a6SMarc-André Lureau 'input': 'VHostUserBackendCapabilitiesInput', 134*482580a6SMarc-André Lureau 'gpu': 'VHostUserBackendCapabilitiesGPU' 135*482580a6SMarc-André Lureau } 136*482580a6SMarc-André Lureau} 137*482580a6SMarc-André Lureau 138*482580a6SMarc-André Lureau## 139*482580a6SMarc-André Lureau# @VhostUserBackend: 140*482580a6SMarc-André Lureau# 141*482580a6SMarc-André Lureau# Describes a vhost user backend to management software. 142*482580a6SMarc-André Lureau# 143*482580a6SMarc-André Lureau# It is possible for multiple @VhostUserBackend elements to match the 144*482580a6SMarc-André Lureau# search criteria of management software. Applications thus need rules 145*482580a6SMarc-André Lureau# to pick one of the many matches, and users need the ability to 146*482580a6SMarc-André Lureau# override distro defaults. 147*482580a6SMarc-André Lureau# 148*482580a6SMarc-André Lureau# It is recommended to create vhost user backend JSON files (each 149*482580a6SMarc-André Lureau# containing a single @VhostUserBackend root element) with a 150*482580a6SMarc-André Lureau# double-digit prefix, for example "50-qemu-gpu.json", 151*482580a6SMarc-André Lureau# "50-crosvm-gpu.json", etc, so they can be sorted in predictable 152*482580a6SMarc-André Lureau# order. The backend JSON files should be searched for in three 153*482580a6SMarc-André Lureau# directories: 154*482580a6SMarc-André Lureau# 155*482580a6SMarc-André Lureau# - /usr/share/qemu/vhost-user -- populated by distro-provided 156*482580a6SMarc-André Lureau# packages (XDG_DATA_DIRS covers 157*482580a6SMarc-André Lureau# /usr/share by default), 158*482580a6SMarc-André Lureau# 159*482580a6SMarc-André Lureau# - /etc/qemu/vhost-user -- exclusively for sysadmins' local additions, 160*482580a6SMarc-André Lureau# 161*482580a6SMarc-André Lureau# - $XDG_CONFIG_HOME/qemu/vhost-user -- exclusively for per-user local 162*482580a6SMarc-André Lureau# additions (XDG_CONFIG_HOME 163*482580a6SMarc-André Lureau# defaults to $HOME/.config). 164*482580a6SMarc-André Lureau# 165*482580a6SMarc-André Lureau# Top-down, the list of directories goes from general to specific. 166*482580a6SMarc-André Lureau# 167*482580a6SMarc-André Lureau# Management software should build a list of files from all three 168*482580a6SMarc-André Lureau# locations, then sort the list by filename (i.e., basename 169*482580a6SMarc-André Lureau# component). Management software should choose the first JSON file on 170*482580a6SMarc-André Lureau# the sorted list that matches the search criteria. If a more specific 171*482580a6SMarc-André Lureau# directory has a file with same name as a less specific directory, 172*482580a6SMarc-André Lureau# then the file in the more specific directory takes effect. If the 173*482580a6SMarc-André Lureau# more specific file is zero length, it hides the less specific one. 174*482580a6SMarc-André Lureau# 175*482580a6SMarc-André Lureau# For example, if a distro ships 176*482580a6SMarc-André Lureau# 177*482580a6SMarc-André Lureau# - /usr/share/qemu/vhost-user/50-qemu-gpu.json 178*482580a6SMarc-André Lureau# 179*482580a6SMarc-André Lureau# - /usr/share/qemu/vhost-user/50-crosvm-gpu.json 180*482580a6SMarc-André Lureau# 181*482580a6SMarc-André Lureau# then the sysadmin can prevent the default QEMU being used at all with 182*482580a6SMarc-André Lureau# 183*482580a6SMarc-André Lureau# $ touch /etc/qemu/vhost-user/50-qemu-gpu.json 184*482580a6SMarc-André Lureau# 185*482580a6SMarc-André Lureau# The sysadmin can replace/alter the distro default OVMF with 186*482580a6SMarc-André Lureau# 187*482580a6SMarc-André Lureau# $ vim /etc/qemu/vhost-user/50-qemu-gpu.json 188*482580a6SMarc-André Lureau# 189*482580a6SMarc-André Lureau# or they can provide a parallel QEMU GPU with higher priority 190*482580a6SMarc-André Lureau# 191*482580a6SMarc-André Lureau# $ vim /etc/qemu/vhost-user/10-qemu-gpu.json 192*482580a6SMarc-André Lureau# 193*482580a6SMarc-André Lureau# or they can provide a parallel OVMF with lower priority 194*482580a6SMarc-André Lureau# 195*482580a6SMarc-André Lureau# $ vim /etc/qemu/vhost-user/99-qemu-gpu.json 196*482580a6SMarc-André Lureau# 197*482580a6SMarc-André Lureau# @type: The vhost user backend type. 198*482580a6SMarc-André Lureau# 199*482580a6SMarc-André Lureau# @description: Provides a human-readable description of the backend. 200*482580a6SMarc-André Lureau# Management software may or may not display @description. 201*482580a6SMarc-André Lureau# 202*482580a6SMarc-André Lureau# @binary: Absolute path to the backend binary. 203*482580a6SMarc-André Lureau# 204*482580a6SMarc-André Lureau# @tags: An optional list of auxiliary strings associated with the 205*482580a6SMarc-André Lureau# backend for which @description is not appropriate, due to the 206*482580a6SMarc-André Lureau# latter's possible exposure to the end-user. @tags serves 207*482580a6SMarc-André Lureau# development and debugging purposes only, and management 208*482580a6SMarc-André Lureau# software shall explicitly ignore it. 209*482580a6SMarc-André Lureau# 210*482580a6SMarc-André Lureau# Since: 4.0 211*482580a6SMarc-André Lureau# 212*482580a6SMarc-André Lureau# Example: 213*482580a6SMarc-André Lureau# 214*482580a6SMarc-André Lureau# { 215*482580a6SMarc-André Lureau# "description": "QEMU vhost-user-gpu", 216*482580a6SMarc-André Lureau# "type": "gpu", 217*482580a6SMarc-André Lureau# "binary": "/usr/libexec/qemu/vhost-user-gpu", 218*482580a6SMarc-André Lureau# "tags": [ 219*482580a6SMarc-André Lureau# "CONFIG_OPENGL_DMABUF=y" 220*482580a6SMarc-André Lureau# ] 221*482580a6SMarc-André Lureau# } 222*482580a6SMarc-André Lureau# 223*482580a6SMarc-André Lureau## 224*482580a6SMarc-André Lureau{ 225*482580a6SMarc-André Lureau 'struct' : 'VhostUserBackend', 226*482580a6SMarc-André Lureau 'data' : { 227*482580a6SMarc-André Lureau 'description': 'str', 228*482580a6SMarc-André Lureau 'type': 'VHostUserBackendType', 229*482580a6SMarc-André Lureau 'binary': 'str', 230*482580a6SMarc-André Lureau '*tags': [ 'str' ] 231*482580a6SMarc-André Lureau } 232*482580a6SMarc-André Lureau} 233