mirror of https://github.com/xemu-project/xemu.git
hw/char/pl011: Extract pl011_read_rxdata() from pl011_read()
To keep MemoryRegionOps read/write handlers with similar logic, factor pl011_read_txdata() out of pl011_read(), similar to what the previous commit did to pl011_write(). No functional change intended. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-Id: <20240719181041.49545-8-philmd@linaro.org>
This commit is contained in:
parent
bd6051b7cf
commit
dee8284b6f
|
@ -235,31 +235,38 @@ static void pl011_write_txdata(PL011State *s, uint8_t data)
|
|||
pl011_update(s);
|
||||
}
|
||||
|
||||
static uint32_t pl011_read_rxdata(PL011State *s)
|
||||
{
|
||||
uint32_t c;
|
||||
|
||||
s->flags &= ~PL011_FLAG_RXFF;
|
||||
c = s->read_fifo[s->read_pos];
|
||||
if (s->read_count > 0) {
|
||||
s->read_count--;
|
||||
s->read_pos = (s->read_pos + 1) & (pl011_get_fifo_depth(s) - 1);
|
||||
}
|
||||
if (s->read_count == 0) {
|
||||
s->flags |= PL011_FLAG_RXFE;
|
||||
}
|
||||
if (s->read_count == s->read_trigger - 1) {
|
||||
s->int_level &= ~INT_RX;
|
||||
}
|
||||
trace_pl011_read_fifo(s->read_count);
|
||||
s->rsr = c >> 8;
|
||||
pl011_update(s);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
return c;
|
||||
}
|
||||
|
||||
static uint64_t pl011_read(void *opaque, hwaddr offset,
|
||||
unsigned size)
|
||||
{
|
||||
PL011State *s = (PL011State *)opaque;
|
||||
uint32_t c;
|
||||
uint64_t r;
|
||||
|
||||
switch (offset >> 2) {
|
||||
case 0: /* UARTDR */
|
||||
s->flags &= ~PL011_FLAG_RXFF;
|
||||
c = s->read_fifo[s->read_pos];
|
||||
if (s->read_count > 0) {
|
||||
s->read_count--;
|
||||
s->read_pos = (s->read_pos + 1) & (pl011_get_fifo_depth(s) - 1);
|
||||
}
|
||||
if (s->read_count == 0) {
|
||||
s->flags |= PL011_FLAG_RXFE;
|
||||
}
|
||||
if (s->read_count == s->read_trigger - 1)
|
||||
s->int_level &= ~ INT_RX;
|
||||
trace_pl011_read_fifo(s->read_count);
|
||||
s->rsr = c >> 8;
|
||||
pl011_update(s);
|
||||
qemu_chr_fe_accept_input(&s->chr);
|
||||
r = c;
|
||||
r = pl011_read_rxdata(s);
|
||||
break;
|
||||
case 1: /* UARTRSR */
|
||||
r = s->rsr;
|
||||
|
|
Loading…
Reference in New Issue