From patchwork Fri Sep 21 11:20:06 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasilis Liaskovitis X-Patchwork-Id: 1491461 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id B07EBDF28C for ; Fri, 21 Sep 2012 11:20:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933085Ab2IULUL (ORCPT ); Fri, 21 Sep 2012 07:20:11 -0400 Received: from mail-bk0-f46.google.com ([209.85.214.46]:33483 "EHLO mail-bk0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933015Ab2IULUK (ORCPT ); Fri, 21 Sep 2012 07:20:10 -0400 Received: by bkuw11 with SMTP id w11so745055bku.19 for ; Fri, 21 Sep 2012 04:20:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent :x-gm-message-state; bh=1WJ/mOihguGDIhXRtedLUldkgSB298gV4LjeEjDLFgk=; b=KM1fTnWBfqr5pvaSZLMQCjYt6IFmVNfWbLLAOrfAVyxgxeB8KagHpZBKkRK4U5zQiI WGUOeUX45UdHYOgMdSM/cPcAahsR31+1CkPvzaamXX7N6qJZQjn59gBC6Dp95T4UwQev 3fZrTr6HPsSxwlRzrubjJbUzUoFas+zf8N5EtUEm9+H8uAunessElkFmVOyLze1QGKFK imQYwkGbYePs/dsZo7uMdGQLjSzUA1GpHJiVDwkDhmzN3JT2hU+dEIu53UQrjJVArqFR kKawZ6qXSVY57mfnhCb4CDFcbTcki+Ul76BbFe7bYDuKtfv73G8N59eHJFude0Hi8Le0 SJdQ== Received: by 10.204.7.136 with SMTP id d8mr1939085bkd.85.1348226408703; Fri, 21 Sep 2012 04:20:08 -0700 (PDT) Received: from dhcp-192-168-178-175.profitbricks.localdomain ([62.217.45.26]) by mx.google.com with ESMTPS id j9sm6082123bkv.0.2012.09.21.04.20.07 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 21 Sep 2012 04:20:08 -0700 (PDT) Date: Fri, 21 Sep 2012 13:20:06 +0200 From: Vasilis Liaskovitis To: qemu-devel@nongnu.org, kvm@vger.kernel.org, seabios@seabios.org Cc: avi@redhat.com, anthony@codemonkey.ws, kevin@koconnor.net, wency@cn.fujitsu.com, kraxel@redhat.com, eblake@redhat.com, blauwirbel@gmail.com, gleb@redhat.com, imammedo@redhat.com Subject: [RFC PATCH v3 20/19][SeaBIOS] alternative: Use paravirt interface for pci windows Message-ID: <20120921112006.GD2133@dhcp-192-168-178-175.profitbricks.localdomain> References: <1348226255-4226-1-git-send-email-vasilis.liaskovitis@profitbricks.com> <1348226255-4226-20-git-send-email-vasilis.liaskovitis@profitbricks.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1348226255-4226-20-git-send-email-vasilis.liaskovitis@profitbricks.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Gm-Message-State: ALoCoQldDNKabYnaLABeJnBVBwrJGCHWda2p8iud9PlIUklCAdVxqcPb4+KQWXdNXgZ+YU/mHkcU Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Initialize the 32-bit and 64-bit pci starting offsets from values passed in by the qemu paravirt interface QEMU_CFG_PCI_WINDOW. Qemu calculates the starting offsets based on initial memory and hotplug-able dimms. Signed-off-by: Vasilis Liaskovitis --- src/paravirt.c | 6 ++++++ src/paravirt.h | 2 ++ src/pciinit.c | 5 ++--- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/paravirt.c b/src/paravirt.c index 2a98d53..390ef30 100644 --- a/src/paravirt.c +++ b/src/paravirt.c @@ -346,3 +346,9 @@ void qemu_cfg_romfile_setup(void) dprintf(3, "Found fw_cfg file: %s (size=%d)\n", file->name, file->size); } } + +void qemu_cfg_get_pci_offsets(u64 *pcimem_start, u64 *pcimem64_start) +{ + qemu_cfg_read_entry(pcimem_start, QEMU_CFG_PCI_WINDOW, sizeof(u64)); + qemu_cfg_read((u8*)(pcimem64_start), sizeof(u64)); +} diff --git a/src/paravirt.h b/src/paravirt.h index a284c41..b53ff88 100644 --- a/src/paravirt.h +++ b/src/paravirt.h @@ -35,6 +35,7 @@ static inline int kvm_para_available(void) #define QEMU_CFG_BOOT_MENU 0x0e #define QEMU_CFG_MAX_CPUS 0x0f #define QEMU_CFG_FILE_DIR 0x19 +#define QEMU_CFG_PCI_WINDOW 0x1a #define QEMU_CFG_ARCH_LOCAL 0x8000 #define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) #define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) @@ -65,5 +66,6 @@ struct e820_reservation { u32 qemu_cfg_e820_entries(void); void* qemu_cfg_e820_load_next(void *addr); void qemu_cfg_romfile_setup(void); +void qemu_cfg_get_pci_offsets(u64 *pcimem_start, u64 *pcimem64_start); #endif diff --git a/src/pciinit.c b/src/pciinit.c index 68f302a..64468a0 100644 --- a/src/pciinit.c +++ b/src/pciinit.c @@ -592,8 +592,7 @@ static void pci_region_map_entries(struct pci_bus *busses, struct pci_region *r) static void pci_bios_map_devices(struct pci_bus *busses) { - pcimem_start = RamSize; - + qemu_cfg_get_pci_offsets(&pcimem_start, &pcimem64_start); if (pci_bios_init_root_regions(busses)) { struct pci_region r64_mem, r64_pref; r64_mem.list = NULL; @@ -611,7 +610,7 @@ static void pci_bios_map_devices(struct pci_bus *busses) u64 align_mem = pci_region_align(&r64_mem); u64 align_pref = pci_region_align(&r64_pref); - r64_mem.base = ALIGN(0x100000000LL + RamSizeOver4G, align_mem); + r64_mem.base = ALIGN(pcimem64_start, align_mem); r64_pref.base = ALIGN(r64_mem.base + sum_mem, align_pref); pcimem64_start = r64_mem.base; pcimem64_end = r64_pref.base + sum_pref;