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>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user