43 BcfgTargetBootOrder = 0,
44 BcfgTargetDriverOrder = 1,
46} BCFG_OPERATION_TARGET;
64 BCFG_OPERATION_TARGET Target;
65 BCFG_OPERATION_TYPE Type;
72 CONST CHAR16 *OptData;
93 IN CONST BCFG_OPERATION_TARGET Target
97 CHAR16 VariableName[12];
103 UINTN OriginalOptionDataSize;
105 UnicodeSPrint (VariableName,
sizeof (VariableName), L
"%s%04x", Target == BcfgTargetBootOrder ? L
"Boot" : L
"Driver", Index);
112 Status =
gRT->GetVariable (
114 (
EFI_GUID *)&gEfiGlobalVariableGuid,
119 if (Status == EFI_BUFFER_TOO_SMALL) {
121 if (OriginalData ==
NULL) {
122 return (EFI_OUT_OF_RESOURCES);
125 Status =
gRT->GetVariable (
127 (
EFI_GUID *)&gEfiGlobalVariableGuid,
134 if (!EFI_ERROR (Status)) {
138 ASSERT (OriginalData !=
NULL);
140 TmpSize =
sizeof (UINT32) +
sizeof (UINT16) +
StrSize (((CHAR16 *)(OriginalData +
sizeof (UINT32) +
sizeof (UINT16))));
142 TmpSize += (*(UINT16 *)(OriginalData +
sizeof (UINT32)));
144 OriginalOptionDataSize = OriginalSize - TmpSize;
145 NewSize = OriginalSize - OriginalOptionDataSize + DataSize;
147 if (NewData ==
NULL) {
148 Status = EFI_OUT_OF_RESOURCES;
150 CopyMem (NewData, OriginalData, OriginalSize - OriginalOptionDataSize);
151 CopyMem (NewData + OriginalSize - OriginalOptionDataSize, Data, DataSize);
155 if (!EFI_ERROR (Status)) {
159 Status =
gRT->SetVariable (
161 (
EFI_GUID *)&gEfiGlobalVariableGuid,
168 SHELL_FREE_NON_NULL (OriginalData);
169 SHELL_FREE_NON_NULL (NewData);
188 CHAR16 VariableName[12];
199 UnicodeSPrint (VariableName,
sizeof (VariableName), L
"%Boot%04x", BootIndex);
200 Status =
gRT->GetVariable (
202 (
EFI_GUID *)&gEfiGlobalVariableGuid,
207 if (Status == EFI_BUFFER_TOO_SMALL) {
209 if (Buffer ==
NULL) {
210 return EFI_OUT_OF_RESOURCES;
213 Status =
gRT->GetVariable (
215 (
EFI_GUID *)&gEfiGlobalVariableGuid,
225 if (!EFI_ERROR (Status)) {
226 Status =
gBS->CalculateCrc32 (Buffer, BufferSize, Crc);
229 SHELL_FREE_NON_NULL (Buffer);
254 Status =
gBS->OpenProtocol (
256 &gEfiLoadedImageProtocolGuid,
257 (VOID **)&LoadedImage,
260 EFI_OPEN_PROTOCOL_GET_PROTOCOL
262 if (!EFI_ERROR (Status)) {
263 Status =
gBS->OpenProtocol (
265 &gEfiDevicePathProtocolGuid,
266 (VOID **)&ImageDevicePath,
269 EFI_OPEN_PROTOCOL_GET_PROTOCOL
271 if (!EFI_ERROR (Status)) {
277 &gEfiDevicePathProtocolGuid,
285 &gEfiLoadedImageProtocolGuid,
308 IN BCFG_OPERATION_TARGET Target,
315 UINTN DriverBindingHandleCount;
316 UINTN ParentControllerHandleCount;
317 UINTN ChildControllerHandleCount;
321 if (TheHandle ==
NULL) {
327 if (EFI_ERROR (Status)) {
328 DriverBindingHandleCount = 0;
332 if (EFI_ERROR (Status)) {
333 ParentControllerHandleCount = 0;
337 if (EFI_ERROR (Status)) {
338 ChildControllerHandleCount = 0;
341 Status =
gBS->HandleProtocol (TheHandle, &gEfiDevicePathProtocolGuid, (VOID **)DevicePath);
343 if ((DriverBindingHandleCount > 0) ||
344 (ParentControllerHandleCount > 0) ||
345 (ChildControllerHandleCount > 0) ||
352 if (Target == BcfgTargetDriverOrder) {
360 L
"Handle should point to driver image."
368 if (Target == BcfgTargetBootOrder) {
376 L
"Handle should point to controller."
386 return (ShellStatus);
408 CHAR16 OptionStr[40];
419 DevicePathBuffer =
NULL;
423 if (((BcfgOperation->Type == BcfgTypeMod) && (BcfgOperation->Description ==
NULL)) ||
424 ((BcfgOperation->Type == BcfgTypeModf) && (BcfgOperation->FileName ==
NULL)) ||
425 ((BcfgOperation->Type == BcfgTypeModp) && (BcfgOperation->FileName ==
NULL)) ||
426 ((BcfgOperation->Type == BcfgTypeModh) && (BcfgOperation->HandleIndex == 0)) ||
427 (BcfgOperation->Number1 > OrderCount)
433 if (BcfgOperation->Type == BcfgTypeModh) {
435 if (CurHandle ==
NULL) {
444 }
else if ((BcfgOperation->Type == BcfgTypeModf) || (BcfgOperation->Type == BcfgTypeModp)) {
449 if (FileList ==
NULL) {
455 }
else if (FileList->
Link.ForwardLink != FileList->
Link.BackLink) {
463 if (EFI_ERROR (Arg->
Status)) {
467 DevicePathBuffer = gEfiShellProtocol->GetDevicePathFromFilePath (Arg->
FullName);
468 if (DevicePathBuffer ==
NULL) {
476 if (BcfgOperation->Type == BcfgTypeModp) {
478 DevicePathWalker = DevicePathBuffer;
503 if (BcfgOperation->Target == BcfgTargetBootOrder) {
504 UnicodeSPrint (OptionStr,
sizeof (OptionStr), L
"Boot%04x", BcfgOperation->Order[BcfgOperation->Number1]);
506 UnicodeSPrint (OptionStr,
sizeof (OptionStr), L
"Driver%04x", BcfgOperation->Order[BcfgOperation->Number1]);
510 if (EFI_ERROR (Status)) {
517 if (BcfgOperation->Type == BcfgTypeMod) {
518 SHELL_FREE_NON_NULL (LoadOption.Description);
521 SHELL_FREE_NON_NULL (LoadOption.FilePath);
522 if (DevicePath !=
NULL) {
531 if (EFI_ERROR (Status)) {
541 if (DevicePath !=
NULL) {
545 if (FileList !=
NULL) {
549 return (ShellStatus);
575 IN CONST BCFG_OPERATION_TARGET Target,
586 UINT8 *TempByteBuffer;
587 UINT8 *TempByteStart;
590 CHAR16 OptionStr[40];
591 UINTN DescSize, FilePathSize;
593 UINTN TargetLocation;
597 UINTN DriverBindingHandleCount;
598 UINTN ParentControllerHandleCount;
599 UINTN ChildControllerHandleCount;
604 if ((File ==
NULL) || (Desc ==
NULL)) {
608 if (HandleNumber == 0) {
613 if (Position > OrderCount) {
614 Position = OrderCount;
622 TargetLocation = 0xFFFF;
626 if (CurHandle ==
NULL) {
630 if (Target == BcfgTargetBootOrder) {
636 &DriverBindingHandleCount,
642 &ParentControllerHandleCount,
648 &ChildControllerHandleCount,
652 if ( (DriverBindingHandleCount > 0)
653 || (ParentControllerHandleCount > 0)
654 || (ChildControllerHandleCount > 0))
657 Status =
gBS->HandleProtocol (
659 &gEfiDevicePathProtocolGuid,
664 if (EFI_ERROR (Status)) {
674 &DriverBindingHandleCount,
680 &ParentControllerHandleCount,
686 &ChildControllerHandleCount,
690 Status =
gBS->HandleProtocol (
692 &gEfiDevicePathProtocolGuid,
696 if ( (DriverBindingHandleCount > 0)
697 || (ParentControllerHandleCount > 0)
698 || (ChildControllerHandleCount > 0)
699 || !EFI_ERROR (Status))
717 if (FileList ==
NULL) {
723 }
else if (FileList->
Link.ForwardLink != FileList->
Link.BackLink) {
731 if (EFI_ERROR (Arg->
Status)) {
742 DevicePath = gEfiShellProtocol->GetDevicePathFromFilePath (Arg->
FullName);
743 if (DevicePath ==
NULL) {
748 DevPath = DevicePath;
779 for (TargetLocation = 0; TargetLocation < 0xFFFF; TargetLocation++) {
781 for (Index = 0; Index < OrderCount; Index++) {
782 if (CurrentOrder[Index] == TargetLocation) {
793 if (TargetLocation == 0xFFFF) {
805 if (FilePath ==
NULL) {
806 ASSERT (FilePath !=
NULL);
808 TempByteBuffer =
NULL;
812 TempByteBuffer =
AllocateZeroPool (
sizeof (UINT32) +
sizeof (UINT16) + DescSize + FilePathSize);
815 if (TempByteBuffer !=
NULL) {
816 TempByteStart = TempByteBuffer;
817 *((UINT32 *)TempByteBuffer) = LOAD_OPTION_ACTIVE;
818 TempByteBuffer +=
sizeof (UINT32);
820 *((UINT16 *)TempByteBuffer) = (UINT16)FilePathSize;
821 TempByteBuffer +=
sizeof (UINT16);
823 CopyMem (TempByteBuffer, Desc, DescSize);
824 TempByteBuffer += DescSize;
825 ASSERT (FilePath !=
NULL);
826 CopyMem (TempByteBuffer, FilePath, FilePathSize);
828 UnicodeSPrint (OptionStr,
sizeof (OptionStr), L
"%s%04x", Target == BcfgTargetBootOrder ? L
"Boot" : L
"Driver", TargetLocation);
829 Status =
gRT->SetVariable (
831 &gEfiGlobalVariableGuid,
833 sizeof (UINT32) +
sizeof (UINT16) + DescSize + FilePathSize,
839 Status = EFI_OUT_OF_RESOURCES;
842 if (EFI_ERROR (Status)) {
846 if (NewOrder !=
NULL) {
847 CopyMem (NewOrder, CurrentOrder, (OrderCount) *
sizeof (NewOrder[0]));
852 for (Index = OrderCount; Index > Position; Index--) {
853 NewOrder[Index] = NewOrder[Index - 1];
856 NewOrder[Position] = (UINT16)TargetLocation;
857 Status =
gRT->SetVariable (
858 Target == BcfgTargetBootOrder ? L
"BootOrder" : L
"DriverOrder",
859 &gEfiGlobalVariableGuid,
861 (OrderCount + 1) *
sizeof (UINT16),
867 if (EFI_ERROR (Status)) {
868 ShellPrintHiiEx (-1, -1,
NULL,
STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellBcfgHiiHandle, L
"bcfg", Target == BcfgTargetBootOrder ? L
"BootOrder" : L
"DriverOrder");
871 Print (L
"bcfg: Add %s as %x\n", OptionStr, Position);
880 if ((FilePath !=
NULL) && !UseHandle) {
888 if (Handles !=
NULL) {
892 if (FileList !=
NULL) {
896 return (ShellStatus);
912 IN CONST BCFG_OPERATION_TARGET Target,
918 CHAR16 VariableName[12];
923 UnicodeSPrint (VariableName,
sizeof (VariableName), L
"%s%04x", Target == BcfgTargetBootOrder ? L
"Boot" : L
"Driver", CurrentOrder[Location]);
924 Status =
gRT->SetVariable (
926 (
EFI_GUID *)&gEfiGlobalVariableGuid,
931 if (EFI_ERROR (Status)) {
937 if (NewOrder !=
NULL) {
938 NewCount = OrderCount;
939 CopyMem (NewOrder, CurrentOrder, OrderCount*
sizeof (CurrentOrder[0]));
940 CopyMem (NewOrder+Location, NewOrder+Location+1, (OrderCount - Location - 1)*
sizeof (CurrentOrder[0]));
943 Status =
gRT->SetVariable (
944 Target == BcfgTargetBootOrder ? (CHAR16 *)L
"BootOrder" : (CHAR16 *)L
"DriverOrder",
945 (
EFI_GUID *)&gEfiGlobalVariableGuid,
947 NewCount*
sizeof (NewOrder[0]),
952 Status = EFI_OUT_OF_RESOURCES;
955 if (EFI_ERROR (Status)) {
956 ShellPrintHiiEx (-1, -1,
NULL,
STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellBcfgHiiHandle, L
"bcfg", Target == BcfgTargetBootOrder ? (CHAR16 *)L
"BootOrder" : (CHAR16 *)L
"DriverOrder");
977 IN CONST BCFG_OPERATION_TARGET Target,
981 IN UINT16 NewLocation
988 NewOrder =
AllocateCopyPool (OrderCount*
sizeof (CurrentOrder[0]), CurrentOrder);
989 if (NewOrder ==
NULL) {
996 if (NewLocation >= OrderCount) {
997 if (OrderCount > 0) {
998 NewLocation = (UINT16)OrderCount - 1;
1004 Temp = CurrentOrder[OldLocation];
1005 CopyMem (NewOrder+OldLocation, NewOrder+OldLocation+1, (OrderCount - OldLocation - 1)*
sizeof (CurrentOrder[0]));
1006 CopyMem (NewOrder+NewLocation+1, NewOrder+NewLocation, (OrderCount - NewLocation - 1)*
sizeof (CurrentOrder[0]));
1007 NewOrder[NewLocation] = Temp;
1009 Status =
gRT->SetVariable (
1010 Target == BcfgTargetBootOrder ? (CHAR16 *)L
"BootOrder" : (CHAR16 *)L
"DriverOrder",
1011 (
EFI_GUID *)&gEfiGlobalVariableGuid,
1013 OrderCount*
sizeof (CurrentOrder[0]),
1019 if (EFI_ERROR (Status)) {
1020 ShellPrintHiiEx (-1, -1,
NULL,
STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellBcfgHiiHandle, L
"bcfg", Target == BcfgTargetBootOrder ? (CHAR16 *)L
"BootOrder" : (CHAR16 *)L
"DriverOrder");
1040 IN CONST UINT16 *CurrentOrder,
1042 IN CONST BCFG_OPERATION_TARGET Target
1051 UINT64 Intermediate;
1053 CONST CHAR16 *Walker;
1058 CHAR16 VariableName[12];
1061 SHELL_FILE_HANDLE FileHandle;
1068 KeyOptionBuffer =
NULL;
1069 VariableData =
NULL;
1072 ZeroMem (VariableName,
sizeof (VariableName));
1074 while (Walker[0] == L
' ') {
1082 if (EFI_ERROR (Status) || (((UINT16)Intermediate) != Intermediate) || (
StrStr (Walker, L
" ") ==
NULL) || (((UINT16)Intermediate) > ((UINT16)OrderCount))) {
1085 return (ShellStatus);
1088 OptionIndex = (UINT16)Intermediate;
1090 Temp =
StrStr (Walker, L
" ");
1095 while (Walker[0] == L
' ') {
1102 if (Walker[0] == L
'\"') {
1106 Temp =
StrStr (Walker+1, L
"\"");
1107 if ((Temp ==
NULL) || (
StrLen (Temp) != 1)) {
1112 if (FileName ==
NULL) {
1115 return (ShellStatus);
1118 Temp2 =
StrStr (FileName, L
"\"");
1119 if (Temp2 ==
NULL) {
1120 ASSERT (Temp2 !=
NULL);
1123 return (ShellStatus);
1126 Temp2[0] = CHAR_NULL;
1128 if (
StrLen (Temp2) > 0) {
1158 if (Target != BcfgTargetBootOrder) {
1168 if (EFI_ERROR (Status) || (((UINT32)Intermediate) != Intermediate) || (
StrStr (Walker, L
" ") ==
NULL)) {
1173 NewKeyOption.
KeyData.PackedValue = (UINT32)Intermediate;
1174 Temp =
StrStr (Walker, L
" ");
1179 while (Walker[0] == L
' ') {
1190 if (KeyOptionBuffer ==
NULL) {
1204 if (EFI_ERROR (Status) || (((UINT16)Intermediate) != Intermediate) || (
StrStr (Walker, L
" ") ==
NULL)) {
1210 Temp =
StrStr (Walker, L
" ");
1215 while (Walker[0] == L
' ') {
1223 if (EFI_ERROR (Status) || (((UINT16)Intermediate) != Intermediate)) {
1229 Temp =
StrStr (Walker, L
" ");
1234 while (Walker[0] == L
' ') {
1243 ASSERT (OptionIndex <= OrderCount);
1244 KeyOptionBuffer->
BootOption = CurrentOrder[OptionIndex];
1246 if (EFI_ERROR (Status)) {
1253 for (Temp2 =
NULL, KeyIndex = 0; KeyIndex <= 0xFFFF; KeyIndex++) {
1254 UnicodeSPrint (VariableName,
sizeof (VariableName), L
"Key%04x", KeyIndex);
1256 if (Status == EFI_NOT_FOUND) {
1260 if (!EFI_ERROR (Status)) {
1261 SHELL_FREE_NON_NULL (VariableData);
1265 if (KeyIndex <= 0xFFFF) {
1266 Status =
gRT->SetVariable (
1268 (
EFI_GUID *)&gEfiGlobalVariableGuid,
1273 if (EFI_ERROR (Status)) {
1282 ASSERT (FileName ==
NULL && Data ==
NULL);
1290 ASSERT (FileName ==
NULL || Data ==
NULL);
1293 if (FileName !=
NULL) {
1303 if (!EFI_ERROR (Status)) {
1313 if (!EFI_ERROR (Status)) {
1317 Intermediate =
StrSize (Data);
1322 if (EFI_ERROR (Status)) {
1334 SHELL_FREE_NON_NULL (Data);
1335 SHELL_FREE_NON_NULL (KeyOptionBuffer);
1336 SHELL_FREE_NON_NULL (FileName);
1355 IN CONST UINT16 *CurrentOrder,
1356 IN CONST BOOLEAN VerboseOutput
1362 CHAR16 VariableName[12];
1364 CHAR16 *DevPathString;
1368 CHAR16 *Description;
1369 UINTN DescriptionSize;
1370 UINTN OptionalDataOffset;
1372 if (OrderCount == 0) {
1379 for (LoopVar = 0; LoopVar < OrderCount; LoopVar++) {
1382 DevPathString =
NULL;
1384 UnicodeSPrint (VariableName,
sizeof (VariableName), L
"%s%04x", Op, CurrentOrder[LoopVar]);
1386 Status =
gRT->GetVariable (
1388 (
EFI_GUID *)&gEfiGlobalVariableGuid,
1393 if (Status == EFI_BUFFER_TOO_SMALL) {
1395 if (Buffer ==
NULL) {
1401 Status =
gRT->GetVariable (
1403 (
EFI_GUID *)&gEfiGlobalVariableGuid,
1410 if (EFI_ERROR (Status) || (Buffer ==
NULL)) {
1420 if (BufferSize <
sizeof *LoadOption +
sizeof (CHAR16)) {
1426 gShellBcfgHiiHandle,
1436 DescriptionSize =
StrSize (Description);
1439 FilePathList = (UINT8 *)Description + DescriptionSize;
1441 if (DevPathString ==
NULL) {
1448 OptionalDataOffset =
sizeof *LoadOption + DescriptionSize +
1456 gShellBcfgHiiHandle,
1461 OptionalDataOffset >= BufferSize ? L
'N' : L
'Y'
1463 if (VerboseOutput && (OptionalDataOffset < BufferSize)) {
1467 BufferSize - OptionalDataOffset,
1468 Buffer + OptionalDataOffset
1473 if (Buffer !=
NULL) {
1477 if (DevPathString !=
NULL) {
1495 ASSERT (Struct !=
NULL);
1496 Struct->Target = BcfgTargetMax;
1497 Struct->Type = BcfgTypeMax;
1498 Struct->Number1 = 0;
1499 Struct->Number2 = 0;
1500 Struct->HandleIndex = 0;
1501 Struct->FileName =
NULL;
1502 Struct->Description =
NULL;
1503 Struct->Order =
NULL;
1504 Struct->OptData =
NULL;
1528 CHAR16 *ProblemParam;
1531 CONST CHAR16 *CurrentParam;
1534 UINT64 Intermediate;
1538 ProblemParam =
NULL;
1557 if (EFI_ERROR (Status)) {
1558 if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam !=
NULL)) {
1571 if (CurrentOperation.OptData ==
NULL) {
1576 CurrentOperation.Type = BcfgTypeOpt;
1589 CurrentOperation.Target = BcfgTargetDriverOrder;
1591 CurrentOperation.Target = BcfgTargetBootOrder;
1600 if ((ShellStatus ==
SHELL_SUCCESS) && (CurrentOperation.Target < BcfgTargetMax)) {
1602 Status =
gRT->GetVariable (
1603 CurrentOperation.Target == BcfgTargetBootOrder ? (CHAR16 *)L
"BootOrder" : (CHAR16 *)L
"DriverOrder",
1604 (
EFI_GUID *)&gEfiGlobalVariableGuid,
1607 CurrentOperation.Order
1609 if (Status == EFI_BUFFER_TOO_SMALL) {
1610 CurrentOperation.Order =
AllocateZeroPool (Length+(4*
sizeof (CurrentOperation.Order[0])));
1611 if (CurrentOperation.Order ==
NULL) {
1614 Status =
gRT->GetVariable (
1615 CurrentOperation.Target == BcfgTargetBootOrder ? (CHAR16 *)L
"BootOrder" : (CHAR16 *)L
"DriverOrder",
1616 (
EFI_GUID *)&gEfiGlobalVariableGuid,
1619 CurrentOperation.Order
1625 Count = (UINT16)(Length /
sizeof (CurrentOperation.Order[0]));
1630 if ((ShellStatus ==
SHELL_SUCCESS) && (CurrentOperation.Target < BcfgTargetMax)) {
1633 if (CurrentParam ==
NULL) {
1639 if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"dump") == 0) {
1640 CurrentOperation.Type = BcfgTypeDump;
1648 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"add") == 0) {
1654 CurrentOperation.Type = BcfgTypeAdd;
1661 CurrentOperation.Number1 = (UINT16)Intermediate;
1662 ASSERT (CurrentOperation.FileName ==
NULL);
1664 ASSERT (CurrentOperation.Description ==
NULL);
1667 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"addp") == 0) {
1673 CurrentOperation.Type = BcfgTypeAddp;
1680 CurrentOperation.Number1 = (UINT16)Intermediate;
1681 ASSERT (CurrentOperation.FileName ==
NULL);
1683 ASSERT (CurrentOperation.Description ==
NULL);
1686 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"addh") == 0) {
1692 CurrentOperation.Type = BcfgTypeAddh;
1699 CurrentOperation.Number1 = (UINT16)Intermediate;
1706 CurrentOperation.HandleIndex = (UINT16)Intermediate;
1707 ASSERT (CurrentOperation.Description ==
NULL);
1711 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"rm") == 0) {
1717 CurrentOperation.Type = BcfgTypeRm;
1724 CurrentOperation.Number1 = (UINT16)Intermediate;
1725 if (CurrentOperation.Number1 >= Count) {
1730 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"mv") == 0) {
1736 CurrentOperation.Type = BcfgTypeMv;
1743 CurrentOperation.Number1 = (UINT16)Intermediate;
1744 if (CurrentOperation.Number1 >= Count) {
1754 CurrentOperation.Number2 = (UINT16)Intermediate;
1757 if ( (CurrentOperation.Number2 == CurrentOperation.Number1)
1758 || (CurrentOperation.Number2 >= Count)
1766 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"mod") == 0) {
1771 CurrentOperation.Type = BcfgTypeMod;
1778 CurrentOperation.Number1 = (UINT16)Intermediate;
1779 if (CurrentOperation.Number1 >= Count) {
1783 ASSERT (CurrentOperation.Description ==
NULL);
1788 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"modf") == 0) {
1793 CurrentOperation.Type = BcfgTypeModf;
1800 CurrentOperation.Number1 = (UINT16)Intermediate;
1801 if (CurrentOperation.Number1 >= Count) {
1805 ASSERT (CurrentOperation.FileName ==
NULL);
1810 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"modp") == 0) {
1815 CurrentOperation.Type = BcfgTypeModp;
1822 CurrentOperation.Number1 = (UINT16)Intermediate;
1823 if (CurrentOperation.Number1 >= Count) {
1827 ASSERT (CurrentOperation.FileName ==
NULL);
1832 }
else if (gUnicodeCollation->StriColl (gUnicodeCollation, (CHAR16 *)CurrentParam, L
"modh") == 0) {
1837 CurrentOperation.Type = BcfgTypeModh;
1844 CurrentOperation.Number1 = (UINT16)Intermediate;
1845 if (CurrentOperation.Number1 >= Count) {
1855 CurrentOperation.HandleIndex = (UINT16)Intermediate;
1867 if ((ShellStatus ==
SHELL_SUCCESS) && (CurrentOperation.Target < BcfgTargetMax) && (CurrentOperation.Type < BcfgTypeMax)) {
1871 switch (CurrentOperation.Type) {
1874 CurrentOperation.Target == BcfgTargetBootOrder ? L
"Boot" : L
"Driver",
1876 CurrentOperation.Order,
1882 CurrentOperation.Target,
1883 CurrentOperation.Order,
1885 CurrentOperation.Number1,
1886 CurrentOperation.Number2
1891 CurrentOperation.Target,
1892 CurrentOperation.Order,
1894 CurrentOperation.Number1
1901 CurrentOperation.Number1,
1902 CurrentOperation.FileName,
1903 CurrentOperation.Description ==
NULL ? L
"" : CurrentOperation.Description,
1904 CurrentOperation.Order,
1906 CurrentOperation.Target,
1907 (BOOLEAN)(CurrentOperation.Type == BcfgTypeAddh),
1908 (BOOLEAN)(CurrentOperation.Type == BcfgTypeAddp),
1909 CurrentOperation.HandleIndex
1916 ShellStatus =
BcfgMod (&CurrentOperation, Count);
1920 CurrentOperation.OptData,
1921 CurrentOperation.Order,
1923 CurrentOperation.Target
1934 if (Package !=
NULL) {
1938 if (CurrentOperation.FileName !=
NULL) {
1939 FreePool (CurrentOperation.FileName);
1942 if (CurrentOperation.Description !=
NULL) {
1943 FreePool (CurrentOperation.Description);
1946 if (CurrentOperation.Order !=
NULL) {
1950 return (ShellStatus);
1987 if (gShellBcfgHiiHandle !=
NULL) {
1992 if (gShellBcfgHiiHandle ==
NULL) {
1993 return (EFI_DEVICE_ERROR);
2017 if (gShellBcfgHiiHandle !=
NULL) {
2021 gShellBcfgHiiHandle =
NULL;
UINTN EFIAPI StrSize(IN CONST CHAR16 *String)
LIST_ENTRY *EFIAPI GetFirstNode(IN CONST LIST_ENTRY *List)
UINTN EFIAPI StrLen(IN CONST CHAR16 *String)
CHAR16 *EFIAPI StrStr(IN CONST CHAR16 *String, IN CONST CHAR16 *SearchString)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
#define MEDIA_HARDDRIVE_DP
UINT8 EFIAPI DevicePathType(IN CONST VOID *Node)
UINT8 EFIAPI DevicePathSubType(IN CONST VOID *Node)
BOOLEAN EFIAPI IsDevicePathEnd(IN CONST VOID *Node)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI NextDevicePathNode(IN CONST VOID *Node)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI AppendDevicePath(IN CONST EFI_DEVICE_PATH_PROTOCOL *FirstDevicePath OPTIONAL, IN CONST EFI_DEVICE_PATH_PROTOCOL *SecondDevicePath OPTIONAL)
CHAR16 *EFIAPI ConvertDevicePathToText(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN BOOLEAN DisplayOnly, IN BOOLEAN AllowShortcuts)
UINTN EFIAPI GetDevicePathSize(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI DuplicateDevicePath(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
VOID *EFIAPI AllocateCopyPool(IN UINTN AllocationSize, IN CONST VOID *Buffer)
EFI_HANDLE EFIAPI ConvertHandleIndexToHandle(IN CONST UINTN TheIndex)
#define PARSE_HANDLE_DATABASE_PARENTS(ControllerHandle, Count, Buffer)
#define PARSE_HANDLE_DATABASE_UEFI_DRIVERS(ControllerHandle, Count, Buffer)
EFI_STATUS EFIAPI ParseHandleDatabaseForChildControllers(IN CONST EFI_HANDLE ControllerHandle, OUT UINTN *MatchingHandleCount, OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL)
EFI_HII_HANDLE EFIAPI HiiAddPackages(IN CONST EFI_GUID *PackageListGuid, IN EFI_HANDLE DeviceHandle OPTIONAL,...)
VOID EFIAPI HiiRemovePackages(IN EFI_HII_HANDLE HiiHandle)
UINTN EFIAPI UnicodeSPrint(OUT CHAR16 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR16 *FormatString,...)
EFI_RUNTIME_SERVICES * gRT
#define ASSERT_EFI_ERROR(StatusParameter)
@ SHELL_INVALID_PARAMETER
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
UINT8 ScanCode
follows value defined in Scan Code Set1
EFI_STATUS EFIAPI CommandInit(VOID)
RETURN_STATUS EFIAPI ShellCommandRegisterCommandName(IN CONST CHAR16 *CommandString, IN SHELL_RUN_COMMAND CommandHandler, IN SHELL_GET_MAN_FILENAME GetManFileName, IN UINT32 ShellMinSupportLevel, IN CONST CHAR16 *ProfileName, IN CONST BOOLEAN CanAffectLE, IN CONST EFI_HII_HANDLE HiiHandle, IN CONST EFI_STRING_ID ManFormatHelp)
VOID EFIAPI DumpHex(IN UINTN Indent, IN UINTN Offset, IN UINTN DataSize, IN VOID *UserData)
EFI_STATUS EFIAPI ShellGetFileSize(IN SHELL_FILE_HANDLE FileHandle, OUT UINT64 *Size)
CONST CHAR16 *EFIAPI ShellCommandLineGetValue(IN CONST LIST_ENTRY *CheckPackage, IN CHAR16 *KeyString)
EFI_STATUS EFIAPI ShellCloseFileMetaArg(IN OUT EFI_SHELL_FILE_INFO **ListHead)
#define ShellCommandLineParse(CheckList, CheckPackage, ProblemParam, AutoPageBreak)
Make it easy to upgrade from older versions of the shell library.
EFI_STATUS EFIAPI ShellPrintHiiEx(IN INT32 Col OPTIONAL, IN INT32 Row OPTIONAL, IN CONST CHAR8 *Language OPTIONAL, IN CONST EFI_STRING_ID HiiFormatStringId, IN CONST EFI_HII_HANDLE HiiFormatHandle,...)
BOOLEAN EFIAPI ShellCommandLineGetFlag(IN CONST LIST_ENTRY *CONST CheckPackage, IN CONST CHAR16 *CONST KeyString)
BOOLEAN EFIAPI ShellIsHexOrDecimalNumber(IN CONST CHAR16 *String, IN CONST BOOLEAN ForceHex, IN CONST BOOLEAN StopAtSpace)
@ TypeMaxValue
A flag followed by all the command line data before the next flag.
@ TypeFlag
A flag that is present or not present only (IE "-a").
EFI_STATUS EFIAPI ShellOpenFileByName(IN CONST CHAR16 *FileName, OUT SHELL_FILE_HANDLE *FileHandle, IN UINT64 OpenMode, IN UINT64 Attributes)
CHAR16 *EFIAPI StrnCatGrow(IN OUT CHAR16 **Destination, IN OUT UINTN *CurrentSize, IN CONST CHAR16 *Source, IN UINTN Count)
EFI_STATUS EFIAPI ShellFileExists(IN CONST CHAR16 *Name)
EFI_STATUS EFIAPI ShellOpenFileMetaArg(IN CHAR16 *Arg, IN UINT64 OpenMode, IN OUT EFI_SHELL_FILE_INFO **ListHead)
VOID EFIAPI ShellCommandLineFreeVarList(IN LIST_ENTRY *CheckPackage)
EFI_STATUS EFIAPI ShellInitialize(VOID)
CONST CHAR16 *EFIAPI ShellCommandLineGetRawValue(IN CONST LIST_ENTRY *CONST CheckPackage, IN UINTN Position)
UINTN EFIAPI ShellCommandLineGetCount(IN CONST LIST_ENTRY *CheckPackage)
EFI_STATUS EFIAPI ShellConvertStringToUint64(IN CONST CHAR16 *String, OUT UINT64 *Value, IN CONST BOOLEAN ForceHex, IN CONST BOOLEAN StopAtSpace)
EFI_STATUS EFIAPI ShellReadFile(IN SHELL_FILE_HANDLE FileHandle, IN OUT UINTN *ReadSize, OUT VOID *Buffer)
EFI_STATUS EFIAPI EfiBootManagerLoadOptionToVariable(IN CONST EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption)
EFI_STATUS EFIAPI EfiBootManagerFreeLoadOption(IN EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption)
EFI_STATUS EFIAPI EfiBootManagerVariableToLoadOption(IN CHAR16 *VariableName, IN OUT EFI_BOOT_MANAGER_LOAD_OPTION *LoadOption)
EFI_STATUS EFIAPI GetEfiGlobalVariable2(IN CONST CHAR16 *Name, OUT VOID **Value, OUT UINTN *Size OPTIONAL)
UINTN EFIAPI Print(IN CONST CHAR16 *Format,...)
#define EFI_VARIABLE_NON_VOLATILE
EFI_STATUS EFIAPI BcfgLibraryUnregisterBcfgCommand(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
EFI_STATUS UpdateOptionalData(UINT16 Index, UINTN DataSize, UINT8 *Data, IN CONST BCFG_OPERATION_TARGET Target)
EFI_STATUS GetDevicePathForDriverHandle(IN EFI_HANDLE TheHandle, IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath)
CONST CHAR16 *EFIAPI ShellCommandGetManFileNameBcfg(VOID)
EFI_STATUS EFIAPI BcfgLibraryRegisterBcfgCommand(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable, IN CONST CHAR16 *Name)
EFI_STATUS GetBootOptionCrc(UINT32 *Crc, UINT16 BootIndex)
SHELL_STATUS GetDevicePathByHandle(IN EFI_HANDLE TheHandle, IN BCFG_OPERATION_TARGET Target, IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath)
SHELL_STATUS BcfgAdd(IN UINTN Position, IN CONST CHAR16 *File, IN CONST CHAR16 *Desc, IN CONST UINT16 *CurrentOrder, IN CONST UINTN OrderCount, IN CONST BCFG_OPERATION_TARGET Target, IN CONST BOOLEAN UseHandle, IN CONST BOOLEAN UsePath, IN CONST UINTN HandleNumber)
SHELL_STATUS BcfgDisplayDump(IN CONST CHAR16 *Op, IN CONST UINTN OrderCount, IN CONST UINT16 *CurrentOrder, IN CONST BOOLEAN VerboseOutput)
SHELL_STATUS BcfgAddOpt(IN CONST CHAR16 *OptData, IN CONST UINT16 *CurrentOrder, IN CONST UINTN OrderCount, IN CONST BCFG_OPERATION_TARGET Target)
VOID InitBcfgStruct(IN BGFG_OPERATION *Struct)
SHELL_STATUS BcfgRemove(IN CONST BCFG_OPERATION_TARGET Target, IN CONST UINT16 *CurrentOrder, IN CONST UINTN OrderCount, IN CONST UINT16 Location)
SHELL_STATUS BcfgMove(IN CONST BCFG_OPERATION_TARGET Target, IN CONST UINT16 *CurrentOrder, IN CONST UINTN OrderCount, IN CONST UINT16 OldLocation, IN UINT16 NewLocation)
SHELL_STATUS EFIAPI ShellCommandRunBcfg(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
SHELL_STATUS BcfgMod(IN CONST BGFG_OPERATION *BcfgOperation, IN CONST UINTN OrderCount)
UINT16 FilePathListLength
EFI_BOOT_KEY_DATA KeyData
EFI_DEVICE_PATH_PROTOCOL * FilePath
EFI_HANDLE DeviceHandle
The device handle that the EFI Image was loaded from.
LIST_ENTRY Link
Linked list members.
EFI_STATUS Status
Status of opening the file. Valid only if Handle != NULL.
CONST CHAR16 * FullName
Fully qualified filename.