diff options
author | Philippe Mathieu-Daudé <philmd@linaro.org> | 2023-05-22 10:41:04 +0200 |
---|---|---|
committer | Philippe Mathieu-Daudé <philmd@linaro.org> | 2024-09-13 20:11:13 +0200 |
commit | bd6051b7cf027e60080a5c0ab3b002685f73105c (patch) | |
tree | 7c356cdce0076e699a34480f657862f24fdd0fd9 /hw/char | |
parent | 02b1f7f619285c21a4eaa1a21734ab196824fc54 (diff) | |
download | qemu-bd6051b7cf027e60080a5c0ab3b002685f73105c.zip qemu-bd6051b7cf027e60080a5c0ab3b002685f73105c.tar.gz qemu-bd6051b7cf027e60080a5c0ab3b002685f73105c.tar.bz2 |
hw/char/pl011: Extract pl011_write_txdata() from pl011_write()
When implementing FIFO, this code will become more complex.
Start by factoring it out to a new pl011_write_txdata() function.
No functional change intended.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20240719181041.49545-7-philmd@linaro.org>
Diffstat (limited to 'hw/char')
-rw-r--r-- | hw/char/pl011.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 5f605ac..ea9115d 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -221,6 +221,20 @@ static void pl011_loopback_tx(PL011State *s, uint32_t value) pl011_put_fifo(s, value); } +static void pl011_write_txdata(PL011State *s, uint8_t data) +{ + /* ??? Check if transmitter is enabled. */ + + /* + * XXX this blocks entire thread. Rewrite to use + * qemu_chr_fe_write and background I/O callbacks + */ + qemu_chr_fe_write_all(&s->chr, &data, 1); + pl011_loopback_tx(s, data); + s->int_level |= INT_TX; + pl011_update(s); +} + static uint64_t pl011_read(void *opaque, hwaddr offset, unsigned size) { @@ -388,14 +402,8 @@ static void pl011_write(void *opaque, hwaddr offset, switch (offset >> 2) { case 0: /* UARTDR */ - /* ??? Check if transmitter is enabled. */ ch = value; - /* XXX this blocks entire thread. Rewrite to use - * qemu_chr_fe_write and background I/O callbacks */ - qemu_chr_fe_write_all(&s->chr, &ch, 1); - pl011_loopback_tx(s, ch); - s->int_level |= INT_TX; - pl011_update(s); + pl011_write_txdata(s, ch); break; case 1: /* UARTRSR/UARTECR */ s->rsr = 0; |