From 4f8589e11558f1151d95a4a3e9fce902f042df3d Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Fri, 30 Oct 2009 21:21:10 +0900 Subject: [PATCH] pci: typedef pcibus_t as uint64_t instead of uint32_t. This patch is preliminary for 64bit bar. For 64bit bar support, change pcibus_t which represents pci bus addr/size from uint32_t to uint64_t. And also change FMT_pcibus for printf. In pci_update_mapping() checks 32bit overflow. So the check must be updated too. Signed-off-by: Isaku Yamahata Signed-off-by: Anthony Liguori --- hw/pci.c | 9 ++++++++- hw/pci.h | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 5cf50e0562..b462bd6246 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -524,7 +524,14 @@ static void pci_update_mappings(PCIDevice *d) mappings, we handle specific values as invalid mappings. */ if (last_addr <= new_addr || new_addr == 0 || - last_addr == PCI_BAR_UNMAPPED) { + last_addr == PCI_BAR_UNMAPPED || + + /* Now pcibus_t is 64bit. + * Check if 32 bit BAR wrap around explicitly. + * Without this, PC ide doesn't work well. + * TODO: remove this work around. + */ + last_addr >= UINT32_MAX) { new_addr = PCI_BAR_UNMAPPED; } } else { diff --git a/hw/pci.h b/hw/pci.h index fa2077dda1..305c030f9c 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -71,8 +71,8 @@ extern target_phys_addr_t pci_mem_base; #define PCI_DEVICE_ID_VIRTIO_BALLOON 0x1002 #define PCI_DEVICE_ID_VIRTIO_CONSOLE 0x1003 -typedef uint32_t pcibus_t; -#define FMT_PCIBUS PRIx32 +typedef uint64_t pcibus_t; +#define FMT_PCIBUS PRIx64 typedef void PCIConfigWriteFunc(PCIDevice *pci_dev, uint32_t address, uint32_t data, int len); -- 2.11.0