qemu-devel
[Top][All Lists]
Advanced

[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: Michael Walle
Subject: Re: [Qemu-devel] [PATCH v5 3/4] hw/char: QOM'ify lm32_juart.c
Date: Mon, 23 May 2016 13:18:17 +0200
User-agent: Roundcube Webmail/1.1.5

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



reply via email to

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