Message ID | 20100624044112.16168.70618.stgit@localhost.localdomain |
---|---|
State | New |
Headers | show |
On Wed, Jun 23, 2010 at 10:41:13PM -0600, Alex Williamson wrote: > This works great for PCI since a <segment>:<bus>:<dev>.<fn> uniquely > describes a global address. No need to traverse up the qdev tree. > PCI segment support is a placeholder for compatibility once we > support multiple segments. > > Signed-off-by: Alex Williamson <alex.williamson@redhat.com> > --- > > hw/pci.c | 14 ++++++++++++++ > 1 files changed, 14 insertions(+), 0 deletions(-) > > diff --git a/hw/pci.c b/hw/pci.c > index 7787005..5c9d6b4 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -58,11 +58,13 @@ struct PCIBus { > }; > > static void pcibus_dev_print(Monitor *mon, DeviceState *dev, int indent); > +static char *pcibus_get_dev_path(DeviceState *dev); > > static struct BusInfo pci_bus_info = { > .name = "PCI", > .size = sizeof(PCIBus), > .print_dev = pcibus_dev_print, > + .get_dev_path = pcibus_get_dev_path, > .props = (Property[]) { > DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), > DEFINE_PROP_STRING("romfile", PCIDevice, romfile), > @@ -1853,6 +1855,18 @@ static void pcibus_dev_print(Monitor *mon, DeviceState *dev, int indent) > } > } > > +static char *pcibus_get_dev_path(DeviceState *dev) > +{ > + PCIDevice *d = (PCIDevice *)dev; > + char path[16]; > + > + snprintf(path, sizeof(path), "%04x:%02x:%02x.%x", > + 0 /* FIXME for segment support */, d->config[PCI_SECONDARY_BUS], pci_find_domain(d->bus) > + PCI_SLOT(d->devfn), PCI_FUNC(d->devfn)); > + > + return strdup(path); > +} > + > static PCIDeviceInfo bridge_info = { > .qdev.name = "pci-bridge", > .qdev.size = sizeof(PCIBridge), > >
On Thu, 2010-06-24 at 16:39 +0900, Isaku Yamahata wrote: > On Wed, Jun 23, 2010 at 10:41:13PM -0600, Alex Williamson wrote: > > This works great for PCI since a <segment>:<bus>:<dev>.<fn> uniquely > > describes a global address. No need to traverse up the qdev tree. > > PCI segment support is a placeholder for compatibility once we > > support multiple segments. > > > > Signed-off-by: Alex Williamson <alex.williamson@redhat.com> > > --- > > > > hw/pci.c | 14 ++++++++++++++ > > 1 files changed, 14 insertions(+), 0 deletions(-) > > > > diff --git a/hw/pci.c b/hw/pci.c > > index 7787005..5c9d6b4 100644 > > --- a/hw/pci.c > > +++ b/hw/pci.c > > @@ -58,11 +58,13 @@ struct PCIBus { > > }; > > > > static void pcibus_dev_print(Monitor *mon, DeviceState *dev, int indent); > > +static char *pcibus_get_dev_path(DeviceState *dev); > > > > static struct BusInfo pci_bus_info = { > > .name = "PCI", > > .size = sizeof(PCIBus), > > .print_dev = pcibus_dev_print, > > + .get_dev_path = pcibus_get_dev_path, > > .props = (Property[]) { > > DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), > > DEFINE_PROP_STRING("romfile", PCIDevice, romfile), > > @@ -1853,6 +1855,18 @@ static void pcibus_dev_print(Monitor *mon, DeviceState *dev, int indent) > > } > > } > > > > +static char *pcibus_get_dev_path(DeviceState *dev) > > +{ > > + PCIDevice *d = (PCIDevice *)dev; > > + char path[16]; > > + > > + snprintf(path, sizeof(path), "%04x:%02x:%02x.%x", > > + 0 /* FIXME for segment support */, d->config[PCI_SECONDARY_BUS], > > pci_find_domain(d->bus) Thank you Isaku, I'll make the change. Alex
diff --git a/hw/pci.c b/hw/pci.c index 7787005..5c9d6b4 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -58,11 +58,13 @@ struct PCIBus { }; static void pcibus_dev_print(Monitor *mon, DeviceState *dev, int indent); +static char *pcibus_get_dev_path(DeviceState *dev); static struct BusInfo pci_bus_info = { .name = "PCI", .size = sizeof(PCIBus), .print_dev = pcibus_dev_print, + .get_dev_path = pcibus_get_dev_path, .props = (Property[]) { DEFINE_PROP_PCI_DEVFN("addr", PCIDevice, devfn, -1), DEFINE_PROP_STRING("romfile", PCIDevice, romfile), @@ -1853,6 +1855,18 @@ static void pcibus_dev_print(Monitor *mon, DeviceState *dev, int indent) } } +static char *pcibus_get_dev_path(DeviceState *dev) +{ + PCIDevice *d = (PCIDevice *)dev; + char path[16]; + + snprintf(path, sizeof(path), "%04x:%02x:%02x.%x", + 0 /* FIXME for segment support */, d->config[PCI_SECONDARY_BUS], + PCI_SLOT(d->devfn), PCI_FUNC(d->devfn)); + + return strdup(path); +} + static PCIDeviceInfo bridge_info = { .qdev.name = "pci-bridge", .qdev.size = sizeof(PCIBridge),
This works great for PCI since a <segment>:<bus>:<dev>.<fn> uniquely describes a global address. No need to traverse up the qdev tree. PCI segment support is a placeholder for compatibility once we support multiple segments. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> --- hw/pci.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)