Patchwork [RFC,6/9] pc: attach ioapic to the QOM composition tree

login
register
mail settings
Submitter Paolo Bonzini
Date Jan. 18, 2012, 10:33 a.m.
Message ID <1326882794-31816-7-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/136590/
State New
Headers show

Comments

Paolo Bonzini - Jan. 18, 2012, 10:33 a.m.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/pc_piix.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
Jan Kiszka - Jan. 24, 2012, 3:12 p.m.
On 2012-01-18 11:33, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  hw/pc_piix.c |    7 +++++--
>  1 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/pc_piix.c b/hw/pc_piix.c
> index 2aba89c..3f92bf9 100644
> --- a/hw/pc_piix.c
> +++ b/hw/pc_piix.c
> @@ -54,7 +54,7 @@ static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 };
>  static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
>  static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
>  
> -static void ioapic_init(GSIState *gsi_state)
> +static DeviceState *ioapic_init(GSIState *gsi_state)
>  {
>      DeviceState *dev;
>      SysBusDevice *d;
> @@ -68,6 +68,7 @@ static void ioapic_init(GSIState *gsi_state)
>      for (i = 0; i < IOAPIC_NUM_PINS; i++) {
>          gsi_state->ioapic_irq[i] = qdev_get_gpio_in(dev, i);
>      }
> +    return dev;
>  }
>  
>  /* PC hardware initialisation */
> @@ -168,7 +169,9 @@ static void pc_init1(MemoryRegion *system_memory,
>          gsi_state->i8259_irq[i] = i8259[i];
>      }
>      if (pci_enabled) {
> -        ioapic_init(gsi_state);
> +        dev = ioapic_init(gsi_state);
> +        qdev_property_add_child(qdev_resolve_path("/i440fx/piix3", NULL),
> +                                "ioapic", dev, NULL);

That's not true. The IOAPIC was a separate IC, not part of the PIIX3. It
should be assigned to the board if you want to do it correctly. :)

Jan

Patch

diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 2aba89c..3f92bf9 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -54,7 +54,7 @@  static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 };
 static const int ide_iobase2[MAX_IDE_BUS] = { 0x3f6, 0x376 };
 static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
 
-static void ioapic_init(GSIState *gsi_state)
+static DeviceState *ioapic_init(GSIState *gsi_state)
 {
     DeviceState *dev;
     SysBusDevice *d;
@@ -68,6 +68,7 @@  static void ioapic_init(GSIState *gsi_state)
     for (i = 0; i < IOAPIC_NUM_PINS; i++) {
         gsi_state->ioapic_irq[i] = qdev_get_gpio_in(dev, i);
     }
+    return dev;
 }
 
 /* PC hardware initialisation */
@@ -168,7 +169,9 @@  static void pc_init1(MemoryRegion *system_memory,
         gsi_state->i8259_irq[i] = i8259[i];
     }
     if (pci_enabled) {
-        ioapic_init(gsi_state);
+        dev = ioapic_init(gsi_state);
+        qdev_property_add_child(qdev_resolve_path("/i440fx/piix3", NULL),
+                                "ioapic", dev, NULL);
     }
 
     pc_register_ferr_irq(gsi[13]);