From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=39610 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OYHup-00061k-5Z for qemu-devel@nongnu.org; Mon, 12 Jul 2010 08:15:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OYHun-0004I6-I4 for qemu-devel@nongnu.org; Mon, 12 Jul 2010 08:15:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:15377) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OYHun-0004Hq-Bu for qemu-devel@nongnu.org; Mon, 12 Jul 2010 08:15:17 -0400 Date: Mon, 12 Jul 2010 15:10:00 +0300 From: "Michael S. Tsirkin" Message-ID: <20100712121000.GA31649@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: [Qemu-devel] Re: [PATCH v2 5/5] pci_bridge: introduce pci bridge library. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Isaku Yamahata Cc: blauwirbel@gmail.com, qemu-devel@nongnu.org On Mon, Jul 12, 2010 at 07:36:44PM +0900, Isaku Yamahata wrote: > diff --git a/hw/pci_bridge.h b/hw/pci_bridge.h > index ddb2c82..4697c7a 100644 > --- a/hw/pci_bridge.h > +++ b/hw/pci_bridge.h > @@ -29,13 +29,27 @@ > #include "pci.h" > > PCIDevice *pci_bridge_get_device(PCIBus *bus); > +PCIBus *pci_bridge_get_sec_bus(PCIBridge *br); > > -pcibus_t pci_bridge_get_base(PCIDevice *bridge, uint8_t type); > -pcibus_t pci_bridge_get_limit(PCIDevice *bridge, uint8_t type); > +pcibus_t pci_bridge_get_base(const PCIDevice *bridge, uint8_t type); > +pcibus_t pci_bridge_get_limit(const PCIDevice *bridge, uint8_t type); > > -PCIBus *pci_bridge_init(PCIBus *bus, int devfn, bool multifunction, > - uint16_t vid, uint16_t did, > - pci_map_irq_fn map_irq, const char *name); > +void pci_bridge_write_config(PCIDevice *d, > + uint32_t address, uint32_t val, int len); > +void pci_bridge_reset_reg(PCIDevice *dev); > +void pci_bridge_reset(DeviceState *qdev); > + > +int pci_bridge_initfn(PCIDevice *pci_dev); > +int pci_bridge_exitfn(PCIDevice *pci_dev); > + > +void pci_bridge_qdev_register(PCIDeviceInfo *info); > + > +PCIBridge *pci_bridge_create(PCIBus *bus, int devfn, bool multifunction, > + pci_map_irq_fn map_irq, > + const char *name, const char *bus_name); > +PCIBridge *pci_bridge_create_simple(PCIBus *bus, int devfn, bool multifunction, > + pci_map_irq_fn map_irq, > + const char *name, const char *bus_name); The APIs leave much to be desired. _simple and regular are same? What does _register do? We really should just use qdev: Can't we use pci_qdev_register_many and pci_create to create the bridge? Long term, all pci_create variants should go and get replaced with qdev_create. > > #endif /* QEMU_PCI_BRIDGE_H */ > /* > diff --git a/hw/pci_internals.h b/hw/pci_internals.h > index fa844ab..6502f83 100644 > --- a/hw/pci_internals.h > +++ b/hw/pci_internals.h > @@ -30,11 +30,13 @@ struct PCIBus { > int *irq_count; > }; > > -typedef struct { > +struct PCIBridge { > PCIDevice dev; > + > + /* private member */ > PCIBus sec_bus; > - uint32_t vid; > - uint32_t did; > -} PCIBridge; > + pci_map_irq_fn map_irq; > + const char *bus_name; > +}; > > #endif /* QEMU_PCI_INTERNALS_H */ > diff --git a/qemu-common.h b/qemu-common.h > index 3fb2f0b..d735235 100644 > --- a/qemu-common.h > +++ b/qemu-common.h > @@ -219,6 +219,7 @@ typedef struct PCIHostState PCIHostState; > typedef struct PCIExpressHost PCIExpressHost; > typedef struct PCIBus PCIBus; > typedef struct PCIDevice PCIDevice; > +typedef struct PCIBridge PCIBridge; > typedef struct SerialState SerialState; > typedef struct IRQState *qemu_irq; > typedef struct PCMCIACardState PCMCIACardState; > -- > 1.7.1.1