alder_lake_bios/Insyde/InsydeSetupPkg/Drivers/H2OFormBrowserDxe/InternalH2OFormBrowser.h

805 lines
20 KiB
C

/** @file
Internal include file for H2O Formbrowser
;******************************************************************************
;* Copyright (c) 2013 - 2021, Insyde Software Corp. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#ifndef _INTERNALH2O_FORM_BROWSER_H_
#define _INTERNALH2O_FORM_BROWSER_H_
#include <Uefi.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/UefiLib.h>
#include <Library/DebugLib.h>
#include <Protocol/H2OFormBrowser.h>
#include <Protocol/H2ODisplayEngine.h>
#include <Protocol/FormBrowser2.h>
#include <Guid/H2ODisplayEngineType.h>
#include "Setup.h"
#include "Timer.h"
#include <Library/PrintLib.h>
#include <Library/DevicePathLib.h>
#include <Library/LayoutLib.h>
#include <Protocol/SimplePointer.h>
#include <Protocol/AbsolutePointer.h>
#include <Protocol/SimpleTextOut.h>
#include <Protocol/SimpleTextIn.h>
#include <Protocol/SimpleTextInEx.h>
#include <Protocol/DevicePathToText.h>
#include <Protocol/H2ODialog.h>
#include <Protocol/SetupMouse.h>
#include <Protocol/DriverBinding.h>
#include <Protocol/H2OFormBrowser.h>
#include <Protocol/H2OBdsServices.h>
#include <Protocol/HiiPopup.h>
#include <Guid/ConsoleInDevice.h>
#include <Guid/ConsoleOutDevice.h>
#include <Guid/UsbEnumeration.h>
#include "FBDialog.h"
#include "FBHotPlug.h"
#include <Protocol/H2OKeyDesc.h>
#include <Guid/BdsHii.h>
#include "FBHotPlug.h"
#include "FBProcessVfcf.h"
#include <Guid/SetupChangeVariable.h>
#include <Library/ReportStatusCodeLib.h>
#include <Protocol/PiPcdInfo.h>
#include <Library/CollationLib.h>
#define SET_MASK(array, number) array[number/8] |= (1 << (number % 8))
#define IS_MASK(array, number) (array[number/8] & (1 << (number % 8)))
#define H2O_QUESTION_ID_INVALID 0x0000
#define H2O_QUESTION_ID_MAX 0xFFFF
#define MAX_ATTACHED_CONSOLE 10
extern UI_MENU_SELECTION *gCurrentSelection;
extern BOOLEAN mRefreshFormSet;
extern BOOLEAN mRefreshForm;
typedef struct _UI_MENU_SELECTION UI_MENU_SELECTION;
typedef struct _H2O_INPUT_EVENT_DESCRIPTION H2O_INPUT_EVENT_DESCRIPTION;
typedef struct _FORM_BROWSER_STATEMENT FORM_BROWSER_STATEMENT;
typedef struct _STATEMENT_REFRESH_ENTRY {
LIST_ENTRY Link;
FORM_BROWSER_STATEMENT *Statement; //Refresh statement
H2O_PAGE_ID PageId; //Refresh page ID
} STATEMENT_REFRESH_ENTRY;
typedef struct _HII_HANDLE_ENTRY {
LIST_ENTRY Link;
EFI_HII_HANDLE HiiHandle;
} HII_HANDLE_ENTRY;
typedef struct _DISPLAY_ENGINE_LIST_ENTRY {
H2O_DISPLAY_ENGINE_PROTOCOL *DisplayEngine;
UINTN AttachedConsoleCount;
H2O_FORM_BROWSER_CONSOLE_DEV *AttachedConsoleList[MAX_ATTACHED_CONSOLE];
} DISPLAY_ENGINE_LIST_ENTRY;
#define H2O_FORM_BROWSER_SIGNATURE SIGNATURE_32 ('F', 'B', 'P', 'D')
typedef struct _H2O_FORM_BROWSER_PRIVATE_DATA {
UINT32 Signature;
EFI_HANDLE ImageHandle;
H2O_FORM_BROWSER_PROTOCOL FB;
EFI_FORM_BROWSER2_PROTOCOL FormBrowser2;
EFI_FORM_BROWSER_EXTENSION_PROTOCOL FormBrowserEx;
EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL FormBrowserEx2;
DISPLAY_ENGINE_LIST_ENTRY *EngineList;
UINT32 EngineListCount;
INT32 ActivatedEngine;
INT32 SetupMouseConsoleId;
LIST_ENTRY TimerList;
//
// Setup Mouse
//
EFI_SETUP_MOUSE_PROTOCOL *SetupMouse;
//
// edk2 private data
//
LIST_ENTRY FormSetList;
EFI_HANDLE PackageNotifyHandle;
//
// H2O FormBrowser data
//
BOOLEAN ConsoleInitComplete;
UINT32 PageCount;
H2O_PAGE_ID *PageIdList;
//
// For H2O Setup
//
EFI_HII_HANDLE *HiiHandleList;
UINT32 HiiHandleCount;
UINT32 HiiHandleIndex;
SETUP_MENU_INFO *SetupMenuInfo;
UINT32 NumberOfSetupMenus;
HOT_KEY_INFO *HotKeyInfo;
UINT32 NumberOfHotKeys;
BOOLEAN Repaint;
LIST_ENTRY NeedAddHiiHandleList;
BOOLEAN IsBdsHotKeyDisabled;
BOOLEAN OrgBdsHotKeyState;
LIST_ENTRY TargetInfoList;
} H2O_FORM_BROWSER_PRIVATE_DATA;
extern H2O_DISPLAY_ENGINE_EVT_OPEN_D *mOpenD;
extern H2O_FORM_BROWSER_PRIVATE_DATA mFBPrivate;
extern EFI_GUID mScuFormSetGuid;
extern EFI_GUID mSecureBootMgrFormSetGuid;
extern FORM_BROWSER_FORMSET *mSystemLevelFormSet;
extern BOOLEAN mHiiPackageListUpdated;
#define H2O_FORM_BROWSER_DATA_FROM_PROTOCOL(a) CR (a, H2O_FORM_BROWSER_PRIVATE_DATA, FB, H2O_FORM_BROWSER_SIGNATURE)
#define FORM_BROWSER2_DATA_FROM_PROTOCOL(a) CR (a, H2O_FORM_BROWSER_PRIVATE_DATA, FormBrowser2, H2O_FORM_BROWSER_SIGNATURE)
#define H2O_DISPLAY_ENGINE_EVENT_NODE_SIGNATURE SIGNATURE_32 ('D', 'E', 'E', 'N')
typedef struct _H2O_DISPLAY_ENGINE_EVENT_NODE {
UINT32 Signature; ///<Particular statement signature. This signature must be 'D', 'E', 'E', 'N'
LIST_ENTRY Link; ///<Event node list entry
H2O_DISPLAY_ENGINE_EVT *Event; ///<H2O display engine event
} H2O_DISPLAY_ENGINE_EVENT_NODE;
#define H2O_DISPLAY_ENGINE_EVENT_NODE_FROM_LINK(a) CR (a, H2O_DISPLAY_ENGINE_EVENT_NODE, Link, H2O_DISPLAY_ENGINE_EVENT_NODE_SIGNATURE)
typedef struct _H2O_INPUT_EVENT_DESCRIPTION {
H2O_CONSOLE_DEVICE_TYPE DeviceType; //Input event device type
VOID *Protocol; //Input event protocol
EFI_HANDLE Handle; //Input event handle
H2O_FORM_BROWSER_CONSOLE_DEV *ConDev; //Input event device
} H2O_INPUT_CHECK_EVENT_DESCRIPTION;
typedef struct _CONSOLE_TYPE_MAP {
EFI_GUID *Guid;
H2O_CONSOLE_DEVICE_TYPE Type;
} CONSOLE_TYPE_MAP;
typedef struct _LINK_DATA {
UINT32 CurrentIncludeItemCount;
UINT32 CurrentExcludeItemCount;
EFI_GUID *IncludeGuidArray;
EFI_GUID *ExcludeGuidArray;
} LINK_DATA;
extern CONSOLE_TYPE_MAP mConsoleMap[];
extern H2O_FORM_BROWSER_CONSOLE_DEV **mConsoleDevList;
extern UINT32 mConsoleDevListCount;
extern EFI_EVENT *mInputEventList;
extern H2O_INPUT_EVENT_DESCRIPTION *mInputEventDescList;
extern UINT32 mInputEventListCount;
extern EFI_UNICODE_COLLATION_PROTOCOL *mUnicodeCollation;
extern EFI_USER_MANAGER_PROTOCOL *mUserManager;
EFI_STATUS
QueueEvent (
H2O_DISPLAY_ENGINE_EVT *Event
);
BOOLEAN
FBKillTimer (
IN INT32 Target,
IN UINT32 TimerId
);
//
// Protocol definitions
//
EFI_STATUS
FBInitPageInfo (
H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
EFI_STATUS
FBRepaint (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
FORM_BROWSER_FORM *
FBPageIdToForm (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN H2O_PAGE_ID PageId
);
//
// FBConsole.c
//
EFI_STATUS
FBSetActivedEngine (
H2O_FORM_BROWSER_PRIVATE_DATA *Private,
H2O_CONSOLE_ID ConsoleId
);
EFI_STATUS
EFIAPI
FBInitConsoles (
H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
EFI_STATUS
EFIAPI
FBDetachConsoles (
H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
EFI_STATUS
FBFreeConsoleDevList (
H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
VOID
EFIAPI
FBIsConsoleInit (
BOOLEAN *ConsoleInitComplete,
H2O_FORM_BROWSER_PRIVATE_DATA **Private
);
BOOLEAN
IsConsoleDeviceType (
IN EFI_HANDLE Handle
);
BOOLEAN
IsConInDeviceType (
IN H2O_CONSOLE_DEVICE_TYPE DeviceType
);
BOOLEAN
IsConOutDeviceType (
IN H2O_CONSOLE_DEVICE_TYPE DeviceType
);
BOOLEAN
IsSerialDevPath (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
);
BOOLEAN
HasConOutDevice (
VOID
);
EFI_STATUS
FBAddInputEventList (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN H2O_FORM_BROWSER_CONSOLE_DEV *ConDev
);
EFI_STATUS
AttachToDE (
IN H2O_FORM_BROWSER_CONSOLE_DEV *ConsoleDev
);
H2O_FORM_BROWSER_CONSOLE_DEV *
EFIAPI
FBAddConsoleDevice (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN EFI_HANDLE Handle
);
EFI_STATUS
EFIAPI
FBRemoveConsoleDevice (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN EFI_HANDLE Handle
);
H2O_CONSOLE_DEVICE_TYPE
FBGetDeviceType (
EFI_HANDLE Handle
);
BOOLEAN
IsPrimaryDisplay (
IN EFI_HANDLE DevHandle
);
BOOLEAN
HasPcdDisplayType (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN EFI_HANDLE DevHandle,
IN OUT EFI_GUID *DEGuid
);
//
// FBEvent.c
//
EFI_STATUS
FBBroadcastEvent (
IN CONST H2O_DISPLAY_ENGINE_EVT *Event
);
EFI_STATUS
FBTimer (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN CONST H2O_DISPLAY_ENGINE_EVT *Event
);
VOID
CheckTimerEvent (
VOID
);
CHAR16 *
EventToStr (
IN CONST H2O_EVT_TYPE EvtType
);
BOOLEAN
GetNextEvent (
H2O_DISPLAY_ENGINE_EVT **Event
);
EFI_STATUS
DestroyPageInfoByFormSet (
IN FORM_BROWSER_FORMSET *FormSet
);
EFI_STATUS
DestroyPageInfo (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
EFI_STATUS
FBInitSMInfo (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN EFI_HII_HANDLE *HiiHandleList,
IN UINTN HiiHandleCount
);
EFI_STATUS
DestroySetupMenuInfo (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
EFI_STATUS
FBGetHotKeyInfo (
IN FORM_BROWSER_FORMSET *FormSet,
IN FORM_BROWSER_FORM *Form,
IN FORM_BROWSER_STATEMENT *Statement OPTIONAL,
OUT UINT32 *HotKeyInfoCount,
OUT HOT_KEY_INFO **HotKeyInfo
);
EFI_STATUS
DestroyHotKeyInfo (
IN UINT32 HotKeyInfoCount,
IN HOT_KEY_INFO *HotKeyInfo
);
EFI_STATUS
DestroyFormSetList (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
VOID
DestroyEventQueue (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
EFI_STATUS
EFIAPI
FormUpdateNotify (
IN UINT8 PackageType,
IN CONST EFI_GUID *PackageGuid,
IN CONST EFI_HII_PACKAGE_HEADER *Package,
IN EFI_HII_HANDLE Handle,
IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
);
EFI_STATUS
FBNotifyEventToTarget (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN CONST H2O_DISPLAY_ENGINE_EVT *Event
);
EFI_STATUS
FBKeyPress (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN CONST H2O_DISPLAY_ENGINE_EVT *Event
);
//
// Statement.c
//
VOID
InitH2OStatement (
IN FORM_BROWSER_FORMSET *FormSet,
IN FORM_BROWSER_FORM *Form,
IN EXPRESS_RESULT ExpressResult,
IN H2O_FORM_BROWSER_P *Page,
IN OUT FORM_BROWSER_STATEMENT *Statement
);
UINT16
GetStatementPosition (
IN FORM_BROWSER_FORM *Form,
IN FORM_BROWSER_STATEMENT *Statement
);
UINT16
GetStatementDisplayOrder (
IN FORM_BROWSER_FORM *Form,
IN FORM_BROWSER_STATEMENT *Statement
);
FORM_BROWSER_STATEMENT *
GetStatementByStatementId (
IN FORM_BROWSER_FORM *Form,
IN H2O_STATEMENT_ID StatementId
);
/**
Initialize Statement header members.
@param OpCodeData Pointer of the raw OpCode data.
@param FormSet Pointer of the current FormSet.
@param Form Pointer of the current Form.
@return The Statement.
**/
FORM_BROWSER_STATEMENT *
CreateStatement (
IN UINT8 *OpCodeData,
IN OUT FORM_BROWSER_FORMSET *FormSet,
IN OUT FORM_BROWSER_FORM *Form
)
;
/**
Free resources of a Statement.
@param FormSet Pointer of the FormSet
@param Statement Pointer of the Statement
**/
VOID
DestroyStatement (
IN FORM_BROWSER_FORMSET *FormSet,
IN OUT FORM_BROWSER_STATEMENT *Statement
)
;
//
// Page.c
//
VOID
DestroyPage (
IN OUT H2O_FORM_BROWSER_P *Page
);
VOID
InitPage (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
IN FORM_BROWSER_FORMSET *FormSet,
IN FORM_BROWSER_FORM *Form,
IN OUT H2O_FORM_BROWSER_P *Page
);
//
// Value.c
//
EFI_STATUS
CreateValueAsBoolean (
IN EFI_HII_VALUE *TargetHiiValue,
IN BOOLEAN ValueBoolean
);
EFI_STATUS
CreateValueAsUint64 (
IN EFI_HII_VALUE *TargetHiiValue,
IN UINT64 ValueUint64
);
EFI_STATUS
CreateValueAsString (
IN EFI_HII_VALUE *TargetHiiValue,
IN UINT16 BufferLen,
IN UINT8 *Buffer
);
VOID
CopyHiiValue (
IN EFI_HII_VALUE *SourceHiiValue,
IN EFI_HII_VALUE *DestinationHiiValue
);
VOID
CopyValue (
IN EFI_HII_VALUE *DestinationValue,
IN EFI_HII_VALUE *SourceValue
);
EFI_STATUS
SetValueBool(
IN EFI_HII_VALUE *SourceHiiValue,
IN BOOLEAN ValueBoolean
);
EFI_STATUS
DumpValue(
IN EFI_HII_VALUE *DumpHiiValue
);
//
// Option.c
//
VOID
InitH2OOption (
IN FORM_BROWSER_FORM *Form,
IN OUT FORM_BROWSER_STATEMENT *Statement
);
VOID
DestroyH2OOption (
IN OUT FORM_BROWSER_STATEMENT *Statement
);
//
// H2ODialog.c
//
EFI_STATUS
InstallH2ODialogProtocol (
EFI_HANDLE ImageHandle
);
EFI_STATUS
InstallHiiPopupProtocol (
IN EFI_HANDLE ImageHandle
);
/**
Free up the resource allocated for all strings required
by Setup Browser.
**/
VOID
FreeBrowserStrings (
VOID
);
//
// Uefi.c
//
VOID
FBFreePool (
IN VOID **Buffer
);
//
// Link.c
//
BOOLEAN
ChkInHiiHandleList (
IN EFI_HII_HANDLE HiiHandle
);
EFI_STATUS
InsertHiiHandle (
IN EFI_HII_HANDLE HiiHandle
);
EFI_STATUS
RemoveHiiHandle (
IN EFI_HII_HANDLE HiiHandle
);
EFI_STATUS
InsertNeedAddHiiHandle (
IN OUT EFI_HII_HANDLE HiiHandle
);
EFI_STATUS
ParseLinkOpCodeInsertGuid (
IN UINT16 Function,
IN EFI_GUID *Guid,
IN OUT LINK_DATA *LinkData
);
EFI_STATUS
ParseLinkOpCodeEnd (
IN LINK_DATA *LinkData,
IN OUT FORM_BROWSER_FORMSET *FormSet,
IN OUT FORM_BROWSER_FORM *Form
);
FORM_BROWSER_STATEMENT *
CreateFakeStatementByVfrImport (
IN H2O_IFR_GUID_IMPORT *Import,
IN OUT FORM_BROWSER_FORMSET *FormSet,
IN OUT FORM_BROWSER_FORM *Form
);
FORM_BROWSER_STATEMENT *
CreateFakeStatementByVfrLabel (
IN EFI_IFR_GUID_LABEL *Label,
IN OUT FORM_BROWSER_FORMSET *FormSet,
IN OUT FORM_BROWSER_FORM *Form
);
EFI_STATUS
GetImportInfoListFromVfrFormSet (
IN FORM_BROWSER_FORMSET *FormSet,
OUT IMPORT_INFO **ImportInfoList,
OUT UINT16 *ImportInfoCount
);
EFI_STATUS
InsertNewStatementAfterFakeStatement (
IN FORM_BROWSER_FORMSET *FormSet,
IN FORM_BROWSER_FORM *Form,
IN FORM_BROWSER_STATEMENT *FakeStatement,
IN FORM_BROWSER_STATEMENT *NewStatement
);
EFI_STATUS
DeleteAllVfrImportNewStatements (
IN FORM_BROWSER_FORMSET *FormSet
);
EFI_STATUS
SetAllQuestionIdValid (
IN FORM_BROWSER_FORMSET *FormSet
);
VOID
DestroyLinkStatements (
IN OUT FORM_BROWSER_FORMSET *FormSet
);
//
// Ifrparse.c
//
/**
Free resources of a Expression.
@param Expression Pointer of the Expression
**/
VOID
DestroyExpression (
IN FORM_EXPRESSION *Expression
)
;
VOID
DestroyH2OStatement (
IN OUT FORM_BROWSER_STATEMENT *Statement
);
EFI_STATUS
ProcessUserInput (
IN USER_INPUT *UserInput,
IN BOOLEAN ChangeHighlight
);
EFI_STATUS
ProcessAction (
IN UINT32 Action,
IN UINT16 DefaultId
);
BOOLEAN
IsSelectable (
IN FORM_BROWSER_STATEMENT *Statement
);
EFI_STATUS
NewStringCpy (
IN OUT CHAR16 **Dest,
IN CHAR16 *Src
);
EFI_STATUS
FBUpdateSMInfo (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private
);
FORM_BROWSER_FORMSET *
GetScuFormset (
VOID
);
FORM_BROWSER_FORMSET *
GetScuSubmitFormset (
VOID
);
FORM_BROWSER_FORM *
GetScuLoadDefaultForm (
IN FORM_BROWSER_FORMSET *FormSet
);
EFI_STATUS
LoadHiiFormset (
IN EFI_HII_HANDLE *Handles,
IN UINTN HandleCount
);
EFI_STATUS
DestroyLoadHiiFormset (
VOID
);
VOID
SyncCurrentStorageToAllHiiHandles (
VOID
);
EFI_STATUS
EvaluateFormExpressions (
IN FORM_BROWSER_FORMSET *FormSet,
IN FORM_BROWSER_FORM *Form
);
BOOLEAN
EnableBdsHotKey (
IN BOOLEAN Enable
);
EFI_STATUS
FBHiiExportPackageLists (
IN EFI_HII_HANDLE Handle,
OUT UINTN *HiiPackageListSize,
OUT EFI_HII_PACKAGE_LIST_HEADER **HiiPackageList
);
EFI_STATUS
FBCallCallbackFn (
IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess,
IN EFI_BROWSER_ACTION Action,
IN EFI_QUESTION_ID QuestionId,
IN UINT8 Type,
IN UINTN ValueSize,
IN OUT EFI_IFR_TYPE_VALUE *Value,
OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest,
IN EFI_GUID *FormsetGuid,
IN UINT16 FormId
);
EFI_STATUS
FBCallExtractConfigFn (
IN CONST EFI_STRING Request,
OUT EFI_STRING *Progress,
OUT EFI_STRING *Results
);
EFI_STATUS
FBCallRouteConfigFn (
IN CONST EFI_STRING Configuration,
OUT EFI_STRING *Progress
);
EFI_STATUS
FBAddConInDev (
IN H2O_FORM_BROWSER_PRIVATE_DATA *Private,
H2O_FORM_BROWSER_CONSOLE_DEV *ConsoleDev
);
#endif