virtio-vga: add '-vga virtio' support

Some convinience fluff:  Add support for '-vga virtio', also add
virtio-vga to the list of vga cards so '-device virtio-vga' will
turn off the default vga.

Written by Dave Airlie and Gerd Hoffmann.

Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
Gerd Hoffmann 2014-09-10 14:28:48 +02:00
parent c5d4dac86b
commit a94f0c5ca2
5 changed files with 22 additions and 2 deletions

View File

@ -179,6 +179,9 @@ ISADevice *isa_vga_init(ISABus *bus)
case VGA_VMWARE: case VGA_VMWARE:
fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __func__); fprintf(stderr, "%s: vmware_vga: no PCI bus\n", __func__);
return NULL; return NULL;
case VGA_VIRTIO:
fprintf(stderr, "%s: virtio-vga: no PCI bus\n", __func__);
return NULL;
case VGA_NONE: case VGA_NONE:
default: default:
return NULL; return NULL;

View File

@ -1698,6 +1698,8 @@ PCIDevice *pci_vga_init(PCIBus *bus)
return pci_create_simple(bus, -1, "VGA"); return pci_create_simple(bus, -1, "VGA");
case VGA_VMWARE: case VGA_VMWARE:
return pci_create_simple(bus, -1, "vmware-svga"); return pci_create_simple(bus, -1, "vmware-svga");
case VGA_VIRTIO:
return pci_create_simple(bus, -1, "virtio-vga");
case VGA_NONE: case VGA_NONE:
default: /* Other non-PCI types. Checking for unsupported types is already default: /* Other non-PCI types. Checking for unsupported types is already
done in vl.c. */ done in vl.c. */

View File

@ -104,7 +104,7 @@ extern int autostart;
typedef enum { typedef enum {
VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL, VGA_NONE, VGA_STD, VGA_CIRRUS, VGA_VMWARE, VGA_XENFB, VGA_QXL,
VGA_TCX, VGA_CG3, VGA_DEVICE VGA_TCX, VGA_CG3, VGA_DEVICE, VGA_VIRTIO,
} VGAInterfaceType; } VGAInterfaceType;
extern int vga_interface_type; extern int vga_interface_type;

View File

@ -1103,7 +1103,7 @@ Rotate graphical output some deg left (only PXA LCD).
ETEXI ETEXI
DEF("vga", HAS_ARG, QEMU_OPTION_vga, DEF("vga", HAS_ARG, QEMU_OPTION_vga,
"-vga [std|cirrus|vmware|qxl|xenfb|tcx|cg3|none]\n" "-vga [std|cirrus|vmware|qxl|xenfb|tcx|cg3|virtio|none]\n"
" select video card type\n", QEMU_ARCH_ALL) " select video card type\n", QEMU_ARCH_ALL)
STEXI STEXI
@item -vga @var{type} @item -vga @var{type}
@ -1136,6 +1136,8 @@ fixed resolution of 1024x768.
(sun4m only) Sun cgthree framebuffer. This is a simple 8-bit framebuffer (sun4m only) Sun cgthree framebuffer. This is a simple 8-bit framebuffer
for sun4m machines available in both 1024x768 (OpenBIOS) and 1152x900 (OBP) for sun4m machines available in both 1024x768 (OpenBIOS) and 1152x900 (OBP)
resolutions aimed at people wishing to run older Solaris versions. resolutions aimed at people wishing to run older Solaris versions.
@item virtio
Virtio VGA card.
@item none @item none
Disable VGA card. Disable VGA card.
@end table @end table

13
vl.c
View File

@ -231,6 +231,7 @@ static struct {
{ .driver = "isa-cirrus-vga", .flag = &default_vga }, { .driver = "isa-cirrus-vga", .flag = &default_vga },
{ .driver = "vmware-svga", .flag = &default_vga }, { .driver = "vmware-svga", .flag = &default_vga },
{ .driver = "qxl-vga", .flag = &default_vga }, { .driver = "qxl-vga", .flag = &default_vga },
{ .driver = "virtio-vga", .flag = &default_vga },
}; };
static QemuOptsList qemu_rtc_opts = { static QemuOptsList qemu_rtc_opts = {
@ -1884,6 +1885,11 @@ static bool cg3_vga_available(void)
return object_class_by_name("cgthree"); return object_class_by_name("cgthree");
} }
static bool virtio_vga_available(void)
{
return object_class_by_name("virtio-vga");
}
static void select_vgahw (const char *p) static void select_vgahw (const char *p)
{ {
const char *opts; const char *opts;
@ -1910,6 +1916,13 @@ static void select_vgahw (const char *p)
fprintf(stderr, "Error: VMWare SVGA not available\n"); fprintf(stderr, "Error: VMWare SVGA not available\n");
exit(0); exit(0);
} }
} else if (strstart(p, "virtio", &opts)) {
if (virtio_vga_available()) {
vga_interface_type = VGA_VIRTIO;
} else {
fprintf(stderr, "Error: Virtio VGA not available\n");
exit(0);
}
} else if (strstart(p, "xenfb", &opts)) { } else if (strstart(p, "xenfb", &opts)) {
vga_interface_type = VGA_XENFB; vga_interface_type = VGA_XENFB;
} else if (strstart(p, "qxl", &opts)) { } else if (strstart(p, "qxl", &opts)) {