From 31bb486c913795c8b67d1c4dbaae2bdec4943fc9 Mon Sep 17 00:00:00 2001 From: raywu Date: Thu, 13 Sep 2018 16:11:56 +0800 Subject: SLP1.0 / SLP2.0 / Default Password / Logo / Fix Boot Order --- EDK/MiniSetup/BootOnly/HookAnchor.c | 676 ++++++++++++++++++++++++++++++++++++ 1 file changed, 676 insertions(+) create mode 100644 EDK/MiniSetup/BootOnly/HookAnchor.c (limited to 'EDK/MiniSetup/BootOnly/HookAnchor.c') diff --git a/EDK/MiniSetup/BootOnly/HookAnchor.c b/EDK/MiniSetup/BootOnly/HookAnchor.c new file mode 100644 index 0000000..8cdcc37 --- /dev/null +++ b/EDK/MiniSetup/BootOnly/HookAnchor.c @@ -0,0 +1,676 @@ +//*****************************************************************// +//*****************************************************************// +//*****************************************************************// +//** **// +//** (C)Copyright 2011, American Megatrends, Inc. **// +//** **// +//** All Rights Reserved. **// +//** **// +//** 5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093 **// +//** **// +//** Phone (770)-246-8600 **// +//** **// +//*****************************************************************// +//*****************************************************************// +//*****************************************************************// +// $Archive: /Alaska/SOURCE/Modules/AMITSE2_0/AMITSE/BootOnly/HookAnchor.c $ +// +// $Author: Premkumara $ +// +// $Revision: 11 $ +// +// $Date: 3/06/13 12:26a $ +// +//*****************************************************************// +//*****************************************************************// +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/AMITSE2_0/AMITSE/BootOnly/HookAnchor.c $ +// +// 11 3/06/13 12:26a Premkumara +// [TAG] EIP111415 +// [Category] Improvement +// [Description] Elink function for SETUP_TOGGLE_KEY_UNICODE function +// [Files] HookAnchor.h, AMITSE.sdl, commonoem.c, Commonoem.h, +// HookList.c, HookAnchor.c +// +// 10 10/18/12 5:59a Arunsb +// Updated for 2.16.1235 QA submission +// +// 14 10/10/12 12:36p Arunsb +// Synched the source for v2.16.1232, backup with Aptio +// +// 9 11/20/11 7:05a Rajashakerg +// [TAG] EIP62763 +// [Category] Improvement +// [Description] Utilize the Improvements done from mouse driver in +// AMITSE +// [Files] HookAnchor.h, TseCommon.h, AMITSE.sdl, CommonHelper.c, +// commonoem.c, commonoem.h, buffer.c, globals.c, HookAnchor.c, +// minisetup.h, notify.c, postmgmt.c, protocol.c, ezport.c, stylecommon.c, +// Mouse.c, Action.c, Date.c, frame.c, MessageBox.c, minisetupext.c, +// minisetupext.h, numeric.c, numeric.h, page.c, PopupEdit.c, PopupEdit.h, +// PopupPassword.c, postmgmtext.c, time.c. +// +// 8 3/28/11 9:23p Madhans +// [TAG] EIP41744 +// [Category] Improvement +// [Description] SoftKeyBoard Support in TSE. and Support to Work with +// new mouse driver(Label 07). +// [Files] HookAnchor.h +// AMITSE.sdl +// CommonHelper.c +// commonoem.c +// commonoem.h +// HookList.c +// HookAnchor.c +// Mouse.c +// minisetupext.c +// postmgmtext.c +// minisetupext.h +// PopupPassword.c +// PopupString.c +// TseLiteCommon.c +// +// 7 9/16/10 8:38p Madhans +// Update for TSE 2.10. Refer Changelog.log for more details. +// +// 9 8/18/10 6:16p Mallikarjunanv +// EIP-38089: Hook after pressing F2 key and before showing setup menu. +// +// 8 6/08/10 5:08p Blaines +// Added new AMITSE hook (hook33), called when TSE determines that console +// out is available. +// +// 7 4/13/10 6:01p Madhans +// Eip: 33100 To create new hook for BootNowLaunching. (From bbsPopoup and +// Boot override menu). +// +// 6 2/19/10 8:14a Mallikarjunanv +// updated year in copyright message +// +// 5 2/04/10 11:09p Madhans +// MapControlActionMouse Hook added +// +// 4 10/28/09 5:36p Madhans +// +// 3 9/15/09 9:28a Sudhirv +// Added hook functions for LoadSetupDefaults and PreSystemReset +// +// 2 6/12/09 7:41p Presannar +// Initial implementation of coding standards +// +// 1 6/04/09 8:05p Madhans +// +// 1 4/28/09 11:11p Madhans +// Tse 2.0 Code complete Checkin. +// +// 3 4/28/09 9:39p Madhans +// Tse 2.0 Code complete Checkin. +// +// 2 1/30/09 6:06p Madhans +// Function headers added. +// +// 1 12/18/08 7:58p Madhans +// Intial version of TSE Lite sources +// +//*****************************************************************// +//*****************************************************************// + + +// +//---------------------------------------------------------------------------- +// +// Name: HOOKANCHOR.C +// +// Description: file to handle the hook functions +// +//---------------------------------------------------------------------------- +// + +#include "minisetup.h" + +// +//---------------------------------------------------------------------------- +// Procedure: SearchLastHook +// +// Description: Returns the lasthookfn number +// +// Input: firsthookfn +// +// Output: lastHookfn +// +//---------------------------------------------------------------------------- +// +UINTN SearchLastHook(UINTN firsthookfn) +{ + UINTN ii; + + for ( ii = firsthookfn; (UINTN)AMITSE_HookList[ii] ; ii++ ) + if( HOOKID0 == ((UINTN)AMITSE_HookList[ii]& HOOKID0) ) // Check till next HOOK + return (UINTN)ii-1; + return (UINTN)ii-1; // Last HOOKID may not be followed by another HOOKID but only by end of table +} + + +// +//---------------------------------------------------------------------------- +// Procedure: SearchHook +// +// Description: Finds the Firsthookfn and Lasthookfn of HookNum +// +// Input: HookNum +// +// Output: firsthookfn , lastHookfn +// returns zero if hook not found. Non Zero on success. +// +//---------------------------------------------------------------------------- +// +UINTN SearchHook(UINTN HookNum,UINTN *firsthookfn,UINTN *lasthookfn) +{ + int ii; + + *firsthookfn = 0; + for ( ii = 0; (UINTN)AMITSE_HookList[ii] ; ii++ ) + { + if ( HookNum == (UINTN)AMITSE_HookList[ii] ) + { + *firsthookfn = (UINTN)ii+2; // Skip the HOOKx and funHook + *lasthookfn = SearchLastHook(*firsthookfn); + return *firsthookfn; + } + + } + return 0; +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHook +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +//Input: HookNum , default function. +// +// Output: none +// +//---------------------------------------------------------------------------- +// +VOID GenericHook( UINTN HookNum, TSE_HOOK * defaultfn ) +{ + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + AMITSE_HookList[ii](); + } + else + defaultfn(); +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHookType1 +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +// Input: HookNum , default function. +// +// Output: Boolean +// +//---------------------------------------------------------------------------- +// +BOOLEAN GenericHookType1( UINTN HookNum, TSE_HOOK * defaultfn) +{ + BOOLEAN ret = FALSE; + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + ret |= ((TSE_HOOK_T1 *)AMITSE_HookList[ii])(); + } + else + ret = ((TSE_HOOK_T1 *)defaultfn)(); + return ret; +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHookType2 +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +// Input: HookNum , default function and Key. +// +// Output: CONTROL_ACTION +// +//---------------------------------------------------------------------------- +// +CONTROL_ACTION GenericHookType2( UINTN HookNum, TSE_HOOK * defaultfn, AMI_EFI_KEY_DATA key) +{ + CONTROL_ACTION ret = 0; + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + ret = ((TSE_HOOK_T2 *)AMITSE_HookList[ii])(key); + } + else + ret = ((TSE_HOOK_T2 *)defaultfn)(key); + return ret; +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHookType3 +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +// Input: HookNum , default function, Event and Context. +// +// Output: none +// +//---------------------------------------------------------------------------- +// +VOID GenericHookType3( UINTN HookNum, TSE_HOOK * defaultfn, EFI_EVENT Event, VOID *Context) +{ + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + ((TSE_HOOK_T3 *)AMITSE_HookList[ii])(Event, Context); + } + else + ((TSE_HOOK_T3 *)defaultfn)(Event, Context); +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHookType4 +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +// Input: HookNum , default function, Event and Context. +// +// Output: none +// +//---------------------------------------------------------------------------- +// +EFI_STATUS GenericHookType4( UINTN HookNum, TSE_HOOK * defaultfn, BOOT_FLOW *bootFlowPtr) +{ + EFI_STATUS ret = EFI_SUCCESS; + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + ret = ((TSE_HOOK_T4 *)AMITSE_HookList[ii])(bootFlowPtr); + } + else + ret = ((TSE_HOOK_T4 *)defaultfn)(bootFlowPtr); + return ret; +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHookType5 +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +// Input: HookNum , default function, Password and MaxSize. +// +// Output: none +// +//---------------------------------------------------------------------------- +// +VOID GenericHookType5( UINTN HookNum, TSE_HOOK * defaultfn, CHAR16 *Password, UINTN MaxSize) +{ + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + ((TSE_HOOK_T5 *)AMITSE_HookList[ii])(Password, MaxSize); + } + else + ((TSE_HOOK_T5 *)defaultfn)(Password, MaxSize); +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHookType6 +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +// Input: HookNum , default function and Variable pointers to hold colors. +// +// Output: none +// +//---------------------------------------------------------------------------- +// +EFI_STATUS GenericHookType6( UINTN HookNum, TSE_HOOK * defaultfn, + UINT8 *BGColor, UINT8 *FGColor, UINT8 *SecBGColor, UINT8 *SecFGColor, + UINT8 *SelBGColor, UINT8 *SelFGColor, UINT8 *NSelBGColor, UINT8 *NSelFGColor, + UINT8 *LabelBGColor, UINT8 *LabelFGColor,UINT8 *NSelLabelFGColor, + UINT8 *EditBGColor, UINT8 *EditFGColor, UINT8 *PopupFGColor, UINT8 *PopupBGColor) +{ + EFI_STATUS ret = EFI_SUCCESS; + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + ret = ((TSE_HOOK_T6 *)AMITSE_HookList[ii])(BGColor, FGColor, SecBGColor, SecFGColor, SelBGColor, + SelFGColor, NSelBGColor, NSelFGColor, LabelBGColor, + LabelFGColor, NSelLabelFGColor, EditBGColor, EditFGColor, + PopupFGColor, PopupBGColor); + } + else + ret = ((TSE_HOOK_T6 *)defaultfn)(BGColor, FGColor, SecBGColor, SecFGColor, SelBGColor, + SelFGColor, NSelBGColor, NSelFGColor, LabelBGColor, + LabelFGColor, NSelLabelFGColor, EditBGColor, EditFGColor, + PopupFGColor, PopupBGColor); + + return ret; +} + +//#pragma optimize ("",off) + +//Hook #1 +VOID DrawQuietBootLogoHook(VOID) +{ + GenericHook( HOOKID1, DrawQuietBootLogo ); +} + +//Hook #2 +BOOLEAN ProcessConInAvailabilityHook(VOID) +{ + return GenericHookType1( HOOKID2, (TSE_HOOK *)ProcessConInAvailability); +} + +//Hook #3 +VOID ProcessEnterSetupHook(VOID) +{ + GenericHook( HOOKID3, ProcessEnterSetup ); +} + +//Hook #4 +VOID ProcessProceedToBootHook(VOID) +{ + GenericHook( HOOKID4, ProcessProceedToBoot ); +} + +//Hook #5 +VOID MinisetupDriverEntryHookHook(VOID) +{ + GenericHook( HOOKID5, MinisetupDriverEntryHook ); +} + +//Hook #6 +VOID PostManagerHandShakeHookHook(VOID) +{ + GenericHook( HOOKID6, PostManagerHandShakeHook ); +} + +//Hook #7 +CONTROL_ACTION MapControlKeysHook(AMI_EFI_KEY_DATA key) +{ + return GenericHookType2( HOOKID7, (TSE_HOOK *) MapControlKeys, key); +} + +//Hook #8 +VOID CheckForKeyHook( EFI_EVENT Event, VOID *Context ) +{ + GenericHookType3( HOOKID8, (TSE_HOOK *) CheckForKey, Event, Context); +} + +//Hook #9 +VOID BeforeLegacyBootLaunchHook(VOID) +{ + GenericHook( HOOKID9, BeforeLegacyBootLaunch ); +} + +//Hook #10 +VOID AfterLegacyBootLaunchHook(VOID) +{ + GenericHook( HOOKID10, AfterLegacyBootLaunch ); +} + +//Hook #11 +VOID BeforeEfiBootLaunchHook(VOID) +{ + GenericHook( HOOKID11, BeforeEfiBootLaunch ); +} + +//Hook #12 +VOID AfterEfiBootLaunchHook(VOID) +{ + GenericHook( HOOKID12, AfterEfiBootLaunch ); +} + +//Hook #13 +VOID SavedConfigChangesHook(VOID) +{ + GenericHook( HOOKID13, SavedConfigChanges ); +} + +//Hook #14 +VOID LoadedConfigDefaultsHook(VOID) +{ + GenericHook( HOOKID14, LoadedConfigDefaults ); +} + +//Hook #15 +VOID TimeOutLoopHookHook(VOID) +{ + GenericHook( HOOKID15, TimeOutLoopHook ); +} + +//Hook #16 +EFI_STATUS OemKey1HookHook ( BOOT_FLOW *bootFlowPtr ) +{ + return GenericHookType4( HOOKID16, (TSE_HOOK *) OemKey1Hook, bootFlowPtr); +} + +//Hook #17 +EFI_STATUS OemKey2HookHook ( BOOT_FLOW *bootFlowPtr ) +{ + return GenericHookType4( HOOKID17, (TSE_HOOK *) OemKey2Hook, bootFlowPtr); +} + +//Hook #18 +EFI_STATUS OemKey3HookHook ( BOOT_FLOW *bootFlowPtr ) +{ + return GenericHookType4( HOOKID18, (TSE_HOOK *) OemKey3Hook, bootFlowPtr); +} + +//Hook #19 +EFI_STATUS OemKey4HookHook ( BOOT_FLOW *bootFlowPtr ) +{ + return GenericHookType4( HOOKID19, (TSE_HOOK *) OemKey4Hook, bootFlowPtr); +} + +//Hook #20 +VOID PasswordEncodeHook( CHAR16 *Password, UINTN MaxSize) +{ + GenericHookType5( HOOKID20, (TSE_HOOK *)PasswordEncode, Password, MaxSize ); +} + +//Hook #21 +EFI_STATUS SetControlColorsHook(UINT8 *BGColor, UINT8 *FGColor, UINT8 *SecBGColor, UINT8 *SecFGColor, + UINT8 *SelBGColor, UINT8 *SelFGColor, UINT8 *NSelBGColor, UINT8 *NSelFGColor, + UINT8 *LabelBGColor, UINT8 *LabelFGColor,UINT8 *NSelLabelFGColor, UINT8 *EditBGColor, UINT8 *EditFGColor, + UINT8 *PopupFGColor, UINT8 *PopupBGColor) +{ + return GenericHookType6( HOOKID21, (TSE_HOOK *)SetControlColors, + BGColor, FGColor, SecBGColor, SecFGColor, SelBGColor, + SelFGColor, NSelBGColor, NSelFGColor, LabelBGColor, + LabelFGColor, NSelLabelFGColor, EditBGColor, EditFGColor, + PopupFGColor, PopupBGColor ); +} + + +//Hook #22 +VOID InvalidActionHookHook(VOID) +{ + GenericHook( HOOKID22, InvalidActionHook ); +} + +//Hook #23 +VOID LoadedUserDefaultsHook(VOID) +{ + GenericHook( HOOKID23, LoadedUserDefaults ); +} + +//Hook #24 +VOID LoadedBuildDefaultsHook(VOID) +{ + GenericHook( HOOKID24, LoadedBuildDefaults ); +} + +//Hook #25 +VOID LoadedPreviousValuesHook(VOID) +{ + GenericHook( HOOKID25, LoadedPreviousValues ); +} + +//Hook #26 +VOID SetupConfigModifiedHook(VOID) +{ + GenericHook( HOOKID26, SetupConfigModified); +} + +VOID DrawPopupMenuHook() +{ + GenericHook( HOOKID27, DrawBootOnlyBbsPopupMenu ); +} + +VOID BbsBootHook() +{ + GenericHook( HOOKID28, BbsBoot ); +} + +///Hook for Load deafaults fucntions. +VOID LoadSetupDefaultsHook( NVRAM_VARIABLE *defaults, UINTN data ) +{ + GenericHookType5( HOOKID29, (TSE_HOOK *)LoadSetupDefaults, (CHAR16*)defaults, data ); +} + +/// EIP:26409 - Hook function to update before resetting the system +VOID PreSystemResetHookHook(VOID) +{ + GenericHook( HOOKID30, PreSystemResetHook ); +} + +// +//---------------------------------------------------------------------------- +// Procedure: GenericHookType7 +// +// Description: Locates the hook based on hooknum and calls them +// If hook not found it calls the default function. +// +// Input: HookNum , default function and Key. +// +// Output: CONTROL_ACTION +// +//---------------------------------------------------------------------------- +// +CONTROL_ACTION GenericHookType7( UINTN HookNum, TSE_HOOK * defaultfn, VOID * pMouseInfo) +{ + CONTROL_ACTION ret = 0; + UINTN ii; + UINTN firsthookfn = 0; + UINTN lasthookfn = 0; + + if ( SearchHook(HookNum,&firsthookfn, &lasthookfn ) ) + { + for ( ii = firsthookfn; ii <= lasthookfn; ii++ ) + ret = ((TSE_HOOK_T7 *)AMITSE_HookList[ii])(pMouseInfo); + } + else + ret = ((TSE_HOOK_T7 *)defaultfn)(pMouseInfo); + return ret; +} + +//Hook #31 +CONTROL_ACTION MapControlMouseActionHook(VOID *pMouseInfo) +{ + return GenericHookType7( HOOKID31, (TSE_HOOK *) MapControlMouseAction, pMouseInfo); +} + +//Hook #32 +VOID ProcessProceedToBootNowHook(VOID) +{ + GenericHook( HOOKID32, ProcessProceedToBootNow ); +} + +//Hook #33 +VOID ProcessConOutAvailableHook(VOID) +{ + GenericHook( HOOKID33, ProcessConOutAvailable ); +} + +VOID ProcessUIInitHookHook(VOID) +{ + GenericHook( HOOKID34, ProcessUIInitHook ); +} + +VOID AfterInitPostScreenHook(VOID) +{ + GenericHook( HOOKID35, AfterInitPostScreen ); +} + +//Hook #36 +VOID CheckForClickHook( EFI_EVENT Event, VOID *Context ) +{ + GenericHookType3( HOOKID36, (TSE_HOOK *) CheckForClick, Event, Context); +} +//HOOK #37 EIP-111415 +VOID SwitchToPostScreenHook(VOID) +{ + GenericHook( HOOKID37, SwitchToPostScreen ); +} + +//Last Hook +VOID LastTSEHook(VOID) +{ +} + +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Pkwy, Building 200,Norcross, Georgia 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** -- cgit v1.2.3