aboutsummaryrefslogtreecommitdiff
path: root/hw/net
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
parentd4424bebceaa8ffbc23060ce45e52a9bb817e3c9 (diff)
downloadqemu-895a803ce91704f28c9b49621a4f589273289f1e.zip
qemu-895a803ce91704f28c9b49621a4f589273289f1e.tar.gz
qemu-895a803ce91704f28c9b49621a4f589273289f1e.tar.bz2
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')
-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 456ae38..f1cba55 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. */