aboutsummaryrefslogtreecommitdiff
path: root/hw/char
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@linaro.org>2023-05-22 10:41:04 +0200
committerPhilippe Mathieu-Daudé <philmd@linaro.org>2024-09-13 20:11:13 +0200
commitbd6051b7cf027e60080a5c0ab3b002685f73105c (patch)
tree7c356cdce0076e699a34480f657862f24fdd0fd9 /hw/char
parent02b1f7f619285c21a4eaa1a21734ab196824fc54 (diff)
downloadqemu-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.c22
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;