diff options
author | Alexander Graf <agraf@suse.de> | 2016-05-06 21:01:01 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-05-27 10:01:10 -0400 |
commit | 0efe1bcf5c2ce89d7c2467550e2823d7f95733e0 (patch) | |
tree | f040d19ef28c73746c329475e1ee4ac0524c1be7 /net | |
parent | 7e6621a1cae2d2442d3d7641ff1df17b3f03ad4b (diff) |
efi_loader: Add network access support
We can now successfully boot EFI applications from disk, but users
may want to also run them from a PXE setup.
This patch implements rudimentary network support, allowing a payload
to send and receive network packets.
With this patch, I was able to successfully run grub2 with network
access inside of QEMU's -M xlnx-ep108.
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'net')
-rw-r--r-- | net/bootp.c | 2 | ||||
-rw-r--r-- | net/net.c | 4 | ||||
-rw-r--r-- | net/tftp.c | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/net/bootp.c b/net/bootp.c index d7852dbb447..d91b3076b35 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -10,6 +10,7 @@ #include <common.h> #include <command.h> +#include <efi_loader.h> #include <net.h> #include <net/tftp.h> #include "bootp.h" @@ -1025,6 +1026,7 @@ static void dhcp_handler(uchar *pkt, unsigned dest, struct in_addr sip, strlen(CONFIG_SYS_BOOTFILE_PREFIX)) == 0) { #endif /* CONFIG_SYS_BOOTFILE_PREFIX */ dhcp_packet_process_options(bp); + efi_net_set_dhcp_ack(pkt, len); debug("TRANSITIONING TO REQUESTING STATE\n"); dhcp_state = REQUESTING; diff --git a/net/net.c b/net/net.c index fba111edfba..1e1d23dafa5 100644 --- a/net/net.c +++ b/net/net.c @@ -146,7 +146,7 @@ static unsigned net_ip_id; /* Ethernet bcast address */ const u8 net_bcast_ethaddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; const u8 net_null_ethaddr[6]; -#ifdef CONFIG_API +#if defined(CONFIG_API) || defined(CONFIG_EFI_LOADER) void (*push_packet)(void *, int len) = 0; #endif /* Network loop state */ @@ -1054,7 +1054,7 @@ void net_process_received_packet(uchar *in_packet, int len) if (len < ETHER_HDR_SIZE) return; -#ifdef CONFIG_API +#if defined(CONFIG_API) || defined(CONFIG_EFI_LOADER) if (push_packet) { (*push_packet)(in_packet, len); return; diff --git a/net/tftp.c b/net/tftp.c index f2889fe4c9b..ced45ec1f1f 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -8,6 +8,7 @@ #include <common.h> #include <command.h> +#include <efi_loader.h> #include <mapmem.h> #include <net.h> #include <net/tftp.h> @@ -804,6 +805,7 @@ void tftp_start(enum proto_t protocol) printf("Load address: 0x%lx\n", load_addr); puts("Loading: *\b"); tftp_state = STATE_SEND_RRQ; + efi_set_bootdev("Net", "", tftp_filename); } time_start = get_timer(0); |