mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 02:54:58 -06:00
char: add backend hotswap handler
Frontends should have an interface to setup the handler of a backend change. The interface will be used in the next commits Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <1499342940-56739-3-git-send-email-anton.nefedov@virtuozzo.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
313e45b5fe
commit
81517ba37a
48 changed files with 77 additions and 58 deletions
|
@ -279,7 +279,7 @@ static void bcm2835_aux_realize(DeviceState *dev, Error **errp)
|
|||
BCM2835AuxState *s = BCM2835_AUX(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, bcm2835_aux_can_receive,
|
||||
bcm2835_aux_receive, NULL, s, NULL, true);
|
||||
bcm2835_aux_receive, NULL, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static Property bcm2835_aux_props[] = {
|
||||
|
|
|
@ -485,7 +485,7 @@ static void cadence_uart_realize(DeviceState *dev, Error **errp)
|
|||
fifo_trigger_update, s);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_receive, uart_receive,
|
||||
uart_event, s, NULL, true);
|
||||
uart_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void cadence_uart_init(Object *obj)
|
||||
|
|
|
@ -92,7 +92,7 @@ static void debugcon_realize_core(DebugconState *s, Error **errp)
|
|||
return;
|
||||
}
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, s, NULL, true);
|
||||
qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void debugcon_isa_realizefn(DeviceState *dev, Error **errp)
|
||||
|
|
|
@ -146,7 +146,7 @@ static void digic_uart_realize(DeviceState *dev, Error **errp)
|
|||
DigicUartState *s = DIGIC_UART(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
|
||||
uart_event, s, NULL, true);
|
||||
uart_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void digic_uart_init(Object *obj)
|
||||
|
|
|
@ -1016,7 +1016,7 @@ static void escc_realize(DeviceState *dev, Error **errp)
|
|||
if (qemu_chr_fe_get_driver(&s->chn[i].chr)) {
|
||||
s->chn[i].clock = s->frequency / 2;
|
||||
qemu_chr_fe_set_handlers(&s->chn[i].chr, serial_can_receive,
|
||||
serial_receive1, serial_event,
|
||||
serial_receive1, serial_event, NULL,
|
||||
&s->chn[i], NULL, true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -233,7 +233,7 @@ static void etraxfs_ser_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
qemu_chr_fe_set_handlers(&s->chr,
|
||||
serial_can_receive, serial_receive,
|
||||
serial_event, s, NULL, true);
|
||||
serial_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void etraxfs_ser_class_init(ObjectClass *klass, void *data)
|
||||
|
|
|
@ -645,7 +645,7 @@ static void exynos4210_uart_realize(DeviceState *dev, Error **errp)
|
|||
|
||||
qemu_chr_fe_set_handlers(&s->chr, exynos4210_uart_can_receive,
|
||||
exynos4210_uart_receive, exynos4210_uart_event,
|
||||
s, NULL, true);
|
||||
NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static Property exynos4210_uart_properties[] = {
|
||||
|
|
|
@ -247,7 +247,7 @@ static int grlib_apbuart_init(SysBusDevice *dev)
|
|||
grlib_apbuart_can_receive,
|
||||
grlib_apbuart_receive,
|
||||
grlib_apbuart_event,
|
||||
uart, NULL, true);
|
||||
NULL, uart, NULL, true);
|
||||
|
||||
sysbus_init_irq(dev, &uart->irq);
|
||||
|
||||
|
|
|
@ -315,7 +315,7 @@ static void imx_serial_realize(DeviceState *dev, Error **errp)
|
|||
DPRINTF("char dev for uart: %p\n", qemu_chr_fe_get_driver(&s->chr));
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, imx_can_receive, imx_receive,
|
||||
imx_event, s, NULL, true);
|
||||
imx_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void imx_serial_init(Object *obj)
|
||||
|
|
|
@ -545,7 +545,7 @@ static void ipoctal_realize(DeviceState *dev, Error **errp)
|
|||
if (qemu_chr_fe_get_driver(&ch->dev)) {
|
||||
qemu_chr_fe_set_handlers(&ch->dev, hostdev_can_receive,
|
||||
hostdev_receive, hostdev_event,
|
||||
ch, NULL, true);
|
||||
NULL, ch, NULL, true);
|
||||
DPRINTF("Redirecting channel %u to %s\n", i, ch->dev->label);
|
||||
} else {
|
||||
DPRINTF("Could not redirect channel %u, no chardev set\n", i);
|
||||
|
|
|
@ -119,7 +119,7 @@ static void lm32_juart_realize(DeviceState *dev, Error **errp)
|
|||
LM32JuartState *s = LM32_JUART(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, juart_can_rx, juart_rx,
|
||||
juart_event, s, NULL, true);
|
||||
juart_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_lm32_juart = {
|
||||
|
|
|
@ -266,7 +266,7 @@ static void lm32_uart_realize(DeviceState *dev, Error **errp)
|
|||
LM32UartState *s = LM32_UART(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
|
||||
uart_event, s, NULL, true);
|
||||
uart_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static const VMStateDescription vmstate_lm32_uart = {
|
||||
|
|
|
@ -305,7 +305,7 @@ static void mcf_uart_realize(DeviceState *dev, Error **errp)
|
|||
mcf_uart_state *s = MCF_UART(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive, mcf_uart_receive,
|
||||
mcf_uart_event, s, NULL, true);
|
||||
mcf_uart_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static Property mcf_uart_properties[] = {
|
||||
|
|
|
@ -199,7 +199,7 @@ static void milkymist_uart_realize(DeviceState *dev, Error **errp)
|
|||
MilkymistUartState *s = MILKYMIST_UART(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
|
||||
uart_event, s, NULL, true);
|
||||
uart_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void milkymist_uart_init(Object *obj)
|
||||
|
|
|
@ -329,7 +329,7 @@ static void pl011_realize(DeviceState *dev, Error **errp)
|
|||
PL011State *s = PL011(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, pl011_can_receive, pl011_receive,
|
||||
pl011_event, s, NULL, true);
|
||||
pl011_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void pl011_class_init(ObjectClass *oc, void *data)
|
||||
|
|
|
@ -313,7 +313,7 @@ static int console_init(SCLPEvent *event)
|
|||
console_available = true;
|
||||
|
||||
qemu_chr_fe_set_handlers(&scon->chr, chr_can_read,
|
||||
chr_read, NULL, scon, NULL, true);
|
||||
chr_read, NULL, NULL, scon, NULL, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -228,7 +228,7 @@ static int console_init(SCLPEvent *event)
|
|||
}
|
||||
console_available = true;
|
||||
qemu_chr_fe_set_handlers(&scon->chr, chr_can_read,
|
||||
chr_read, NULL, scon, NULL, true);
|
||||
chr_read, NULL, NULL, scon, NULL, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -897,7 +897,7 @@ void serial_realize_core(SerialState *s, Error **errp)
|
|||
qemu_register_reset(serial_reset, s);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, serial_can_receive1, serial_receive1,
|
||||
serial_event, s, NULL, true);
|
||||
serial_event, NULL, s, NULL, true);
|
||||
fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH);
|
||||
fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH);
|
||||
serial_reset(s);
|
||||
|
|
|
@ -400,7 +400,7 @@ void sh_serial_init(MemoryRegion *sysmem,
|
|||
qemu_chr_fe_init(&s->chr, chr, &error_abort);
|
||||
qemu_chr_fe_set_handlers(&s->chr, sh_serial_can_receive1,
|
||||
sh_serial_receive1,
|
||||
sh_serial_event, s, NULL, true);
|
||||
sh_serial_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
s->eri = eri_source;
|
||||
|
|
|
@ -84,7 +84,7 @@ static void spapr_vty_realize(VIOsPAPRDevice *sdev, Error **errp)
|
|||
}
|
||||
|
||||
qemu_chr_fe_set_handlers(&dev->chardev, vty_can_receive,
|
||||
vty_receive, NULL, dev, NULL, true);
|
||||
vty_receive, NULL, NULL, dev, NULL, true);
|
||||
}
|
||||
|
||||
/* Forward declaration */
|
||||
|
|
|
@ -207,7 +207,8 @@ static void stm32f2xx_usart_realize(DeviceState *dev, Error **errp)
|
|||
STM32F2XXUsartState *s = STM32F2XX_USART(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, stm32f2xx_usart_can_receive,
|
||||
stm32f2xx_usart_receive, NULL, s, NULL, true);
|
||||
stm32f2xx_usart_receive, NULL, NULL,
|
||||
s, NULL, true);
|
||||
}
|
||||
|
||||
static void stm32f2xx_usart_class_init(ObjectClass *klass, void *data)
|
||||
|
|
|
@ -179,7 +179,7 @@ static void terminal_init(EmulatedCcw3270Device *dev, Error **errp)
|
|||
}
|
||||
terminal_available = true;
|
||||
qemu_chr_fe_set_handlers(&t->chr, terminal_can_read,
|
||||
terminal_read, chr_event, t, NULL, true);
|
||||
terminal_read, chr_event, NULL, t, NULL, true);
|
||||
}
|
||||
|
||||
static int read_payload_3270(EmulatedCcw3270Device *dev, uint32_t cda,
|
||||
|
|
|
@ -188,11 +188,11 @@ static void virtconsole_realize(DeviceState *dev, Error **errp)
|
|||
*/
|
||||
if (k->is_console) {
|
||||
qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read,
|
||||
NULL, vcon, NULL, true);
|
||||
NULL, NULL, vcon, NULL, true);
|
||||
virtio_serial_open(port);
|
||||
} else {
|
||||
qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read,
|
||||
chr_event, vcon, NULL, false);
|
||||
chr_event, NULL, vcon, NULL, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -246,7 +246,7 @@ static int con_initialise(struct XenDevice *xendev)
|
|||
|
||||
xen_be_bind_evtchn(&con->xendev);
|
||||
qemu_chr_fe_set_handlers(&con->chr, xencons_can_receive,
|
||||
xencons_receive, NULL, con, NULL, true);
|
||||
xencons_receive, NULL, NULL, con, NULL, true);
|
||||
|
||||
xen_pv_printf(xendev, 1,
|
||||
"ring mfn %d, remote port %d, local port %d, limit %zd\n",
|
||||
|
|
|
@ -212,7 +212,7 @@ static void xilinx_uartlite_realize(DeviceState *dev, Error **errp)
|
|||
XilinxUARTLite *s = XILINX_UARTLITE(dev);
|
||||
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
|
||||
uart_event, s, NULL, true);
|
||||
uart_event, NULL, s, NULL, true);
|
||||
}
|
||||
|
||||
static void xilinx_uartlite_init(Object *obj)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue