From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NDLFE-00048U-TL for qemu-devel@nongnu.org; Wed, 25 Nov 2009 12:01:33 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NDLF9-00047C-8G for qemu-devel@nongnu.org; Wed, 25 Nov 2009 12:01:31 -0500 Received: from [199.232.76.173] (port=42647 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NDLF8-00046z-Az for qemu-devel@nongnu.org; Wed, 25 Nov 2009 12:01:26 -0500 Received: from mx1.redhat.com ([209.132.183.28]:4256) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NDLF7-0003tQ-MO for qemu-devel@nongnu.org; Wed, 25 Nov 2009 12:01:26 -0500 Date: Wed, 25 Nov 2009 18:58:46 +0200 From: "Michael S. Tsirkin" Message-ID: <20091125165846.GB24783@redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Subject: [Qemu-devel] [PATCH 1/4] pci: rearrange code for interrupts List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, anthony@codemonkey.ws, yamahata@valinux.co.jp Rearranges code slightly in preparation for interrupt status and interrupt disable support: split actual irq change from irq_state management. Signed-off-by: Michael S. Tsirkin --- hw/pci.c | 26 ++++++++++++++++---------- 1 files changed, 16 insertions(+), 10 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 0359f30..5ff0d46 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -880,18 +880,9 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l) /***********************************************************/ /* generic PCI irq support */ -/* 0 <= irq_num <= 3. level must be 0 or 1 */ -static void pci_set_irq(void *opaque, int irq_num, int level) +static void pci_change_irq_level(PCIDevice *pci_dev, int irq_num, int change) { - PCIDevice *pci_dev = opaque; PCIBus *bus; - int change; - - change = level - pci_dev->irq_state[irq_num]; - if (!change) - return; - - pci_dev->irq_state[irq_num] = level; for (;;) { bus = pci_dev->bus; irq_num = bus->map_irq(pci_dev, irq_num); @@ -903,6 +894,21 @@ static void pci_set_irq(void *opaque, int irq_num, int level) bus->set_irq(bus->irq_opaque, irq_num, bus->irq_count[irq_num] != 0); } + +/* 0 <= irq_num <= 3. level must be 0 or 1 */ +static void pci_set_irq(void *opaque, int irq_num, int level) +{ + PCIDevice *pci_dev = opaque; + int change; + + change = level - pci_dev->irq_state[irq_num]; + if (!change) + return; + + pci_dev->irq_state[irq_num] = level; + pci_change_irq_level(pci_dev, irq_num, change); +} + /***********************************************************/ /* monitor info on PCI */ -- 1.6.5.2.143.g8cc62