/** @file
UefiPxeBcDxe.h -- Header for UefiPxeBcDxe
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __UEFIPXEBCDXE_H__
#define __UEFIPXEBCDXE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
PxeBcDebugPrint(
VOID
);
EFI_STATUS
EFIAPI
PxeBcDriverEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
PxeBcDriverBindingSupported(
VOID
);
EFI_STATUS
EFIAPI
PxeBcDriverBindingStart(
VOID
);
EFI_STATUS
EFIAPI
PxeBcDriverBindingStop(
VOID
);
EFI_STATUS
EFIAPI
PXeBcStart(
VOID
);
EFI_STATUS
EFIAPI
PxeBcStop(
VOID
);
EFI_STATUS
EFIAPI
PxeBcDhcp(
VOID
);
EFI_STATUS
EFIAPI
PXeBcDiscover(
VOID
);
EFI_STATUS
EFIAPI
PxeBcMtftp(
VOID
);
EFI_STATUS
EFIAPI
PxeBcUdpWrite(
VOID
);
EFI_STATUS
EFIAPI
PxeBcUdpRead(
VOID
);
EFI_STATUS
EFIAPI
PxeBcSetIpFilters(
VOID
);
EFI_STATUS
EFIAPI
PxeBcArp(
VOID
);
EFI_STATUS
EFIAPI
PxeBcSetParameters(
VOID
);
EFI_STATUS
EFIAPI
PxeBcSetStationIp(
VOID
);
EFI_STATUS
EFIAPI
PxeBcSetPackets(
VOID
);
EFI_STATUS
EFIAPI
PxeBcCheckIpv6Support(
VOID
);
EFI_STATUS
EFIAPI
PxeBcCreateChildren(
VOID
);
EFI_STATUS
EFIAPI
PxeBcDestroyChild(
VOID
);
EFI_STATUS
EFIAPI
PxeBcWaitForEsc(
VOID
);
EFI_STATUS
EFIAPI
PxeBcPrintMacAddr(
VOID
);
EFI_STATUS
EFIAPI
PxeBcModeReset(
VOID
);
EFI_STATUS
EFIAPI
PxeBcBuildDhcp4Options(
VOID
);
EFI_STATUS
EFIAPI
PxeBcSaveBootFile(
VOID
);
EFI_STATUS
EFIAPI
PxeBcBootPrompt(
VOID
);
EFI_STATUS
EFIAPI
variables(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
configuration - timeout values read from NVRAM(
VOID
);
EFI_STATUS
EFIAPI
n257 = 0; // Default PXE timeout(
VOID
);
EFI_STATUS
EFIAPI
timeout(
VOID
);
EFI_STATUS
EFIAPI
GUIDs (defined in external .rdata section)(
VOID
);
EFI_STATUS
EFIAPI
are referenced via offsets into .rdata at known locations.(
VOID
);
EFI_STATUS
EFIAPI
GUIDs match the standard UEFI PXE Base Code protocol GUID(
VOID
);
EFI_STATUS
EFIAPI
declarations(
VOID
);
EFI_STATUS
EFIAPI
PxeBcDebugPrint ((
VOID
);
EFI_STATUS
EFIAPI
global state via UefiBootServicesTableLib constructor(
VOID
);
EFI_STATUS
EFIAPI
= UefiBootServicesTableLibConstructor (ImageHandle, SystemTable);(
VOID
);
EFI_STATUS
EFIAPI
required HII protocols(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol (&gEfiHiiConfigRoutingProtocolGuid, NULL, &gHiiConfigRouting);(
VOID
);
EFI_STATUS
EFIAPI
DPC protocol and LNV Send IPMI Command library(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol (&gEfiDpcProtocolGuid, NULL, &gDpcProtocol);(
VOID
);
EFI_STATUS
EFIAPI
protocol is optional; try to install our own(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallMultipleProtocolInterfaces ((
VOID
);
EFI_STATUS
EFIAPI
NetworkStackVar NVRAM variable for configuration(
VOID
);
EFI_STATUS
EFIAPI
for PXE boot pre-context variable(
VOID
);
EFI_STATUS
EFIAPI
(!PxeBcPreBootContextValid ()) {(
VOID
);
EFI_STATUS
EFIAPI
the driver binding and component name protocols(
VOID
);
EFI_STATUS
EFIAPI
the unload handler(
VOID
);
EFI_STATUS
EFIAPI
gBS->HandleProtocol ((
VOID
);
EFI_STATUS
EFIAPI
Binding Protocol(
VOID
);
EFI_STATUS
EFIAPI
if the controller has the Network Interface Identifier Protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->OpenProtocol ((
VOID
);
EFI_STATUS
EFIAPI
for IPv6 support(
VOID
);
EFI_STATUS
EFIAPI
(!PxeBcCheckpvv6Support (ControllerHandle, &Ipv6Supported)) {(
VOID
);
EFI_STATUS
EFIAPI
the private data structure(
VOID
);
EFI_STATUS
EFIAPI
= AllocateZeroPool (sizeof (PXEBC_PRIVATE_DATA));(
VOID
);
EFI_STATUS
EFIAPI
timeout configuration from NVRAM(
VOID
);
EFI_STATUS
EFIAPI
= sizeof (TimeOut);(
VOID
);
EFI_STATUS
EFIAPI
the children (open UDP4, DHCP4, ARP, etc.)(
VOID
);
EFI_STATUS
EFIAPI
= PxeBcCreateChildren (Private, FALSE);(
VOID
);
EFI_STATUS
EFIAPI
the PXE Base Code Protocol on a new child handle(
VOID
);
EFI_STATUS
EFIAPI
the callback for pre-boot context(
VOID
);
EFI_STATUS
EFIAPI
(Private);(
VOID
);
EFI_STATUS
EFIAPI
mode structure(
VOID
);
EFI_STATUS
EFIAPI
(UseIpv6) {(
VOID
);
EFI_STATUS
EFIAPI
the receive filter to promiscuous(
VOID
);
EFI_STATUS
EFIAPI
(This, NULL);(
VOID
);
EFI_STATUS
EFIAPI
the PXE mode state(
VOID
);
EFI_STATUS
EFIAPI
media status(
VOID
);
EFI_STATUS
EFIAPI
(!PxeBcCheckMediaStatus (Private)) {(
VOID
);
EFI_STATUS
EFIAPI
cache state(
VOID
);
EFI_STATUS
EFIAPI
= PxeBcDhcp6Solicit (Private, Private->Dhcp6, NULL);(
VOID
);
EFI_STATUS
EFIAPI
the advertises and select best offer(
VOID
);
EFI_STATUS
EFIAPI
= PxeBcDhcp6SelectOffer (Private);(
VOID
);
EFI_STATUS
EFIAPI
= PxeBcDhcp4Discover (Private, Private->Dhcp4, NULL);(
VOID
);
EFI_STATUS
EFIAPI
boot server type(
VOID
);
EFI_STATUS
EFIAPI
((Type < 1 || Type > 3) && Type != 5) {(
VOID
);
EFI_STATUS
EFIAPI
mode state to boot server discovery(
VOID
);
EFI_STATUS
EFIAPI
boot server discovery via DHCP or DNS(
VOID
);
EFI_STATUS
EFIAPI
(Private->Mode->UsingIpv6) {(
VOID
);
EFI_STATUS
EFIAPI
the buffer size(
VOID
);
EFI_STATUS
EFIAPI
(*BufferSize < 0x200) {(
VOID
);
EFI_STATUS
EFIAPI
to IPv4 or IPv6 implementation(
VOID
);
EFI_STATUS
EFIAPI
flag/address combinations(
VOID
);
EFI_STATUS
EFIAPI
((OpFlags & EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_MULTICAST) &&(
VOID
);
EFI_STATUS
EFIAPI
write not supported on IPv6(
VOID
);
EFI_STATUS
EFIAPI
EFI_INVALID_PARAMETER;(
VOID
);
EFI_STATUS
EFIAPI
to appropriate UDP write path(
VOID
);
EFI_STATUS
EFIAPI
the filter(
VOID
);
EFI_STATUS
EFIAPI
(NewFilter->Filters == EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS ||(
VOID
);
EFI_STATUS
EFIAPI
multicast group addresses(
VOID
);
EFI_STATUS
EFIAPI
ApplyIpFilter (Private, NewFilter);(
VOID
);
EFI_STATUS
EFIAPI
the ARP protocol if available(
VOID
);
EFI_STATUS
EFIAPI
(Private->Arp != NULL && !Private->Mode->UsingIpv6) {(
VOID
);
EFI_STATUS
EFIAPI
IPv6, use ND (Neighbor Discovery) instead of ARP(
VOID
);
EFI_STATUS
EFIAPI
EFI_NO_MAPPING;(
VOID
);
EFI_STATUS
EFIAPI
the mode parameters if provided(
VOID
);
EFI_STATUS
EFIAPI
(NewAutoArp != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
TTL is invalid(
VOID
);
EFI_STATUS
EFIAPI
UsingIpv6, NewSubnetMask is ignored(
VOID
);
EFI_STATUS
EFIAPI
set station IP to multicast(
VOID
);
EFI_STATUS
EFIAPI
the configuration(
VOID
);
EFI_STATUS
EFIAPI
flags(
VOID
);
EFI_STATUS
EFIAPI
(NewDhcpDiscoverValid != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
packet data(
VOID
);
EFI_STATUS
EFIAPI
(NewDhcpDiscover != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
helper functions(
VOID
);
EFI_STATUS
EFIAPI
to open the IPv6 stack protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->HandleProtocol ((
VOID
);
EFI_STATUS
EFIAPI
if the interface actually has an IPv6 address configured(
VOID
);
EFI_STATUS
EFIAPI
= CheckIpv6AddressAvailable (ImageHandle);(
VOID
);
EFI_STATUS
EFIAPI
DHCP6 service binding(
VOID
);
EFI_STATUS
EFIAPI
DHCP6 child(
VOID
);
EFI_STATUS
EFIAPI
= Private->Dhcp6->CreateChild (Private->Dhcp6, &Private->Dhcp6ChildHandle);(
VOID
);
EFI_STATUS
EFIAPI
UDP6 service binding(
VOID
);
EFI_STATUS
EFIAPI
DHCP4 service binding(
VOID
);
EFI_STATUS
EFIAPI
DHCP4 child(
VOID
);
EFI_STATUS
EFIAPI
= Private->Dhcp4->CreateChild (Private->Dhcp4, &Private->Dhcp4ChildHandle);(
VOID
);
EFI_STATUS
EFIAPI
UDP4 service binding(
VOID
);
EFI_STATUS
EFIAPI
UDP4 read/write tokens(
VOID
);
EFI_STATUS
EFIAPI
if started(
VOID
);
EFI_STATUS
EFIAPI
(Private->Mode != NULL && Private->Mode->Started) {(
VOID
);
EFI_STATUS
EFIAPI
DHCP and UDP children(
VOID
);
EFI_STATUS
EFIAPI
(Private->Udp4 != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
the mode buffer(
VOID
);
EFI_STATUS
EFIAPI
(Private->Mode != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
the private data itself(
VOID
);
EFI_STATUS
EFIAPI
in 100ms increments(
VOID
);
EFI_STATUS
EFIAPI
= TimeoutSeconds * 10;(
VOID
);
EFI_STATUS
EFIAPI
if key is available(
VOID
);
EFI_STATUS
EFIAPI
= gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);(
VOID
);
EFI_STATUS
EFIAPI
}(
VOID
);
EFI_STATUS
EFIAPI
IPv6 capability flags(
VOID
);
EFI_STATUS
EFIAPI
= Mode->Ipv6Available;(
VOID
);
EFI_STATUS
EFIAPI
the mode structure (size ~10424 bytes)(
VOID
);
EFI_STATUS
EFIAPI
(Mode, sizeof (EFI_PXE_BASE_CODE_MODE));(
VOID
);
EFI_STATUS
EFIAPI
IPv6 flags(
VOID
);
EFI_STATUS
EFIAPI
DHCP cache(
VOID
);
EFI_STATUS
EFIAPI
file info(
VOID
);
EFI_STATUS
EFIAPI
tokens(
VOID
);
EFI_STATUS
EFIAPI
(Private->Udp4ReceiveToken != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
57 (0x39): PXE Client ID / Class ID(
VOID
);
EFI_STATUS
EFIAPI
(Count < OptCount) {(
VOID
);
EFI_STATUS
EFIAPI
type(
VOID
);
EFI_STATUS
EFIAPI
OptList[Count]->Data[2] = 0; // reserved(
VOID
);
EFI_STATUS
EFIAPI
the Boot#### variable(
VOID
);
EFI_STATUS
EFIAPI
function reads the current BootCurrent variable, constructs a(
VOID
);
EFI_STATUS
EFIAPI
Boot#### variable pointing to the downloaded NBP file, and(
VOID
);
EFI_STATUS
EFIAPI
it to NVRAM so that subsequent boots can load the same file(
VOID
);
EFI_STATUS
EFIAPI
doing PXE again.(
VOID
);
EFI_STATUS
EFIAPI
boot prompt and wait for ESC to abort(
VOID
);
EFI_STATUS
EFIAPI
function handles the "Press ESC key to abort PXE boot" prompt(
VOID
);
EFI_STATUS
EFIAPI
the DHCP/PXE discovery phase.(
VOID
);
EFI_STATUS
EFIAPI
((DEBUG_INFO, "\n>>Start PXE over %s\n"(
VOID
);
#endif /* __UEFIPXEBCDXE_H__ */