4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This EFI_PXE_BASE_CODE_PROTOCOL and EFI_LOAD_FILE_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync interfaces declaration.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __EFI_PXEBC_IMPL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __EFI_PXEBC_IMPL_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Guid/SmBios.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <IndustryStandard/SmBios.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/NetworkInterfaceIdentifier.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Arp.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Ip4.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Ip6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Ip6Config.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Udp4.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Udp6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Dhcp4.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Dhcp6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Mtftp4.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/Mtftp6.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/PxeBaseCode.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/LoadFile.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/PxeBaseCodeCallBack.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/ServiceBinding.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DriverBinding.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiDriverEntryPoint.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiRuntimeServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/NetLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DpcLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DevicePathLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PcdLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _PXEBC_PRIVATE_DATA PXEBC_PRIVATE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _PXEBC_PRIVATE_PROTOCOL PXEBC_PRIVATE_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _PXEBC_VIRTUAL_NIC PXEBC_VIRTUAL_NIC;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "PxeBcDriver.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "PxeBcDhcp4.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "PxeBcDhcp6.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "PxeBcMtftp.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "PxeBcBoot.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "PxeBcSupport.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DEFAULT_HOPLIMIT 64
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DEFAULT_LIFETIME 50000 // 50 ms, unit is microsecond
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_UDP_TIMEOUT 30000000 // 3 seconds, unit is 100nanosecond
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_MTFTP_TIMEOUT 4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_MTFTP_RETRIES 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_DHCP_RETRIES 4 // refers to mPxeDhcpTimeout, also by PXE2.1 spec.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_MENU_MAX_NUM 24
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_OFFER_MAX_NUM 16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'P')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VIRTUAL_NIC_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'V')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_PRIVATE_DATA_FROM_PXEBC(a) CR (a, PXEBC_PRIVATE_DATA, PxeBc, PXEBC_PRIVATE_DATA_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_PRIVATE_DATA_FROM_ID(a) CR (a, PXEBC_PRIVATE_DATA, Id, PXEBC_PRIVATE_DATA_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PXEBC_VIRTUAL_NIC_FROM_LOADFILE(a) CR (a, PXEBC_VIRTUAL_NIC, LoadFile, PXEBC_VIRTUAL_NIC_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef union {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP4_PACKET_CACHE Dhcp4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP6_PACKET_CACHE Dhcp6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} PXEBC_DHCP_PACKET_CACHE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _PXEBC_PRIVATE_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Reserved;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _PXEBC_VIRTUAL_NIC {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Controller;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_LOAD_FILE_PROTOCOL LoadFile;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_PRIVATE_DATA *Private;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _PXEBC_PRIVATE_DATA {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Controller;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Image;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_PRIVATE_PROTOCOL Id;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_VIRTUAL_NIC *Ip4Nic;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_VIRTUAL_NIC *Ip6Nic;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ArpChild;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Ip4Child;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Dhcp4Child;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Mtftp4Child;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Udp4ReadChild;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Udp4WriteChild;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ARP_PROTOCOL *Arp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP4_PROTOCOL *Ip4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP4_PROTOCOL *Dhcp4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_MTFTP4_PROTOCOL *Mtftp4;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP4_PROTOCOL *Udp4Read;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP4_PROTOCOL *Udp4Write;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Ip6Child;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Dhcp6Child;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Mtftp6Child;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Udp6ReadChild;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Udp6WriteChild;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP6_PROTOCOL *Ip6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP6_PROTOCOL *Dhcp6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_MTFTP6_PROTOCOL *Mtftp6;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_PROTOCOL *Udp6Read;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_PROTOCOL *Udp6Write;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *Nii;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PXE_BASE_CODE_PROTOCOL PxeBc;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL LoadFileCallback;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *PxeBcCallback;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PXE_BASE_CODE_MODE Mode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PXE_BASE_CODE_FUNCTION Function;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Ip6Policy;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SolicitTimes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 ElapsedTime;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP4_CONFIG_DATA Udp4CfgData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UDP6_CONFIG_DATA Udp6CfgData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP4_CONFIG_DATA Ip4CfgData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP6_CONFIG_DATA Ip6CfgData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT UdpTimeOutEvent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT ArpUpdateEvent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP4_COMPLETION_TOKEN IcmpToken;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP6_COMPLETION_TOKEN Icmp6Token;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsAddressOk;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsOfferSorted;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsProxyRecved;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsDoDiscover;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP_ADDRESS StationIp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP_ADDRESS SubnetMask;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP_ADDRESS GatewayIp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IP_ADDRESS ServerIp;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 CurSrcPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Ip4MaxPacketSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Ip6MaxPacketSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 *BootFileName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BootFileSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN BlockSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP_PACKET_CACHE ProxyOffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP_PACKET_CACHE DhcpAck;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP_PACKET_CACHE PxeReply;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP6_PACKET *Dhcp6Request;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DHCP4_PACKET SeedPacket;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // OfferIndex records the index of DhcpOffer[] buffer, and OfferCount records the num of each type of offer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // It supposed that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // OfferNum: 8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // OfferBuffer: [ProxyBinl, ProxyBinl, DhcpOnly, ProxyPxe10, DhcpOnly, DhcpPxe10, DhcpBinl, ProxyBinl]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // (OfferBuffer is 0-based.)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // And assume that (DhcpPxe10 is the first priority actually.)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // SelectIndex: 2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // SelectProxyType: PXEBC_OFFER_TYPE_PROXY_BINL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // (SelectIndex is 1-based, and 0 means no one is selected.)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // So it should be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // DhcpOnly DhcpPxe10 DhcpWfm11a DhcpBinl ProxyPxe10 ProxyWfm11a ProxyBinl Bootp
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // OfferCount: [ 2(n), 1(n), 0(n), 1(n), 1(1), 0(1), 3(n), 1(1)]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // OfferIndex: {[ 2, 5, 0, 6, 3, 0, *0, 0]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // [ 4, 0, 0, 0, 0, 0, 1, 0]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // [ 0, 0, 0, 0, 0, 0, 7, 0]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // ... ]}
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // (OfferIndex is 0-based.)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SelectIndex;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SelectProxyType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PXEBC_DHCP_PACKET_CACHE OfferBuffer[PXEBC_OFFER_MAX_NUM];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 OfferNum;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 OfferCount[PxeOfferTypeMax];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 OfferIndex[PxeOfferTypeMax][PXEBC_OFFER_MAX_NUM];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_PXE_BASE_CODE_PROTOCOL gPxeBcProtocolTemplate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL gPxeBcCallBackTemplate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_LOAD_FILE_PROTOCOL gLoadFileProtocolTemplate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif