aboutsummaryrefslogtreecommitdiff
path: root/hw/serial.c
diff options
context:
space:
mode:
authorbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>2008-09-17 00:21:05 +0000
committerbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>2008-09-17 00:21:05 +0000
commit5628a6260ae8854d669d41aabb8c29a7a5b4bff9 (patch)
tree4848327ee470655a25f88e26195fbf0f9d317e07 /hw/serial.c
parent1ef4ef4e640cae84d9706a1fbb8f3916a4bc08ab (diff)
16550A UART: RHR irq enable bit also masks the Rx timeout irq.
The "Rx timeout" (aka. Character Timeout Indication) has no separate mask bit in the IER register and according to the specs reading RHR is the only way to reset the irq. However on the hardware (tested on OMAP2 UART which is an extended 16550A) the RHR_IT bit in IER disables the irc, too. Linux bluetooth serial dongle driver for N800 depends on this behavior. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5239 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/serial.c')
-rw-r--r--hw/serial.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/hw/serial.c b/hw/serial.c
index d70207e833..28d99f26cd 100644
--- a/hw/serial.c
+++ b/hw/serial.c
@@ -191,7 +191,7 @@ static void serial_update_irq(SerialState *s)
if ((s->ier & UART_IER_RLSI) && (s->lsr & UART_LSR_INT_ANY)) {
tmp_iir = UART_IIR_RLSI;
- } else if (s->timeout_ipending) {
+ } else if ((s->ier & UART_IER_RDI) && s->timeout_ipending) {
tmp_iir = UART_IIR_CTI;
} else if ((s->ier & UART_IER_RDI) && (s->lsr & UART_LSR_DR)) {
if (!(s->fcr & UART_FCR_FE)) {