From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43625) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sw5dw-0000C8-NU for qemu-devel@nongnu.org; Tue, 31 Jul 2012 02:09:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sw5dt-0003ne-Pe for qemu-devel@nongnu.org; Tue, 31 Jul 2012 02:09:20 -0400 From: David Gibson Date: Tue, 31 Jul 2012 16:09:03 +1000 Message-Id: <1343714945-20726-4-git-send-email-david@gibson.dropbear.id.au> In-Reply-To: <1343714945-20726-1-git-send-email-david@gibson.dropbear.id.au> References: <1343714945-20726-1-git-send-email-david@gibson.dropbear.id.au> Subject: [Qemu-devel] [PATCH 3/5] pseries: Add support for -vga option List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: agraf@suse.de Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org, David Gibson From: Ben Herrenschmidt Also instantiate the USB keyboard and mouse when that option is used (you can still use -device to create individual devices without all the defaults) Signed-off-by: Benjamin Herrenschmidt Signed-off-by: David Gibson --- hw/spapr.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/hw/spapr.c b/hw/spapr.c index 740881b..bf38823 100644 --- a/hw/spapr.c +++ b/hw/spapr.c @@ -46,6 +46,7 @@ #include "kvm_ppc.h" #include "pci.h" #include "usb.h" +#include "pc.h" #include "exec-memory.h" @@ -83,6 +84,7 @@ #define PHANDLE_XICP 0x00001111 sPAPREnvironment *spapr; +static bool spapr_has_graphics; qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num, enum xics_irq_type type) @@ -258,6 +260,9 @@ static void *spapr_create_fdt_skel(const char *cpu_model, _FDT((fdt_property(fdt, "qemu,boot-kernel", &kprop, sizeof(kprop)))); } _FDT((fdt_property_string(fdt, "qemu,boot-device", boot_device))); + _FDT((fdt_property_cell(fdt, "qemu,graphic-width", graphic_width))); + _FDT((fdt_property_cell(fdt, "qemu,graphic-height", graphic_height))); + _FDT((fdt_property_cell(fdt, "qemu,graphic-depth", graphic_depth))); _FDT((fdt_end_node(fdt))); @@ -504,7 +509,9 @@ static void spapr_finalize_fdt(sPAPREnvironment *spapr, } } - spapr_populate_chosen_stdout(fdt, spapr->vio_bus); + if (!spapr_has_graphics) { + spapr_populate_chosen_stdout(fdt, spapr->vio_bus); + } _FDT((fdt_pack(fdt))); @@ -557,6 +564,37 @@ static void spapr_cpu_reset(void *opaque) cpu_reset(CPU(cpu)); } +static bool spapr_vga_init(sPAPREnvironment *spapr) +{ + PCIBus *pci_bus = QLIST_FIRST(&spapr->phbs)->host_state.bus; + + if (!pci_bus && (vga_interface_type != VGA_NONE)) { + fprintf(stderr, "Can't instantiate VGA interface without a PCI bus\n"); + exit(1); + } + + /* Default is nothing */ +#if 0 /* Enable this once we merge a SLOF which works with Cirrus */ + if (cirrus_vga_enabled) { + pci_cirrus_vga_init(pci_bus); + } else +#endif + if (vmsvga_enabled) { + fprintf(stderr, "Warning: vmware_vga not available," + " using standard VGA instead\n"); + pci_vga_init(pci_bus); +#ifdef CONFIG_SPICE + } else if (qxl_enabled) { + pci_create_simple(pci_bus, -1, "qxl-vga"); +#endif + } else if (std_vga_enabled) { + pci_vga_init(pci_bus); + } else { + return false; + } + return true; +} + /* pSeries LPAR / sPAPR hardware init */ static void ppc_spapr_init(ram_addr_t ram_size, const char *boot_device, @@ -711,10 +749,20 @@ static void ppc_spapr_init(ram_addr_t ram_size, spapr_vscsi_create(spapr->vio_bus); } + /* Graphics */ + if (spapr_vga_init(spapr)) { + spapr_has_graphics = true; + usb_enabled = 1; + } + /* USB */ if (usb_enabled) { pci_create_simple(QLIST_FIRST(&spapr->phbs)->host_state.bus, -1, "pci-ohci"); + if (spapr_has_graphics) { + usbdevice_create("keyboard"); + usbdevice_create("mouse"); + } } if (rma_size < (MIN_RMA_SLOF << 20)) { -- 1.7.10.4