]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.h
Fix various 'EFIAPI' inconsistencies found while building MdeModulePkg.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDhcp.h
CommitLineData
30368135 1/** @file\r
f737cfb9 2 Dhcp and Discover routines for PxeBc.\r
30368135 3\r
6d3ea23f 4Copyright (c) 2007, 2009, Intel Corporation.<BR>\r
30368135 5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
30368135 13**/\r
14\r
15#ifndef __EFI_PXEBC_DHCP_H__\r
16#define __EFI_PXEBC_DHCP_H__\r
17\r
f737cfb9 18typedef enum {\r
30368135 19 PXEBC_DHCP4_MAX_OPTION_NUM = 16,\r
20 PXEBC_DHCP4_MAX_OPTION_SIZE = 312,\r
21 PXEBC_DHCP4_MAX_PACKET_SIZE = 1472,\r
22\r
23 PXEBC_DHCP4_S_PORT = 67,\r
24 PXEBC_DHCP4_C_PORT = 68,\r
25 PXEBC_BS_DOWNLOAD_PORT = 69,\r
26 PXEBC_BS_DISCOVER_PORT = 4011,\r
27\r
28 PXEBC_DHCP4_OPCODE_REQUEST = 1,\r
29 PXEBC_DHCP4_OPCODE_REPLY = 2,\r
30 PXEBC_DHCP4_MSG_TYPE_REQUEST = 3,\r
31 PXEBC_DHCP4_MAGIC = 0x63538263, // network byte order\r
32 //\r
33 // Dhcp Options\r
34 //\r
35 PXEBC_DHCP4_TAG_PAD = 0, // Pad Option\r
36 PXEBC_DHCP4_TAG_EOP = 255, // End Option\r
37 PXEBC_DHCP4_TAG_NETMASK = 1, // Subnet Mask\r
38 PXEBC_DHCP4_TAG_TIME_OFFSET = 2, // Time Offset from UTC\r
39 PXEBC_DHCP4_TAG_ROUTER = 3, // Router option,\r
40 PXEBC_DHCP4_TAG_TIME_SERVER = 4, // Time Server\r
41 PXEBC_DHCP4_TAG_NAME_SERVER = 5, // Name Server\r
42 PXEBC_DHCP4_TAG_DNS_SERVER = 6, // Domain Name Server\r
43 PXEBC_DHCP4_TAG_HOSTNAME = 12, // Host Name\r
44 PXEBC_DHCP4_TAG_BOOTFILE_LEN = 13, // Boot File Size\r
45 PXEBC_DHCP4_TAG_DUMP = 14, // Merit Dump File\r
46 PXEBC_DHCP4_TAG_DOMAINNAME = 15, // Domain Name\r
47 PXEBC_DHCP4_TAG_ROOTPATH = 17, // Root path\r
48 PXEBC_DHCP4_TAG_EXTEND_PATH = 18, // Extensions Path\r
49 PXEBC_DHCP4_TAG_EMTU = 22, // Maximum Datagram Reassembly Size\r
50 PXEBC_DHCP4_TAG_TTL = 23, // Default IP Time-to-live\r
51 PXEBC_DHCP4_TAG_BROADCAST = 28, // Broadcast Address\r
52 PXEBC_DHCP4_TAG_NIS_DOMAIN = 40, // Network Information Service Domain\r
53 PXEBC_DHCP4_TAG_NIS_SERVER = 41, // Network Information Servers\r
54 PXEBC_DHCP4_TAG_NTP_SERVER = 42, // Network Time Protocol Servers\r
55 PXEBC_DHCP4_TAG_VENDOR = 43, // Vendor Specific Information\r
56 PXEBC_DHCP4_TAG_REQUEST_IP = 50, // Requested IP Address\r
57 PXEBC_DHCP4_TAG_LEASE = 51, // IP Address Lease Time\r
58 PXEBC_DHCP4_TAG_OVERLOAD = 52, // Option Overload\r
59 PXEBC_DHCP4_TAG_MSG_TYPE = 53, // DHCP Message Type\r
60 PXEBC_DHCP4_TAG_SERVER_ID = 54, // Server Identifier\r
61 PXEBC_DHCP4_TAG_PARA_LIST = 55, // Parameter Request List\r
62 PXEBC_DHCP4_TAG_MAXMSG = 57, // Maximum DHCP Message Size\r
63 PXEBC_DHCP4_TAG_T1 = 58, // Renewal (T1) Time Value\r
64 PXEBC_DHCP4_TAG_T2 = 59, // Rebinding (T2) Time Value\r
65 PXEBC_DHCP4_TAG_CLASS_ID = 60, // Vendor class identifier\r
66 PXEBC_DHCP4_TAG_CLIENT_ID = 61, // Client-identifier\r
67 PXEBC_DHCP4_TAG_TFTP = 66, // TFTP server name\r
68 PXEBC_DHCP4_TAG_BOOTFILE = 67, // Bootfile name\r
69 PXEBC_PXE_DHCP4_TAG_ARCH = 93,\r
70 PXEBC_PXE_DHCP4_TAG_UNDI = 94,\r
71 PXEBC_PXE_DHCP4_TAG_UUID = 97,\r
72 //\r
73 // Sub-Options in Dhcp Vendor Option\r
74 //\r
75 PXEBC_VENDOR_TAG_MTFTP_IP = 1,\r
76 PXEBC_VENDOR_TAG_MTFTP_CPORT = 2,\r
77 PXEBC_VENDOR_TAG_MTFTP_SPORT = 3,\r
78 PXEBC_VENDOR_TAG_MTFTP_TIMEOUT = 4,\r
79 PXEBC_VENDOR_TAG_MTFTP_DELAY = 5,\r
80 PXEBC_VENDOR_TAG_DISCOVER_CTRL = 6,\r
81 PXEBC_VENDOR_TAG_DISCOVER_MCAST = 7,\r
82 PXEBC_VENDOR_TAG_BOOT_SERVERS = 8,\r
83 PXEBC_VENDOR_TAG_BOOT_MENU = 9,\r
84 PXEBC_VENDOR_TAG_MENU_PROMPT = 10,\r
85 PXEBC_VENDOR_TAG_MCAST_ALLOC = 11,\r
86 PXEBC_VENDOR_TAG_CREDENTIAL_TYPES = 12,\r
87 PXEBC_VENDOR_TAG_BOOT_ITEM = 71,\r
88\r
89 PXEBC_DHCP4_DISCOVER_INIT_TIMEOUT = 4,\r
90 PXEBC_DHCP4_DISCOVER_RETRIES = 4,\r
91\r
92 PXEBC_MAX_MENU_NUM = 24,\r
93 PXEBC_MAX_OFFER_NUM = 16,\r
94\r
95 PXEBC_BOOT_REQUEST_TIMEOUT = 1,\r
96 PXEBC_BOOT_REQUEST_RETRIES = 4,\r
97\r
98 PXEBC_DHCP4_OVERLOAD_FILE = 1,\r
99 PXEBC_DHCP4_OVERLOAD_SERVER_NAME = 2\r
f737cfb9 100} PXEBC_ENUM_TYPES;\r
30368135 101\r
102//\r
103// The array index of the DHCP4 option tag interested\r
104//\r
f737cfb9 105typedef enum {\r
30368135 106 PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN,\r
107 PXEBC_DHCP4_TAG_INDEX_VENDOR,\r
108 PXEBC_DHCP4_TAG_INDEX_OVERLOAD,\r
109 PXEBC_DHCP4_TAG_INDEX_MSG_TYPE,\r
110 PXEBC_DHCP4_TAG_INDEX_SERVER_ID,\r
111 PXEBC_DHCP4_TAG_INDEX_CLASS_ID,\r
112 PXEBC_DHCP4_TAG_INDEX_BOOTFILE,\r
113 PXEBC_DHCP4_TAG_INDEX_MAX\r
f737cfb9 114} PXEBC_DHCP4_TAG_INDEX_ENUM_TYPES;\r
30368135 115\r
116//\r
117// The type of DHCP OFFER, arranged by priority, PXE10 has the highest priority.\r
118//\r
f737cfb9 119typedef enum {\r
30368135 120 DHCP4_PACKET_TYPE_PXE10,\r
121 DHCP4_PACKET_TYPE_WFM11A,\r
122 DHCP4_PACKET_TYPE_BINL,\r
123 DHCP4_PACKET_TYPE_DHCP_ONLY,\r
124 DHCP4_PACKET_TYPE_MAX,\r
125 DHCP4_PACKET_TYPE_BOOTP = DHCP4_PACKET_TYPE_MAX\r
f737cfb9 126} DHCP4_PACKET_TYPE_ENUM_TYPES;\r
30368135 127\r
128#define BIT(x) (1 << x)\r
129#define CTRL(x) (0x1F & (x))\r
130\r
131//\r
132// WfM11a options\r
133//\r
134#define MTFTP_VENDOR_OPTION_BIT_MAP (BIT (PXEBC_VENDOR_TAG_MTFTP_IP) | \\r
135 BIT (PXEBC_VENDOR_TAG_MTFTP_CPORT) | \\r
136 BIT (PXEBC_VENDOR_TAG_MTFTP_SPORT) | \\r
137 BIT (PXEBC_VENDOR_TAG_MTFTP_TIMEOUT) | \\r
138 BIT (PXEBC_VENDOR_TAG_MTFTP_DELAY))\r
139//\r
140// Discoverty options\r
141//\r
142#define DISCOVER_VENDOR_OPTION_BIT_MAP (BIT (PXEBC_VENDOR_TAG_DISCOVER_CTRL) | \\r
143 BIT (PXEBC_VENDOR_TAG_DISCOVER_MCAST) | \\r
144 BIT (PXEBC_VENDOR_TAG_BOOT_SERVERS) | \\r
145 BIT (PXEBC_VENDOR_TAG_BOOT_MENU) | \\r
146 BIT (PXEBC_VENDOR_TAG_MENU_PROMPT))\r
147\r
148#define IS_VALID_BOOT_PROMPT(x) \\r
149 ((((x)[0]) & BIT (PXEBC_VENDOR_TAG_MENU_PROMPT)) == BIT (PXEBC_VENDOR_TAG_MENU_PROMPT))\r
150\r
151#define IS_VALID_BOOT_MENU(x) \\r
152 ((((x)[0]) & BIT (PXEBC_VENDOR_TAG_BOOT_MENU)) == BIT (PXEBC_VENDOR_TAG_BOOT_MENU))\r
153\r
154#define IS_VALID_MTFTP_VENDOR_OPTION(x) \\r
155 (((UINT32) ((x)[0]) & MTFTP_VENDOR_OPTION_BIT_MAP) == MTFTP_VENDOR_OPTION_BIT_MAP)\r
156\r
157#define IS_VALID_DISCOVER_VENDOR_OPTION(x) (((UINT32) ((x)[0]) & DISCOVER_VENDOR_OPTION_BIT_MAP) != 0)\r
158\r
159#define IS_VALID_CREDENTIAL_VENDOR_OPTION(x) \\r
160 (((UINT32) ((x)[0]) & BIT (PXEBC_VENDOR_TAG_CREDENTIAL_TYPES)) == BIT (PXEBC_VENDOR_TAG_CREDENTIAL_TYPES))\r
161\r
162#define IS_VALID_BOOTITEM_VENDOR_OPTION(x) \\r
163 (((UINT32) ((x)[PXEBC_VENDOR_TAG_BOOT_ITEM / 32]) & BIT (PXEBC_VENDOR_TAG_BOOT_ITEM % 32)) \\r
164 == BIT (PXEBC_VENDOR_TAG_BOOT_ITEM % 32))\r
165\r
166#define IS_DISABLE_BCAST_DISCOVER(x) (((x) & BIT (0)) == BIT (0))\r
167#define IS_DISABLE_MCAST_DISCOVER(x) (((x) & BIT (1)) == BIT (1))\r
168#define IS_ENABLE_USE_SERVER_LIST(x) (((x) & BIT (2)) == BIT (2))\r
169#define IS_ENABLE_BOOT_FILE_NAME(x) (((x) & BIT (3)) == BIT (3))\r
170\r
171#define SET_VENDOR_OPTION_BIT_MAP(x, y) (((x)[(y) / 32]) = (UINT32) ((x)[(y) / 32]) | BIT ((y) % 32))\r
172\r
173#pragma pack(1)\r
174typedef struct {\r
175 UINT8 ParaList[135];\r
176} PXEBC_DHCP4_OPTION_PARA;\r
177\r
178typedef struct {\r
179 UINT16 Size;\r
180} PXEBC_DHCP4_OPTION_MAX_MESG_SIZE;\r
181\r
182typedef struct {\r
183 UINT8 Type;\r
184 UINT8 MajorVer;\r
185 UINT8 MinorVer;\r
186} PXEBC_DHCP4_OPTION_UNDI;\r
187\r
188typedef struct {\r
189 UINT8 Type;\r
190} PXEBC_DHCP4_OPTION_MESG;\r
191\r
192typedef struct {\r
193 UINT16 Type;\r
194} PXEBC_DHCP4_OPTION_ARCH;\r
195\r
196#define DEFAULT_CLASS_ID_DATA "PXEClient:Arch:?????:????:??????"\r
197\r
198typedef struct {\r
199 UINT8 ClassIdentifier[10];\r
200 UINT8 ArchitecturePrefix[5];\r
201 UINT8 ArchitectureType[5];\r
202 UINT8 Lit3[1];\r
203 UINT8 InterfaceName[4];\r
204 UINT8 Lit4[1];\r
205 UINT8 UndiMajor[3];\r
206 UINT8 UndiMinor[3];\r
207} PXEBC_DHCP4_OPTION_CLID;\r
208\r
209typedef struct {\r
210 UINT8 Type;\r
211 UINT8 Guid[16];\r
212} PXEBC_DHCP4_OPTION_UUID;\r
213\r
214typedef struct {\r
215 UINT16 Type;\r
216 UINT16 Layer;\r
217} PXEBC_OPTION_BOOT_ITEM;\r
218\r
219#pragma pack()\r
220\r
221typedef union {\r
222 PXEBC_DHCP4_OPTION_PARA *Para;\r
223 PXEBC_DHCP4_OPTION_UNDI *Undi;\r
224 PXEBC_DHCP4_OPTION_ARCH *Arch;\r
225 PXEBC_DHCP4_OPTION_CLID *Clid;\r
226 PXEBC_DHCP4_OPTION_UUID *Uuid;\r
227 PXEBC_DHCP4_OPTION_MESG *Mesg;\r
228 PXEBC_DHCP4_OPTION_MAX_MESG_SIZE *MaxMesgSize;\r
229} PXEBC_DHCP4_OPTION_ENTRY;\r
230\r
231typedef struct {\r
232 UINT16 Type;\r
233 UINT8 IpCnt;\r
234 EFI_IPv4_ADDRESS IpAddr[1];\r
235} PXEBC_BOOT_SVR_ENTRY;\r
236\r
237typedef struct {\r
238 UINT16 Type;\r
239 UINT8 DescLen;\r
240 UINT8 DescStr[1];\r
241} PXEBC_BOOT_MENU_ENTRY;\r
242\r
243typedef struct {\r
244 UINT8 Timeout;\r
245 UINT8 Prompt[1];\r
246} PXEBC_MENU_PROMPT;\r
247\r
248typedef struct {\r
249 UINT32 BitMap[8];\r
250 EFI_IPv4_ADDRESS MtftpIp;\r
251 UINT16 MtftpCPort;\r
252 UINT16 MtftpSPort;\r
253 UINT8 MtftpTimeout;\r
254 UINT8 MtftpDelay;\r
255 UINT8 DiscoverCtrl;\r
256 EFI_IPv4_ADDRESS DiscoverMcastIp;\r
257 EFI_IPv4_ADDRESS McastIpBase;\r
258 UINT16 McastIpBlock;\r
259 UINT16 McastIpRange;\r
260 UINT16 BootSrvType;\r
261 UINT16 BootSrvLayer;\r
262 PXEBC_BOOT_SVR_ENTRY *BootSvr;\r
263 UINT8 BootSvrLen;\r
264 PXEBC_BOOT_MENU_ENTRY *BootMenu;\r
265 UINT8 BootMenuLen;\r
266 PXEBC_MENU_PROMPT *MenuPrompt;\r
267 UINT8 MenuPromptLen;\r
268 UINT32 *CredType;\r
269 UINT8 CredTypeLen;\r
270} PXEBC_VENDOR_OPTION;\r
271\r
f3f2e05d 272#define PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE (OFFSET_OF (EFI_DHCP4_PACKET, Dhcp4) + PXEBC_DHCP4_MAX_PACKET_SIZE)\r
30368135 273\r
274typedef struct {\r
275 union {\r
276 EFI_DHCP4_PACKET Offer;\r
277 EFI_DHCP4_PACKET Ack;\r
278 UINT8 Buffer[PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE];\r
279 } Packet;\r
280\r
281 BOOLEAN IsPxeOffer;\r
282 UINT8 OfferType;\r
283 EFI_DHCP4_PACKET_OPTION *Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_MAX];\r
284 PXEBC_VENDOR_OPTION PxeVendorOption;\r
285} PXEBC_CACHED_DHCP4_PACKET;\r
286\r
287#define GET_NEXT_DHCP_OPTION(Opt) \\r
288 (EFI_DHCP4_PACKET_OPTION *) ((UINT8 *) (Opt) + sizeof (EFI_DHCP4_PACKET_OPTION) + (Opt)->Length - 1)\r
289\r
290#define GET_OPTION_BUFFER_LEN(Pkt) ((Pkt)->Length - sizeof (EFI_DHCP4_HEADER) - 4)\r
291#define IS_PROXY_DHCP_OFFER(Offer) EFI_IP4_EQUAL (&((Offer)->Dhcp4.Header.YourAddr), &mZeroIp4Addr)\r
292\r
293#define GET_NEXT_BOOT_SVR_ENTRY(Ent) \\r
294 (PXEBC_BOOT_SVR_ENTRY *) ((UINT8 *) Ent + sizeof (*(Ent)) + ((Ent)->IpCnt - 1) * sizeof (EFI_IPv4_ADDRESS))\r
295\r
f737cfb9 296\r
297/**\r
298 This function initialize the DHCP4 message instance.\r
299\r
300 This function will pad each item of dhcp4 message packet.\r
301 \r
302 @param Seed Pointer to the message instance of the DHCP4 packet.\r
303 @param Udp4 Pointer to the EFI_UDP4_PROTOCOL instance.\r
304\r
305 @return none.\r
306\r
307**/\r
30368135 308VOID\r
309PxeBcInitSeedPacket (\r
310 IN EFI_DHCP4_PACKET *Seed,\r
311 IN EFI_UDP4_PROTOCOL *Udp4\r
d59b8b55 312 );\r
30368135 313\r
314\r
315/**\r
f737cfb9 316 Parse the cached dhcp packet.\r
30368135 317\r
f737cfb9 318 @param CachedPacket Pointer to cached dhcp packet.\r
30368135 319\r
d59b8b55 320 @retval TRUE Succeed to parse and validation.\r
f737cfb9 321 @retval FALSE Fail to parse or validation.\r
30368135 322\r
323**/\r
324BOOLEAN\r
325PxeBcParseCachedDhcpPacket (\r
326 IN PXEBC_CACHED_DHCP4_PACKET *CachedPacket\r
d59b8b55 327 );\r
30368135 328\r
30368135 329/**\r
d59b8b55 330 This function is to check the selected proxy offer (include BINL dhcp offer and\r
f737cfb9 331 DHCP_ONLY offer ) and set the flag and copy the DHCP packets to the Pxe base code\r
332 mode structure.\r
30368135 333\r
f737cfb9 334 @param Private Pointer to PxeBc private data.\r
30368135 335\r
f737cfb9 336 @retval EFI_SUCCESS Operational successful.\r
337 @retval EFI_NO_RESPONSE Offer dhcp service failed.\r
30368135 338\r
339**/\r
340EFI_STATUS\r
341PxeBcCheckSelectedOffer (\r
342 IN PXEBC_PRIVATE_DATA *Private\r
d59b8b55 343 );\r
30368135 344\r
345\r
346/**\r
f737cfb9 347 Callback routine.\r
348 \r
349 EFI_DHCP4_CALLBACK is provided by the consumer of the EFI DHCPv4 Protocol driver\r
350 to intercept events that occurred in the configuration process. This structure\r
351 provides advanced control of each state transition of the DHCP process. The\r
352 returned status code determines the behavior of the EFI DHCPv4 Protocol driver.\r
353 There are three possible returned values, which are described in the following\r
354 table.\r
355\r
356 @param This Pointer to the EFI DHCPv4 Protocol instance that is used to\r
357 configure this callback function.\r
358 @param Context Pointer to the context that is initialized by\r
359 EFI_DHCP4_PROTOCOL.Configure().\r
360 @param CurrentState The current operational state of the EFI DHCPv4 Protocol\r
361 driver.\r
362 @param Dhcp4Event The event that occurs in the current state, which usually means a\r
363 state transition.\r
364 @param Packet The DHCP packet that is going to be sent or already received.\r
365 @param NewPacket The packet that is used to replace the above Packet.\r
366\r
367 @retval EFI_SUCCESS Tells the EFI DHCPv4 Protocol driver to continue the DHCP process.\r
368 @retval EFI_NOT_READY Only used in the Dhcp4Selecting state. The EFI DHCPv4 Protocol\r
369 driver will continue to wait for more DHCPOFFER packets until the retry\r
370 timeout expires.\r
371 @retval EFI_ABORTED Tells the EFI DHCPv4 Protocol driver to abort the current process and\r
372 return to the Dhcp4Init or Dhcp4InitReboot state.\r
30368135 373\r
374**/\r
375EFI_STATUS\r
6d3ea23f 376EFIAPI\r
30368135 377PxeBcDhcpCallBack (\r
378 IN EFI_DHCP4_PROTOCOL * This,\r
379 IN VOID *Context,\r
380 IN EFI_DHCP4_STATE CurrentState,\r
381 IN EFI_DHCP4_EVENT Dhcp4Event,\r
382 IN EFI_DHCP4_PACKET * Packet OPTIONAL,\r
383 OUT EFI_DHCP4_PACKET **NewPacket OPTIONAL\r
d59b8b55 384 );\r
30368135 385\r
386\r
387/**\r
f737cfb9 388 Discover the boot of service and initialize the vendor option if exists.\r
389\r
390 @param Private Pointer to PxeBc private data.\r
391 @param Type PxeBc option boot item type\r
392 @param Layer PxeBc option boot item layer\r
d59b8b55 393 @param UseBis Use BIS or not\r
394 @param DestIp Ip address for server \r
395 @param IpCount The total count of the server ip address \r
396 @param SrvList Server list\r
397 @param IsDiscv Discover the vendor or not\r
398 @param Reply The dhcp4 packet of Pxe reply\r
399\r
400 @retval EFI_SUCCESS Operation succeeds.\r
f737cfb9 401 @retval EFI_OUT_OF_RESOURCES Allocate memory pool failed.\r
402 @retval EFI_NOT_FOUND There is no vendor option exists.\r
403 @retval EFI_TIMEOUT Send Pxe Discover time out. \r
404 \r
30368135 405**/\r
406EFI_STATUS\r
407PxeBcDiscvBootService (\r
408 IN PXEBC_PRIVATE_DATA * Private,\r
409 IN UINT16 Type,\r
410 IN UINT16 *Layer,\r
411 IN BOOLEAN UseBis,\r
412 IN EFI_IP_ADDRESS * DestIp,\r
413 IN UINT16 IpCount,\r
414 IN EFI_PXE_BASE_CODE_SRVLIST * SrvList,\r
415 IN BOOLEAN IsDiscv,\r
416 OUT EFI_DHCP4_PACKET * Reply OPTIONAL\r
d59b8b55 417 );\r
30368135 418\r
419\r
420/**\r
f737cfb9 421 Initialize the DHCP options and build the option list.\r
30368135 422\r
f737cfb9 423 @param Private Pointer to PxeBc private data.\r
424 @param OptList Pointer to a DHCP option list.\r
425 \r
426 @param IsDhcpDiscover Discover dhcp option or not. \r
30368135 427\r
f737cfb9 428 @return The index item number of the option list.\r
30368135 429\r
430**/\r
431UINT32\r
432PxeBcBuildDhcpOptions (\r
433 IN PXEBC_PRIVATE_DATA *Private,\r
434 IN EFI_DHCP4_PACKET_OPTION **OptList,\r
435 IN BOOLEAN IsDhcpDiscover\r
d59b8b55 436 );\r
30368135 437\r
438\r
439/**\r
f737cfb9 440 Create the boot options\r
30368135 441\r
f737cfb9 442 @param OptList Pointer to the list of the options\r
443 @param Type the type of option\r
444 @param Layer the layer of the boot options \r
445 @param OptLen length of opotion\r
30368135 446\r
f737cfb9 447 @return None.\r
30368135 448\r
449**/\r
450VOID\r
451PxeBcCreateBootOptions (\r
452 IN EFI_DHCP4_PACKET_OPTION *OptList,\r
453 IN UINT16 Type,\r
454 IN UINT16 *Layer,\r
455 OUT UINT32 *OptLen\r
d59b8b55 456 );\r
30368135 457\r
458\r
459/**\r
f737cfb9 460 Parse interested dhcp options.\r
30368135 461\r
f737cfb9 462 @param Buffer Pointer to the dhcp options packet.\r
d59b8b55 463 @param Length The length of the dhcp options.\r
464 @param OptTag The option OpCode.\r
30368135 465\r
d59b8b55 466 @return NULL if the buffer length is 0 and OpCode is not \r
f737cfb9 467 PXEBC_DHCP4_TAG_EOP, or the pointer to the buffer.\r
30368135 468\r
469**/\r
470EFI_DHCP4_PACKET_OPTION *\r
471PxeBcParseExtendOptions (\r
472 IN UINT8 *Buffer,\r
473 IN UINT32 Length,\r
474 IN UINT8 OptTag\r
d59b8b55 475 );\r
30368135 476\r
477\r
478/**\r
f737cfb9 479 This function is to parse and check vendor options.\r
30368135 480\r
f737cfb9 481 @param Dhcp4Option Pointer to dhcp options\r
482 @param VendorOption Pointer to vendor options\r
30368135 483\r
d59b8b55 484 @return TRUE if valid for vendor options, or FALSE.\r
30368135 485\r
486**/\r
487BOOLEAN\r
488PxeBcParseVendorOptions (\r
489 IN EFI_DHCP4_PACKET_OPTION *Dhcp4Option,\r
d59b8b55 490 IN PXEBC_VENDOR_OPTION *VendorOption\r
491 );\r
30368135 492\r
493\r
494/**\r
f737cfb9 495 Choose the boot prompt.\r
30368135 496\r
f737cfb9 497 @param Private Pointer to PxeBc private data.\r
30368135 498\r
f737cfb9 499 @retval EFI_SUCCESS Select boot prompt done.\r
500 @retval EFI_TIMEOUT Select boot prompt time out. \r
501 @retval EFI_NOT_FOUND The proxy offer is not Pxe10.\r
502 @retval EFI_ABORTED User cancel the operation.\r
503 @retval EFI_NOT_READY Read the input key from the keybroad has not finish.\r
504 \r
30368135 505**/\r
506EFI_STATUS\r
507PxeBcSelectBootPrompt (\r
508 IN PXEBC_PRIVATE_DATA *Private\r
d59b8b55 509 );\r
30368135 510\r
511\r
512/**\r
f737cfb9 513 Select the boot menu.\r
514\r
515 @param Private Pointer to PxeBc private data.\r
516 @param Type The type of the menu.\r
517 @param UseDefaultItem Use default item or not.\r
518 \r
519 @retval EFI_ABORTED User cancel operation.\r
520 @retval EFI_SUCCESS Select the boot menu success.\r
521 @retval EFI_NOT_READY Read the input key from the keybroad has not finish. \r
30368135 522\r
523**/\r
524EFI_STATUS\r
525PxeBcSelectBootMenu (\r
526 IN PXEBC_PRIVATE_DATA *Private,\r
527 OUT UINT16 *Type,\r
528 IN BOOLEAN UseDefaultItem\r
d59b8b55 529 );\r
30368135 530\r
531#endif\r
532\r