> 在 2016年5月23日,19:18,Michael Walle <mich...@walle.cc> 写道: > > 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 <zxq_yx_...@163.com> >> --- >> 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 ;-)