The returned interrupt status was wrong.

As out transmit buffer is empty we need to always set
EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT.

When we have received a packet we need to set
EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT.

Furthermore we should call efi_timer_check() to handle events.

Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
---
v2
        no change
---
 include/efi_api.h        |  6 ++++++
 lib/efi_loader/efi_net.c | 11 ++++++++---
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/include/efi_api.h b/include/efi_api.h
index 2f31464cb3..1f349db246 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -600,6 +600,12 @@ struct efi_simple_network_mode {
 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS           0x08
 #define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
 
+/* interrupt status bit mask */
+#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT   0x01
+#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT  0x02
+#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT   0x04
+#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT  0x08
+
 /* revision of the simple network protocol */
 #define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION   0x00010000
 
diff --git a/lib/efi_loader/efi_net.c b/lib/efi_loader/efi_net.c
index f63db686af..5866119817 100644
--- a/lib/efi_loader/efi_net.c
+++ b/lib/efi_loader/efi_net.c
@@ -133,9 +133,14 @@ static efi_status_t EFIAPI efi_net_get_status(struct 
efi_simple_network *this,
 {
        EFI_ENTRY("%p, %p, %p", this, int_status, txbuf);
 
-       /* We send packets synchronously, so nothing is outstanding */
-       if (int_status)
-               *int_status = 0;
+       efi_timer_check();
+
+       if (int_status) {
+               /* We send packets synchronously, so nothing is outstanding */
+               *int_status = EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT;
+               if (new_rx_packet)
+                       *int_status |= EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT;
+       }
        if (txbuf)
                *txbuf = new_tx_packet;
 
-- 
2.14.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to