[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v5 3/4] hw/char: QOM'ify lm32_juart.c
From: |
xiaoqiang zhao |
Subject: |
Re: [Qemu-devel] [PATCH v5 3/4] hw/char: QOM'ify lm32_juart.c |
Date: |
Mon, 23 May 2016 19:34:54 +0800 |
> 在 2016年5月23日,19:18,Michael Walle <address@hidden> 写道:
>
> Am 2016-05-23 12:24, schrieb xiaoqiang zhao:
>> * Drop the old SysBus init function
>> * Call qemu_chr_add_handlers in the realize callback
>> * Use qdev chardev prop instead of qemu_char_get_next_serial
>> Signed-off-by: xiaoqiang zhao <address@hidden>
>> ---
>> hw/char/lm32_juart.c | 17 ++++++++---------
>> hw/lm32/lm32.h | 2 ++
>> 2 files changed, 10 insertions(+), 9 deletions(-)
>> diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c
>> index 5bf8acf..28c2cf7 100644
>> --- a/hw/char/lm32_juart.c
>> +++ b/hw/char/lm32_juart.c
>> @@ -114,17 +114,13 @@ static void juart_reset(DeviceState *d)
>> s->jrx = 0;
>> }
>> -static int lm32_juart_init(SysBusDevice *dev)
>> +static void lm32_juart_realize(DeviceState *dev, Error **errp)
>> {
>> LM32JuartState *s = LM32_JUART(dev);
>> - /* FIXME use a qdev chardev prop instead of qemu_char_get_next_serial()
>> */
>> - s->chr = qemu_char_get_next_serial();
>> if (s->chr) {
>> qemu_chr_add_handlers(s->chr, juart_can_rx, juart_rx, juart_event,
>> s);
>> }
>> -
>> - return 0;
>> }
>> static const VMStateDescription vmstate_lm32_juart = {
>> @@ -138,16 +134,19 @@ static const VMStateDescription vmstate_lm32_juart = {
>> }
>> };
>> +static Property lm32_juart_properties[] = {
>> + DEFINE_PROP_CHR("chardev", LM32JuartState, chr),
>> + DEFINE_PROP_END_OF_LIST(),
>> +};
>> +
>> static void lm32_juart_class_init(ObjectClass *klass, void *data)
>> {
>> DeviceClass *dc = DEVICE_CLASS(klass);
>> - SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>> - k->init = lm32_juart_init;
>> dc->reset = juart_reset;
>> dc->vmsd = &vmstate_lm32_juart;
>> - /* Reason: init() method uses qemu_char_get_next_serial() */
>> - dc->cannot_instantiate_with_device_add_yet = true;
>> + dc->props = lm32_juart_properties;
>> + dc->realize = lm32_juart_realize;
>> }
>> static const TypeInfo lm32_juart_info = {
>> diff --git a/hw/lm32/lm32.h b/hw/lm32/lm32.h
>> index 18aa6fd..6761518 100644
>> --- a/hw/lm32/lm32.h
>> +++ b/hw/lm32/lm32.h
>> @@ -2,6 +2,7 @@
>> #define HW_LM32_H 1
>> #include "hw/char/lm32_juart.h"
>> +#include "sysemu/sysemu.h"
>> static inline DeviceState *lm32_pic_init(qemu_irq cpu_irq)
>> {
>> @@ -21,6 +22,7 @@ static inline DeviceState *lm32_juart_init(void)
>> DeviceState *dev;
>> dev = qdev_create(NULL, TYPE_LM32_JUART);
>> + qdev_prop_set_chr(dev, "chardev", serial_hds[1]);
>
> Please make the serial_hds[1] a parameter to this function, like you did with
> the lm32_uart_create(). Then the serial_hds[] assignements will be in one
> place in lm32_boards.c.
>
> Mhh, i guess for this to work with the milkymist board, milkymist-uart
> (hw/char/milkymist-uart.c) has to be converted too, because it still uses the
> qemu_char_get_next_serial() function. So if you like you may also convert
> this model. If not, I'll do it myself after picking your patches.
>
>> qdev_init_nofail(dev);
>> return dev;
>
> -michael
Yes, i will do it. Happy to contribute ;-)