]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/qemu/files/qemu-pci-irq-sharing.patch
updated to qemu 0.82 from oe.dev to familiar with patches to enable building with...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / qemu / files / qemu-pci-irq-sharing.patch
1 diff -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  /***********************************************************/
40 diff -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,