qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 06/15] piix: create i8254 through composition


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 06/15] piix: create i8254 through composition
Date: Tue, 31 Jan 2012 08:47:25 -0600
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15

On 01/31/2012 08:34 AM, Jan Kiszka wrote:
On 2012-01-26 20:00, Anthony Liguori wrote:
@@ -548,6 +550,13 @@ static int piix3_realize(PCIDevice *dev)
      /* Setup the RTC IRQ */
      s->rtc.irq = rtc_irq;

+    /* Realize the PIT */
+    qdev_set_parent_bus(DEVICE(&s->pit), BUS(s->bus));
+    qdev_init_nofail(DEVICE(&s->pit));
+
+    /* FIXME this should be refactored */
+    pcspk_init(ISA_DEVICE(&s->pit));

Fixing ATM, ie. converting to qdev/QOM.

Q: How do I use qdev_property_add_link&  Co. to establish the relation
from the speaker port device to the PIT?

In the state structure, have:

struct PCSpkState {
    ...
    PITState *pit;
};

In the pcspk instance_init, do:

object_property_add_link(obj, "pit", TYPE_PIT, (Object **)&s->pit, NULL);

In the pcspk realize function (DeviceClass::init), do:

assert(s->pit != NULL); // make sure the pit link is set

And that's it.

You can set the s->pit field directly. You are not required to use any special QOM function to interact with link properties.

BTW, this is yet another benefit of making structures public. You can take the address of a child and set link fields directly without accessors.

Regards,

Anthony LIguori


Jan





reply via email to

[Prev in Thread] Current Thread [Next in Thread]