On Tue, May 19, 2009 at 10:35:40AM +0100, Daniel P. Berrange wrote:
We discussed adding a new XML element for representing video devices
a
few weeks back. This is my work in progress patch for the XML parsing
routines supporting
<video>
<model type='vga|cirrus|vmvga|xen' vram='64'
heads='1'/>
</video>
For compatability, if an existing guest has a <graphics> tag, but no
<video> tag, then the parser automatically adds a <video> tag for
type=cirrus. Still todo
- Tweak the addition of default <video> tag a little so it uses the
correct type for the type of guest - eg it should use type=xen in
some cases.
- Add RNG XML schemas & website docs
- Make QEMU driver use this info for setting -vga argument
- Make Xen drivers use this info for setting stdvga=1|0 config arg
- Make VirtualBox use this info in whatever way it needs
[...]
+static virDomainVideoDefPtr
+virDomainVideoDefParseXML(virConnectPtr conn,
+ const xmlNodePtr node,
+ int flags ATTRIBUTE_UNUSED) {
[...]
+ if (vram &&
+ virStrToLong_ui(vram, NULL, 10, &def->vram) < 0) {
+ virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse video ram '%s'"), vram);
+ goto error;
+ } else {
+ switch (def->type) {
+ /* Wierd, QEMU defaults to 9 MB ??! */
+ case VIR_DOMAIN_VIDEO_TYPE_VGA:
+ case VIR_DOMAIN_VIDEO_TYPE_CIRRUS:
+ case VIR_DOMAIN_VIDEO_TYPE_VMVGA:
+ def->vram = 9 * 1024;
+ break;
+ case VIR_DOMAIN_VIDEO_TYPE_XEN:
+ /* Original PVFB hardcoded to 4 MB */
+ def->vram = 4 * 1024;
+ break;
+ }
+ }
Maybe a default initialization routine could be used based on the
def->type/conn->type
[...
+ /* For backwards compatability, if no <video> tag is set
but there
+ * is a <graphics> tag, then we add a single video tag */
+ if (def->ngraphics && !def->nvideos) {
+ virDomainVideoDefPtr video;
+ if (VIR_ALLOC(video) < 0)
+ goto no_memory;
+ video->type = VIR_DOMAIN_VIDEO_TYPE_CIRRUS;
+ video->vram = 9 * 1024;
+ video->heads = 1;
+ if (VIR_ALLOC_N(def->videos, 1) < 0) {
+ virDomainVideoDefFree(video);
+ goto no_memory;
+ }
+ def->videos[def->nvideos++] = video;
+ }
and reused to implement the case by case default init here too
Patch looks fine so far !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/