mirror of https://github.com/acidanthera/audk.git
update functionality on Bcfg command.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11425 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
252d945725
commit
2398d9b1d7
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Main file for bcfg shell install1 function.
|
Main file for bcfg shell Install1 function.
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -19,20 +19,20 @@
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BCFG_TARGET_BOOT_ORDER = 0,
|
BcfgTargetBootOrder = 0,
|
||||||
BCFG_TARGET_DRIVER_ORDER = 1,
|
BcfgTargetDriverOrder = 1,
|
||||||
BCFG_TARGET_MAX = 2
|
BcfgTargetMax = 2
|
||||||
} BCFG_OPERATION_TARGET;
|
} BCFG_OPERATION_TARGET;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BCFG_TYPE_DUMP = 0,
|
BcfgTypeDump = 0,
|
||||||
BCFG_TYPE_ADD = 1,
|
BcfgTypeAdd = 1,
|
||||||
BCFG_TYPE_ADDP = 2,
|
BcfgTypeAddp = 2,
|
||||||
BCFG_TYPE_ADDH = 3,
|
BcfgTypeAddh = 3,
|
||||||
BCFG_TYPE_RM = 4,
|
BcfgTypeRm = 4,
|
||||||
BCFG_TYPE_MV = 5,
|
BcfgTypeMv = 5,
|
||||||
BCFG_TYPE_OPT = 6,
|
BcfgTypeOpt = 6,
|
||||||
BCFG_TYPE_MAX = 7
|
BcfgTypeMax = 7
|
||||||
} BCFG_OPERATION_TYPE;
|
} BCFG_OPERATION_TYPE;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -48,42 +48,24 @@ typedef struct {
|
||||||
} BGFG_OPERATION;
|
} BGFG_OPERATION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function to update the optional data associated with an option.
|
Function to add a option.
|
||||||
|
|
||||||
@param[in] Target The type being modified. BOOT or DRIVER
|
@param[in] Position The position to add Target at.
|
||||||
@param[in] OptData The pointer to the data to modify with.
|
@param[in] File The file to make the target.
|
||||||
|
@param[in] Desc The description text.
|
||||||
|
@param[in] CurrentOrder The pointer to the current order of items.
|
||||||
|
@param[in] OrderCount The number if items in CurrentOrder.
|
||||||
|
@param[in] Target The info on the option to add.
|
||||||
|
@param[in] UseHandle TRUE to use HandleNumber, FALSE to use File and Desc.
|
||||||
|
@param[in] UsePath TRUE to convert to devicepath.
|
||||||
|
@param[in] HandleNumber The handle number to add.
|
||||||
|
|
||||||
@retval SHELL_SUCCESS The optional data was updated sucessfully.
|
@retval SHELL_SUCCESS The operation was successful.
|
||||||
|
@retval SHELL_INVALID_PARAMETER A parameter was invalid.
|
||||||
**/
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
BcfgAddOptInstall(
|
BcfgAddInstall1(
|
||||||
IN CONST BCFG_OPERATION_TARGET Target,
|
|
||||||
IN CONST CHAR16 *OptData
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ShellPrintEx(-1, -1, L"use of -opt is not currently supported.");
|
|
||||||
return (SHELL_UNSUPPORTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
Function to add an option.
|
|
||||||
|
|
||||||
@param[in] Position The position to add this in at.
|
|
||||||
@param[in] File The file to add as the option.
|
|
||||||
@param[in] Desc The description.
|
|
||||||
@param[in] CurrentOrder The current order of that type.
|
|
||||||
@param[in] OrderCount The number of items in the current order.
|
|
||||||
@param[in] Target The type being modified. BOOT or DRIVER
|
|
||||||
@param[in] UseHandle Add something by a handle. Uses HandleNumber if TRUE and File if FALSE.
|
|
||||||
@param[in] UsePath Add something by local path. Only used of UseHandle is FALSE.
|
|
||||||
@param[in] HandleNumber The HandleIndex to use.
|
|
||||||
|
|
||||||
@retval SHELL_SUCCESS The option was added sucessfully.
|
|
||||||
**/
|
|
||||||
SHELL_STATUS
|
|
||||||
EFIAPI
|
|
||||||
BcfgAddInstall (
|
|
||||||
IN UINTN Position,
|
IN UINTN Position,
|
||||||
IN CONST CHAR16 *File,
|
IN CONST CHAR16 *File,
|
||||||
IN CONST CHAR16 *Desc,
|
IN CONST CHAR16 *Desc,
|
||||||
|
@ -91,16 +73,19 @@ BcfgAddInstall (
|
||||||
IN CONST UINTN OrderCount,
|
IN CONST UINTN OrderCount,
|
||||||
IN CONST BCFG_OPERATION_TARGET Target,
|
IN CONST BCFG_OPERATION_TARGET Target,
|
||||||
IN CONST BOOLEAN UseHandle,
|
IN CONST BOOLEAN UseHandle,
|
||||||
IN CONST BOOLEAN UseFullPath,
|
IN CONST BOOLEAN UsePath,
|
||||||
IN CONST UINTN HandleNumber
|
IN CONST UINTN HandleNumber
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath, *FilePath, *FileNode;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *FilePath;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *FileNode;
|
||||||
|
EFI_DEVICE_PATH_PROTOCOL *DevPath;
|
||||||
CHAR16 *Str;
|
CHAR16 *Str;
|
||||||
CONST CHAR16 *p;
|
CONST CHAR16 *StringWalker;
|
||||||
UINT8 *p8;
|
UINT8 *TempByteBuffer;
|
||||||
UINT8 *p8Copy;
|
UINT8 *TempByteStart;
|
||||||
EFI_SHELL_FILE_INFO *Arg;
|
EFI_SHELL_FILE_INFO *Arg;
|
||||||
EFI_SHELL_FILE_INFO *FileList;
|
EFI_SHELL_FILE_INFO *FileList;
|
||||||
CHAR16 OptionStr[40];
|
CHAR16 OptionStr[40];
|
||||||
|
@ -110,15 +95,25 @@ BcfgAddInstall (
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
EFI_HANDLE *Handles;
|
EFI_HANDLE *Handles;
|
||||||
EFI_HANDLE CurHandle;
|
EFI_HANDLE CurHandle;
|
||||||
|
UINTN DriverBindingHandleCount;
|
||||||
|
UINTN ParentControllerHandleCount;
|
||||||
|
UINTN ChildControllerHandleCount;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
UINT16 *NewOrder;
|
UINT16 *NewOrder;
|
||||||
EFI_LOADED_IMAGE_PROTOCOL *Image;
|
UINT64 Intermediate;
|
||||||
|
|
||||||
if (!UseHandle) {
|
if (!UseHandle) {
|
||||||
ASSERT(File != NULL);
|
if (File == NULL || Desc == NULL) {
|
||||||
ASSERT(Desc != NULL);
|
return (SHELL_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ASSERT(HandleNumber != 0);
|
if (HandleNumber == 0) {
|
||||||
|
return (SHELL_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Position > OrderCount) {
|
||||||
|
Position = OrderCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
Str = NULL;
|
Str = NULL;
|
||||||
|
@ -130,42 +125,57 @@ BcfgAddInstall (
|
||||||
TargetLocation = 0xFFFF;
|
TargetLocation = 0xFFFF;
|
||||||
|
|
||||||
if (UseHandle) {
|
if (UseHandle) {
|
||||||
CurHandle = ConvertHandleIndexToHandle(HandleNumber);
|
Status = ShellConvertStringToUint64(File, &Intermediate, TRUE, FALSE);
|
||||||
if (CurHandle == NULL) {
|
CurHandle = ConvertHandleIndexToHandle((UINTN)Intermediate);
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, L"<HandleNumber>");
|
if (CurHandle == NULL || EFI_ERROR(Status)) {
|
||||||
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, File);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
|
//
|
||||||
|
//Make sure that the handle should point to a real controller
|
||||||
|
//
|
||||||
|
Status = PARSE_HANDLE_DATABASE_UEFI_DRIVERS (
|
||||||
|
CurHandle,
|
||||||
|
&DriverBindingHandleCount,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
Status = PARSE_HANDLE_DATABASE_PARENTS (
|
||||||
|
CurHandle,
|
||||||
|
&ParentControllerHandleCount,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
Status = ParseHandleDatabaseForChildControllers (
|
||||||
|
CurHandle,
|
||||||
|
&ChildControllerHandleCount,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (DriverBindingHandleCount > 0
|
||||||
|
|| ParentControllerHandleCount > 0
|
||||||
|
|| ChildControllerHandleCount > 0) {
|
||||||
FilePath = NULL;
|
FilePath = NULL;
|
||||||
Status = gBS->HandleProtocol (CurHandle, &gEfiLoadedImageDevicePathProtocolGuid, (VOID**)&FilePath);
|
Status = gBS->HandleProtocol (
|
||||||
|
CurHandle,
|
||||||
|
&gEfiDevicePathProtocolGuid,
|
||||||
|
(VOID**)&FilePath);
|
||||||
|
}
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
Status = EFI_SUCCESS;
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_HANDLE), gShellInstall1HiiHandle, Intermediate);
|
||||||
//
|
|
||||||
// Try to construct the DevicePath
|
|
||||||
//
|
|
||||||
Status = gBS->OpenProtocol(CurHandle, &gEfiLoadedImageProtocolGuid, (VOID**)&Image, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_HANDLE), gShellInstall1HiiHandle, HandleNumber);
|
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
|
||||||
Status = gBS->HandleProtocol (Image->DeviceHandle, &gEfiDevicePathProtocolGuid, (VOID**)&DevicePath);
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_HANDLE), gShellInstall1HiiHandle, HandleNumber);
|
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
|
||||||
} else {
|
|
||||||
FilePath = AppendDevicePath(DevicePath, Image->FilePath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// Get file info
|
// Get file info
|
||||||
//
|
//
|
||||||
Status = ShellOpenFileMetaArg ((CHAR16*)File, EFI_FILE_MODE_READ, &FileList);
|
ShellOpenFileMetaArg ((CHAR16*)File, EFI_FILE_MODE_READ, &FileList);
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
|
if (FileList == NULL) {
|
||||||
|
//
|
||||||
|
// If filename matched nothing fail
|
||||||
|
//
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellInstall1HiiHandle, File);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellInstall1HiiHandle, File);
|
||||||
ShellStatus = SHELL_NOT_FOUND;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (FileList == NULL || FileList->Link.ForwardLink != FileList->Link.BackLink) {
|
} else if (FileList->Link.ForwardLink != FileList->Link.BackLink) {
|
||||||
//
|
//
|
||||||
// If filename expanded to multiple names, fail
|
// If filename expanded to multiple names, fail
|
||||||
//
|
//
|
||||||
|
@ -189,11 +199,29 @@ BcfgAddInstall (
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_FILE_DP), gShellInstall1HiiHandle, Arg->FullName);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_FILE_DP), gShellInstall1HiiHandle, Arg->FullName);
|
||||||
ShellStatus = SHELL_UNSUPPORTED;
|
ShellStatus = SHELL_UNSUPPORTED;
|
||||||
} else {
|
} else {
|
||||||
if (UseFullPath) {
|
if (UsePath) {
|
||||||
FilePath = DuplicateDevicePath(DevicePath);
|
DevPath = DevicePath;
|
||||||
|
while (!IsDevicePathEnd(DevPath)) {
|
||||||
|
if ((DevicePathType(DevPath) == MEDIA_DEVICE_PATH) &&
|
||||||
|
(DevicePathSubType(DevPath) == MEDIA_HARDDRIVE_DP)) {
|
||||||
|
|
||||||
|
//
|
||||||
|
// If we find it use it instead
|
||||||
|
//
|
||||||
|
DevicePath = DevPath;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DevPath = NextDevicePathNode(DevPath);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// append the file
|
||||||
|
//
|
||||||
|
for(StringWalker=Arg->FullName; *StringWalker != CHAR_NULL && *StringWalker != ':'; StringWalker++);
|
||||||
|
FileNode = FileDevicePath(NULL, StringWalker+1);
|
||||||
|
FilePath = AppendDevicePath(DevicePath, FileNode);
|
||||||
|
FreePool(FileNode);
|
||||||
} else {
|
} else {
|
||||||
for(p=Arg->FullName; *p != CHAR_NULL && *p != ':'; p++);
|
FilePath = DuplicateDevicePath(DevicePath);
|
||||||
FilePath = FileDevicePath(NULL, p+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool(DevicePath);
|
FreePool(DevicePath);
|
||||||
|
@ -236,36 +264,35 @@ BcfgAddInstall (
|
||||||
DescSize = StrSize(Desc);
|
DescSize = StrSize(Desc);
|
||||||
FilePathSize = GetDevicePathSize (FilePath);
|
FilePathSize = GetDevicePathSize (FilePath);
|
||||||
|
|
||||||
p8 = AllocateZeroPool(sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize);
|
TempByteBuffer = AllocateZeroPool(sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize);
|
||||||
if (p8 != NULL) {
|
TempByteStart = TempByteBuffer;
|
||||||
p8Copy = p8;
|
*((UINT32 *) TempByteBuffer) = LOAD_OPTION_ACTIVE; // Attributes
|
||||||
*((UINT32 *) p8) = LOAD_OPTION_ACTIVE; // Attributes
|
TempByteBuffer += sizeof (UINT32);
|
||||||
p8 += sizeof (UINT32);
|
|
||||||
|
|
||||||
*((UINT16 *) p8) = (UINT16)FilePathSize; // FilePathListLength
|
*((UINT16 *) TempByteBuffer) = (UINT16)FilePathSize; // FilePathListLength
|
||||||
p8 += sizeof (UINT16);
|
TempByteBuffer += sizeof (UINT16);
|
||||||
|
|
||||||
CopyMem (p8, Desc, DescSize);
|
CopyMem (TempByteBuffer, Desc, DescSize);
|
||||||
p8 += DescSize;
|
TempByteBuffer += DescSize;
|
||||||
CopyMem (p8, FilePath, FilePathSize);
|
CopyMem (TempByteBuffer, FilePath, FilePathSize);
|
||||||
|
|
||||||
UnicodeSPrint (OptionStr, sizeof(OptionStr), L"%s%04x", Target == BCFG_TARGET_BOOT_ORDER?L"Boot":L"Driver", TargetLocation);
|
UnicodeSPrint (OptionStr, sizeof(OptionStr), L"%s%04x", Target == BcfgTargetBootOrder?L"Boot":L"Driver", TargetLocation);
|
||||||
Status = gRT->SetVariable (
|
Status = gRT->SetVariable (
|
||||||
OptionStr,
|
OptionStr,
|
||||||
&gEfiGlobalVariableGuid,
|
&gEfiGlobalVariableGuid,
|
||||||
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
||||||
sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize,
|
sizeof(UINT32) + sizeof(UINT16) + DescSize + FilePathSize,
|
||||||
p8Copy
|
TempByteStart
|
||||||
);
|
);
|
||||||
|
|
||||||
FreePool(p8Copy);
|
FreePool(TempByteStart);
|
||||||
|
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellInstall1HiiHandle, OptionStr, Status);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_SET_VAR_FAIL), gShellInstall1HiiHandle, OptionStr, Status);
|
||||||
} else {
|
} else {
|
||||||
NewOrder = AllocateZeroPool((OrderCount+1)*sizeof(UINT16));
|
NewOrder = AllocateZeroPool((OrderCount+1)*sizeof(NewOrder[0]));
|
||||||
ASSERT(NewOrder != NULL);
|
ASSERT(NewOrder != NULL);
|
||||||
CopyMem(NewOrder, CurrentOrder, (OrderCount)*sizeof(UINT16));
|
CopyMem(NewOrder, CurrentOrder, (OrderCount)*sizeof(NewOrder[0]));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Insert target into order list
|
// Insert target into order list
|
||||||
|
@ -274,9 +301,9 @@ BcfgAddInstall (
|
||||||
NewOrder[Index] = NewOrder[Index-1];
|
NewOrder[Index] = NewOrder[Index-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
NewOrder[Index] = (UINT16)TargetLocation;
|
NewOrder[Position] = (UINT16) TargetLocation;
|
||||||
Status = gRT->SetVariable (
|
Status = gRT->SetVariable (
|
||||||
Target == BCFG_TARGET_BOOT_ORDER?L"BootOrder":L"DriverOrder",
|
Target == BcfgTargetBootOrder?L"BootOrder":L"DriverOrder",
|
||||||
&gEfiGlobalVariableGuid,
|
&gEfiGlobalVariableGuid,
|
||||||
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
||||||
(OrderCount+1) * sizeof(UINT16),
|
(OrderCount+1) * sizeof(UINT16),
|
||||||
|
@ -286,16 +313,15 @@ BcfgAddInstall (
|
||||||
FreePool(NewOrder);
|
FreePool(NewOrder);
|
||||||
|
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, Target == BCFG_TARGET_BOOT_ORDER?L"BootOrder":L"DriverOrder", Status);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, Target == BcfgTargetBootOrder?L"BootOrder":L"DriverOrder", Status);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
ShellPrintEx (-1, -1, L"bcfg: Add %s as %x\n", OptionStr, Index);
|
Print (L"bcfg: Add %s as %x\n", OptionStr, Position);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_MEM), gShellInstall1HiiHandle);
|
|
||||||
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
|
||||||
}
|
}
|
||||||
|
if (FileNode != NULL) {
|
||||||
|
FreePool (FileNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -321,9 +347,20 @@ BcfgAddInstall (
|
||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Funciton to remove an item.
|
||||||
|
|
||||||
|
@param[in] Target The target item to move.
|
||||||
|
@param[in] CurrentOrder The pointer to the current order of items.
|
||||||
|
@param[in] OrderCount The number if items in CurrentOrder.
|
||||||
|
@param[in] Location The current location of the Target.
|
||||||
|
|
||||||
|
@retval SHELL_SUCCESS The operation was successful.
|
||||||
|
@retval SHELL_INVALID_PARAMETER A parameter was invalid.
|
||||||
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
BcfgRemoveInstall(
|
BcfgRemoveInstall1(
|
||||||
IN CONST BCFG_OPERATION_TARGET Target,
|
IN CONST BCFG_OPERATION_TARGET Target,
|
||||||
IN CONST UINT16 *CurrentOrder,
|
IN CONST UINT16 *CurrentOrder,
|
||||||
IN CONST UINTN OrderCount,
|
IN CONST UINTN OrderCount,
|
||||||
|
@ -333,30 +370,10 @@ BcfgRemoveInstall(
|
||||||
CHAR16 VariableName[12];
|
CHAR16 VariableName[12];
|
||||||
UINT16 *NewOrder;
|
UINT16 *NewOrder;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
UINTN LoopVar;
|
||||||
|
UINTN NewCount;
|
||||||
|
|
||||||
NewOrder = AllocatePool(OrderCount*sizeof(CurrentOrder[0]));
|
UnicodeSPrint(VariableName, sizeof(VariableName), L"%s%04x", Target == BcfgTargetBootOrder?L"Boot":L"Driver", Location);
|
||||||
if (NewOrder == NULL) {
|
|
||||||
return (SHELL_OUT_OF_RESOURCES);
|
|
||||||
}
|
|
||||||
|
|
||||||
CopyMem(NewOrder, CurrentOrder, OrderCount*sizeof(CurrentOrder[0]));
|
|
||||||
CopyMem(NewOrder+Location, NewOrder+Location+1, (OrderCount - Location - 1)*sizeof(CurrentOrder[0]));
|
|
||||||
|
|
||||||
Status = gRT->SetVariable(
|
|
||||||
Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
|
||||||
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
|
||||||
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
|
||||||
(OrderCount-1)*sizeof(CurrentOrder[0]), // drop 1 off since the list is 1 shorter
|
|
||||||
NewOrder);
|
|
||||||
|
|
||||||
FreePool(NewOrder);
|
|
||||||
|
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);
|
|
||||||
return (SHELL_INVALID_PARAMETER);
|
|
||||||
}
|
|
||||||
|
|
||||||
UnicodeSPrint(VariableName, sizeof(VariableName), L"%s%04x", Target == BCFG_TARGET_BOOT_ORDER?L"Boot":L"Driver", CurrentOrder[Location]);
|
|
||||||
Status = gRT->SetVariable(
|
Status = gRT->SetVariable(
|
||||||
VariableName,
|
VariableName,
|
||||||
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
||||||
|
@ -367,13 +384,45 @@ BcfgRemoveInstall(
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, VariableName, Status);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, VariableName, Status);
|
||||||
return (SHELL_INVALID_PARAMETER);
|
return (SHELL_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
NewOrder = AllocateZeroPool(OrderCount*sizeof(CurrentOrder[0]));
|
||||||
|
NewCount = OrderCount;
|
||||||
|
CopyMem(NewOrder, CurrentOrder, OrderCount*sizeof(CurrentOrder[0]));
|
||||||
|
for (LoopVar = 0 ; LoopVar < OrderCount ; LoopVar++){
|
||||||
|
if (NewOrder[LoopVar] == Location) {
|
||||||
|
CopyMem(NewOrder+LoopVar, NewOrder+LoopVar+1, (OrderCount - LoopVar - 1)*sizeof(CurrentOrder[0]));
|
||||||
|
NewCount--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Status = gRT->SetVariable(
|
||||||
|
Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
||||||
|
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
||||||
|
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
||||||
|
NewCount*sizeof(NewOrder[0]),
|
||||||
|
NewOrder);
|
||||||
|
FreePool(NewOrder);
|
||||||
|
|
||||||
|
if (EFI_ERROR(Status)) {
|
||||||
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);
|
||||||
|
return (SHELL_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
return (SHELL_SUCCESS);
|
return (SHELL_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Funciton to move a item to another location.
|
||||||
|
|
||||||
|
@param[in] Target The target item to move.
|
||||||
|
@param[in] CurrentOrder The pointer to the current order of items.
|
||||||
|
@param[in] OrderCount The number if items in CurrentOrder.
|
||||||
|
@param[in] OldLocation The current location of the Target.
|
||||||
|
@param[in] NewLocation The desired location of the Target.
|
||||||
|
|
||||||
|
@retval SHELL_SUCCESS The operation was successful.
|
||||||
|
@retval SHELL_INVALID_PARAMETER A parameter was invalid.
|
||||||
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
BcfgMoveInstall(
|
BcfgMoveInstall1(
|
||||||
IN CONST BCFG_OPERATION_TARGET Target,
|
IN CONST BCFG_OPERATION_TARGET Target,
|
||||||
IN CONST UINT16 *CurrentOrder,
|
IN CONST UINT16 *CurrentOrder,
|
||||||
IN CONST UINTN OrderCount,
|
IN CONST UINTN OrderCount,
|
||||||
|
@ -385,22 +434,18 @@ BcfgMoveInstall(
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT16 Temp;
|
UINT16 Temp;
|
||||||
|
|
||||||
NewOrder = AllocatePool(OrderCount*sizeof(CurrentOrder[0]));
|
NewOrder = AllocateZeroPool(OrderCount*sizeof(CurrentOrder[0]));
|
||||||
ASSERT(NewOrder != NULL);
|
ASSERT(NewOrder != NULL);
|
||||||
|
|
||||||
Temp = CurrentOrder[OldLocation];
|
Temp = CurrentOrder[OldLocation];
|
||||||
CopyMem(NewOrder, CurrentOrder, OrderCount*sizeof(CurrentOrder[0]));
|
CopyMem(NewOrder, CurrentOrder, OrderCount*sizeof(CurrentOrder[0]));
|
||||||
CopyMem(NewOrder+OldLocation, NewOrder+OldLocation+1, (OrderCount - OldLocation - 1)*sizeof(CurrentOrder[0]));
|
CopyMem(NewOrder+OldLocation, NewOrder+OldLocation+1, (OrderCount - OldLocation - 1)*sizeof(CurrentOrder[0]));
|
||||||
if (NewLocation == OrderCount) {
|
|
||||||
NewOrder[OrderCount-1] = Temp;
|
|
||||||
} else {
|
|
||||||
CopyMem(NewOrder+NewLocation+1, NewOrder+NewLocation, (OrderCount - NewLocation - 1)*sizeof(CurrentOrder[0]));
|
CopyMem(NewOrder+NewLocation+1, NewOrder+NewLocation, (OrderCount - NewLocation - 1)*sizeof(CurrentOrder[0]));
|
||||||
NewOrder[NewLocation] = Temp;
|
NewOrder[NewLocation] = Temp;
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Status = gRT->SetVariable(
|
Status = gRT->SetVariable(
|
||||||
Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
||||||
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
||||||
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS|EFI_VARIABLE_RUNTIME_ACCESS,
|
||||||
OrderCount*sizeof(CurrentOrder[0]),
|
OrderCount*sizeof(CurrentOrder[0]),
|
||||||
|
@ -409,7 +454,7 @@ BcfgMoveInstall(
|
||||||
FreePool(NewOrder);
|
FreePool(NewOrder);
|
||||||
|
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR(Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_WRITE_FAIL), gShellInstall1HiiHandle, Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder", Status);
|
||||||
return (SHELL_INVALID_PARAMETER);
|
return (SHELL_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
return (SHELL_SUCCESS);
|
return (SHELL_SUCCESS);
|
||||||
|
@ -417,10 +462,32 @@ BcfgMoveInstall(
|
||||||
|
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
BcfgDisplayDumpInstall(
|
BcfgAddOptInstall1(
|
||||||
|
IN CONST CHAR16 *OptData,
|
||||||
|
IN CONST BCFG_OPERATION_TARGET Target
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ASSERT(OptData != NULL);
|
||||||
|
return SHELL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Function to dump the Bcfg information.
|
||||||
|
|
||||||
|
@param[in] Op The operation.
|
||||||
|
@param[in] OrderCount How many to dump.
|
||||||
|
@param[in] CurrentOrder The pointer to the current order of items.
|
||||||
|
@param[in] VerboseOutput TRUE for extra output. FALSE otherwise.
|
||||||
|
|
||||||
|
@retval SHELL_SUCCESS The dump was successful.
|
||||||
|
@retval SHELL_INVALID_PARAMETER A parameter was invalid.
|
||||||
|
**/
|
||||||
|
SHELL_STATUS
|
||||||
|
EFIAPI
|
||||||
|
BcfgDisplayDumpInstall1(
|
||||||
IN CONST CHAR16 *Op,
|
IN CONST CHAR16 *Op,
|
||||||
IN CONST UINT16 *CurrentOrder,
|
|
||||||
IN CONST UINTN OrderCount,
|
IN CONST UINTN OrderCount,
|
||||||
|
IN CONST UINT16 *CurrentOrder,
|
||||||
IN CONST BOOLEAN VerboseOutput
|
IN CONST BOOLEAN VerboseOutput
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
@ -433,6 +500,11 @@ BcfgDisplayDumpInstall(
|
||||||
CHAR16 *DevPathString;
|
CHAR16 *DevPathString;
|
||||||
VOID *DevPath;
|
VOID *DevPath;
|
||||||
|
|
||||||
|
if (OrderCount == 0) {
|
||||||
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_BCFG_NONE), gShellInstall1HiiHandle);
|
||||||
|
return (SHELL_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
for (LoopVar = 0 ; LoopVar < OrderCount ; LoopVar++) {
|
for (LoopVar = 0 ; LoopVar < OrderCount ; LoopVar++) {
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
BufferSize = 0;
|
BufferSize = 0;
|
||||||
|
@ -445,7 +517,7 @@ BcfgDisplayDumpInstall(
|
||||||
&BufferSize,
|
&BufferSize,
|
||||||
Buffer);
|
Buffer);
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
Buffer = AllocatePool(BufferSize);
|
Buffer = AllocateZeroPool(BufferSize);
|
||||||
Status = gRT->GetVariable(
|
Status = gRT->GetVariable(
|
||||||
VariableName,
|
VariableName,
|
||||||
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
||||||
|
@ -455,12 +527,11 @@ BcfgDisplayDumpInstall(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR(Status) || Buffer == NULL) {
|
if (EFI_ERROR(Status) || Buffer == NULL) {
|
||||||
SHELL_FREE_NON_NULL(Buffer);
|
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_READ_FAIL), gShellInstall1HiiHandle, VariableName, Status);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_READ_FAIL), gShellInstall1HiiHandle, VariableName, Status);
|
||||||
return (SHELL_INVALID_PARAMETER);
|
return (SHELL_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
DevPath = AllocatePool(*(UINT16*)(Buffer+4));
|
DevPath = AllocateZeroPool(*(UINT16*)(Buffer+4));
|
||||||
CopyMem(DevPath, Buffer+6+StrSize((CHAR16*)(Buffer+6)), *(UINT16*)(Buffer+4));
|
CopyMem(DevPath, Buffer+6+StrSize((CHAR16*)(Buffer+6)), *(UINT16*)(Buffer+4));
|
||||||
DevPathString = gDevPathToText->ConvertDevicePathToText(DevPath, TRUE, FALSE);
|
DevPathString = gDevPathToText->ConvertDevicePathToText(DevPath, TRUE, FALSE);
|
||||||
ShellPrintHiiEx(
|
ShellPrintHiiEx(
|
||||||
|
@ -469,16 +540,25 @@ BcfgDisplayDumpInstall(
|
||||||
NULL,
|
NULL,
|
||||||
STRING_TOKEN(STR_BCFG_LOAD_OPTIONS),
|
STRING_TOKEN(STR_BCFG_LOAD_OPTIONS),
|
||||||
gShellInstall1HiiHandle,
|
gShellInstall1HiiHandle,
|
||||||
Op,
|
|
||||||
LoopVar,
|
LoopVar,
|
||||||
|
VariableName,
|
||||||
(CHAR16*)(Buffer+6),
|
(CHAR16*)(Buffer+6),
|
||||||
DevPathString,
|
DevPathString,
|
||||||
(StrSize((CHAR16*)(Buffer+6)) + *(UINT16*)(Buffer+4) + 6) <= BufferSize?L'N':L'Y');
|
(StrSize((CHAR16*)(Buffer+6)) + *(UINT16*)(Buffer+4) + 6) <= BufferSize?L'N':L'Y');
|
||||||
if (VerboseOutput) {
|
if (VerboseOutput) {
|
||||||
for (LoopVar2 = (StrSize((CHAR16*)(Buffer+6)) + *(UINT16*)(Buffer+4) + 6);LoopVar2<BufferSize;LoopVar2++){
|
for (LoopVar2 = (StrSize((CHAR16*)(Buffer+6)) + *(UINT16*)(Buffer+4) + 6);LoopVar2<BufferSize;LoopVar2++){
|
||||||
ShellPrintEx(-1, -1, L"%02x", Buffer[LoopVar2]);
|
ShellPrintEx(
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
L"%02x",
|
||||||
|
Buffer[LoopVar2]);
|
||||||
}
|
}
|
||||||
ShellPrintEx(-1, -1, L"\r\n");
|
ShellPrintEx(
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
L"\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Buffer != NULL) {
|
if (Buffer != NULL) {
|
||||||
|
@ -494,15 +574,20 @@ BcfgDisplayDumpInstall(
|
||||||
return (SHELL_SUCCESS);
|
return (SHELL_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Function to initialize the BCFG operation structure.
|
||||||
|
|
||||||
|
@param[in] Struct The stuct to initialize.
|
||||||
|
**/
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
InitBcfgStructInstall(
|
InitBcfgStructInstall1(
|
||||||
IN BGFG_OPERATION *Struct
|
IN BGFG_OPERATION *Struct
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ASSERT(Struct != NULL);
|
ASSERT(Struct != NULL);
|
||||||
Struct->Target = BCFG_TARGET_MAX;
|
Struct->Target = BcfgTargetMax;
|
||||||
Struct->Type = BCFG_TYPE_MAX;
|
Struct->Type = BcfgTypeMax;
|
||||||
Struct->Number1 = 0;
|
Struct->Number1 = 0;
|
||||||
Struct->Number2 = 0;
|
Struct->Number2 = 0;
|
||||||
Struct->HandleIndex = 0;
|
Struct->HandleIndex = 0;
|
||||||
|
@ -540,13 +625,14 @@ ShellCommandRunBcfgInstall (
|
||||||
CONST CHAR16 *CurrentParam;
|
CONST CHAR16 *CurrentParam;
|
||||||
BGFG_OPERATION CurrentOperation;
|
BGFG_OPERATION CurrentOperation;
|
||||||
UINTN Length;
|
UINTN Length;
|
||||||
|
UINT64 Intermediate;
|
||||||
|
|
||||||
Length = 0;
|
Length = 0;
|
||||||
ProblemParam = NULL;
|
ProblemParam = NULL;
|
||||||
Package = NULL;
|
Package = NULL;
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
|
|
||||||
InitBcfgStructInstall(&CurrentOperation);
|
InitBcfgStructInstall1(&CurrentOperation);
|
||||||
|
|
||||||
//
|
//
|
||||||
// initialize the shell lib (we must be in non-auto-init...)
|
// initialize the shell lib (we must be in non-auto-init...)
|
||||||
|
@ -570,47 +656,51 @@ ShellCommandRunBcfgInstall (
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
//
|
||||||
|
// Read in if we are doing -OPT
|
||||||
|
//
|
||||||
|
if (ShellCommandLineGetFlag(Package, L"-opt")) {
|
||||||
|
CurrentOperation.OptData = ShellCommandLineGetValue(Package, L"-opt");
|
||||||
|
if (CurrentOperation.OptData == NULL) {
|
||||||
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellInstall1HiiHandle, L"-opt");
|
||||||
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
CurrentOperation.Type = BcfgTypeOpt;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// small block to read the target of the operation
|
// small block to read the target of the operation
|
||||||
//
|
//
|
||||||
if (ShellCommandLineGetFlag(Package, L"-opt") && ShellCommandLineGetCount(Package) < 2) {
|
if ((ShellCommandLineGetCount(Package) < 3 && CurrentOperation.Type != BcfgTypeOpt) ||
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
(ShellCommandLineGetCount(Package) < 2 && CurrentOperation.Type == BcfgTypeOpt)
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
){
|
||||||
} else if (!ShellCommandLineGetFlag(Package, L"-opt") && ShellCommandLineGetCount(Package) < 3) {
|
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)ShellCommandLineGetRawValue(Package, 1), L"driver") == 0) {
|
} else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)ShellCommandLineGetRawValue(Package, 1), L"driver") == 0) {
|
||||||
CurrentOperation.Target = BCFG_TARGET_DRIVER_ORDER;
|
CurrentOperation.Target = BcfgTargetDriverOrder;
|
||||||
} else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)ShellCommandLineGetRawValue(Package, 1), L"boot") == 0) {
|
} else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)ShellCommandLineGetRawValue(Package, 1), L"boot") == 0) {
|
||||||
CurrentOperation.Target = BCFG_TARGET_BOOT_ORDER;
|
CurrentOperation.Target = BcfgTargetBootOrder;
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_DRIVER_BOOT), gShellInstall1HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_DRIVER_BOOT), gShellInstall1HiiHandle);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Read in if we are doing -OPT
|
|
||||||
//
|
|
||||||
if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX && ShellCommandLineGetFlag(Package, L"-opt")) {
|
|
||||||
CurrentOperation.OptData = ShellCommandLineGetValue(Package, L"-opt");
|
|
||||||
CurrentOperation.Type = BCFG_TYPE_OPT;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Read in the boot or driver order environment variable (not needed for opt)
|
// Read in the boot or driver order environment variable (not needed for opt)
|
||||||
//
|
//
|
||||||
if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX && CurrentOperation.Type != BCFG_TYPE_OPT) {
|
if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BcfgTargetMax && CurrentOperation.Type != BcfgTypeOpt) {
|
||||||
Length = 0;
|
Length = 0;
|
||||||
Status = gRT->GetVariable(
|
Status = gRT->GetVariable(
|
||||||
CurrentOperation.Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
CurrentOperation.Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
||||||
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
||||||
NULL,
|
NULL,
|
||||||
&Length,
|
&Length,
|
||||||
CurrentOperation.Order);
|
CurrentOperation.Order);
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
CurrentOperation.Order = AllocatePool(Length+(4*sizeof(CurrentOperation.Order[0])));
|
CurrentOperation.Order = AllocateZeroPool(Length+(4*sizeof(CurrentOperation.Order[0])));
|
||||||
Status = gRT->GetVariable(
|
Status = gRT->GetVariable(
|
||||||
CurrentOperation.Target == BCFG_TARGET_BOOT_ORDER?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
CurrentOperation.Target == BcfgTargetBootOrder?(CHAR16*)L"BootOrder":(CHAR16*)L"DriverOrder",
|
||||||
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
(EFI_GUID*)&gEfiGlobalVariableGuid,
|
||||||
NULL,
|
NULL,
|
||||||
&Length,
|
&Length,
|
||||||
|
@ -621,15 +711,11 @@ ShellCommandRunBcfgInstall (
|
||||||
//
|
//
|
||||||
// large block to read the type of operation and verify parameter types for the info.
|
// large block to read the type of operation and verify parameter types for the info.
|
||||||
//
|
//
|
||||||
if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX) {
|
if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BcfgTargetMax) {
|
||||||
for (ParamNumber = 2 ; ParamNumber < ShellCommandLineGetCount(Package) && ShellStatus == SHELL_SUCCESS; ParamNumber++) {
|
for (ParamNumber = 2 ; ParamNumber < ShellCommandLineGetCount(Package) && ShellStatus == SHELL_SUCCESS; ParamNumber++) {
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ParamNumber);
|
||||||
if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)CurrentParam, L"dump") == 0) {
|
if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)CurrentParam, L"dump") == 0) {
|
||||||
if (ShellCommandLineGetCount(Package) > 3) {
|
CurrentOperation.Type = BcfgTypeDump;
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellInstall1HiiHandle);
|
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
|
||||||
}
|
|
||||||
CurrentOperation.Type = BCFG_TYPE_DUMP;
|
|
||||||
} else if (ShellCommandLineGetFlag(Package, L"-v")) {
|
} else if (ShellCommandLineGetFlag(Package, L"-v")) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, L"-v (without dump)");
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, L"-v (without dump)");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
|
@ -638,13 +724,14 @@ ShellCommandRunBcfgInstall (
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
CurrentOperation.Type = BCFG_TYPE_ADD;
|
CurrentOperation.Type = BcfgTypeAdd;
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
||||||
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CurrentOperation.Number1 = (UINT16)StrHexToUintn(CurrentParam);
|
Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);
|
||||||
|
CurrentOperation.Number1 = (UINT16)Intermediate;
|
||||||
ASSERT(CurrentOperation.FileName == NULL);
|
ASSERT(CurrentOperation.FileName == NULL);
|
||||||
CurrentOperation.FileName = StrnCatGrow(&CurrentOperation.FileName , NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
CurrentOperation.FileName = StrnCatGrow(&CurrentOperation.FileName , NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
||||||
ASSERT(CurrentOperation.Description == NULL);
|
ASSERT(CurrentOperation.Description == NULL);
|
||||||
|
@ -654,38 +741,40 @@ ShellCommandRunBcfgInstall (
|
||||||
if ((ParamNumber + 3) >= ShellCommandLineGetCount(Package)) {
|
if ((ParamNumber + 3) >= ShellCommandLineGetCount(Package)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
}
|
||||||
CurrentOperation.Type = BCFG_TYPE_ADDP;
|
CurrentOperation.Type = BcfgTypeAddp;
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
||||||
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CurrentOperation.Number1 = (UINT16)StrHexToUintn(CurrentParam);
|
Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);
|
||||||
|
CurrentOperation.Number1 = (UINT16)Intermediate;
|
||||||
ASSERT(CurrentOperation.FileName == NULL);
|
ASSERT(CurrentOperation.FileName == NULL);
|
||||||
CurrentOperation.FileName = StrnCatGrow(&CurrentOperation.FileName , NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
CurrentOperation.FileName = StrnCatGrow(&CurrentOperation.FileName , NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
||||||
ASSERT(CurrentOperation.Description == NULL);
|
ASSERT(CurrentOperation.Description == NULL);
|
||||||
CurrentOperation.Description = StrnCatGrow(&CurrentOperation.Description, NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
CurrentOperation.Description = StrnCatGrow(&CurrentOperation.Description, NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)CurrentParam, L"addh") == 0) {
|
} else if (gUnicodeCollation->StriColl(gUnicodeCollation, (CHAR16*)CurrentParam, L"addh") == 0) {
|
||||||
if ((ParamNumber + 3) >= ShellCommandLineGetCount(Package)) {
|
if ((ParamNumber + 3) >= ShellCommandLineGetCount(Package)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
CurrentOperation.Type = BCFG_TYPE_ADDH;
|
CurrentOperation.Type = BcfgTypeAddh;
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
||||||
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CurrentOperation.Number1 = (UINT16)StrHexToUintn(CurrentParam);
|
Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);
|
||||||
|
CurrentOperation.Number1 = (UINT16)Intermediate;
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
||||||
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CurrentOperation.HandleIndex = (UINT16)StrHexToUintn(CurrentParam);
|
Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);
|
||||||
|
CurrentOperation.HandleIndex = (UINT16)Intermediate;
|
||||||
ASSERT(CurrentOperation.Description == NULL);
|
ASSERT(CurrentOperation.Description == NULL);
|
||||||
CurrentOperation.Description = StrnCatGrow(&CurrentOperation.Description, NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
CurrentOperation.Description = StrnCatGrow(&CurrentOperation.Description, NULL, ShellCommandLineGetRawValue(Package, ++ParamNumber), 0);
|
||||||
}
|
}
|
||||||
|
@ -695,15 +784,16 @@ ShellCommandRunBcfgInstall (
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
CurrentOperation.Type = BCFG_TYPE_RM;
|
CurrentOperation.Type = BcfgTypeRm;
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
||||||
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CurrentOperation.Number1 = (UINT16)StrHexToUintn(CurrentParam);
|
Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);
|
||||||
|
CurrentOperation.Number1 = (UINT16)Intermediate;
|
||||||
if (CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))){
|
if (CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))){
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_LOCATION_RANGE), gShellInstall1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellInstall1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -712,15 +802,16 @@ ShellCommandRunBcfgInstall (
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellInstall1HiiHandle);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
CurrentOperation.Type = BCFG_TYPE_MV;
|
CurrentOperation.Type = BcfgTypeMv;
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
||||||
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
if (CurrentParam == NULL || !ShellIsHexOrDecimalNumber(CurrentParam, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CurrentOperation.Number1 = (UINT16)StrHexToUintn(CurrentParam);
|
Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);
|
||||||
|
CurrentOperation.Number1 = (UINT16)Intermediate;
|
||||||
if (CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))){
|
if (CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))){
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_LOCATION_RANGE), gShellInstall1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellInstall1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
CurrentParam = ShellCommandLineGetRawValue(Package, ++ParamNumber);
|
||||||
|
@ -728,13 +819,14 @@ ShellCommandRunBcfgInstall (
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellInstall1HiiHandle, CurrentParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
CurrentOperation.Number2 = (UINT16)StrHexToUintn(CurrentParam);
|
Status = ShellConvertStringToUint64(CurrentParam, &Intermediate, TRUE, FALSE);
|
||||||
|
CurrentOperation.Number2 = (UINT16)Intermediate;
|
||||||
}
|
}
|
||||||
if (CurrentOperation.Number2 == CurrentOperation.Number1
|
if (CurrentOperation.Number2 == CurrentOperation.Number1
|
||||||
||CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))
|
||CurrentOperation.Number1 > (Length / sizeof(CurrentOperation.Order[0]))
|
||||||
||CurrentOperation.Number2 > (Length / sizeof(CurrentOperation.Order[0]))
|
||CurrentOperation.Number2 > (Length / sizeof(CurrentOperation.Order[0]))
|
||||||
){
|
){
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_LOCATION_RANGE), gShellInstall1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));
|
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_BCFG_NUMB_RANGE), gShellInstall1HiiHandle, Length / sizeof(CurrentOperation.Order[0]));
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -744,51 +836,51 @@ ShellCommandRunBcfgInstall (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BCFG_TARGET_MAX && CurrentOperation.Type < BCFG_TYPE_MAX) {
|
if (ShellStatus == SHELL_SUCCESS && CurrentOperation.Target < BcfgTargetMax && CurrentOperation.Type < BcfgTypeMax) {
|
||||||
//
|
//
|
||||||
// we have all the info. Do the work
|
// we have all the info. Do the work
|
||||||
//
|
//
|
||||||
switch (CurrentOperation.Type) {
|
switch (CurrentOperation.Type) {
|
||||||
case BCFG_TYPE_DUMP:
|
case BcfgTypeDump:
|
||||||
ShellStatus = BcfgDisplayDumpInstall(
|
ShellStatus = BcfgDisplayDumpInstall1(
|
||||||
CurrentOperation.Target == BCFG_TARGET_BOOT_ORDER?L"Boot":L"Driver",
|
CurrentOperation.Target == BcfgTargetBootOrder?L"Boot":L"Driver",
|
||||||
CurrentOperation.Order,
|
|
||||||
Length / sizeof(CurrentOperation.Order[0]),
|
Length / sizeof(CurrentOperation.Order[0]),
|
||||||
|
CurrentOperation.Order,
|
||||||
ShellCommandLineGetFlag(Package, L"-v"));
|
ShellCommandLineGetFlag(Package, L"-v"));
|
||||||
break;
|
break;
|
||||||
case BCFG_TYPE_MV:
|
case BcfgTypeMv:
|
||||||
ShellStatus = BcfgMoveInstall(
|
ShellStatus = BcfgMoveInstall1(
|
||||||
CurrentOperation.Target,
|
CurrentOperation.Target,
|
||||||
CurrentOperation.Order,
|
CurrentOperation.Order,
|
||||||
Length / sizeof(CurrentOperation.Order[0]),
|
Length / sizeof(CurrentOperation.Order[0]),
|
||||||
CurrentOperation.Number1,
|
CurrentOperation.Number1,
|
||||||
CurrentOperation.Number2);
|
CurrentOperation.Number2);
|
||||||
break;
|
break;
|
||||||
case BCFG_TYPE_RM:
|
case BcfgTypeRm:
|
||||||
ShellStatus = BcfgRemoveInstall(
|
ShellStatus = BcfgRemoveInstall1(
|
||||||
CurrentOperation.Target,
|
CurrentOperation.Target,
|
||||||
CurrentOperation.Order,
|
CurrentOperation.Order,
|
||||||
(Length / sizeof(CurrentOperation.Order[0])),
|
Length / sizeof(CurrentOperation.Order[0]),
|
||||||
CurrentOperation.Number1);
|
CurrentOperation.Number1);
|
||||||
break;
|
break;
|
||||||
case BCFG_TYPE_ADD:
|
case BcfgTypeAdd:
|
||||||
case BCFG_TYPE_ADDP:
|
case BcfgTypeAddp:
|
||||||
case BCFG_TYPE_ADDH:
|
case BcfgTypeAddh:
|
||||||
ShellStatus = BcfgAddInstall(
|
ShellStatus = BcfgAddInstall1(
|
||||||
CurrentOperation.Number1,
|
CurrentOperation.Number1,
|
||||||
CurrentOperation.FileName,
|
CurrentOperation.FileName,
|
||||||
CurrentOperation.Description,
|
CurrentOperation.Description,
|
||||||
CurrentOperation.Order,
|
CurrentOperation.Order,
|
||||||
Length / sizeof(CurrentOperation.Order[0]),
|
Length / sizeof(CurrentOperation.Order[0]),
|
||||||
CurrentOperation.Target,
|
CurrentOperation.Target,
|
||||||
(BOOLEAN)(CurrentOperation.Type == BCFG_TYPE_ADDH),
|
(BOOLEAN)(CurrentOperation.Type == BcfgTypeAddh),
|
||||||
(BOOLEAN)(CurrentOperation.Type == BCFG_TYPE_ADD ),
|
(BOOLEAN)(CurrentOperation.Type == BcfgTypeAddp),
|
||||||
CurrentOperation.HandleIndex);
|
CurrentOperation.HandleIndex);
|
||||||
break;
|
break;
|
||||||
case BCFG_TYPE_OPT:
|
case BcfgTypeOpt:
|
||||||
ShellStatus = BcfgAddOptInstall(
|
ShellStatus = BcfgAddOptInstall1(
|
||||||
CurrentOperation.Target,
|
CurrentOperation.OptData,
|
||||||
CurrentOperation.OptData);
|
CurrentOperation.Target);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Main file for NULL named library for install1 shell command functions.
|
Main file for NULL named library for install1 shell command functions.
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -21,6 +21,11 @@ CONST EFI_GUID gShellInstall1HiiGuid = \
|
||||||
0x7d574d54, 0xd364, 0x4d4a, { 0x95, 0xe3, 0x49, 0x45, 0xdb, 0x7a, 0xd3, 0xee } \
|
0x7d574d54, 0xd364, 0x4d4a, { 0x95, 0xe3, 0x49, 0x45, 0xdb, 0x7a, 0xd3, 0xee } \
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
Function to get the filename with help context if HII will not be used.
|
||||||
|
|
||||||
|
@return The filename with help text in it.
|
||||||
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16*
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandGetManFileNameInstall1 (
|
ShellCommandGetManFileNameInstall1 (
|
||||||
|
@ -70,6 +75,9 @@ ShellInstall1CommandsLibConstructor (
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Destructor for the library. free any resources.
|
Destructor for the library. free any resources.
|
||||||
|
|
||||||
|
@param ImageHandle The image handle of the process.
|
||||||
|
@param SystemTable The EFI System Table pointer.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/** @file
|
/** @file
|
||||||
Main file for NULL named library for install 1 shell command functions.
|
Main file for NULL named library for install 1 shell command functions.
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
@ -12,6 +12,9 @@
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
#if !defined (_UEFI_SHELL_INSTALL1_COMMANDS_LIB_H_)
|
||||||
|
#define _UEFI_SHELL_INSTALL1_COMMANDS_LIB_H_
|
||||||
|
|
||||||
#include <Uefi.h>
|
#include <Uefi.h>
|
||||||
#include <ShellBase.h>
|
#include <ShellBase.h>
|
||||||
|
|
||||||
|
@ -52,3 +55,5 @@ ShellCommandRunBcfgInstall (
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue