domaincaps: Report video modelType

Requires adding the plumbing for <device><video>
The value is <enum name='modelType'> to match the associated domain
XML of <video><model type='XXX'/>

Wire it up for qemu too
This commit is contained in:
Cole Robinson 2016-05-08 12:11:39 -04:00
parent 6da27ad1b5
commit 5ed235c68f
14 changed files with 145 additions and 0 deletions

View File

@ -244,6 +244,35 @@
</dl> </dl>
<h4><a name="elementsVideo">Video device</a></h4>
<p>Video device capabilities are exposed under the
<code>video</code> element. For instance:</p>
<pre>
&lt;domainCapabilities&gt;
...
&lt;devices&gt;
&lt;video supported='yes'&gt;
&lt;enum name='modelType'&gt;
&lt;value&gt;vga&lt;/value&gt;
&lt;value&gt;cirrus&lt;/value&gt;
&lt;value&gt;vmvga&lt;/value&gt;
&lt;value&gt;qxl&lt;/value&gt;
&lt;value&gt;virtio&lt;/value&gt;
&lt;/enum&gt;
&lt;/video&gt;
...
&lt;/devices&gt;
&lt;/domainCapabilities&gt;
</pre>
<dl>
<dt><code>modelType</code></dt>
<dd>Options for the <code>type</code> attribute of the
&lt;video&gt;&lt;model&gt; element.</dd>
</dl>
<h4><a name="elementsHostDev">Host device assignment</a></h4> <h4><a name="elementsHostDev">Host device assignment</a></h4>
<p>Some host devices can be passed through to a guest (e.g. USB, PCI and <p>Some host devices can be passed through to a guest (e.g. USB, PCI and
SCSI). Well, only if the following is enabled:</p> SCSI). Well, only if the following is enabled:</p>

View File

@ -73,6 +73,7 @@
<interleave> <interleave>
<ref name='disk'/> <ref name='disk'/>
<ref name='graphics'/> <ref name='graphics'/>
<ref name='video'/>
<ref name='hostdev'/> <ref name='hostdev'/>
</interleave> </interleave>
</element> </element>
@ -92,6 +93,13 @@
</element> </element>
</define> </define>
<define name='video'>
<element name='video'>
<ref name='supported'/>
<ref name='enum'/>
</element>
</define>
<define name='hostdev'> <define name='hostdev'>
<element name='hostdev'> <element name='hostdev'>
<ref name='supported'/> <ref name='supported'/>

View File

@ -258,6 +258,18 @@ virDomainCapsDeviceGraphicsFormat(virBufferPtr buf,
} }
static void
virDomainCapsDeviceVideoFormat(virBufferPtr buf,
virDomainCapsDeviceVideoPtr const video)
{
FORMAT_PROLOGUE(video);
ENUM_PROCESS(video, modelType, virDomainVideoTypeToString);
FORMAT_EPILOGUE(video);
}
static void static void
virDomainCapsDeviceHostdevFormat(virBufferPtr buf, virDomainCapsDeviceHostdevFormat(virBufferPtr buf,
virDomainCapsDeviceHostdevPtr const hostdev) virDomainCapsDeviceHostdevPtr const hostdev)
@ -327,6 +339,7 @@ virDomainCapsFormatInternal(virBufferPtr buf,
virDomainCapsDeviceDiskFormat(buf, &caps->disk); virDomainCapsDeviceDiskFormat(buf, &caps->disk);
virDomainCapsDeviceGraphicsFormat(buf, &caps->graphics); virDomainCapsDeviceGraphicsFormat(buf, &caps->graphics);
virDomainCapsDeviceVideoFormat(buf, &caps->video);
virDomainCapsDeviceHostdevFormat(buf, &caps->hostdev); virDomainCapsDeviceHostdevFormat(buf, &caps->hostdev);
virBufferAdjustIndent(buf, -2); virBufferAdjustIndent(buf, -2);

View File

@ -76,6 +76,15 @@ struct _virDomainCapsDeviceGraphics {
virDomainCapsEnum type; /* virDomainGraphicsType */ virDomainCapsEnum type; /* virDomainGraphicsType */
}; };
typedef struct _virDomainCapsDeviceVideo virDomainCapsDeviceVideo;
typedef virDomainCapsDeviceVideo *virDomainCapsDeviceVideoPtr;
struct _virDomainCapsDeviceVideo {
bool supported;
virDomainCapsEnum modelType; /* virDomainVideoType */
};
typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev; typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
typedef virDomainCapsDeviceHostdev *virDomainCapsDeviceHostdevPtr; typedef virDomainCapsDeviceHostdev *virDomainCapsDeviceHostdevPtr;
struct _virDomainCapsDeviceHostdev { struct _virDomainCapsDeviceHostdev {
@ -109,6 +118,7 @@ struct _virDomainCaps {
virDomainCapsOS os; virDomainCapsOS os;
virDomainCapsDeviceDisk disk; virDomainCapsDeviceDisk disk;
virDomainCapsDeviceGraphics graphics; virDomainCapsDeviceGraphics graphics;
virDomainCapsDeviceVideo video;
virDomainCapsDeviceHostdev hostdev; virDomainCapsDeviceHostdev hostdev;
/* add new domain devices here */ /* add new domain devices here */

View File

@ -4187,6 +4187,27 @@ virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps,
} }
static int
virQEMUCapsFillDomainDeviceVideoCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsDeviceVideoPtr dev)
{
dev->supported = true;
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VGA))
VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_VGA);
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_CIRRUS_VGA))
VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_CIRRUS);
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMWARE_SVGA))
VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_VMVGA);
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_QXL_VGA))
VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_QXL);
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_GPU))
VIR_DOMAIN_CAPS_ENUM_SET(dev->modelType, VIR_DOMAIN_VIDEO_TYPE_VIRTIO);
return 0;
}
static int static int
virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps, virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
virDomainCapsDeviceHostdevPtr hostdev) virDomainCapsDeviceHostdevPtr hostdev)
@ -4299,6 +4320,7 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virDomainCapsDeviceDiskPtr disk = &domCaps->disk; virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev; virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics; virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
virDomainCapsDeviceVideoPtr video = &domCaps->video;
int maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine); int maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine);
domCaps->maxvcpus = maxvcpus; domCaps->maxvcpus = maxvcpus;
@ -4308,6 +4330,7 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps,
domCaps->machine, disk) < 0 || domCaps->machine, disk) < 0 ||
virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics) < 0 || virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics) < 0 ||
virQEMUCapsFillDomainDeviceVideoCaps(qemuCaps, video) < 0 ||
virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0 || virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0 ||
virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps) < 0) virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps) < 0)
return -1; return -1;

View File

@ -7,6 +7,7 @@
<devices> <devices>
<disk supported='no'/> <disk supported='no'/>
<graphics supported='no'/> <graphics supported='no'/>
<video supported='no'/>
<hostdev supported='no'/> <hostdev supported='no'/>
</devices> </devices>
<features> <features>

View File

@ -48,6 +48,18 @@
<value>spice</value> <value>spice</value>
</enum> </enum>
</graphics> </graphics>
<video supported='yes'>
<enum name='modelType'>
<value>vga</value>
<value>cirrus</value>
<value>vmvga</value>
<value>xen</value>
<value>vbox</value>
<value>qxl</value>
<value>parallels</value>
<value>virtio</value>
</enum>
</video>
<hostdev supported='yes'> <hostdev supported='yes'>
<enum name='mode'> <enum name='mode'>
<value>subsystem</value> <value>subsystem</value>

View File

@ -41,6 +41,14 @@
<value>spice</value> <value>spice</value>
</enum> </enum>
</graphics> </graphics>
<video supported='yes'>
<enum name='modelType'>
<value>vga</value>
<value>cirrus</value>
<value>vmvga</value>
<value>qxl</value>
</enum>
</video>
<hostdev supported='yes'> <hostdev supported='yes'>
<enum name='mode'> <enum name='mode'>
<value>subsystem</value> <value>subsystem</value>

View File

@ -41,6 +41,15 @@
<value>spice</value> <value>spice</value>
</enum> </enum>
</graphics> </graphics>
<video supported='yes'>
<enum name='modelType'>
<value>vga</value>
<value>cirrus</value>
<value>vmvga</value>
<value>qxl</value>
<value>virtio</value>
</enum>
</video>
<hostdev supported='yes'> <hostdev supported='yes'>
<enum name='mode'> <enum name='mode'>
<value>subsystem</value> <value>subsystem</value>

View File

@ -40,6 +40,13 @@
<value>vnc</value> <value>vnc</value>
</enum> </enum>
</graphics> </graphics>
<video supported='yes'>
<enum name='modelType'>
<value>vga</value>
<value>qxl</value>
<value>virtio</value>
</enum>
</video>
<hostdev supported='yes'> <hostdev supported='yes'>
<enum name='mode'> <enum name='mode'>
<value>subsystem</value> <value>subsystem</value>

View File

@ -40,6 +40,13 @@
<value>vnc</value> <value>vnc</value>
</enum> </enum>
</graphics> </graphics>
<video supported='yes'>
<enum name='modelType'>
<value>vga</value>
<value>qxl</value>
<value>virtio</value>
</enum>
</video>
<hostdev supported='yes'> <hostdev supported='yes'>
<enum name='mode'> <enum name='mode'>
<value>subsystem</value> <value>subsystem</value>

View File

@ -40,6 +40,13 @@
<value>vnc</value> <value>vnc</value>
</enum> </enum>
</graphics> </graphics>
<video supported='yes'>
<enum name='modelType'>
<value>vga</value>
<value>qxl</value>
<value>virtio</value>
</enum>
</video>
<hostdev supported='yes'> <hostdev supported='yes'>
<enum name='mode'> <enum name='mode'>
<value>subsystem</value> <value>subsystem</value>

View File

@ -38,6 +38,13 @@
<value>vnc</value> <value>vnc</value>
</enum> </enum>
</graphics> </graphics>
<video supported='yes'>
<enum name='modelType'>
<value>vga</value>
<value>qxl</value>
<value>virtio</value>
</enum>
</video>
<hostdev supported='yes'> <hostdev supported='yes'>
<enum name='mode'> <enum name='mode'>
<value>subsystem</value> <value>subsystem</value>

View File

@ -62,6 +62,7 @@ fillAllCaps(virDomainCapsPtr domCaps)
virDomainCapsLoaderPtr loader = &os->loader; virDomainCapsLoaderPtr loader = &os->loader;
virDomainCapsDeviceDiskPtr disk = &domCaps->disk; virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics; virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
virDomainCapsDeviceVideoPtr video = &domCaps->video;
virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev; virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
domCaps->maxvcpus = 255; domCaps->maxvcpus = 255;
@ -83,6 +84,9 @@ fillAllCaps(virDomainCapsPtr domCaps)
graphics->supported = true; graphics->supported = true;
SET_ALL_BITS(graphics->type); SET_ALL_BITS(graphics->type);
video->supported = true;
SET_ALL_BITS(video->modelType);
hostdev->supported = true; hostdev->supported = true;
SET_ALL_BITS(hostdev->mode); SET_ALL_BITS(hostdev->mode);
SET_ALL_BITS(hostdev->startupPolicy); SET_ALL_BITS(hostdev->startupPolicy);