[U-Boot] [PATCH 2/5] efi_selftest: check EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT

Heinrich Schuchardt xypron.glpk at gmx.de
Sun Sep 1 16:06:04 UTC 2019


Check that when the WaitForPacket event occurs
EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT is set.

Check the return value of Receive().

Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
 lib/efi_selftest/efi_selftest_snp.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/efi_selftest/efi_selftest_snp.c b/lib/efi_selftest/efi_selftest_snp.c
index 4c26619001..807b8657b9 100644
--- a/lib/efi_selftest/efi_selftest_snp.c
+++ b/lib/efi_selftest/efi_selftest_snp.c
@@ -268,6 +268,7 @@ static int execute(void)
 	struct efi_mac_address destaddr;
 	size_t buffer_size;
 	u8 *addr;
+
 	/*
 	 * The timeout is to occur after 10 s.
 	 */
@@ -298,6 +299,8 @@ static int execute(void)
 	events[0] = timer;
 	events[1] = net->wait_for_packet;
 	for (;;) {
+		u32 int_status;
+
 		/*
 		 * Wait for packet to be received or timer event.
 		 */
@@ -323,8 +326,17 @@ static int execute(void)
 		 * Receive packet
 		 */
 		buffer_size = sizeof(buffer);
-		net->receive(net, NULL, &buffer_size, &buffer,
-			     &srcaddr, &destaddr, NULL);
+		ret = net->get_status(net, &int_status, NULL);
+		if (ret != EFI_SUCCESS) {
+			efi_st_error("Failed to get status");
+			return EFI_ST_FAILURE;
+		}
+		if (!(int_status & EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT)) {
+			efi_st_error("RX interrupt not set");
+			return EFI_ST_FAILURE;
+		}
+		ret = net->receive(net, NULL, &buffer_size, &buffer,
+				   &srcaddr, &destaddr, NULL);
 		if (ret != EFI_SUCCESS) {
 			efi_st_error("Failed to receive packet");
 			return EFI_ST_FAILURE;
--
2.20.1



More information about the U-Boot mailing list