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/TseLite/Action.c | 365 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 365 insertions(+) create mode 100644 EDK/MiniSetup/TseLite/Action.c (limited to 'EDK/MiniSetup/TseLite/Action.c') diff --git a/EDK/MiniSetup/TseLite/Action.c b/EDK/MiniSetup/TseLite/Action.c new file mode 100644 index 0000000..a73171c --- /dev/null +++ b/EDK/MiniSetup/TseLite/Action.c @@ -0,0 +1,365 @@ +//*****************************************************************// +//*****************************************************************// +//*****************************************************************// +//** **// +//** (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/TseLite/Action.c $ +// +// $Author: Arunsb $ +// +// $Revision: 9 $ +// +// $Date: 10/18/12 6:01a $ +// +//*****************************************************************// +//*****************************************************************// +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/AMITSE2_0/AMITSE/TseLite/Action.c $ +// +// 9 10/18/12 6:01a Arunsb +// Updated for 2.16.1235 QA submission +// +// 7 10/10/12 12:38p Arunsb +// Synched the source for v2.16.1232, backup with Aptio +// +// 7 9/21/12 12:34p Premkumara +// [TAG] EIP99022 +// [Category] Improvement +// [Description] Tokenize the feature of flushing keyboard after every +// key read +// [Files] AMITSE.sdl, CommonHelper.c, TseAdvanced.c, Action.c +// +// 6 1/20/12 4:09a Rajashakerg +// [TAG] EIP78929, 77467 +// [Category] Bug Fix +// [Severity] Normal +// [Symptom] Control selection using Mouse is not user friendly. +// [RootCause] Updating the buffer with mouse click information provided +// by mouse driver is improper. +// [Solution] Updated the mouse click information properly to the buffer +// which is used by tse to do action. +// [Files] Action.c, frame.c ListBox.c +// +// 5 11/20/11 7:38a 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. +// +// 4 2/04/11 11:12a Mallikarjunanv +// AmiKey structure data is initialized with zero to aviod garbage values. +// +// 3 2/19/10 1:04p Madhans +// Updated for TSE 2.01. Refer Changelog.log for File change history. +// +// 4 2/19/10 8:18a Mallikarjunanv +// updated year in copyright message +// +// 3 6/23/09 6:52p Blaines +// Coding standard update, +// Remove spaces from file header to allow proper chm function list +// creation. +// +// 2 6/12/09 7:44p Presannar +// Initial implementation of coding standards for AMITSE2.0 +// +// 1 6/04/09 8:05p Madhans +// +// 1 4/28/09 11:04p 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: Action.c +// +// Description: This file contains code to handle different actions. +// +//---------------------------------------------------------------------------- +// + +#include "minisetup.h" + +/////////////////////////////////// +//VARIABLES DECLARATION +////////////////////////////////// +ACTION_METHODS gAction = +{ + ActionCreate, + ActionDestroy, + ActionGetAction, + ActionClearAction +}; +/////////////////////////////////// +//FUNCTIONS DECLARATION +////////////////////////////////// +EFI_STATUS _ActionReadMouse(MOUSE_INFO *MouseInfo); +BOOLEAN FlushKeysAfterRead(void); + +// +//---------------------------------------------------------------------------- +// Procedure: ActionCreate +// +// Description: Function to create an action. +// +// Input: ACTION_DATA **object +// +// Output: status +// +//---------------------------------------------------------------------------- +// +EFI_STATUS ActionCreate( ACTION_DATA **object ) +{ + EFI_STATUS Status = EFI_SUCCESS; + + if ( *object == NULL ) + *object = EfiLibAllocateZeroPool( sizeof(ACTION_DATA) ); + + if ( *object == NULL ) + return EFI_OUT_OF_RESOURCES; + + (*object)->Methods = &gAction; + + _ActionInstallTimer( *object, ONE_SEC / 10 ); + + return Status; +} + +// +//---------------------------------------------------------------------------- +// Procedure: ActionDestroy +// +// Description: Function to destroy an action. +// +// Input: ACTION_DATA *action, BOOLEAN freeMem +// +// Output: status +// +//---------------------------------------------------------------------------- +// +EFI_STATUS ActionDestroy( ACTION_DATA *action, BOOLEAN freeMem ) +{ + TimerStopTimer( &action->TimerEvent ); + + if ( freeMem ) + MemFreePointer( (VOID **)&action ); + + return EFI_SUCCESS; +} + +// +//---------------------------------------------------------------------------- +// Procedure: ActionGetAction +// +// Description: Function to get an action. +// +// Input: ACTION_DATA *action +// +// Output: status +// +//---------------------------------------------------------------------------- +// +EFI_STATUS ActionGetAction( ACTION_DATA *action ) +{ + EFI_STATUS Status; + AMI_EFI_KEY_DATA AmiKey; + MOUSE_INFO MouseInfo; + + if ( action->Input.Type != ACTION_TYPE_NULL ) + return EFI_SUCCESS; + + if ( action->TimerCount > 0 ) + { + action->Input.Type = ACTION_TYPE_TIMER; + action->Input.Data.TimerCount = action->TimerCount; + action->TimerCount = 0; + return EFI_SUCCESS; + } + + MemSet(&AmiKey, sizeof(AMI_EFI_KEY_DATA), 0); //makesure AmiKey does not have any garbage data + Status = ActionReadKey( &AmiKey, TIMER_ONE_SECOND / 20 ); + + if ( ! EFI_ERROR( Status ) ) + { //If Key press return that first. + action->Input.Type = ACTION_TYPE_KEY; + MemCopy( &action->Input.Data.AmiKey, &AmiKey, sizeof(AMI_EFI_KEY_DATA) ); + return Status; + } + + //Read the Mouse Movement Co-ordinates and the Mouse Click + Status = _ActionReadMouse(&MouseInfo); + if ( ! EFI_ERROR( Status ) ) + { + //EIP77467 & 78929: Not updating the action data for TSEMOUSE_RIGHT_DOWN and TSEMOUSE_RIGHT_UP + if((MouseInfo.ButtonStatus!=TSEMOUSE_NULL_CLICK)&&(MouseInfo.ButtonStatus != TSEMOUSE_RIGHT_DOWN)&&(MouseInfo.ButtonStatus != TSEMOUSE_RIGHT_UP)) + { + action->Input.Type = ACTION_TYPE_MOUSE; + MemCopy( &action->Input.Data.MouseInfo, &MouseInfo, sizeof(MOUSE_INFO) ); + return Status; + } + } + + + return Status; +} +// +//---------------------------------------------------------------------------- +// Procedure: ActionClearAction +// +// Description: Function to clear actions +// +// Input: ACTION_DATA *action +// +// Output: STATUS +// +//---------------------------------------------------------------------------- +// +EFI_STATUS ActionClearAction( ACTION_DATA *action ) +{ + MemSet( &action->Input, sizeof(ACTION_INPUT), 0 ); + return EFI_SUCCESS; +} + +// +// Internal functions +// +// +//---------------------------------------------------------------------------- +// Procedure: _ActionReadKey +// +// Description: Function to read a key. +// +// Input: AMI_EFI_KEY_DATA *pAmiKey, UINT64 Timeout +// +// Output: status +// +//---------------------------------------------------------------------------- +// +EFI_STATUS _ActionReadKey( AMI_EFI_KEY_DATA *pAmiKey, UINT64 Timeout ) +{ + EFI_STATUS Status; + EFI_STATUS StatusFlush; + EFI_EVENT EventList[2] = { NULL, NULL }; + UINTN Count = 1, Index = 1; + AMI_EFI_KEY_DATA KeyFlush; + + if ( Timeout ) + { + EventList[0] = gST->ConIn->WaitForKey; + + Status = TimerCreateTimer( &EventList[1], NULL, NULL, TimerRelative, Timeout, EFI_TPL_CALLBACK ); + if ( EFI_ERROR( Status ) ) + return Status; + + Count++; + + gBS->WaitForEvent( Count, EventList, &Index ); + + TimerStopTimer( &EventList[1] ); + + if ( Index == 1 ) + return EFI_NOT_READY; + } + + Status = gST->ConIn->ReadKeyStroke( gST->ConIn, (EFI_INPUT_KEY*)pAmiKey); + + if ( ! EFI_ERROR( Status ) && FlushKeysAfterRead())//EIP 99022 :check for the FLUSH_KEYS_AFTER_READ token before flushing the keys + { + do + { + StatusFlush = gST->ConIn->ReadKeyStroke( gST->ConIn, &KeyFlush.Key ); + } while ( ! EFI_ERROR( StatusFlush ) ); + + } + + return Status; +} +// +//---------------------------------------------------------------------------- +// Procedure: _ActionTimer +// +// Description: Function action timer +// +// Input: EFI_EVENT Event, VOID *Context +// +// Output: VOID +// +//---------------------------------------------------------------------------- +// +VOID _ActionTimer( EFI_EVENT Event, VOID *Context ) +{ + (*(UINT32 *)Context)++; +} +// +//---------------------------------------------------------------------------- +// Procedure: _ActionInstallTimer +// +// Description: Function to install action timer +// +// Input: ACTION_DATA *action, UINT64 TriggerTime +// +// Output: VOID +// +//---------------------------------------------------------------------------- +// +VOID _ActionInstallTimer( ACTION_DATA *action, UINT64 TriggerTime ) +{ + TimerCreateTimer( &action->TimerEvent, _ActionTimer, &action->TimerCount, TimerPeriodic, TriggerTime, EFI_TPL_CALLBACK ); +} +// +//---------------------------------------------------------------------------- +// Procedure: _ActionReadMouse +// +// Description: Function to get mouse action +// +// Input: MOUSE_INFO *MouseInfo +// +// Output: STATUS +// +//---------------------------------------------------------------------------- +// +//Function Which gets the Mouse action +EFI_STATUS _ActionReadMouse(MOUSE_INFO *MouseInfo) +{ + return MouseReadInfo(MouseInfo); +} + + +//********************************************************************** +//********************************************************************** +//** ** +//** (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