]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
domaincaps: Report graphics type enum
authorCole Robinson <crobinso@redhat.com>
Sun, 8 May 2016 15:57:20 +0000 (11:57 -0400)
committerCole Robinson <crobinso@redhat.com>
Mon, 9 May 2016 20:05:31 +0000 (16:05 -0400)
Requires adding the plumbing for <device><graphics>
Wire it up for qemu too

14 files changed:
docs/formatdomaincaps.html.in
docs/schemas/domaincaps.rng
src/conf/domain_capabilities.c
src/conf/domain_capabilities.h
src/qemu/qemu_capabilities.c
tests/domaincapsschemadata/domaincaps-basic.xml
tests/domaincapsschemadata/domaincaps-full.xml
tests/domaincapsschemadata/domaincaps-qemu_1.6.50-1.xml
tests/domaincapsschemadata/domaincaps-qemu_2.6.0-1.xml
tests/domaincapsschemadata/domaincaps-qemu_2.6.0-2.xml
tests/domaincapsschemadata/domaincaps-qemu_2.6.0-3.xml
tests/domaincapsschemadata/domaincaps-qemu_2.6.0-4.xml
tests/domaincapsschemadata/domaincaps-qemu_2.6.0-5.xml
tests/domaincapstest.c

index edbb948215dea6df267adb18c64740cd1c7327a6..52e44637f2e82b8ef65179beec5afcd75b318876 100644 (file)
     <code>floppy</code>, or <code>lun</code>.</p>
 
     <h4><a name="elementsDisks">Hard drives, floppy disks, CDROMs</a></h4>
-    <p>Disk capabilities are exposed under <code>disk</code> element. For
+    <p>Disk capabilities are exposed under the <code>disk</code> element. For
     instance:</p>
 
 <pre>
       element for a &lt;disk/&gt;.</dd>
     </dl>
 
+
+    <h4><a name="elementsGraphics">Graphical framebuffers</a></h4>
+    <p>Graphics device capabilities are exposed under the
+    <code>graphics</code> element. For instance:</p>
+
+<pre>
+&lt;domainCapabilities&gt;
+  ...
+  &lt;devices&gt;
+    &lt;graphics supported='yes'&gt;
+      &lt;enum name='type'&gt;
+        &lt;value&gt;sdl&lt;/value&gt;
+        &lt;value&gt;vnc&lt;/value&gt;
+        &lt;value&gt;spice&lt;/value&gt;
+      &lt;/enum&gt;
+    &lt;/graphics&gt;
+    ...
+  &lt;/devices&gt;
+&lt;/domainCapabilities&gt;
+</pre>
+
+    <dl>
+      <dt><code>type</code></dt>
+      <dd>Options for the <code>type</code> attribute of the &lt;graphics/&gt;
+      element.</dd>
+    </dl>
+
+
     <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
     SCSI). Well, only if the following is enabled:</p>
index 0d2777b56ec1a68cc3109df812ff3d7b0d435a57..3e82b5771a3331ea46a930fa0aef90b3027107ed 100644 (file)
@@ -72,6 +72,7 @@
     <element name='devices'>
       <interleave>
         <ref name='disk'/>
+        <ref name='graphics'/>
         <ref name='hostdev'/>
       </interleave>
     </element>
     </element>
   </define>
 
+  <define name='graphics'>
+    <element name='graphics'>
+      <ref name='supported'/>
+      <ref name='enum'/>
+    </element>
+  </define>
+
   <define name='hostdev'>
     <element name='hostdev'>
       <ref name='supported'/>
index eb880ae389014e488dbe1446a24e556604f26970..232acd5fe302d6683329bdfcb98be5839673d740 100644 (file)
@@ -246,6 +246,18 @@ virDomainCapsDeviceDiskFormat(virBufferPtr buf,
 }
 
 
+static void
+virDomainCapsDeviceGraphicsFormat(virBufferPtr buf,
+                                  virDomainCapsDeviceGraphicsPtr const graphics)
+{
+    FORMAT_PROLOGUE(graphics);
+
+    ENUM_PROCESS(graphics, type, virDomainGraphicsTypeToString);
+
+    FORMAT_EPILOGUE(graphics);
+}
+
+
 static void
 virDomainCapsDeviceHostdevFormat(virBufferPtr buf,
                                  virDomainCapsDeviceHostdevPtr const hostdev)
@@ -314,6 +326,7 @@ virDomainCapsFormatInternal(virBufferPtr buf,
     virBufferAdjustIndent(buf, 2);
 
     virDomainCapsDeviceDiskFormat(buf, &caps->disk);
+    virDomainCapsDeviceGraphicsFormat(buf, &caps->graphics);
     virDomainCapsDeviceHostdevFormat(buf, &caps->hostdev);
 
     virBufferAdjustIndent(buf, -2);
index 95afe5e83473cc8ff8d5c4cf0dbf26b721ef2403..545ada762c0006649e7177561aa1adf83e5dd4ce 100644 (file)
@@ -69,6 +69,13 @@ struct _virDomainCapsDeviceDisk {
     /* add new fields here */
 };
 
+typedef struct _virDomainCapsDeviceGraphics virDomainCapsDeviceGraphics;
+typedef virDomainCapsDeviceGraphics *virDomainCapsDeviceGraphicsPtr;
+struct _virDomainCapsDeviceGraphics {
+    bool supported;
+    virDomainCapsEnum type;   /* virDomainGraphicsType */
+};
+
 typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
 typedef virDomainCapsDeviceHostdev *virDomainCapsDeviceHostdevPtr;
 struct _virDomainCapsDeviceHostdev {
@@ -101,6 +108,7 @@ struct _virDomainCaps {
 
     virDomainCapsOS os;
     virDomainCapsDeviceDisk disk;
+    virDomainCapsDeviceGraphics graphics;
     virDomainCapsDeviceHostdev hostdev;
     /* add new domain devices here */
 
index 30dc33a5d301485ae90befcf90eaabd8794461cd..c675f9f4981d6a58f8c870fddd9ae76ffba5fafe 100644 (file)
@@ -4170,6 +4170,23 @@ virQEMUCapsFillDomainDeviceDiskCaps(virQEMUCapsPtr qemuCaps,
 }
 
 
+static int
+virQEMUCapsFillDomainDeviceGraphicsCaps(virQEMUCapsPtr qemuCaps,
+                                        virDomainCapsDeviceGraphicsPtr dev)
+{
+    dev->supported = true;
+
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SDL))
+        VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SDL);
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_VNC))
+        VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_VNC);
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SPICE))
+        VIR_DOMAIN_CAPS_ENUM_SET(dev->type, VIR_DOMAIN_GRAPHICS_TYPE_SPICE);
+
+    return 0;
+}
+
+
 static int
 virQEMUCapsFillDomainDeviceHostdevCaps(virQEMUCapsPtr qemuCaps,
                                        virDomainCapsDeviceHostdevPtr hostdev)
@@ -4281,13 +4298,16 @@ virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
     virDomainCapsOSPtr os = &domCaps->os;
     virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
     virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
+    virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
     int maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine);
 
     domCaps->maxvcpus = maxvcpus;
 
     if (virQEMUCapsFillDomainOSCaps(qemuCaps, os,
                                     loader, nloader) < 0 ||
-        virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps, domCaps->machine, disk) < 0 ||
+        virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps,
+                                            domCaps->machine, disk) < 0 ||
+        virQEMUCapsFillDomainDeviceGraphicsCaps(qemuCaps, graphics) < 0 ||
         virQEMUCapsFillDomainDeviceHostdevCaps(qemuCaps, hostdev) < 0 ||
         virQEMUCapsFillDomainFeatureGICCaps(qemuCaps, domCaps) < 0)
         return -1;
index 6587d56a704eba2e5a240ddc78bc7bce0688491b..f0f08642cdca3dae5bb4f2331492c84a61ece23a 100644 (file)
@@ -6,6 +6,7 @@
   <os supported='no'/>
   <devices>
     <disk supported='no'/>
+    <graphics supported='no'/>
     <hostdev supported='no'/>
   </devices>
   <features>
index d4f91fa600511e2c201fd63462d976821fed7d9e..b3b8855a7f318da54e82bd16b61201cd01ccd1c6 100644 (file)
         <value>sd</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>rdp</value>
+        <value>desktop</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
index 1e73ff11c01e58191771cd8867249877005a055c..147424d6747e6e7c8dfce891a01f0e7b9c4fcfb3 100644 (file)
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
index 244700a1e177951ef4d9ec19917a062323ea71ec..f8f7465f531f1a75c2163df6a2e0cbeae56e4695 100644 (file)
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
index 411c6b7a0b74afc51b655cc399bbab13fbb749cd..79137032880a27f2d95e536aac2c735cdbfd4a0f 100644 (file)
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
index 21c59a89f5ee0bc7a4bc0ccaadd73ac7475c0783..6f30819dfeb8b6d4a6ee6c21c1470b65ca641c5f 100644 (file)
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
index c972d5eea4347a92ea778f518179016c04254b05..6845e92e3a7b2f4977313d01c8fc4421396e73ca 100644 (file)
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
index e4b8c3a0b998bae3177d55c67a002133500f9872..68d88d1fc9e7bbba2510cf0c08f424fa62c26c3c 100644 (file)
         <value>usb</value>
       </enum>
     </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
     <hostdev supported='yes'>
       <enum name='mode'>
         <value>subsystem</value>
index ee7855536307800c85aee93947fa102414a0a9da..6bef6823cd5cd698f42206991652758e6aa77c26 100644 (file)
@@ -61,6 +61,7 @@ fillAllCaps(virDomainCapsPtr domCaps)
     virDomainCapsOSPtr os = &domCaps->os;
     virDomainCapsLoaderPtr loader = &os->loader;
     virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
+    virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
     virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
     domCaps->maxvcpus = 255;
 
@@ -79,6 +80,9 @@ fillAllCaps(virDomainCapsPtr domCaps)
     SET_ALL_BITS(disk->diskDevice);
     SET_ALL_BITS(disk->bus);
 
+    graphics->supported = true;
+    SET_ALL_BITS(graphics->type);
+
     hostdev->supported = true;
     SET_ALL_BITS(hostdev->mode);
     SET_ALL_BITS(hostdev->startupPolicy);