All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Markus Armbruster <armbru@redhat.com>
Cc: Blue Swirl <blauwirbel@gmail.com>, qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 06/10] vmmouse: convert to qdev
Date: Sun, 13 Feb 2011 09:42:05 -0600	[thread overview]
Message-ID: <4D57FBCD.5060209@codemonkey.ws> (raw)
In-Reply-To: <m3aai1nq1d.fsf@blackfin.pond.sub.org>

On 02/12/2011 11:03 AM, Markus Armbruster wrote:
> Blue Swirl<blauwirbel@gmail.com>  writes:
>
>    
>> Convert to qdev, also add a proper reset function.
>>
>> Signed-off-by: Blue Swirl<blauwirbel@gmail.com>
>> ---
>>   hw/pc.c      |    5 +++--
>>   hw/pc.h      |    3 ---
>>   hw/vmmouse.c |   37 +++++++++++++++++++++++++++++--------
>>   3 files changed, 32 insertions(+), 13 deletions(-)
>>
>> diff --git a/hw/pc.c b/hw/pc.c
>> index fcee09a..f66ac5d 100644
>> --- a/hw/pc.c
>> +++ b/hw/pc.c
>> @@ -1096,7 +1096,7 @@ void pc_basic_device_init(qemu_irq *isa_irq,
>>       PITState *pit;
>>       qemu_irq rtc_irq = NULL;
>>       qemu_irq *a20_line;
>> -    ISADevice *i8042, *port92;
>> +    ISADevice *i8042, *port92, *vmmouse;
>>       qemu_irq *cpu_exit_irq;
>>
>>       register_ioport_write(0x80, 1, 1, ioport80_write, NULL);
>> @@ -1133,7 +1133,8 @@ void pc_basic_device_init(qemu_irq *isa_irq,
>>       a20_line = qemu_allocate_irqs(handle_a20_line_change, first_cpu, 2);
>>       i8042 = isa_create_simple("i8042");
>>       i8042_setup_a20_line(i8042,&a20_line[0]);
>> -    vmmouse_init(i8042);
>> +    vmmouse = isa_create("vmmouse");
>> +    qdev_prop_set_ptr(&vmmouse->qdev, "ps2_mouse", i8042);
>>       port92 = isa_create_simple("port92");
>>       port92_init(port92,&a20_line[1]);
>>
>> diff --git a/hw/pc.h b/hw/pc.h
>> index 603a2a3..ae83934 100644
>> --- a/hw/pc.h
>> +++ b/hw/pc.h
>> @@ -67,9 +67,6 @@ void hpet_pit_enable(void);
>>   /* vmport.c */
>>   void vmport_register(unsigned char command, IOPortReadFunc *func,
>> void *opaque);
>>
>> -/* vmmouse.c */
>> -void *vmmouse_init(void *m);
>> -
>>   /* pckbd.c */
>>
>>   void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_base);
>> diff --git a/hw/vmmouse.c b/hw/vmmouse.c
>> index 2097119..3b39144 100644
>> --- a/hw/vmmouse.c
>> +++ b/hw/vmmouse.c
>> @@ -25,6 +25,7 @@
>>   #include "console.h"
>>   #include "ps2.h"
>>   #include "pc.h"
>> +#include "qdev.h"
>>
>>   /* debug only vmmouse */
>>   //#define DEBUG_VMMOUSE
>> @@ -52,6 +53,7 @@
>>
>>   typedef struct _VMMouseState
>>   {
>> +    ISADevice dev;
>>       uint32_t queue[VMMOUSE_QUEUE_SIZE];
>>       int32_t queue_size;
>>       uint16_t nb_queue;
>> @@ -270,22 +272,41 @@ static const VMStateDescription vmstate_vmmouse = {
>>       }
>>   };
>>
>> -void *vmmouse_init(void *m)
>> +static void vmmouse_reset(DeviceState *d)
>>   {
>> -    VMMouseState *s = NULL;
>> +    VMMouseState *s = container_of(d, VMMouseState, dev.qdev);
>>
>> -    DPRINTF("vmmouse_init\n");
>> +    s->status = 0xffff;
>> +}
>>
>> -    s = qemu_mallocz(sizeof(VMMouseState));
>> +static int vmmouse_initfn(ISADevice *dev)
>> +{
>> +    VMMouseState *s = DO_UPCAST(VMMouseState, dev, dev);
>>
>> -    s->status = 0xffff;
>> -    s->ps2_mouse = m;
>> -    s->queue_size = VMMOUSE_QUEUE_SIZE;
>>      
> Where is member queue_size initialized in your new code?
>
>    
>> +    DPRINTF("vmmouse_init\n");
>>
>>       vmport_register(VMMOUSE_STATUS, vmmouse_ioport_read, s);
>>       vmport_register(VMMOUSE_COMMAND, vmmouse_ioport_read, s);
>>       vmport_register(VMMOUSE_DATA, vmmouse_ioport_read, s);
>>       vmstate_register(NULL, 0,&vmstate_vmmouse, s);
>>
>> -    return s;
>> +    return 0;
>> +}
>> +
>> +static ISADeviceInfo vmmouse_info = {
>> +    .init          = vmmouse_initfn,
>> +    .qdev.name     = "vmmouse",
>> +    .qdev.size     = sizeof(VMMouseState),
>> +    .qdev.no_user  = 1,
>> +    .qdev.reset    = vmmouse_reset,
>> +    .qdev.props = (Property[]) {
>> +        DEFINE_PROP_PTR("ps2_mouse", VMMouseState, ps2_mouse),
>>      
> Pointer properties are for dirty hacks only.  Is there really no better
> solution?  Why does it have to be a property?
>    

vmmouse is really just an extension to the PS2 Mouse.  It's definitely 
not an ISA device.

In terms of qdev enablement, I would just make it a boolean option to 
the PS2Mouse and not expose it as a top level device at all.  It cannot 
exist without a PS2Mouse.

Regards,

Anthony Liguori

>> +        DEFINE_PROP_END_OF_LIST(),
>> +    }
>> +};
>> +
>> +static void vmmouse_dev_register(void)
>> +{
>> +    isa_qdev_register(&vmmouse_info);
>>   }
>> +device_init(vmmouse_dev_register)
>>      
>    

  parent reply	other threads:[~2011-02-13 15:42 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-03 21:01 [Qemu-devel] [PATCH 06/10] vmmouse: convert to qdev Blue Swirl
2011-02-12 17:03 ` Markus Armbruster
2011-02-12 17:17   ` Blue Swirl
2011-02-13 15:42   ` Anthony Liguori [this message]
2011-02-15 10:07     ` Markus Armbruster
2011-02-15 17:22       ` Blue Swirl
2011-02-15 18:32         ` Blue Swirl
2011-02-16  9:51         ` Markus Armbruster
2011-02-17 19:52           ` Blue Swirl
2011-02-18 12:34             ` [Qemu-devel] " Paolo Bonzini
2011-02-18 18:04               ` Blue Swirl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D57FBCD.5060209@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=armbru@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.