From patchwork Sun Oct 9 10:22:39 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Blue Swirl X-Patchwork-Id: 118579 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 8274EB70C8 for ; Sun, 9 Oct 2011 21:23:09 +1100 (EST) Received: from localhost ([::1]:54287 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RCqXD-00012W-1C for incoming@patchwork.ozlabs.org; Sun, 09 Oct 2011 06:23:07 -0400 Received: from eggs.gnu.org ([140.186.70.92]:38731) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RCqX6-00012O-V5 for qemu-devel@nongnu.org; Sun, 09 Oct 2011 06:23:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RCqX5-0003fV-DE for qemu-devel@nongnu.org; Sun, 09 Oct 2011 06:23:00 -0400 Received: from mail-qw0-f45.google.com ([209.85.216.45]:35985) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RCqX5-0003fQ-9K for qemu-devel@nongnu.org; Sun, 09 Oct 2011 06:22:59 -0400 Received: by qadb10 with SMTP id b10so4545765qad.4 for ; Sun, 09 Oct 2011 03:22:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; bh=qRXeEQf+uuq+og8x/Gko0+c20RcvadP7dv/KE12M6y4=; b=LybwrZ4Wf+ZGty9+Hq+TS9VvCyc+mlhVAesc4MdocyTPtTi1xeP0tNft5nEQvKBxR0 kGrQxyZu83cbSzo1iKjDtU35f0bFSR1ELRrL8n+gJXlyAeeaifEZMaEYFUWZU1j5Aa2b WHwjZMJnHToXEWi6/IVEci7bn/wLsf+HNliPM= Received: by 10.224.138.81 with SMTP id z17mr5817732qat.31.1318155779073; Sun, 09 Oct 2011 03:22:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.36.200 with HTTP; Sun, 9 Oct 2011 03:22:39 -0700 (PDT) From: Blue Swirl Date: Sun, 9 Oct 2011 10:22:39 +0000 Message-ID: To: qemu-devel X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.216.45 Subject: [Qemu-devel] [PATCH 1/3] vga: make PCI devices optional X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Signed-off-by: Blue Swirl --- hw/cirrus_vga.c | 5 ----- hw/pc.c | 6 +++++- hw/pc.h | 26 ++++++++++++++++++++++++-- hw/pci.c | 18 ++++++++++++++++++ hw/pci.h | 4 ++++ hw/vga-pci.c | 6 ------ 6 files changed, 51 insertions(+), 14 deletions(-) From 10ffb6a14f287979003c8f1b520e7d25bd5b1df5 Mon Sep 17 00:00:00 2001 Message-Id: <10ffb6a14f287979003c8f1b520e7d25bd5b1df5.1318155718.git.blauwirbel@gmail.com> From: Blue Swirl Date: Tue, 27 Sep 2011 19:15:42 +0000 Subject: [PATCH 1/3] vga: make PCI devices optional Signed-off-by: Blue Swirl --- hw/cirrus_vga.c | 5 ----- hw/pc.c | 6 +++++- hw/pc.h | 26 ++++++++++++++++++++++++-- hw/pci.c | 18 ++++++++++++++++++ hw/pci.h | 4 ++++ hw/vga-pci.c | 6 ------ 6 files changed, 51 insertions(+), 14 deletions(-) diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index c7e365b..a11444c 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -2955,11 +2955,6 @@ static int pci_cirrus_vga_initfn(PCIDevice *dev) return 0; } -void pci_cirrus_vga_init(PCIBus *bus) -{ - pci_create_simple(bus, -1, "cirrus-vga"); -} - static PCIDeviceInfo cirrus_vga_info = { .qdev.name = "cirrus-vga", .qdev.desc = "Cirrus CLGD 54xx VGA", diff --git a/hw/pc.c b/hw/pc.c index 203627d..97f93d4 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1068,7 +1068,11 @@ void pc_vga_init(PCIBus *pci_bus) { if (cirrus_vga_enabled) { if (pci_bus) { - pci_cirrus_vga_init(pci_bus); + if (!pci_cirrus_vga_init(pci_bus)) { + fprintf(stderr, "Warning: cirrus_vga not available," + " using standard VGA instead\n"); + pci_vga_init(pci_bus); + } } else { isa_cirrus_vga_init(get_system_memory()); } diff --git a/hw/pc.h b/hw/pc.h index 7e6ddba..90a502d 100644 --- a/hw/pc.h +++ b/hw/pc.h @@ -8,6 +8,7 @@ #include "fdc.h" #include "net.h" #include "memory.h" +#include "pci.h" /* PC-style peripherals (also used by other machines). */ @@ -217,13 +218,34 @@ static inline int isa_vga_init(void) return 1; } -int pci_vga_init(PCIBus *bus); +/* vga-pci.c */ +static inline bool pci_vga_init(PCIBus *bus) +{ + PCIDevice *dev; + + dev = pci_try_create_simple(bus, -1, "VGA"); + if (!dev) { + return false; + } + return true; +} + int isa_vga_mm_init(target_phys_addr_t vram_base, target_phys_addr_t ctrl_base, int it_shift, MemoryRegion *address_space); /* cirrus_vga.c */ -void pci_cirrus_vga_init(PCIBus *bus); +static inline bool pci_cirrus_vga_init(PCIBus *bus) +{ + PCIDevice *dev; + + dev = pci_try_create_simple(bus, -1, "cirrus-vga"); + if (!dev) { + return false; + } + return true; +} + void isa_cirrus_vga_init(MemoryRegion *address_space); /* ne2000.c */ diff --git a/hw/pci.c b/hw/pci.c index 749e8d8..46c01ac 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -1687,6 +1687,19 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn, return dev; } +PCIDevice *pci_try_create_simple_multifunction(PCIBus *bus, int devfn, + bool multifunction, + const char *name) +{ + PCIDevice *dev = pci_try_create_multifunction(bus, devfn, multifunction, + name); + if (!dev) { + return NULL; + } + qdev_init_nofail(&dev->qdev); + return dev; +} + PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name) { return pci_create_multifunction(bus, devfn, false, name); @@ -1702,6 +1715,11 @@ PCIDevice *pci_try_create(PCIBus *bus, int devfn, const char *name) return pci_try_create_multifunction(bus, devfn, false, name); } +PCIDevice *pci_try_create_simple(PCIBus *bus, int devfn, const char *name) +{ + return pci_try_create_simple_multifunction(bus, devfn, false, name); +} + static int pci_find_space(PCIDevice *pdev, uint8_t size) { int config_size = pci_config_size(pdev); diff --git a/hw/pci.h b/hw/pci.h index 86a81c8..aa2e040 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -473,9 +473,13 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn, PCIDevice *pci_try_create_multifunction(PCIBus *bus, int devfn, bool multifunction, const char *name); +PCIDevice *pci_try_create_simple_multifunction(PCIBus *bus, int devfn, + bool multifunction, + const char *name); PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name); PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name); PCIDevice *pci_try_create(PCIBus *bus, int devfn, const char *name); +PCIDevice *pci_try_create_simple(PCIBus *bus, int devfn, const char *name); static inline int pci_is_express(const PCIDevice *d) { diff --git a/hw/vga-pci.c b/hw/vga-pci.c index 3c8bcb0..f296b19 100644 --- a/hw/vga-pci.c +++ b/hw/vga-pci.c @@ -70,12 +70,6 @@ static int pci_vga_initfn(PCIDevice *dev) return 0; } -int pci_vga_init(PCIBus *bus) -{ - pci_create_simple(bus, -1, "VGA"); - return 0; -} - static PCIDeviceInfo vga_info = { .qdev.name = "VGA", .qdev.size = sizeof(PCIVGAState), -- 1.7.2.5