]> git.proxmox.com Git - mirror_edk2.git/blame - NetworkPkg/UefiPxeBcDxe/PxeBcImpl.h
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / NetworkPkg / UefiPxeBcDxe / PxeBcImpl.h
CommitLineData
a3bcde70
HT
1/** @file\r
2 This EFI_PXE_BASE_CODE_PROTOCOL and EFI_LOAD_FILE_PROTOCOL.\r
3 interfaces declaration.\r
4\r
b29e6365 5 Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.<BR>\r
a3bcde70 6\r
ecf98fbc 7 SPDX-License-Identifier: BSD-2-Clause-Patent\r
a3bcde70
HT
8\r
9**/\r
10\r
11#ifndef __EFI_PXEBC_IMPL_H__\r
12#define __EFI_PXEBC_IMPL_H__\r
13\r
14#include <Uefi.h>\r
15\r
16#include <Guid/SmBios.h>\r
17#include <IndustryStandard/SmBios.h>\r
142c00c3 18#include <IndustryStandard/Dhcp.h>\r
a3bcde70
HT
19#include <Protocol/NetworkInterfaceIdentifier.h>\r
20#include <Protocol/Arp.h>\r
21#include <Protocol/Ip4.h>\r
ac99793b 22#include <Protocol/Ip4Config2.h>\r
a3bcde70
HT
23#include <Protocol/Ip6.h>\r
24#include <Protocol/Ip6Config.h>\r
25#include <Protocol/Udp4.h>\r
26#include <Protocol/Udp6.h>\r
27#include <Protocol/Dhcp4.h>\r
28#include <Protocol/Dhcp6.h>\r
6692d519 29#include <Protocol/Dns6.h>\r
a3bcde70
HT
30#include <Protocol/Mtftp4.h>\r
31#include <Protocol/Mtftp6.h>\r
32#include <Protocol/PxeBaseCode.h>\r
33#include <Protocol/LoadFile.h>\r
34#include <Protocol/PxeBaseCodeCallBack.h>\r
35#include <Protocol/ServiceBinding.h>\r
36#include <Protocol/DriverBinding.h>\r
2bbe9553 37#include <Protocol/AdapterInformation.h>\r
a3bcde70
HT
38\r
39#include <Library/DebugLib.h>\r
40#include <Library/BaseMemoryLib.h>\r
41#include <Library/MemoryAllocationLib.h>\r
42#include <Library/UefiDriverEntryPoint.h>\r
43#include <Library/UefiBootServicesTableLib.h>\r
129b8b09 44#include <Library/UefiRuntimeServicesTableLib.h>\r
a3bcde70
HT
45#include <Library/UefiLib.h>\r
46#include <Library/BaseLib.h>\r
47#include <Library/NetLib.h>\r
48#include <Library/DpcLib.h>\r
49#include <Library/DevicePathLib.h>\r
50#include <Library/PcdLib.h>\r
51\r
d1050b9d
MK
52typedef struct _PXEBC_PRIVATE_DATA PXEBC_PRIVATE_DATA;\r
53typedef struct _PXEBC_PRIVATE_PROTOCOL PXEBC_PRIVATE_PROTOCOL;\r
54typedef struct _PXEBC_VIRTUAL_NIC PXEBC_VIRTUAL_NIC;\r
a3bcde70
HT
55\r
56#include "PxeBcDriver.h"\r
57#include "PxeBcDhcp4.h"\r
58#include "PxeBcDhcp6.h"\r
59#include "PxeBcMtftp.h"\r
60#include "PxeBcBoot.h"\r
61#include "PxeBcSupport.h"\r
62\r
d1050b9d
MK
63#define PXEBC_DEFAULT_HOPLIMIT 64\r
64#define PXEBC_DEFAULT_LIFETIME 50000 // 50 ms, unit is microsecond\r
65#define PXEBC_UDP_TIMEOUT 30000000 // 3 seconds, unit is 100nanosecond\r
66#define PXEBC_DAD_ADDITIONAL_DELAY 30000000 // 3 seconds\r
67#define PXEBC_MTFTP_TIMEOUT 4\r
68#define PXEBC_MTFTP_RETRIES 6\r
69#define PXEBC_DHCP_RETRIES 4 // refers to mPxeDhcpTimeout, also by PXE2.1 spec.\r
70#define PXEBC_MENU_MAX_NUM 24\r
71#define PXEBC_OFFER_MAX_NUM 16\r
a3bcde70 72\r
d1050b9d 73#define PXEBC_CHECK_MEDIA_WAITING_TIME EFI_TIMER_PERIOD_SECONDS(20)\r
152f2d5e 74\r
d1050b9d
MK
75#define PXEBC_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'P')\r
76#define PXEBC_VIRTUAL_NIC_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'V')\r
77#define PXEBC_PRIVATE_DATA_FROM_PXEBC(a) CR (a, PXEBC_PRIVATE_DATA, PxeBc, PXEBC_PRIVATE_DATA_SIGNATURE)\r
78#define PXEBC_PRIVATE_DATA_FROM_ID(a) CR (a, PXEBC_PRIVATE_DATA, Id, PXEBC_PRIVATE_DATA_SIGNATURE)\r
79#define PXEBC_VIRTUAL_NIC_FROM_LOADFILE(a) CR (a, PXEBC_VIRTUAL_NIC, LoadFile, PXEBC_VIRTUAL_NIC_SIGNATURE)\r
a3bcde70 80\r
d1050b9d
MK
81#define PXE_ENABLED 0x01\r
82#define PXE_DISABLED 0x00\r
b29e6365 83\r
a3bcde70 84typedef union {\r
d1050b9d
MK
85 PXEBC_DHCP4_PACKET_CACHE Dhcp4;\r
86 PXEBC_DHCP6_PACKET_CACHE Dhcp6;\r
a3bcde70
HT
87} PXEBC_DHCP_PACKET_CACHE;\r
88\r
15f3fc85 89struct _PXEBC_PRIVATE_PROTOCOL {\r
d1050b9d 90 UINT64 Reserved;\r
15f3fc85 91};\r
92\r
a3bcde70 93struct _PXEBC_VIRTUAL_NIC {\r
d1050b9d
MK
94 UINT32 Signature;\r
95 EFI_HANDLE Controller;\r
96 EFI_LOAD_FILE_PROTOCOL LoadFile;\r
97 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
98 PXEBC_PRIVATE_DATA *Private;\r
a3bcde70
HT
99};\r
100\r
101struct _PXEBC_PRIVATE_DATA {\r
d1050b9d
MK
102 UINT32 Signature;\r
103 EFI_HANDLE Controller;\r
104 EFI_HANDLE Image;\r
105\r
106 PXEBC_PRIVATE_PROTOCOL Id;\r
107 EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
108\r
109 PXEBC_VIRTUAL_NIC *Ip4Nic;\r
110 PXEBC_VIRTUAL_NIC *Ip6Nic;\r
111\r
112 EFI_HANDLE ArpChild;\r
113 EFI_HANDLE Ip4Child;\r
114 EFI_HANDLE Dhcp4Child;\r
115 EFI_HANDLE Mtftp4Child;\r
116 EFI_HANDLE Udp4ReadChild;\r
117 EFI_HANDLE Udp4WriteChild;\r
118\r
119 EFI_ARP_PROTOCOL *Arp;\r
120 EFI_IP4_PROTOCOL *Ip4;\r
121 EFI_IP4_CONFIG2_PROTOCOL *Ip4Config2;\r
122 EFI_DHCP4_PROTOCOL *Dhcp4;\r
123 EFI_MTFTP4_PROTOCOL *Mtftp4;\r
124 EFI_UDP4_PROTOCOL *Udp4Read;\r
125 EFI_UDP4_PROTOCOL *Udp4Write;\r
126\r
127 EFI_HANDLE Ip6Child;\r
128 EFI_HANDLE Dhcp6Child;\r
129 EFI_HANDLE Mtftp6Child;\r
130 EFI_HANDLE Udp6ReadChild;\r
131 EFI_HANDLE Udp6WriteChild;\r
132\r
133 EFI_IP6_PROTOCOL *Ip6;\r
134 EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg;\r
135 EFI_DHCP6_PROTOCOL *Dhcp6;\r
136 EFI_MTFTP6_PROTOCOL *Mtftp6;\r
137 EFI_UDP6_PROTOCOL *Udp6Read;\r
138 EFI_UDP6_PROTOCOL *Udp6Write;\r
139 EFI_DNS6_PROTOCOL *Dns6;\r
140\r
141 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *Nii;\r
142 EFI_PXE_BASE_CODE_PROTOCOL PxeBc;\r
143 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL LoadFileCallback;\r
144 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *PxeBcCallback;\r
145 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
146\r
147 EFI_PXE_BASE_CODE_MODE Mode;\r
148 EFI_PXE_BASE_CODE_FUNCTION Function;\r
149 UINT32 Ip6Policy;\r
150 UINT32 SolicitTimes;\r
151 UINT64 ElapsedTime;\r
152\r
153 EFI_UDP4_CONFIG_DATA Udp4CfgData;\r
154 EFI_UDP6_CONFIG_DATA Udp6CfgData;\r
155 EFI_IP4_CONFIG_DATA Ip4CfgData;\r
156 EFI_IP6_CONFIG_DATA Ip6CfgData;\r
157\r
158 EFI_EVENT UdpTimeOutEvent;\r
159 EFI_EVENT ArpUpdateEvent;\r
160 EFI_IP4_COMPLETION_TOKEN IcmpToken;\r
161 EFI_IP6_COMPLETION_TOKEN Icmp6Token;\r
162\r
163 BOOLEAN IsAddressOk;\r
164 BOOLEAN IsOfferSorted;\r
165 BOOLEAN IsProxyRecved;\r
166 BOOLEAN IsDoDiscover;\r
167\r
168 EFI_IP_ADDRESS TmpStationIp;\r
169 EFI_IP_ADDRESS StationIp;\r
170 EFI_IP_ADDRESS SubnetMask;\r
171 EFI_IP_ADDRESS GatewayIp;\r
172 EFI_IP_ADDRESS ServerIp;\r
173 EFI_IPv6_ADDRESS *DnsServer;\r
174 UINT16 CurSrcPort;\r
175 UINT32 IaId;\r
176\r
177 UINT32 Ip4MaxPacketSize;\r
178 UINT32 Ip6MaxPacketSize;\r
179 UINT8 *BootFileName;\r
180 UINTN BootFileSize;\r
181 UINTN BlockSize;\r
182\r
183 PXEBC_DHCP_PACKET_CACHE ProxyOffer;\r
184 PXEBC_DHCP_PACKET_CACHE DhcpAck;\r
185 PXEBC_DHCP_PACKET_CACHE PxeReply;\r
186 EFI_DHCP6_PACKET *Dhcp6Request;\r
187 EFI_DHCP4_PACKET SeedPacket;\r
a3bcde70
HT
188\r
189 //\r
190 // OfferIndex records the index of DhcpOffer[] buffer, and OfferCount records the num of each type of offer.\r
191 //\r
192 // It supposed that\r
193 //\r
194 // OfferNum: 8\r
195 // OfferBuffer: [ProxyBinl, ProxyBinl, DhcpOnly, ProxyPxe10, DhcpOnly, DhcpPxe10, DhcpBinl, ProxyBinl]\r
196 // (OfferBuffer is 0-based.)\r
197 //\r
198 // And assume that (DhcpPxe10 is the first priority actually.)\r
199 //\r
200 // SelectIndex: 2\r
201 // SelectProxyType: PXEBC_OFFER_TYPE_PROXY_BINL\r
202 // (SelectIndex is 1-based, and 0 means no one is selected.)\r
203 //\r
204 // So it should be\r
205 //\r
206 // DhcpOnly DhcpPxe10 DhcpWfm11a DhcpBinl ProxyPxe10 ProxyWfm11a ProxyBinl Bootp\r
207 // OfferCount: [ 2(n), 1(n), 0(n), 1(n), 1(1), 0(1), 3(n), 1(1)]\r
208 //\r
209 // OfferIndex: {[ 2, 5, 0, 6, 3, 0, *0, 0]\r
210 // [ 4, 0, 0, 0, 0, 0, 1, 0]\r
211 // [ 0, 0, 0, 0, 0, 0, 7, 0]\r
212 // ... ]}\r
213 // (OfferIndex is 0-based.)\r
214 //\r
215 //\r
d1050b9d
MK
216 UINT32 SelectIndex;\r
217 UINT32 SelectProxyType;\r
218 PXEBC_DHCP_PACKET_CACHE OfferBuffer[PXEBC_OFFER_MAX_NUM];\r
219 UINT32 OfferNum;\r
220 UINT32 OfferCount[PxeOfferTypeMax];\r
221 UINT32 OfferIndex[PxeOfferTypeMax][PXEBC_OFFER_MAX_NUM];\r
a3bcde70
HT
222};\r
223\r
224extern EFI_PXE_BASE_CODE_PROTOCOL gPxeBcProtocolTemplate;\r
225extern EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL gPxeBcCallBackTemplate;\r
226extern EFI_LOAD_FILE_PROTOCOL gLoadFileProtocolTemplate;\r
227\r
228#endif\r