From patchwork Tue Jun 22 08:57:51 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v2, 6/8] seabios: pciinit: make bar offset calculation pci bridge aware. Date: Mon, 21 Jun 2010 22:57:51 -0000 From: Isaku Yamahata X-Patchwork-Id: 56434 Message-Id: To: seabios@seabios.org Cc: stefano.stabellini@eu.citrix.com, jan.kiszka@siemens.com, mst@redhat.com, allen.m.kay@intel.com, qemu-devel@nongnu.org, yamahata@valinux.co.jp, jean.guyader@gmail.com This patch makes pci bar offset calculation pci bridge aware. The offset of pci bridge rom is different from normal device. Signed-off-by: Isaku Yamahata --- src/pciinit.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/src/pciinit.c b/src/pciinit.c index 9109739..23b79bc 100644 --- a/src/pciinit.c +++ b/src/pciinit.c @@ -27,7 +27,11 @@ static u32 pci_bar(u16 bdf, int region_num) if (region_num != PCI_ROM_SLOT) { return PCI_BASE_ADDRESS_0 + region_num * 4; } - return PCI_ROM_ADDRESS; + +#define PCI_HEADER_TYPE_MULTI_FUNCTION 0x80 + u8 type = pci_config_readb(bdf, PCI_HEADER_TYPE); + type &= ~PCI_HEADER_TYPE_MULTI_FUNCTION; + return type == PCI_HEADER_TYPE_BRIDGE ? PCI_ROM_ADDRESS1 : PCI_ROM_ADDRESS; } static void pci_set_io_region_addr(u16 bdf, int region_num, u32 addr)