summary refs log tree commit diff stats
path: root/hw/net/lan9118.c
diff options
context:
space:
mode:
authorLucas Dietrich <ld.adecy@gmail.com>2022-08-29 22:00:46 +0200
committerPeter Maydell <peter.maydell@linaro.org>2022-09-22 16:38:28 +0100
commit895a803ce91704f28c9b49621a4f589273289f1e (patch)
tree681ed1ca1a7f1ba7de45de326ad1e60b26cfa4d9 /hw/net/lan9118.c
parentd4424bebceaa8ffbc23060ce45e52a9bb817e3c9 (diff)
downloadfocaccia-qemu-895a803ce91704f28c9b49621a4f589273289f1e.tar.gz
focaccia-qemu-895a803ce91704f28c9b49621a4f589273289f1e.zip
hw/net/lan9118: Signal TSFL_INT flag when TX FIFO reaches specified level
The LAN9118 allows the guest to specify a level for both the TX and
RX FIFOs at which an interrupt will be generated.  We implement the
RSFL_INT interrupt for the RX FIFO but are missing the handling of
the equivalent TSFL_INT for the TX FIFO.  Add the missing test to set
the interrupt if the TX FIFO has exceeded the guest-specified level.

This flag is required for Micrium lan911x ethernet driver to work.

Signed-off-by: Lucas Dietrich <ld.adecy@gmail.com>
[PMM: Tweaked commit message and comment]
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/net/lan9118.c')
-rw-r--r--hw/net/lan9118.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/hw/net/lan9118.c b/hw/net/lan9118.c
index 456ae38107..f1cba55967 100644
--- a/hw/net/lan9118.c
+++ b/hw/net/lan9118.c
@@ -696,6 +696,14 @@ static void do_tx_packet(lan9118_state *s)
     n = (s->tx_status_fifo_head + s->tx_status_fifo_used) & 511;
     s->tx_status_fifo[n] = status;
     s->tx_status_fifo_used++;
+
+    /*
+     * Generate TSFL interrupt if TX FIFO level exceeds the level
+     * specified in the FIFO_INT TX Status Level field.
+     */
+    if (s->tx_status_fifo_used > ((s->fifo_int >> 16) & 0xff)) {
+        s->int_sts |= TSFL_INT;
+    }
     if (s->tx_status_fifo_used == 512) {
         s->int_sts |= TSFF_INT;
         /* TODO: Stop transmission.  */