From e5c21603fce2e6143f7312211eaed47c16510ea3 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 5 Oct 2017 16:36:01 +0200 Subject: [PATCH] efi_loader: implement WaitForPacket event The WaitForPacket event informs that a network package has been received by the SimpleNetworkProtocol. Signed-off-by: Heinrich Schuchardt [agraf: Move is_signaled = true line into efi_net_push()] Signed-off-by: Alexander Graf --- lib/efi_loader/efi_net.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/efi_loader/efi_net.c b/lib/efi_loader/efi_net.c index 3704789..cd46d2d 100644 --- a/lib/efi_loader/efi_net.c +++ b/lib/efi_loader/efi_net.c @@ -24,6 +24,10 @@ static void *new_tx_packet; * to check if a new network packet has been received. */ static struct efi_event *network_timer_event; +/* + * This event is signaled when a packet has been received. + */ +static struct efi_event *wait_for_packet; struct efi_net_obj { /* Generic EFI object parent class data */ @@ -171,6 +175,7 @@ static efi_status_t EFIAPI efi_net_transmit(struct efi_simple_network *this, static void efi_net_push(void *pkt, int len) { new_rx_packet = true; + wait_for_packet->is_signaled = true; } static efi_status_t EFIAPI efi_net_receive(struct efi_simple_network *this, @@ -281,6 +286,17 @@ int efi_net_register(void) list_add_tail(&netobj->parent.link, &efi_obj_list); /* + * Create WaitForPacket event. + */ + r = efi_create_event(EVT_NOTIFY_WAIT, TPL_CALLBACK, + efi_network_timer_notify, NULL, + &wait_for_packet); + if (r != EFI_SUCCESS) { + printf("ERROR: Failed to register network event\n"); + return r; + } + netobj->net.wait_for_packet = wait_for_packet; + /* * Create a timer event. * * The notification function is used to check if a new network packet -- 2.7.4