summaryrefslogtreecommitdiffstats
path: root/meta/packages/qemu/files/qemu-pci-irq-sharing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/packages/qemu/files/qemu-pci-irq-sharing.patch')
-rw-r--r--meta/packages/qemu/files/qemu-pci-irq-sharing.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/meta/packages/qemu/files/qemu-pci-irq-sharing.patch b/meta/packages/qemu/files/qemu-pci-irq-sharing.patch
new file mode 100644
index 0000000000..c47e89895f
--- /dev/null
+++ b/meta/packages/qemu/files/qemu-pci-irq-sharing.patch
@@ -0,0 +1,52 @@
1diff -pNaur qemu-cvs-ts-orig/hw/pci.c qemu-cvs-ts/hw/pci.c
2--- qemu-cvs-ts-orig/hw/pci.c 2006-08-17 10:46:34.000000000 +0000
3+++ qemu-cvs-ts/hw/pci.c 2006-09-23 17:02:41.000000000 +0000
4@@ -34,6 +34,7 @@ struct PCIBus {
5 SetIRQFunc *low_set_irq;
6 void *irq_opaque;
7 PCIDevice *devices[256];
8+ int irq_count[4];
9 };
10
11 static void pci_update_mappings(PCIDevice *d);
12@@ -49,6 +50,7 @@ PCIBus *pci_register_bus(pci_set_irq_fn
13 bus->set_irq = set_irq;
14 bus->irq_opaque = pic;
15 bus->devfn_min = devfn_min;
16+ memset(bus->irq_count, 0, sizeof(bus->irq_count));
17 first_bus = bus;
18 return bus;
19 }
20@@ -100,6 +102,7 @@ PCIDevice *pci_register_device(PCIBus *b
21 pci_dev->bus = bus;
22 pci_dev->devfn = devfn;
23 pstrcpy(pci_dev->name, sizeof(pci_dev->name), name);
24+ memset(pci_dev->irq_state, 0, sizeof(pci_dev->irq_state));
25
26 if (!config_read)
27 config_read = pci_default_read_config;
28@@ -404,7 +407,10 @@ uint32_t pci_data_read(void *opaque, uin
29 void pci_set_irq(PCIDevice *pci_dev, int irq_num, int level)
30 {
31 PCIBus *bus = pci_dev->bus;
32- bus->set_irq(pci_dev, bus->irq_opaque, irq_num, level);
33+ bus->irq_count[irq_num] += level - pci_dev->irq_state[irq_num];
34+ pci_dev->irq_state[irq_num] = level;
35+ bus->set_irq(pci_dev, bus->irq_opaque,
36+ irq_num, !!bus->irq_count[irq_num]);
37 }
38
39 /***********************************************************/
40diff -pNaur qemu-cvs-ts-orig/vl.h qemu-cvs-ts/vl.h
41--- qemu-cvs-ts-orig/vl.h 2006-09-18 01:15:29.000000000 +0000
42+++ qemu-cvs-ts/vl.h 2006-09-23 17:15:21.000000000 +0000
43@@ -733,6 +733,9 @@ struct PCIDevice {
44 PCIConfigWriteFunc *config_write;
45 /* ??? This is a PC-specific hack, and should be removed. */
46 int irq_index;
47+
48+ /* remember last irq levels */
49+ int irq_state[4];
50 };
51
52 PCIDevice *pci_register_device(PCIBus *bus, const char *name,