TianoCore EDK2 master
Loading...
Searching...
No Matches
HttpBootConfig.c
Go to the documentation of this file.
1
9#include "HttpBootDxe.h"
11
12CHAR16 mHttpBootConfigStorageName[] = L"HTTP_BOOT_CONFIG_IFR_NVDATA";
13
29 IN BOOLEAN UsingIpv6,
30 IN CHAR16 *Description,
31 IN CHAR16 *Uri
32 )
33{
34 EFI_DEV_PATH *Node;
35 EFI_DEVICE_PATH_PROTOCOL *TmpDevicePath;
36 EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;
37 UINTN Length;
38 CHAR8 AsciiUri[URI_STR_MAX_SIZE];
39 EFI_STATUS Status;
40 UINTN Index;
42
43 NewDevicePath = NULL;
44 Node = NULL;
45 TmpDevicePath = NULL;
46
47 if (StrLen (Description) == 0) {
48 return EFI_INVALID_PARAMETER;
49 }
50
51 //
52 // Convert the scheme to all lower case.
53 //
54 for (Index = 0; Index < StrLen (Uri); Index++) {
55 if (Uri[Index] == L':') {
56 break;
57 }
58
59 if ((Uri[Index] >= L'A') && (Uri[Index] <= L'Z')) {
60 Uri[Index] -= (CHAR16)(L'A' - L'a');
61 }
62 }
63
64 //
65 // Only accept empty URI, or http and https URI.
66 //
67 if ((StrLen (Uri) != 0) && (StrnCmp (Uri, L"http://", 7) != 0) && (StrnCmp (Uri, L"https://", 8) != 0)) {
68 return EFI_INVALID_PARAMETER;
69 }
70
71 //
72 // Create a new device path by appending the IP node and URI node to
73 // the driver's parent device path
74 //
75 if (!UsingIpv6) {
76 Node = AllocateZeroPool (sizeof (IPv4_DEVICE_PATH));
77 if (Node == NULL) {
78 Status = EFI_OUT_OF_RESOURCES;
79 goto ON_EXIT;
80 }
81
82 Node->Ipv4.Header.Type = MESSAGING_DEVICE_PATH;
83 Node->Ipv4.Header.SubType = MSG_IPv4_DP;
85 } else {
86 Node = AllocateZeroPool (sizeof (IPv6_DEVICE_PATH));
87 if (Node == NULL) {
88 Status = EFI_OUT_OF_RESOURCES;
89 goto ON_EXIT;
90 }
91
92 Node->Ipv6.Header.Type = MESSAGING_DEVICE_PATH;
93 Node->Ipv6.Header.SubType = MSG_IPv6_DP;
95 }
96
97 TmpDevicePath = AppendDevicePathNode (Private->ParentDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)Node);
98 FreePool (Node);
99 if (TmpDevicePath == NULL) {
100 return EFI_OUT_OF_RESOURCES;
101 }
102
103 //
104 // Update the URI node with the input boot file URI.
105 //
106 UnicodeStrToAsciiStrS (Uri, AsciiUri, sizeof (AsciiUri));
107 Length = sizeof (EFI_DEVICE_PATH_PROTOCOL) + AsciiStrSize (AsciiUri);
108 Node = AllocatePool (Length);
109 if (Node == NULL) {
110 Status = EFI_OUT_OF_RESOURCES;
111 FreePool (TmpDevicePath);
112 goto ON_EXIT;
113 }
114
115 Node->DevPath.Type = MESSAGING_DEVICE_PATH;
116 Node->DevPath.SubType = MSG_URI_DP;
117 SetDevicePathNodeLength (Node, Length);
118 CopyMem ((UINT8 *)Node + sizeof (EFI_DEVICE_PATH_PROTOCOL), AsciiUri, AsciiStrSize (AsciiUri));
119 NewDevicePath = AppendDevicePathNode (TmpDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)Node);
120 FreePool (Node);
121 FreePool (TmpDevicePath);
122 if (NewDevicePath == NULL) {
123 Status = EFI_OUT_OF_RESOURCES;
124 goto ON_EXIT;
125 }
126
127 //
128 // Add a new load option.
129 //
131 &NewOption,
132 LoadOptionNumberUnassigned,
133 LoadOptionTypeBoot,
134 LOAD_OPTION_ACTIVE,
135 Description,
136 NewDevicePath,
137 NULL,
138 0
139 );
140 if (EFI_ERROR (Status)) {
141 goto ON_EXIT;
142 }
143
144 Status = EfiBootManagerAddLoadOptionVariable (&NewOption, (UINTN)-1);
145 EfiBootManagerFreeLoadOption (&NewOption);
146
147ON_EXIT:
148
149 if (NewDevicePath != NULL) {
150 FreePool (NewDevicePath);
151 }
152
153 return Status;
154}
155
228EFIAPI
231 IN CONST EFI_STRING Request,
232 OUT EFI_STRING *Progress,
233 OUT EFI_STRING *Results
234 )
235{
236 EFI_STATUS Status;
237 UINTN BufferSize;
238 HTTP_BOOT_FORM_CALLBACK_INFO *CallbackInfo;
239 EFI_STRING ConfigRequestHdr;
240 EFI_STRING ConfigRequest;
241 BOOLEAN AllocatedRequest;
242 UINTN Size;
243
244 if ((Progress == NULL) || (Results == NULL)) {
245 return EFI_INVALID_PARAMETER;
246 }
247
248 *Progress = Request;
249 if ((Request != NULL) && !HiiIsConfigHdrMatch (Request, &gHttpBootConfigGuid, mHttpBootConfigStorageName)) {
250 return EFI_NOT_FOUND;
251 }
252
253 ConfigRequestHdr = NULL;
254 ConfigRequest = NULL;
255 AllocatedRequest = FALSE;
256 Size = 0;
257
258 CallbackInfo = HTTP_BOOT_FORM_CALLBACK_INFO_FROM_CONFIG_ACCESS (This);
259 //
260 // Convert buffer data to <ConfigResp> by helper function BlockToConfig()
261 //
262 BufferSize = sizeof (HTTP_BOOT_CONFIG_IFR_NVDATA);
263 ZeroMem (&CallbackInfo->HttpBootNvData, BufferSize);
264 StrCpyS (CallbackInfo->HttpBootNvData.Description, DESCRIPTION_STR_MAX_SIZE / sizeof (CHAR16), HTTP_BOOT_DEFAULT_DESCRIPTION_STR);
265
266 ConfigRequest = Request;
267 if ((Request == NULL) || (StrStr (Request, L"OFFSET") == NULL)) {
268 //
269 // Request has no request element, construct full request string.
270 // Allocate and fill a buffer large enough to hold the <ConfigHdr> template
271 // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator
272 //
273 ConfigRequestHdr = HiiConstructConfigHdr (&gHttpBootConfigGuid, mHttpBootConfigStorageName, CallbackInfo->ChildHandle);
274 Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);
275 ConfigRequest = AllocateZeroPool (Size);
276 if (ConfigRequest == NULL) {
277 return EFI_OUT_OF_RESOURCES;
278 }
279
280 AllocatedRequest = TRUE;
281 UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize);
282 FreePool (ConfigRequestHdr);
283 }
284
285 Status = gHiiConfigRouting->BlockToConfig (
287 ConfigRequest,
288 (UINT8 *)&CallbackInfo->HttpBootNvData,
289 BufferSize,
290 Results,
291 Progress
292 );
293
294 //
295 // Free the allocated config request string.
296 //
297 if (AllocatedRequest) {
298 FreePool (ConfigRequest);
299 ConfigRequest = NULL;
300 }
301
302 //
303 // Set Progress string to the original request string.
304 //
305 if (Request == NULL) {
306 *Progress = NULL;
307 } else if (StrStr (Request, L"OFFSET") == NULL) {
308 *Progress = Request + StrLen (Request);
309 }
310
311 return Status;
312}
313
355EFIAPI
358 IN CONST EFI_STRING Configuration,
359 OUT EFI_STRING *Progress
360 )
361{
362 EFI_STATUS Status;
363 UINTN BufferSize;
364 HTTP_BOOT_FORM_CALLBACK_INFO *CallbackInfo;
365 HTTP_BOOT_PRIVATE_DATA *Private;
366
367 if (Progress == NULL) {
368 return EFI_INVALID_PARAMETER;
369 }
370
371 *Progress = Configuration;
372
373 if (Configuration == NULL) {
374 return EFI_INVALID_PARAMETER;
375 }
376
377 //
378 // Check routing data in <ConfigHdr>.
379 // Note: there is no name for Name/Value storage, only GUID will be checked
380 //
381 if (!HiiIsConfigHdrMatch (Configuration, &gHttpBootConfigGuid, mHttpBootConfigStorageName)) {
382 return EFI_NOT_FOUND;
383 }
384
385 CallbackInfo = HTTP_BOOT_FORM_CALLBACK_INFO_FROM_CONFIG_ACCESS (This);
386 Private = HTTP_BOOT_PRIVATE_DATA_FROM_CALLBACK_INFO (CallbackInfo);
387
388 BufferSize = sizeof (HTTP_BOOT_CONFIG_IFR_NVDATA);
389 ZeroMem (&CallbackInfo->HttpBootNvData, BufferSize);
390
391 Status = gHiiConfigRouting->ConfigToBlock (
393 Configuration,
394 (UINT8 *)&CallbackInfo->HttpBootNvData,
395 &BufferSize,
396 Progress
397 );
398 if (EFI_ERROR (Status)) {
399 return Status;
400 }
401
402 //
403 // Create a new boot option according to the configuration data.
404 //
406 Private,
407 (CallbackInfo->HttpBootNvData.IpVersion == HTTP_BOOT_IP_VERSION_6) ? TRUE : FALSE,
408 CallbackInfo->HttpBootNvData.Description,
409 CallbackInfo->HttpBootNvData.Uri
410 );
411
412 return EFI_SUCCESS;
413}
414
441EFIAPI
444 IN EFI_BROWSER_ACTION Action,
445 IN EFI_QUESTION_ID QuestionId,
446 IN UINT8 Type,
448 OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
449 )
450{
451 EFI_INPUT_KEY Key;
452 CHAR16 *Uri;
453 UINTN UriLen;
454 CHAR8 *AsciiUri;
455 HTTP_BOOT_FORM_CALLBACK_INFO *CallbackInfo;
456 EFI_STATUS Status;
457
458 Uri = NULL;
459 UriLen = 0;
460 AsciiUri = NULL;
461 Status = EFI_SUCCESS;
462
463 if ((This == NULL) || (Value == NULL)) {
464 return EFI_INVALID_PARAMETER;
465 }
466
467 CallbackInfo = HTTP_BOOT_FORM_CALLBACK_INFO_FROM_CONFIG_ACCESS (This);
468
469 if (Action != EFI_BROWSER_ACTION_CHANGING) {
470 return EFI_UNSUPPORTED;
471 }
472
473 switch (QuestionId) {
474 case KEY_INITIATOR_URI:
475 //
476 // Get user input URI string
477 //
478 Uri = HiiGetString (CallbackInfo->RegisteredHandle, Value->string, NULL);
479 if (Uri == NULL) {
480 return EFI_INVALID_PARAMETER;
481 }
482
483 //
484 // The URI should be either an empty string (for corporate environment) ,or http(s) for home environment.
485 // Pop up a message box for the unsupported URI.
486 //
487 if (StrLen (Uri) != 0) {
488 UriLen = StrLen (Uri) + 1;
489 AsciiUri = AllocateZeroPool (UriLen);
490 if (AsciiUri == NULL) {
491 FreePool (Uri);
492 return EFI_OUT_OF_RESOURCES;
493 }
494
495 UnicodeStrToAsciiStrS (Uri, AsciiUri, UriLen);
496
497 Status = HttpBootCheckUriScheme (AsciiUri);
498
499 if (Status == EFI_INVALID_PARAMETER) {
500 DEBUG ((DEBUG_ERROR, "HttpBootFormCallback: %r.\n", Status));
501
503 EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
504 &Key,
505 L"ERROR: Unsupported URI!",
506 L"Only supports HTTP and HTTPS",
507 NULL
508 );
509 } else if (Status == EFI_ACCESS_DENIED) {
510 DEBUG ((DEBUG_ERROR, "HttpBootFormCallback: %r.\n", Status));
511
513 EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,
514 &Key,
515 L"ERROR: Unsupported URI!",
516 L"HTTP is disabled",
517 NULL
518 );
519 }
520 }
521
522 if (Uri != NULL) {
523 FreePool (Uri);
524 }
525
526 if (AsciiUri != NULL) {
527 FreePool (AsciiUri);
528 }
529
530 break;
531
532 default:
533 break;
534 }
535
536 return Status;
537}
538
551 )
552{
553 EFI_STATUS Status;
554 HTTP_BOOT_FORM_CALLBACK_INFO *CallbackInfo;
555 VENDOR_DEVICE_PATH VendorDeviceNode;
556 CHAR16 *MacString;
557 CHAR16 *OldMenuString;
558 CHAR16 MenuString[128];
559
560 CallbackInfo = &Private->CallbackInfo;
561
562 if (CallbackInfo->Initialized) {
563 return EFI_SUCCESS;
564 }
565
566 CallbackInfo->Signature = HTTP_BOOT_FORM_CALLBACK_INFO_SIGNATURE;
567
568 //
569 // Construct device path node for EFI HII Config Access protocol,
570 // which consists of controller physical device path and one hardware
571 // vendor guid node.
572 //
573 ZeroMem (&VendorDeviceNode, sizeof (VENDOR_DEVICE_PATH));
574 VendorDeviceNode.Header.Type = HARDWARE_DEVICE_PATH;
575 VendorDeviceNode.Header.SubType = HW_VENDOR_DP;
576 CopyGuid (&VendorDeviceNode.Guid, &gEfiCallerIdGuid);
577 SetDevicePathNodeLength (&VendorDeviceNode.Header, sizeof (VENDOR_DEVICE_PATH));
578 CallbackInfo->HiiVendorDevicePath = AppendDevicePathNode (
579 Private->ParentDevicePath,
580 (EFI_DEVICE_PATH_PROTOCOL *)&VendorDeviceNode
581 );
582 if (CallbackInfo->HiiVendorDevicePath == NULL) {
583 Status = EFI_OUT_OF_RESOURCES;
584 goto Error;
585 }
586
587 CallbackInfo->ConfigAccess.ExtractConfig = HttpBootFormExtractConfig;
588 CallbackInfo->ConfigAccess.RouteConfig = HttpBootFormRouteConfig;
589 CallbackInfo->ConfigAccess.Callback = HttpBootFormCallback;
590
591 //
592 // Install Device Path Protocol and Config Access protocol to driver handle.
593 //
594 Status = gBS->InstallMultipleProtocolInterfaces (
595 &CallbackInfo->ChildHandle,
596 &gEfiDevicePathProtocolGuid,
597 CallbackInfo->HiiVendorDevicePath,
598 &gEfiHiiConfigAccessProtocolGuid,
599 &CallbackInfo->ConfigAccess,
600 NULL
601 );
602 if (EFI_ERROR (Status)) {
603 goto Error;
604 }
605
606 //
607 // Publish our HII data.
608 //
609 CallbackInfo->RegisteredHandle = HiiAddPackages (
610 &gHttpBootConfigGuid,
611 CallbackInfo->ChildHandle,
612 HttpBootDxeStrings,
613 HttpBootConfigVfrBin,
614 NULL
615 );
616 if (CallbackInfo->RegisteredHandle == NULL) {
617 Status = EFI_OUT_OF_RESOURCES;
618 goto Error;
619 }
620
621 //
622 // Append MAC string in the menu help string
623 //
624 Status = NetLibGetMacString (Private->Controller, NULL, &MacString);
625 if (!EFI_ERROR (Status)) {
626 OldMenuString = HiiGetString (
627 CallbackInfo->RegisteredHandle,
628 STRING_TOKEN (STR_HTTP_BOOT_CONFIG_FORM_HELP),
629 NULL
630 );
631 UnicodeSPrint (MenuString, 128, L"%s (MAC:%s)", OldMenuString, MacString);
633 CallbackInfo->RegisteredHandle,
634 STRING_TOKEN (STR_HTTP_BOOT_CONFIG_FORM_HELP),
635 MenuString,
636 NULL
637 );
638
639 FreePool (MacString);
640 FreePool (OldMenuString);
641
642 CallbackInfo->Initialized = TRUE;
643 return EFI_SUCCESS;
644 }
645
646Error:
647
648 HttpBootConfigFormUnload (Private);
649 return Status;
650}
651
666 )
667{
668 HTTP_BOOT_FORM_CALLBACK_INFO *CallbackInfo;
669
670 if ((Private->Ip4Nic != NULL) || (Private->Ip6Nic != NULL)) {
671 //
672 // Only unload the configuration form when both IP4 and IP6 stack are stopped.
673 //
674 return EFI_SUCCESS;
675 }
676
677 CallbackInfo = &Private->CallbackInfo;
678 if (CallbackInfo->ChildHandle != NULL) {
679 //
680 // Uninstall EFI_HII_CONFIG_ACCESS_PROTOCOL
681 //
682 gBS->UninstallMultipleProtocolInterfaces (
683 CallbackInfo->ChildHandle,
684 &gEfiDevicePathProtocolGuid,
685 CallbackInfo->HiiVendorDevicePath,
686 &gEfiHiiConfigAccessProtocolGuid,
687 &CallbackInfo->ConfigAccess,
688 NULL
689 );
690 CallbackInfo->ChildHandle = NULL;
691 }
692
693 if (CallbackInfo->HiiVendorDevicePath != NULL) {
694 FreePool (CallbackInfo->HiiVendorDevicePath);
695 CallbackInfo->HiiVendorDevicePath = NULL;
696 }
697
698 if (CallbackInfo->RegisteredHandle != NULL) {
699 //
700 // Remove HII package list
701 //
702 HiiRemovePackages (CallbackInfo->RegisteredHandle);
703 CallbackInfo->RegisteredHandle = NULL;
704 }
705
706 return EFI_SUCCESS;
707}
UINT64 UINTN
RETURN_STATUS EFIAPI StrCpyS(OUT CHAR16 *Destination, IN UINTN DestMax, IN CONST CHAR16 *Source)
Definition: SafeString.c:226
RETURN_STATUS EFIAPI UnicodeStrToAsciiStrS(IN CONST CHAR16 *Source, OUT CHAR8 *Destination, IN UINTN DestMax)
Definition: SafeString.c:2650
INTN EFIAPI StrnCmp(IN CONST CHAR16 *FirstString, IN CONST CHAR16 *SecondString, IN UINTN Length)
Definition: String.c:162
UINTN EFIAPI AsciiStrSize(IN CONST CHAR8 *String)
Definition: String.c:681
UINTN EFIAPI StrLen(IN CONST CHAR16 *String)
Definition: String.c:30
CHAR16 *EFIAPI StrStr(IN CONST CHAR16 *String, IN CONST CHAR16 *SearchString)
Definition: String.c:224
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
Definition: MemLibGuid.c:39
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
#define MSG_IPv6_DP
Definition: DevicePath.h:607
#define MSG_IPv4_DP
Definition: DevicePath.h:566
#define HARDWARE_DEVICE_PATH
Definition: DevicePath.h:68
#define HW_VENDOR_DP
Definition: DevicePath.h:133
#define MSG_URI_DP
Definition: DevicePath.h:879
#define MESSAGING_DEVICE_PATH
Definition: DevicePath.h:321
UINT16 EFIAPI SetDevicePathNodeLength(IN OUT VOID *Node, IN UINTN Length)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI AppendDevicePathNode(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL, IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePathNode OPTIONAL)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
EFI_STRING EFIAPI HiiConstructConfigHdr(IN CONST EFI_GUID *Guid OPTIONAL, IN CONST CHAR16 *Name OPTIONAL, IN EFI_HANDLE DriverHandle)
Definition: HiiLib.c:723
EFI_HII_HANDLE EFIAPI HiiAddPackages(IN CONST EFI_GUID *PackageListGuid, IN EFI_HANDLE DeviceHandle OPTIONAL,...)
Definition: HiiLib.c:141
EFI_STRING EFIAPI HiiGetString(IN EFI_HII_HANDLE HiiHandle, IN EFI_STRING_ID StringId, IN CONST CHAR8 *Language OPTIONAL)
Definition: HiiString.c:211
BOOLEAN EFIAPI HiiIsConfigHdrMatch(IN CONST EFI_STRING ConfigHdr, IN CONST EFI_GUID *Guid OPTIONAL, IN CONST CHAR16 *Name OPTIONAL)
Definition: HiiLib.c:2813
EFI_STRING_ID EFIAPI HiiSetString(IN EFI_HII_HANDLE HiiHandle, IN EFI_STRING_ID StringId OPTIONAL, IN CONST EFI_STRING String, IN CONST CHAR8 *SupportedLanguages OPTIONAL)
Definition: HiiString.c:52
VOID EFIAPI HiiRemovePackages(IN EFI_HII_HANDLE HiiHandle)
Definition: HiiLib.c:253
EFI_STATUS EFIAPI HttpBootFormExtractConfig(IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, IN CONST EFI_STRING Request, OUT EFI_STRING *Progress, OUT EFI_STRING *Results)
EFI_STATUS HttpBootConfigFormInit(IN HTTP_BOOT_PRIVATE_DATA *Private)
EFI_STATUS EFIAPI HttpBootFormCallback(IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, IN EFI_BROWSER_ACTION Action, IN EFI_QUESTION_ID QuestionId, IN UINT8 Type, IN OUT EFI_IFR_TYPE_VALUE *Value, OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest)
EFI_STATUS HttpBootAddBootOption(IN HTTP_BOOT_PRIVATE_DATA *Private, IN BOOLEAN UsingIpv6, IN CHAR16 *Description, IN CHAR16 *Uri)
EFI_STATUS EFIAPI HttpBootFormRouteConfig(IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, IN CONST EFI_STRING Configuration, OUT EFI_STRING *Progress)
EFI_STATUS HttpBootConfigFormUnload(IN HTTP_BOOT_PRIVATE_DATA *Private)
EFI_STATUS HttpBootCheckUriScheme(IN CHAR8 *Uri)
UINTN EFIAPI UnicodeSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString,...)
Definition: PrintLib.c:408
#define NULL
Definition: Base.h:319
#define CONST
Definition: Base.h:259
#define TRUE
Definition: Base.h:301
#define FALSE
Definition: Base.h:307
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
#define DEBUG(Expression)
Definition: DebugLib.h:434
EFI_STATUS EFIAPI NetLibGetMacString(IN EFI_HANDLE ServiceHandle, IN EFI_HANDLE ImageHandle OPTIONAL, OUT CHAR16 **MacString)
Definition: DxeNetLib.c:2363
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
#define EFI_SUCCESS
Definition: UefiBaseType.h:112
EFI_STATUS EFIAPI EfiBootManagerFreeLoadOption(IN EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption)
EFI_STATUS EFIAPI EfiBootManagerAddLoadOptionVariable(IN OUT EFI_BOOT_MANAGER_LOAD_OPTION *Option, IN UINTN Position)
Definition: BmLoadOption.c:367
EFI_STATUS EFIAPI EfiBootManagerInitializeLoadOption(IN OUT EFI_BOOT_MANAGER_LOAD_OPTION *Option, IN UINTN OptionNumber, IN EFI_BOOT_MANAGER_LOAD_OPTION_TYPE OptionType, IN UINT32 Attributes, IN CHAR16 *Description, IN EFI_DEVICE_PATH_PROTOCOL *FilePath, IN UINT8 *OptionalData, IN UINT32 OptionalDataSize)
EFI_BOOT_SERVICES * gBS
EFI_HII_CONFIG_ROUTING_PROTOCOL * gHiiConfigRouting
#define STRING_TOKEN(t)
VOID EFIAPI CreatePopUp(IN UINTN Attribute, OUT EFI_INPUT_KEY *Key OPTIONAL,...)
Definition: Console.c:393