diff options
Diffstat (limited to 'Core/EM/TseDefaultBootOrder')
-rw-r--r-- | Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.c | 208 | ||||
-rw-r--r-- | Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.chm | bin | 0 -> 31698 bytes | |||
-rw-r--r-- | Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.cif | 12 | ||||
-rw-r--r-- | Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.h | 70 | ||||
-rw-r--r-- | Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.mak | 67 | ||||
-rw-r--r-- | Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.sdl | 25 |
6 files changed, 382 insertions, 0 deletions
diff --git a/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.c b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.c new file mode 100644 index 0000000..6938502 --- /dev/null +++ b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.c @@ -0,0 +1,208 @@ +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** + +//********************************************************************** +// $Header: /Alaska/BIN/Modules/BootOptionPolicies/TseDefaultBootOrder/TseDefaultBootOrder.c 6 1/03/13 10:51a Vyacheslava $ +// +// $Revision: 6 $ +// +// $Date: 1/03/13 10:51a $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/BIN/Modules/BootOptionPolicies/TseDefaultBootOrder/TseDefaultBootOrder.c $ +// +// 6 1/03/13 10:51a Vyacheslava +// Added modification to check for LOAD_OPTION_HIDDEN and ignore hidden +// boot options in creating "DefaultBootOrder" variable. +// +// 5 10/15/12 10:31a Vyacheslava +// [TAG] EIP103603 +// [Category] Bug Fix +// [Severity] Critical +// [Symptom] DefaultLegacyDevOrder is corrupted +// [RootCause] SetDefaultTseBootOrder () corrupts the data which is not +// the Boot Order. +// [Solution] for( i = 0; i < (Order->Length / (sizeof (UINT16)) - 1); +// i++ ) +// [Files] TseDefaultBootOrder.c +// +// 4 9/13/11 9:09a Vyacheslava +// +// 3 4/27/11 11:26a Vyacheslava +// [TAG] EIP58592 +// [Category] Bug Fix +// [Severity] Minor +// [Symptom] Restore Defaults in the Setup will work incorrect after +// second HDD has been disabled. +// +// 2 2/02/11 2:00p Vyacheslava +// [TAG] EIP52313 +// [Category] New Feature +// +// 1 1/20/11 10:52a Felixp +// +// 6 1/13/10 2:13p Felixp +// +//********************************************************************** +//<AMI_FHDR_START> +// +// Name: TseDefaultBootOrder.c +// +// Description: This is main file of the TseDefaultBootOrder eModule. +// +//<AMI_FHDR_END> +//********************************************************************** + +#include <BootOptions.h> +#include "TseDefaultBootOrder.h" + +//---------------------------------------------------------------------------- + + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// +// Procedure: CompareTagThenBbsIndex +// +// Description: This function returns result of compairing two DLINK tags. +// +// Input: +// Link1 - pointer to the first tag for compare +// Link1 - pointer to the second tag for compare +// +// Output: INT32 - result of comparing. +// +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> + +INT32 CompareTagThenBbsIndex( IN DLINK *Link1, IN DLINK *Link2 ) +{ + BOOT_OPTION *Option1 = (BOOT_OPTION*)Link1; + BOOT_OPTION *Option2 = (BOOT_OPTION*)Link2; + + // Compare Tags first + if (Option1->Tag < Option2->Tag) + return -1; + else if (Option1->Tag > Option2->Tag) + return 1; + + // Compare by BBS index + if (Option1->BbsIndex < Option2->BbsIndex) + return -1; + else if (Option1->BbsIndex > Option2->BbsIndex) + return 1; + + return 0; +} + + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// +// Procedure: SetDefaultTseBootOrder +// +// Description: +// This function sets variables: DefaultLegacyDevOrder and DefaultBootOrder. +// +// Input: VOID +// +// Output: VOID +// +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> + +VOID SetDefaultTseBootOrder(VOID) +{ + UINTN DevOrderSize; + LEGACY_DEVICE_ORDER *DevOrder; + UINTN BootOrderSize; + UINT16 *BootOrder; + UINT16 PreviousBootOptionNumber; + DLINK *Link; + UINTN BootOrderIndex; + BOOT_OPTION *Option; + EFI_GUID DefaultLegacyDevOrderGuid = DEFAULT_LEGACY_DEV_ORDER_VARIABLE_GUID; + EFI_GUID DefaultBootOrderGuid = DEFAULT_BOOT_ORDER_VARIABLE_GUID; + LEGACY_DEVICE_ORDER *Order; + UINTN i; + + // PRECONDITION: All Boot Option Numbers are set + BootOrderSize = BootOptionList->Size * sizeof(UINT16); + if (BootOrderSize == 0) + return; + + // Build DefaultLegacyDevOrder variable + SortList(BootOptionList, CompareTagThenBbsIndex); + BuildLegacyDevOrderBuffer(&DevOrder, &DevOrderSize); + + // Remove disable mask from buffer DevOrder + for( Order = DevOrder; (UINT8*)Order < (UINT8*)DevOrder + DevOrderSize; + Order = (LEGACY_DEVICE_ORDER*)((UINT8*)Order + Order->Length + sizeof(Order->Type)) ) + { + // The order length includes their own length + for( i = 0; i < (Order->Length / sizeof(UINT16) - 1); i++ ) + Order->Device[i] &= 0x00FF; + } + + // Store "DefaultLegacyDevOrder" EFI variable + pRS->SetVariable( + L"DefaultLegacyDevOrder", + &DefaultLegacyDevOrderGuid, + BOOT_VARIABLE_ATTRIBUTES, + DevOrderSize, + DevOrder + ); + pBS->FreePool(DevOrder); + + // Build DefaultBootOrder variable + BootOrder = Malloc(BootOrderSize); + PreviousBootOptionNumber = INVALID_BOOT_OPTION_NUMBER; + BootOrderIndex = 0; + + // Set boot option number for each boot option + FOR_EACH_BOOT_OPTION(BootOptionList,Link,Option) + { + if ( (PreviousBootOptionNumber == Option->BootOptionNumber) || + (Option->Attributes & LOAD_OPTION_HIDDEN) ) + continue; + BootOrder[BootOrderIndex++] = Option->BootOptionNumber; + PreviousBootOptionNumber = Option->BootOptionNumber; + } + + // Store "DefaultBootOrder" EFI variable + pRS->SetVariable( + L"DefaultBootOrder", + &DefaultBootOrderGuid, + BOOT_VARIABLE_ATTRIBUTES, + BootOrderIndex * sizeof(UINT16), + BootOrder + ); + pBS->FreePool(BootOrder); +} + + +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//**********************************************************************
\ No newline at end of file diff --git a/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.chm b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.chm Binary files differnew file mode 100644 index 0000000..104b201 --- /dev/null +++ b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.chm diff --git a/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.cif b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.cif new file mode 100644 index 0000000..512d76a --- /dev/null +++ b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.cif @@ -0,0 +1,12 @@ +<component> + name = "TseDefaultBootOrder" + category = eModule + LocalRoot = "Core\EM\TseDefaultBootOrder\" + RefName = "TseDefaultBootOrder" +[files] +"TseDefaultBootOrder.sdl" +"TseDefaultBootOrder.mak" +"TseDefaultBootOrder.c" +"TseDefaultBootOrder.h" +"TseDefaultBootOrder.chm" +<endComponent> diff --git a/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.h b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.h new file mode 100644 index 0000000..172eff8 --- /dev/null +++ b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.h @@ -0,0 +1,70 @@ +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** + +//********************************************************************** +// $Header: /Alaska/BIN/Modules/BootOptionPolicies/TseDefaultBootOrder/TseDefaultBootOrder.h 2 2/02/11 2:12p Vyacheslava $ +// +// $Revision: 2 $ +// +// $Date: 2/02/11 2:12p $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/BIN/Modules/BootOptionPolicies/TseDefaultBootOrder/TseDefaultBootOrder.h $ +// +// 2 2/02/11 2:12p Vyacheslava +// +// +//********************************************************************** +//<AMI_FHDR_START> +// +// Name: TseDefaultBootOrder.h +// +// Description: Internal header file for TseDefaultBootOrder eModule. +// +//<AMI_FHDR_END> +//********************************************************************** + +#ifndef __TseDefaultBootOrder__H__ +#define __TseDefaultBootOrder__H__ +#ifdef __cplusplus +extern "C" { +#endif + +#define DEFAULT_LEGACY_DEV_ORDER_VARIABLE_GUID \ + { 0x3c4ead08, 0x45ae, 0x4315, 0x8d, 0x15, 0xa6, 0x0e, 0xaa, 0x8c, 0xaf, 0x69 } + +#define DEFAULT_BOOT_ORDER_VARIABLE_GUID \ + { 0x45cf35f6, 0x0d6e, 0x4d04, 0x85, 0x6a, 0x03, 0x70, 0xa5, 0xb1, 0x6f, 0x53 } + + +/****** DO NOT WRITE BELOW THIS LINE *******/ +#ifdef __cplusplus +} +#endif +#endif + +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** diff --git a/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.mak b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.mak new file mode 100644 index 0000000..0e76376 --- /dev/null +++ b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.mak @@ -0,0 +1,67 @@ +#********************************************************************** +#********************************************************************** +#** ** +#** (C)Copyright 1985-2011, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#********************************************************************** +#********************************************************************** + +#********************************************************************** +# $Header: /Alaska/BIN/Modules/BootOptionPolicies/TseDefaultBootOrder/TseDefaultBootOrder.mak 1 1/20/11 10:52a Felixp $ +# +# $Revision: 1 $ +# +# $Date: 1/20/11 10:52a $ +#********************************************************************** +# Revision History +# ---------------- +# $Log: /Alaska/BIN/Modules/BootOptionPolicies/TseDefaultBootOrder/TseDefaultBootOrder.mak $ +# +# 1 1/20/11 10:52a Felixp +# +# 6 1/13/10 2:13p Felixp +# +#********************************************************************** +#<AMI_FHDR_START> +# +# Name: TseDefaultBootOrder.mak +# +# Description: +# +#<AMI_FHDR_END> +#********************************************************************** + +CORE_DXEBin : $(BUILD_DIR)\TseDefaultBootOrder.lib + +$(BUILD_DIR)\TseDefaultBootOrder.lib : TseDefaultBootOrder + +TseDefaultBootOrder : $(BUILD_DIR)\TseDefaultBootOrder.mak TseDefaultBootOrderBin + +$(BUILD_DIR)\TseDefaultBootOrder.mak : $(TseDefaultBootOrder_DIR)\$(@B).cif $(TseDefaultBootOrder_DIR)\$(@B).mak $(BUILD_RULES) + $(CIF2MAK) $(TseDefaultBootOrder_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS) + +TseDefaultBootOrderBin : $(AMIDXELIB) + $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\ + /f $(BUILD_DIR)\TseDefaultBootOrder.mak all\ + "MY_INCLUDES=/I$(CORE_DXE_DIR)"\ + TYPE=LIBRARY + +#********************************************************************** +#********************************************************************** +#** ** +#** (C)Copyright 1985-2011, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#********************************************************************** +#**********************************************************************
\ No newline at end of file diff --git a/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.sdl b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.sdl new file mode 100644 index 0000000..39187a3 --- /dev/null +++ b/Core/EM/TseDefaultBootOrder/TseDefaultBootOrder.sdl @@ -0,0 +1,25 @@ +TOKEN + Name = "TseDefaultBootOrder_SUPPORT" + Value = "1" + Help = "Main switch to enable TseDefaultBootOrder support in Project" + TokenType = Boolean + TargetEQU = Yes + TargetMAK = Yes + Master = Yes +End + +PATH + Name = "TseDefaultBootOrder_DIR" +End + +MODULE + Help = "Includes TseDefaultBootOrder.mak to Project" + File = "TseDefaultBootOrder.mak" +End + +ELINK + Name = "SetDefaultTseBootOrder," + Parent = "SaveLegacyDevOrder," + InvokeOrder = AfterParent +End + |