mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
char: use qemu_chr_fe* functions with CharBackend argument
This also switches from qemu_chr_add_handlers() to qemu_chr_fe_set_handlers(). Note that qemu_chr_fe_set_handlers() now takes the focus when fe_open (qemu_chr_add_handlers() did take the focus) Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-Id: <20161022095318.17775-16-marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
fbf3cc3a67
commit
5345fdb446
+7
-6
@@ -42,7 +42,7 @@ static void rng_egd_request_entropy(RngBackend *b, RngRequest *req)
|
||||
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, header, sizeof(header));
|
||||
qemu_chr_fe_write_all(&s->chr, header, sizeof(header));
|
||||
|
||||
size -= len;
|
||||
}
|
||||
@@ -109,8 +109,8 @@ static void rng_egd_opened(RngBackend *b, Error **errp)
|
||||
}
|
||||
|
||||
/* FIXME we should resubmit pending requests when the CDS reconnects. */
|
||||
qemu_chr_add_handlers(s->chr.chr, rng_egd_chr_can_read,
|
||||
rng_egd_chr_read, NULL, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, rng_egd_chr_can_read,
|
||||
rng_egd_chr_read, NULL, s, NULL);
|
||||
}
|
||||
|
||||
static void rng_egd_set_chardev(Object *obj, const char *value, Error **errp)
|
||||
@@ -129,9 +129,10 @@ static void rng_egd_set_chardev(Object *obj, const char *value, Error **errp)
|
||||
static char *rng_egd_get_chardev(Object *obj, Error **errp)
|
||||
{
|
||||
RngEgd *s = RNG_EGD(obj);
|
||||
CharDriverState *chr = qemu_chr_fe_get_driver(&s->chr);
|
||||
|
||||
if (s->chr.chr && s->chr.chr->label) {
|
||||
return g_strdup(s->chr.chr->label);
|
||||
if (chr && chr->label) {
|
||||
return g_strdup(chr->label);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@@ -149,7 +150,7 @@ static void rng_egd_finalize(Object *obj)
|
||||
RngEgd *s = RNG_EGD(obj);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, NULL, NULL, NULL, NULL);
|
||||
qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, NULL, NULL);
|
||||
qemu_chr_fe_release(s->chr.chr);
|
||||
}
|
||||
|
||||
|
||||
@@ -404,7 +404,7 @@ static void put_buffer(GDBState *s, const uint8_t *buf, int len)
|
||||
#else
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, buf, len);
|
||||
qemu_chr_fe_write_all(&s->chr, buf, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1471,6 +1471,9 @@ void gdb_exit(CPUArchState *env, int code)
|
||||
{
|
||||
GDBState *s;
|
||||
char buf[4];
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
CharDriverState *chr;
|
||||
#endif
|
||||
|
||||
s = gdbserver_state;
|
||||
if (!s) {
|
||||
@@ -1481,7 +1484,8 @@ void gdb_exit(CPUArchState *env, int code)
|
||||
return;
|
||||
}
|
||||
#else
|
||||
if (!s->chr.chr) {
|
||||
chr = qemu_chr_fe_get_driver(&s->chr);
|
||||
if (!chr) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
@@ -1490,7 +1494,7 @@ void gdb_exit(CPUArchState *env, int code)
|
||||
put_packet(s, buf);
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
qemu_chr_delete(s->chr.chr);
|
||||
qemu_chr_delete(chr);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1764,8 +1768,8 @@ int gdbserver_start(const char *device)
|
||||
mon_chr->chr_write = gdb_monitor_write;
|
||||
monitor_init(mon_chr, 0);
|
||||
} else {
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_delete(s->chr.chr);
|
||||
if (qemu_chr_fe_get_driver(&s->chr)) {
|
||||
qemu_chr_delete(qemu_chr_fe_get_driver(&s->chr));
|
||||
}
|
||||
mon_chr = s->mon_chr;
|
||||
memset(s, 0, sizeof(GDBState));
|
||||
@@ -1775,8 +1779,8 @@ int gdbserver_start(const char *device)
|
||||
s->g_cpu = first_cpu;
|
||||
if (chr) {
|
||||
qemu_chr_fe_init(&s->chr, chr, &error_abort);
|
||||
qemu_chr_add_handlers(s->chr.chr, gdb_chr_can_receive, gdb_chr_receive,
|
||||
gdb_chr_event, NULL);
|
||||
qemu_chr_fe_set_handlers(&s->chr, gdb_chr_can_receive, gdb_chr_receive,
|
||||
gdb_chr_event, NULL, NULL);
|
||||
}
|
||||
s->state = chr ? RS_IDLE : RS_INACTIVE;
|
||||
s->mon_chr = mon_chr;
|
||||
|
||||
+6
-5
@@ -771,14 +771,15 @@ static void omap_sti_fifo_write(void *opaque, hwaddr addr,
|
||||
/* Flush channel <i>value</i>. */
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, (const uint8_t *) "\r", 1);
|
||||
qemu_chr_fe_write_all(&s->chr, (const uint8_t *) "\r", 1);
|
||||
} else if (ch == STI_TRACE_CONSOLE_CHANNEL || 1) {
|
||||
if (value == 0xc0 || value == 0xc3) {
|
||||
/* Open channel <i>ch</i>. */
|
||||
} else if (value == 0x00)
|
||||
qemu_chr_fe_write_all(s->chr.chr, (const uint8_t *) "\n", 1);
|
||||
else
|
||||
qemu_chr_fe_write_all(s->chr.chr, &byte, 1);
|
||||
} else if (value == 0x00) {
|
||||
qemu_chr_fe_write_all(&s->chr, (const uint8_t *) "\n", 1);
|
||||
} else {
|
||||
qemu_chr_fe_write_all(&s->chr, &byte, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1906,7 +1906,7 @@ static void pxa2xx_fir_write(void *opaque, hwaddr addr,
|
||||
if (s->chr.chr && s->enable && (s->control[0] & (1 << 3))) { /* TXE */
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
break;
|
||||
case ICSR0:
|
||||
@@ -1977,8 +1977,8 @@ static void pxa2xx_fir_realize(DeviceState *dev, Error **errp)
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_claim_no_fail(s->chr.chr);
|
||||
qemu_chr_add_handlers(s->chr.chr, pxa2xx_fir_is_empty,
|
||||
pxa2xx_fir_rx, pxa2xx_fir_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, pxa2xx_fir_is_empty,
|
||||
pxa2xx_fir_rx, pxa2xx_fir_event, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-8
@@ -1021,7 +1021,7 @@ static void strongarm_uart_update_parameters(StrongARMUARTState *s)
|
||||
ssp.stop_bits = stop_bits;
|
||||
s->char_transmit_time = (NANOSECONDS_PER_SECOND / speed) * frame_size;
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
}
|
||||
|
||||
DPRINTF(stderr, "%s speed=%d parity=%c data=%d stop=%d\n", s->chr->label,
|
||||
@@ -1107,10 +1107,10 @@ static void strongarm_uart_tx(void *opaque)
|
||||
|
||||
if (s->utcr3 & UTCR3_LBM) /* loopback */ {
|
||||
strongarm_uart_receive(s, &s->tx_fifo[s->tx_start], 1);
|
||||
} else if (s->chr.chr) {
|
||||
} else if (qemu_chr_fe_get_driver(&s->chr)) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &s->tx_fifo[s->tx_start], 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &s->tx_fifo[s->tx_start], 1);
|
||||
}
|
||||
|
||||
s->tx_start = (s->tx_start + 1) % 8;
|
||||
@@ -1240,11 +1240,11 @@ static void strongarm_uart_init(Object *obj)
|
||||
s->tx_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, strongarm_uart_tx, s);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr,
|
||||
strongarm_uart_can_receive,
|
||||
strongarm_uart_receive,
|
||||
strongarm_uart_event,
|
||||
s);
|
||||
qemu_chr_fe_set_handlers(&s->chr,
|
||||
strongarm_uart_can_receive,
|
||||
strongarm_uart_receive,
|
||||
strongarm_uart_event,
|
||||
s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ static uint64_t bcm2835_aux_read(void *opaque, hwaddr offset, unsigned size)
|
||||
}
|
||||
}
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
}
|
||||
bcm2835_aux_update(s);
|
||||
return c;
|
||||
@@ -171,7 +171,7 @@ static void bcm2835_aux_write(void *opaque, hwaddr offset, uint64_t value,
|
||||
if (s->chr.chr) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -283,8 +283,8 @@ static void bcm2835_aux_realize(DeviceState *dev, Error **errp)
|
||||
BCM2835AuxState *s = BCM2835_AUX(dev);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, bcm2835_aux_can_receive,
|
||||
bcm2835_aux_receive, NULL, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, bcm2835_aux_can_receive,
|
||||
bcm2835_aux_receive, NULL, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+10
-10
@@ -143,7 +143,7 @@ static void uart_rx_reset(CadenceUARTState *s)
|
||||
s->rx_wpos = 0;
|
||||
s->rx_count = 0;
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,8 +157,8 @@ static void uart_send_breaks(CadenceUARTState *s)
|
||||
int break_enabled = 1;
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_SERIAL_SET_BREAK,
|
||||
&break_enabled);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_BREAK,
|
||||
&break_enabled);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@ static void uart_parameters_setup(CadenceUARTState *s)
|
||||
packet_size += ssp.data_bits + ssp.stop_bits;
|
||||
s->char_tx_time = (NANOSECONDS_PER_SECOND / ssp.speed) * packet_size;
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -278,7 +278,7 @@ static gboolean cadence_uart_xmit(GIOChannel *chan, GIOCondition cond,
|
||||
int ret;
|
||||
|
||||
/* instant drain the fifo when there's no back-end */
|
||||
if (!s->chr.chr) {
|
||||
if (!qemu_chr_fe_get_driver(&s->chr)) {
|
||||
s->tx_count = 0;
|
||||
return FALSE;
|
||||
}
|
||||
@@ -287,7 +287,7 @@ static gboolean cadence_uart_xmit(GIOChannel *chan, GIOCondition cond,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ret = qemu_chr_fe_write(s->chr.chr, s->tx_fifo, s->tx_count);
|
||||
ret = qemu_chr_fe_write(&s->chr, s->tx_fifo, s->tx_count);
|
||||
|
||||
if (ret >= 0) {
|
||||
s->tx_count -= ret;
|
||||
@@ -295,7 +295,7 @@ static gboolean cadence_uart_xmit(GIOChannel *chan, GIOCondition cond,
|
||||
}
|
||||
|
||||
if (s->tx_count) {
|
||||
guint r = qemu_chr_fe_add_watch(s->chr.chr, G_IO_OUT | G_IO_HUP,
|
||||
guint r = qemu_chr_fe_add_watch(&s->chr, G_IO_OUT | G_IO_HUP,
|
||||
cadence_uart_xmit, s);
|
||||
if (!r) {
|
||||
s->tx_count = 0;
|
||||
@@ -369,7 +369,7 @@ static void uart_read_rx_fifo(CadenceUARTState *s, uint32_t *c)
|
||||
s->rx_count--;
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
}
|
||||
} else {
|
||||
*c = 0;
|
||||
@@ -475,8 +475,8 @@ static void cadence_uart_realize(DeviceState *dev, Error **errp)
|
||||
fifo_trigger_update, s);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, uart_can_receive, uart_receive,
|
||||
uart_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_receive, uart_receive,
|
||||
uart_event, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -62,7 +62,7 @@ static void debugcon_ioport_write(void *opaque, hwaddr addr, uint64_t val,
|
||||
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -87,12 +87,12 @@ static const MemoryRegionOps debugcon_ops = {
|
||||
|
||||
static void debugcon_realize_core(DebugconState *s, Error **errp)
|
||||
{
|
||||
if (!s->chr.chr) {
|
||||
if (!qemu_chr_fe_get_driver(&s->chr)) {
|
||||
error_setg(errp, "Can't create debugcon device, empty char device");
|
||||
return;
|
||||
}
|
||||
|
||||
qemu_chr_add_handlers(s->chr.chr, NULL, NULL, NULL, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, s, NULL);
|
||||
}
|
||||
|
||||
static void debugcon_isa_realizefn(DeviceState *dev, Error **errp)
|
||||
|
||||
@@ -79,7 +79,7 @@ static void digic_uart_write(void *opaque, hwaddr addr, uint64_t value,
|
||||
if (s->chr.chr) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -148,7 +148,8 @@ static void digic_uart_realize(DeviceState *dev, Error **errp)
|
||||
DigicUartState *s = DIGIC_UART(dev);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, uart_can_rx, uart_rx, uart_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
|
||||
uart_event, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-8
@@ -416,7 +416,7 @@ static void escc_update_parameters(ChannelState *s)
|
||||
int speed, parity, data_bits, stop_bits;
|
||||
QEMUSerialSetParams ssp;
|
||||
|
||||
if (!s->chr.chr || s->type != ser)
|
||||
if (!qemu_chr_fe_get_driver(&s->chr) || s->type != ser)
|
||||
return;
|
||||
|
||||
if (s->wregs[W_TXCTRL1] & TXCTRL1_PAREN) {
|
||||
@@ -466,7 +466,7 @@ static void escc_update_parameters(ChannelState *s)
|
||||
ssp.data_bits = data_bits;
|
||||
ssp.stop_bits = stop_bits;
|
||||
trace_escc_update_parameters(CHN_C(s), speed, parity, data_bits, stop_bits);
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
}
|
||||
|
||||
static void escc_mem_write(void *opaque, hwaddr addr,
|
||||
@@ -556,10 +556,10 @@ static void escc_mem_write(void *opaque, hwaddr addr,
|
||||
trace_escc_mem_writeb_data(CHN_C(s), val);
|
||||
s->tx = val;
|
||||
if (s->wregs[W_TXCTRL2] & TXCTRL2_TXEN) { // tx enabled
|
||||
if (s->chr.chr) {
|
||||
if (qemu_chr_fe_get_driver(&s->chr)) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &s->tx, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &s->tx, 1);
|
||||
} else if (s->type == kbd && !s->disabled) {
|
||||
handle_kbd_command(s, val);
|
||||
}
|
||||
@@ -600,7 +600,7 @@ static uint64_t escc_mem_read(void *opaque, hwaddr addr,
|
||||
ret = s->rx;
|
||||
trace_escc_mem_readb_data(CHN_C(s), ret);
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
}
|
||||
return ret;
|
||||
default:
|
||||
@@ -1014,10 +1014,11 @@ static void escc_realize(DeviceState *dev, Error **errp)
|
||||
ESCC_SIZE << s->it_shift);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (s->chn[i].chr.chr) {
|
||||
if (qemu_chr_fe_get_driver(&s->chn[i].chr)) {
|
||||
s->chn[i].clock = s->frequency / 2;
|
||||
qemu_chr_add_handlers(s->chn[i].chr.chr, serial_can_receive,
|
||||
serial_receive1, serial_event, &s->chn[i]);
|
||||
qemu_chr_fe_set_handlers(&s->chn[i].chr, serial_can_receive,
|
||||
serial_receive1, serial_event,
|
||||
&s->chn[i], NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ ser_write(void *opaque, hwaddr addr,
|
||||
case RW_DOUT:
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
s->regs[R_INTR] |= 3;
|
||||
s->pending_tx = 1;
|
||||
s->regs[addr] = value;
|
||||
@@ -232,9 +232,9 @@ static void etraxfs_ser_realize(DeviceState *dev, Error **errp)
|
||||
ETRAXSerial *s = ETRAX_SERIAL(dev);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr,
|
||||
serial_can_receive, serial_receive,
|
||||
serial_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr,
|
||||
serial_can_receive, serial_receive,
|
||||
serial_event, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -346,7 +346,7 @@ static void exynos4210_uart_update_parameters(Exynos4210UartState *s)
|
||||
ssp.data_bits = data_bits;
|
||||
ssp.stop_bits = stop_bits;
|
||||
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
|
||||
|
||||
PRINT_DEBUG("UART%d: speed: %d, parity: %c, data: %d, stop: %d\n",
|
||||
s->channel, speed, parity, data_bits, stop_bits);
|
||||
@@ -383,13 +383,13 @@ static void exynos4210_uart_write(void *opaque, hwaddr offset,
|
||||
break;
|
||||
|
||||
case UTXH:
|
||||
if (s->chr.chr) {
|
||||
if (qemu_chr_fe_get_driver(&s->chr)) {
|
||||
s->reg[I_(UTRSTAT)] &= ~(UTRSTAT_TRANSMITTER_EMPTY |
|
||||
UTRSTAT_Tx_BUFFER_EMPTY);
|
||||
ch = (uint8_t)val;
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
#if DEBUG_Tx_DATA
|
||||
fprintf(stderr, "%c", ch);
|
||||
#endif
|
||||
@@ -640,8 +640,9 @@ static int exynos4210_uart_init(SysBusDevice *dev)
|
||||
|
||||
sysbus_init_irq(dev, &s->irq);
|
||||
|
||||
qemu_chr_add_handlers(s->chr.chr, exynos4210_uart_can_receive,
|
||||
exynos4210_uart_receive, exynos4210_uart_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, exynos4210_uart_can_receive,
|
||||
exynos4210_uart_receive, exynos4210_uart_event,
|
||||
s, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -201,11 +201,12 @@ static void grlib_apbuart_write(void *opaque, hwaddr addr,
|
||||
case DATA_OFFSET:
|
||||
case DATA_OFFSET + 3: /* When only one byte write */
|
||||
/* Transmit when character device available and transmitter enabled */
|
||||
if (uart->chr.chr && (uart->control & UART_TRANSMIT_ENABLE)) {
|
||||
if (qemu_chr_fe_get_driver(&uart->chr) &&
|
||||
(uart->control & UART_TRANSMIT_ENABLE)) {
|
||||
c = value & 0xFF;
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(uart->chr.chr, &c, 1);
|
||||
qemu_chr_fe_write_all(&uart->chr, &c, 1);
|
||||
/* Generate interrupt */
|
||||
if (uart->control & UART_TRANSMIT_INTERRUPT) {
|
||||
qemu_irq_pulse(uart->irq);
|
||||
@@ -242,11 +243,11 @@ static int grlib_apbuart_init(SysBusDevice *dev)
|
||||
{
|
||||
UART *uart = GRLIB_APB_UART(dev);
|
||||
|
||||
qemu_chr_add_handlers(uart->chr.chr,
|
||||
grlib_apbuart_can_receive,
|
||||
grlib_apbuart_receive,
|
||||
grlib_apbuart_event,
|
||||
uart);
|
||||
qemu_chr_fe_set_handlers(&uart->chr,
|
||||
grlib_apbuart_can_receive,
|
||||
grlib_apbuart_receive,
|
||||
grlib_apbuart_event,
|
||||
uart, NULL);
|
||||
|
||||
sysbus_init_irq(dev, &uart->irq);
|
||||
|
||||
|
||||
@@ -122,7 +122,7 @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset,
|
||||
s->uts1 |= UTS1_RXEMPTY;
|
||||
imx_update(s);
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
}
|
||||
}
|
||||
return c;
|
||||
@@ -172,11 +172,11 @@ static void imx_serial_write(void *opaque, hwaddr offset,
|
||||
uint64_t value, unsigned size)
|
||||
{
|
||||
IMXSerialState *s = (IMXSerialState *)opaque;
|
||||
CharDriverState *chr = qemu_chr_fe_get_driver(&s->chr);
|
||||
unsigned char ch;
|
||||
|
||||
DPRINTF("write(offset=0x%" HWADDR_PRIx ", value = 0x%x) to %s\n",
|
||||
offset, (unsigned int)value,
|
||||
s->chr.chr ? s->chr.chr->label : "NODEV");
|
||||
offset, (unsigned int)value, chr ? chr->label : "NODEV");
|
||||
|
||||
switch (offset >> 2) {
|
||||
case 0x10: /* UTXD */
|
||||
@@ -185,7 +185,7 @@ static void imx_serial_write(void *opaque, hwaddr offset,
|
||||
if (s->chr.chr) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
s->usr1 &= ~USR1_TRDY;
|
||||
imx_update(s);
|
||||
@@ -216,7 +216,7 @@ static void imx_serial_write(void *opaque, hwaddr offset,
|
||||
if (value & UCR2_RXEN) {
|
||||
if (!(s->ucr2 & UCR2_RXEN)) {
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -320,8 +320,8 @@ static void imx_serial_realize(DeviceState *dev, Error **errp)
|
||||
IMXSerialState *s = IMX_SERIAL(dev);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, imx_can_receive, imx_receive,
|
||||
imx_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, imx_can_receive, imx_receive,
|
||||
imx_event, s, NULL);
|
||||
} else {
|
||||
DPRINTF("No char dev for uart\n");
|
||||
}
|
||||
|
||||
@@ -289,7 +289,7 @@ static uint16_t io_read(IPackDevice *ip, uint8_t addr)
|
||||
ch->sr &= ~SR_RXRDY;
|
||||
blk->isr &= ~ISR_RXRDY(channel);
|
||||
if (ch->dev.chr) {
|
||||
qemu_chr_fe_accept_input(ch->dev.chr);
|
||||
qemu_chr_fe_accept_input(&ch->dev);
|
||||
}
|
||||
} else {
|
||||
ch->rhr_idx = (ch->rhr_idx + 1) % RX_FIFO_SIZE;
|
||||
@@ -362,7 +362,7 @@ static void io_write(IPackDevice *ip, uint8_t addr, uint16_t val)
|
||||
uint8_t thr = reg;
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(ch->dev.chr, &thr, 1);
|
||||
qemu_chr_fe_write_all(&ch->dev, &thr, 1);
|
||||
}
|
||||
} else {
|
||||
DPRINTF("Write THR%c (0x%x), Tx disabled\n", channel + 'a', reg);
|
||||
@@ -546,9 +546,9 @@ static void ipoctal_realize(DeviceState *dev, Error **errp)
|
||||
ch->ipoctal = s;
|
||||
|
||||
/* Redirect IP-Octal channels to host character devices */
|
||||
if (ch->dev.chr) {
|
||||
qemu_chr_add_handlers(ch->dev.chr, hostdev_can_receive,
|
||||
hostdev_receive, hostdev_event, ch);
|
||||
if (qemu_chr_fe_get_driver(&ch->dev)) {
|
||||
qemu_chr_fe_set_handlers(&ch->dev, hostdev_can_receive,
|
||||
hostdev_receive, hostdev_event, ch, NULL);
|
||||
DPRINTF("Redirecting channel %u to %s\n", i, ch->dev->label);
|
||||
} else {
|
||||
DPRINTF("Could not redirect channel %u, no chardev set\n", i);
|
||||
|
||||
@@ -78,7 +78,7 @@ void lm32_juart_set_jtx(DeviceState *d, uint32_t jtx)
|
||||
if (s->chr.chr) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,8 +121,8 @@ static void lm32_juart_realize(DeviceState *dev, Error **errp)
|
||||
LM32JuartState *s = LM32_JUART(dev);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, juart_can_rx,
|
||||
juart_rx, juart_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, juart_can_rx, juart_rx,
|
||||
juart_event, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -142,7 +142,7 @@ static uint64_t uart_read(void *opaque, hwaddr addr,
|
||||
r = s->regs[R_RXTX];
|
||||
s->regs[R_LSR] &= ~LSR_DR;
|
||||
uart_update_irq(s);
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
break;
|
||||
case R_IIR:
|
||||
case R_LSR:
|
||||
@@ -180,7 +180,7 @@ static void uart_write(void *opaque, hwaddr addr,
|
||||
if (s->chr.chr) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
break;
|
||||
case R_IER:
|
||||
@@ -268,7 +268,8 @@ static void lm32_uart_realize(DeviceState *dev, Error **errp)
|
||||
LM32UartState *s = LM32_UART(dev);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, uart_can_rx, uart_rx, uart_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
|
||||
uart_event, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -93,7 +93,7 @@ uint64_t mcf_uart_read(void *opaque, hwaddr addr,
|
||||
if (s->fifo_len == 0)
|
||||
s->sr &= ~MCF_UART_RxRDY;
|
||||
mcf_uart_update(s);
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
return val;
|
||||
}
|
||||
case 0x10:
|
||||
@@ -117,7 +117,7 @@ static void mcf_uart_do_tx(mcf_uart_state *s)
|
||||
if (s->chr.chr) {
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, (unsigned char *)&s->tb, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, (unsigned char *)&s->tb, 1);
|
||||
}
|
||||
s->sr |= MCF_UART_TxEMP;
|
||||
}
|
||||
@@ -286,8 +286,8 @@ void *mcf_uart_init(qemu_irq irq, CharDriverState *chr)
|
||||
if (chr) {
|
||||
qemu_chr_fe_init(&s->chr, chr, &error_abort);
|
||||
qemu_chr_fe_claim_no_fail(chr);
|
||||
qemu_chr_add_handlers(chr, mcf_uart_can_receive, mcf_uart_receive,
|
||||
mcf_uart_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive,
|
||||
mcf_uart_receive, mcf_uart_event, s, NULL);
|
||||
}
|
||||
mcf_uart_reset(s);
|
||||
return s;
|
||||
|
||||
@@ -125,7 +125,7 @@ static void uart_write(void *opaque, hwaddr addr, uint64_t value,
|
||||
switch (addr) {
|
||||
case R_RXTX:
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_fe_write_all(s->chr.chr, &ch, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &ch, 1);
|
||||
}
|
||||
s->regs[R_STAT] |= STAT_TX_EVT;
|
||||
break;
|
||||
@@ -138,7 +138,7 @@ static void uart_write(void *opaque, hwaddr addr, uint64_t value,
|
||||
case R_STAT:
|
||||
/* write one to clear bits */
|
||||
s->regs[addr] &= ~(value & (STAT_RX_EVT | STAT_TX_EVT));
|
||||
qemu_chr_fe_accept_input(s->chr.chr);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -201,7 +201,8 @@ static void milkymist_uart_realize(DeviceState *dev, Error **errp)
|
||||
MilkymistUartState *s = MILKYMIST_UART(dev);
|
||||
|
||||
if (s->chr.chr) {
|
||||
qemu_chr_add_handlers(s->chr.chr, uart_can_rx, uart_rx, uart_event, s);
|
||||
qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx,
|
||||
uart_event, s, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-17
@@ -131,7 +131,7 @@ parallel_ioport_write_sw(void *opaque, uint32_t addr, uint32_t val)
|
||||
if ((s->control & PARA_CTR_STROBE) == 0)
|
||||
/* XXX this blocks entire thread. Rewrite to use
|
||||
* qemu_chr_fe_write and background I/O callbacks */
|
||||
qemu_chr_fe_write_all(s->chr.chr, &s->dataw, 1);
|
||||
qemu_chr_fe_write_all(&s->chr, &s->dataw, 1);
|
||||
} else {
|
||||
if (s->control & PARA_CTR_INTEN) {
|
||||
s->irq_pending = 1;
|
||||
@@ -161,7 +161,7 @@ static void parallel_ioport_write_hw(void *opaque, uint32_t addr, uint32_t val)
|
||||
if (s->dataw == val)
|
||||
return;
|
||||
pdebug("wd%02x\n", val);
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_WRITE_DATA, &parm);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_WRITE_DATA, &parm);
|
||||
s->dataw = val;
|
||||
break;
|
||||
case PARA_REG_STS:
|
||||
@@ -181,11 +181,11 @@ static void parallel_ioport_write_hw(void *opaque, uint32_t addr, uint32_t val)
|
||||
} else {
|
||||
dir = 0;
|
||||
}
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_DATA_DIR, &dir);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_DATA_DIR, &dir);
|
||||
parm &= ~PARA_CTR_DIR;
|
||||
}
|
||||
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_WRITE_CONTROL, &parm);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_WRITE_CONTROL, &parm);
|
||||
s->control = val;
|
||||
break;
|
||||
case PARA_REG_EPP_ADDR:
|
||||
@@ -194,7 +194,7 @@ static void parallel_ioport_write_hw(void *opaque, uint32_t addr, uint32_t val)
|
||||
pdebug("wa%02x s\n", val);
|
||||
else {
|
||||
struct ParallelIOArg ioarg = { .buffer = &parm, .count = 1 };
|
||||
if (qemu_chr_fe_ioctl(s->chr.chr,
|
||||
if (qemu_chr_fe_ioctl(&s->chr,
|
||||
CHR_IOCTL_PP_EPP_WRITE_ADDR, &ioarg)) {
|
||||
s->epp_timeout = 1;
|
||||
pdebug("wa%02x t\n", val);
|
||||
@@ -209,7 +209,7 @@ static void parallel_ioport_write_hw(void *opaque, uint32_t addr, uint32_t val)
|
||||
pdebug("we%02x s\n", val);
|
||||
else {
|
||||
struct ParallelIOArg ioarg = { .buffer = &parm, .count = 1 };
|
||||
if (qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_EPP_WRITE, &ioarg)) {
|
||||
if (qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_EPP_WRITE, &ioarg)) {
|
||||
s->epp_timeout = 1;
|
||||
pdebug("we%02x t\n", val);
|
||||
}
|
||||
@@ -234,7 +234,7 @@ parallel_ioport_eppdata_write_hw2(void *opaque, uint32_t addr, uint32_t val)
|
||||
pdebug("we%04x s\n", val);
|
||||
return;
|
||||
}
|
||||
err = qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_EPP_WRITE, &ioarg);
|
||||
err = qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_EPP_WRITE, &ioarg);
|
||||
if (err) {
|
||||
s->epp_timeout = 1;
|
||||
pdebug("we%04x t\n", val);
|
||||
@@ -257,7 +257,7 @@ parallel_ioport_eppdata_write_hw4(void *opaque, uint32_t addr, uint32_t val)
|
||||
pdebug("we%08x s\n", val);
|
||||
return;
|
||||
}
|
||||
err = qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_EPP_WRITE, &ioarg);
|
||||
err = qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_EPP_WRITE, &ioarg);
|
||||
if (err) {
|
||||
s->epp_timeout = 1;
|
||||
pdebug("we%08x t\n", val);
|
||||
@@ -309,13 +309,13 @@ static uint32_t parallel_ioport_read_hw(void *opaque, uint32_t addr)
|
||||
addr &= 7;
|
||||
switch(addr) {
|
||||
case PARA_REG_DATA:
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_READ_DATA, &ret);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_READ_DATA, &ret);
|
||||
if (s->last_read_offset != addr || s->datar != ret)
|
||||
pdebug("rd%02x\n", ret);
|
||||
s->datar = ret;
|
||||
break;
|
||||
case PARA_REG_STS:
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_READ_STATUS, &ret);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_READ_STATUS, &ret);
|
||||
ret &= ~PARA_STS_TMOUT;
|
||||
if (s->epp_timeout)
|
||||
ret |= PARA_STS_TMOUT;
|
||||
@@ -327,7 +327,7 @@ static uint32_t parallel_ioport_read_hw(void *opaque, uint32_t addr)
|
||||
/* s->control has some bits fixed to 1. It is zero only when
|
||||
it has not been yet written to. */
|
||||
if (s->control == 0) {
|
||||
qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_READ_CONTROL, &ret);
|
||||
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_READ_CONTROL, &ret);
|
||||
if (s->last_read_offset != addr)
|
||||
pdebug("rc%02x\n", ret);
|
||||
s->control = ret;
|
||||
@@ -345,7 +345,7 @@ static uint32_t parallel_ioport_read_hw(void *opaque, uint32_t addr)
|
||||
pdebug("ra%02x s\n", ret);
|
||||
else {
|
||||
struct ParallelIOArg ioarg = { .buffer = &ret, .count = 1 };
|
||||
if (qemu_chr_fe_ioctl(s->chr.chr,
|
||||
if (qemu_chr_fe_ioctl(&s->chr,
|
||||
CHR_IOCTL_PP_EPP_READ_ADDR, &ioarg)) {
|
||||
s->epp_timeout = 1;
|
||||
pdebug("ra%02x t\n", ret);
|
||||
@@ -361,7 +361,7 @@ static uint32_t parallel_ioport_read_hw(void *opaque, uint32_t addr)
|
||||
pdebug("re%02x s\n", ret);
|
||||
else {
|
||||
struct ParallelIOArg ioarg = { .buffer = &ret, .count = 1 };
|
||||
if (qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_EPP_READ, &ioarg)) {
|
||||
if (qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_EPP_READ, &ioarg)) {
|
||||
s->epp_timeout = 1;
|
||||
pdebug("re%02x t\n", ret);
|
||||
}
|
||||
@@ -389,7 +389,7 @@ parallel_ioport_eppdata_read_hw2(void *opaque, uint32_t addr)
|
||||
pdebug("re%04x s\n", eppdata);
|
||||
return eppdata;
|
||||
}
|
||||
err = qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_EPP_READ, &ioarg);
|
||||
err = qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_EPP_READ, &ioarg);
|
||||
ret = le16_to_cpu(eppdata);
|
||||
|
||||
if (err) {
|
||||
@@ -416,7 +416,7 @@ parallel_ioport_eppdata_read_hw4(void *opaque, uint32_t addr)
|
||||
pdebug("re%08x s\n", eppdata);
|
||||
return eppdata;
|
||||
}
|
||||
err = qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_EPP_READ, &ioarg);
|
||||
err = qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_EPP_READ, &ioarg);
|
||||
ret = le32_to_cpu(eppdata);
|
||||
|
||||
if (err) {
|
||||
@@ -512,7 +512,7 @@ static void parallel_isa_realizefn(DeviceState *dev, Error **errp)
|
||||
int base;
|
||||
uint8_t dummy;
|
||||
|
||||
if (!s->chr.chr) {
|
||||
if (!qemu_chr_fe_get_driver(&s->chr)) {
|
||||
error_setg(errp, "Can't create parallel device, empty char device");
|
||||
return;
|
||||
}
|
||||
@@ -534,7 +534,7 @@ static void parallel_isa_realizefn(DeviceState *dev, Error **errp)
|
||||
isa_init_irq(isadev, &s->irq, isa->isairq);
|
||||
qemu_register_reset(parallel_reset, s);
|
||||
|
||||
if (qemu_chr_fe_ioctl(s->chr.chr, CHR_IOCTL_PP_READ_STATUS, &dummy) == 0) {
|
||||
if (qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_PP_READ_STATUS, &dummy) == 0) {
|
||||
s->hw_driver = 1;
|
||||
s->status = dummy;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user