From 5e434f4e60f8e5a9dadf324b3ee31c3ce0e80165 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Thu, 27 May 2010 14:42:06 +0900 Subject: pci: clean up of pci_set_default_subsystem_id(). Use pci accessor function. don't return value because it always return 0 and the caller doesn't check the return value. Signed-off-by: Isaku Yamahata Signed-off-by: Michael S. Tsirkin --- hw/pci.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'hw') diff --git a/hw/pci.c b/hw/pci.c index 8d84651f19..3362842bf2 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -419,14 +419,12 @@ int pci_device_load(PCIDevice *s, QEMUFile *f) return ret; } -static int pci_set_default_subsystem_id(PCIDevice *pci_dev) +static void pci_set_default_subsystem_id(PCIDevice *pci_dev) { - uint16_t *id; - - id = (void*)(&pci_dev->config[PCI_SUBSYSTEM_VENDOR_ID]); - id[0] = cpu_to_le16(pci_default_sub_vendor_id); - id[1] = cpu_to_le16(pci_default_sub_device_id); - return 0; + pci_set_word(pci_dev->config + PCI_SUBSYSTEM_VENDOR_ID, + pci_default_sub_vendor_id); + pci_set_word(pci_dev->config + PCI_SUBSYSTEM_ID, + pci_default_sub_device_id); } /* -- cgit v1.2.3 From 3c18685f43acd81626e7e7bafc5967f04ee48090 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Thu, 27 May 2010 14:42:37 +0900 Subject: pci: add const to pci_is_express(), pci_config_size(). add const to pci_is_express(), pci_config_size(). Signed-off-by: Isaku Yamahata Signed-off-by: Michael S. Tsirkin --- hw/pci.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'hw') diff --git a/hw/pci.h b/hw/pci.h index f6e6c5f419..1e76ef03c8 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -350,12 +350,12 @@ void pci_qdev_register_many(PCIDeviceInfo *info); PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name); PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name); -static inline int pci_is_express(PCIDevice *d) +static inline int pci_is_express(const PCIDevice *d) { return d->cap_present & QEMU_PCI_CAP_EXPRESS; } -static inline uint32_t pci_config_size(PCIDevice *d) +static inline uint32_t pci_config_size(const PCIDevice *d) { return pci_is_express(d) ? PCIE_CONFIG_SPACE_SIZE : PCI_CONFIG_SPACE_SIZE; } -- cgit v1.2.3 From 0c6fcb62100d5ed0819963b2b20879b1e61691db Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Thu, 27 May 2010 14:40:02 +0900 Subject: pci.h: remove unused constants. So remove unused constants, PCI_STATUS_RESERVED_MASK_LO, PCI_STATUS_RESERVED_MASK_HI, PCI_COMMAND_RESERVED, PCI_COMMAND_RESERVED_MASK_HI. They were used once, but they aren't used anymore. Signed-off-by: Isaku Yamahata Signed-off-by: Michael S. Tsirkin --- hw/pci.h | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'hw') diff --git a/hw/pci.h b/hw/pci.h index 1e76ef03c8..b8035931cf 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -97,17 +97,6 @@ typedef struct PCIIORegion { /* PCI HEADER_TYPE */ #define PCI_HEADER_TYPE_MULTI_FUNCTION 0x80 -#define PCI_STATUS_RESERVED_MASK_LO (PCI_STATUS_RESERVED1 | \ - PCI_STATUS_INT_STATUS | PCI_STATUS_CAPABILITIES | \ - PCI_STATUS_66MHZ | PCI_STATUS_RESERVED2 | PCI_STATUS_FAST_BACK) - -#define PCI_STATUS_RESERVED_MASK_HI (PCI_STATUS_DEVSEL >> 8) - -/* Bits in the PCI Command Register (PCI 2.3 spec) */ -#define PCI_COMMAND_RESERVED 0xf800 - -#define PCI_COMMAND_RESERVED_MASK_HI (PCI_COMMAND_RESERVED >> 8) - /* Size of the standard PCI config header */ #define PCI_CONFIG_HEADER_SIZE 0x40 /* Size of the standard PCI config space */ -- cgit v1.2.3 From 1b4e8f732d118d1bd64c49e3c9d90832f8214272 Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Thu, 27 May 2010 14:40:37 +0900 Subject: msix: remove duplicated defines. remove defines which are already defined in pci_regs.h Signed-off-by: Isaku Yamahata Signed-off-by: Michael S. Tsirkin --- hw/msix.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'hw') diff --git a/hw/msix.c b/hw/msix.c index 2ca0900c3c..1613bb4f11 100644 --- a/hw/msix.c +++ b/hw/msix.c @@ -15,14 +15,6 @@ #include "msix.h" #include "pci.h" -/* Declaration from linux/pci_regs.h */ -#define PCI_CAP_ID_MSIX 0x11 /* MSI-X */ -#define PCI_MSIX_FLAGS 2 /* Table at lower 11 bits */ -#define PCI_MSIX_FLAGS_QSIZE 0x7FF -#define PCI_MSIX_FLAGS_ENABLE (1 << 15) -#define PCI_MSIX_FLAGS_MASKALL (1 << 14) -#define PCI_MSIX_FLAGS_BIRMASK (7 << 0) - /* MSI-X capability structure */ #define MSIX_TABLE_OFFSET 4 #define MSIX_PBA_OFFSET 8 -- cgit v1.2.3 From e075e788c9e882f5bebfb350f725ee7e4273033f Mon Sep 17 00:00:00 2001 From: Isaku Yamahata Date: Fri, 28 May 2010 18:30:46 +0900 Subject: pci-hotplug: make them aware of pci domain. add helper function which converts root bus to pci domain. make them aware of pci domain. Signed-off-by: Isaku Yamahata Signed-off-by: Michael S. Tsirkin --- hw/pci-hotplug.c | 7 ++++--- hw/pci.c | 22 +++++++++++++++++++++- hw/pci.h | 1 + 3 files changed, 26 insertions(+), 4 deletions(-) (limited to 'hw') diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c index 37ac015f7d..a8f3df1701 100644 --- a/hw/pci-hotplug.c +++ b/hw/pci-hotplug.c @@ -124,7 +124,7 @@ void drive_hot_add(Monitor *mon, const QDict *qdict) if (pci_read_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) { goto err; } - dev = pci_find_device(pci_find_root_bus(0), pci_bus, slot, 0); + dev = pci_find_device(pci_find_root_bus(dom), pci_bus, slot, 0); if (!dev) { monitor_printf(mon, "no pci device with address %s\n", pci_addr); goto err; @@ -252,7 +252,8 @@ void pci_device_hot_add(Monitor *mon, const QDict *qdict) if (dev) { monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n", - 0, pci_bus_num(dev->bus), PCI_SLOT(dev->devfn), + pci_find_domain(dev->bus), + pci_bus_num(dev->bus), PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); } else monitor_printf(mon, "failed to add %s\n", opts); @@ -269,7 +270,7 @@ int pci_device_hot_remove(Monitor *mon, const char *pci_addr) return -1; } - d = pci_find_device(pci_find_root_bus(0), bus, slot, 0); + d = pci_find_device(pci_find_root_bus(dom), bus, slot, 0); if (!d) { monitor_printf(mon, "slot %d empty\n", slot); return -1; diff --git a/hw/pci.c b/hw/pci.c index 3362842bf2..f084cc0285 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -200,6 +200,26 @@ PCIBus *pci_find_root_bus(int domain) return NULL; } +int pci_find_domain(const PCIBus *bus) +{ + PCIDevice *d; + struct PCIHostBus *host; + + /* obtain root bus */ + while ((d = bus->parent_dev) != NULL) { + bus = d->bus; + } + + QLIST_FOREACH(host, &host_buses, next) { + if (host->bus == bus) { + return host->domain; + } + } + + abort(); /* should not be reached */ + return -1; +} + void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent, const char *name, int devfn_min) { @@ -505,7 +525,7 @@ PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr) } *devfnp = slot << 3; - return pci_find_bus(pci_find_root_bus(0), bus); + return pci_find_bus(pci_find_root_bus(dom), bus); } static void pci_init_cmask(PCIDevice *dev) diff --git a/hw/pci.h b/hw/pci.h index b8035931cf..3a15bd4010 100644 --- a/hw/pci.h +++ b/hw/pci.h @@ -218,6 +218,7 @@ PCIDevice *pci_nic_init_nofail(NICInfo *nd, const char *default_model, int pci_bus_num(PCIBus *s); void pci_for_each_device(PCIBus *bus, int bus_num, void (*fn)(PCIBus *bus, PCIDevice *d)); PCIBus *pci_find_root_bus(int domain); +int pci_find_domain(const PCIBus *bus); PCIBus *pci_find_bus(PCIBus *bus, int bus_num); PCIDevice *pci_find_device(PCIBus *bus, int bus_num, int slot, int function); PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr); -- cgit v1.2.3