/** @file Header file for UEFI Setup Utility Library ;****************************************************************************** ;* Copyright (c) 2012 - 2019, 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 _UEFI_SETUP_UTILITY_LIB_H_ #define _UEFI_SETUP_UTILITY_LIB_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define SETUP_UTILITY_MAIN_FORMSET_GUID \ { \ 0x32e781c7, 0xc751, 0x46f4, {0xaf, 0x94, 0xd0, 0x22, 0x1b, 0xc, 0x6a, 0x1c} \ } #define SETUP_UTILITY_SECURITY_FORMSET_GUID \ { \ 0x8662276c, 0x4b73, 0x440a, {0xae, 0x7b, 0x94, 0xab, 0xd4, 0xa5, 0xff, 0x8b} \ } #define SETUP_UTILITY_BOOT_FORMSET_GUID \ { \ 0x992e4776, 0x6ed7, 0x4beb, {0xb4, 0x16, 0xff, 0x38, 0x6d, 0xf9, 0x90, 0xc4} \ } #define SETUP_UTILITY_EXIT_FORMSET_GUID \ { \ 0x736fa659, 0xf368, 0x40ad, {0x8b, 0xac, 0xbc, 0x2d, 0xe, 0x71, 0x26, 0x6e} \ } // // Definitions using in Security page and SetupUtility driver // #define SECURITY_LOCK 0x01 // For HddPassword #define NO_ACCESS_PASSWORD 0x10 // For HddPassword / SysPassword #define CHANGE_PASSWORD 0x20 // For HddPassword / SysPassword #define DISABLE_PASSWORD 0x30 // For HddPassword / SysPassword #define ENABLE_PASSWORD 0x40 // For HddPassword #define MASTER_PASSWORD_GRAYOUT 0x50 // For HddPassword #define SUPERVISOR_FLAG FALSE #define USERPASSWORD_FLAG TRUE #define USER_PASSWORD_NO_ACCESS 1 #define USER_PASSWORD_VIEW_ONLY 2 #define USER_PASSWORD_LIMITED 3 #define USER_PASSWORD_FULL 4 #define NO_ACCESS_PSW 0xFF #define INTO_SCU FALSE #define INTO_BOOT TRUE #define POWER_ON_PASSWORD 0x02 // // Definitions using in Boot page and SetupUtility driver // #define DEFAULT_IDE 0 #define DEFAULT_USB 1 #define DEFAULT_BOOT_FLAG DEFAULT_USB #define LEGACY_NORMAL_MENU 0 #define LEGACY_ADV_MENU 1 #define EFI_BOOT_MENU 2 #define ADV_BOOT_MENU 3 #define LEGACY_DEVICE_TYPE_MENU 4 #define EFI_FIRST EFI_BOOT_DEV #define LEGACY_FIRST LEGACY_BOOT_DEV #define NORMAL_MENU 0 #define ADV_MENU 1 #define DEFAULT_BOOT_MENU_TYPE NORMAL_MENU #define DEFAULT_BOOT_NORMAL_PRIOR EFI_FIRST #define DEFAULT_LEGACY_NOR_MENU NORMAL_MENU #define OTHER_DRIVER BOOT_POLICY_OTHER_DEVICE // // RFC 3066 // #define RFC_3066_ENTRY_SIZE (42 + 1) extern UINT8 SetupUtilityLibStrings[]; extern UINT8 SetupUtilityLibImages[]; extern UINT8 MainVfrBin[]; extern UINT8 SecurityVfrBin[]; extern UINT8 BootVfrBin[]; extern UINT8 ExitVfrBin[]; // // The proto type for hot key callback function // typedef EFI_STATUS (EFIAPI *HOT_KEY_CALLBACK) ( IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This, IN EFI_BROWSER_ACTION Action, IN EFI_QUESTION_ID QuestionId, IN UINT8 Type, IN EFI_IFR_TYPE_VALUE *Value, OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest ); typedef enum { ExitHiiHandle, BootHiiHandle, PowerHiiHandle, SecurityHiiHandle, AdvanceHiiHandle, MainHiiHandle } USER_HII_HANDLE; typedef EFI_STATUS (EFIAPI *USER_INSTALL_CALLBACK_ROUTINE) ( IN EFI_HANDLE DriverHandle, IN EFI_HII_HANDLE HiiHandle ); typedef EFI_STATUS (EFIAPI *USER_UNINSTALL_CALLBACK_ROUTINE) ( IN EFI_HANDLE DriverHandle ); typedef struct { EFI_HANDLE DriverHandle; EFI_HII_HANDLE HiiHandle; } HII_HANDLE_VARIABLE_MAP_TABLE; typedef struct { // // for PowerOnSecurity // UINTN Signature; EFI_HANDLE CallbackHandle; EFI_HII_HANDLE RegisteredHandle; UINT8 *SCBuffer; BOOLEAN DoRefresh; HII_HANDLE_VARIABLE_MAP_TABLE MapTable[MAX_HII_HANDLES]; // // Security Menu // UINT8 HddPassword; EFI_SYS_PASSWORD_SERVICE_PROTOCOL *SysPasswordService; EFI_HDD_PASSWORD_SERVICE_PROTOCOL *HddPasswordService; SYS_PASSWORD_INFO_DATA *SupervisorPassword; SYS_PASSWORD_INFO_DATA *UserPassword; HDD_PASSWORD_SCU_DATA *HddPasswordScuData; UINTN NumOfHdd; BOOLEAN SupervisorPwdFlag; BOOLEAN UserPwdFlag; // // Boot Menu // UINT16 *BootOrder; UINT16 *BootPriority; UINT16 AdvBootDeviceNum; UINT16 LegacyBootDeviceNum; UINT16 EfiBootDeviceNum; UINT16 *LegacyBootDevType; UINT16 LegacyBootDevTypeCount; EFI_STRING_ID LastToken; ///< For compatiblity. It is not used when using H2O form browser EFI_STRING_ID BootTypeTokenRecord; ///< For compatiblity. It is not used when using H2O form browser EFI_STRING_ID LegacyAdvanceTokenRecord;///< For compatiblity. It is not used when using H2O form browser EFI_STRING_ID EfiTokenRecord; ///< For compatiblity. It is not used when using H2O form browser EFI_STRING_ID AdvanceTokenRecord; ///< For compatiblity. It is not used when using H2O form browser EFI_STRING_ID LegacyNormalTokenRecord[MAX_BOOT_ORDER_NUMBER];///< For compatiblity. It is not used when using H2O form browser UINT8 PrevSataCnfigure; } SETUP_UTILITY_CONFIGURATION; typedef struct { UINT8 Channel; UINT8 Device; EFI_HANDLE DiskInfoHandle; UINT8 IdeDevice; UINT16 Formlabel; UINT16 SecurityModeToken; UINT16 PswToken1; UINT16 PswToken2; CHAR16 *DevNameString; } IDE_CONFIG; typedef struct { UINTN Signature; EFI_HANDLE Handle; EFI_SETUP_UTILITY_BROWSER_PROTOCOL Interface; EFI_HII_DATABASE_PROTOCOL *HiiDatabase; EFI_HII_STRING_PROTOCOL *HiiString; EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting; EFI_FORM_BROWSER2_PROTOCOL *Browser2; H2O_DIALOG_PROTOCOL *H2ODialog; EFI_HII_ACCESS_EXTRACT_CONFIG ExtractConfig; EFI_HII_ACCESS_ROUTE_CONFIG RouteConfig; HOT_KEY_CALLBACK HotKeyCallback; IDE_CONFIG *IdeConfig; SETUP_UTILITY_CONFIGURATION *SUCInfo; UINT8 *SCBuffer; } SETUP_UTILITY_BROWSER_DATA; typedef struct { EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath; CHAR16 *HwDeviceName; } HARDWARE_BOOT_DEVICE_INFO; #define EFI_SETUP_UTILITY_BROWSER_SIGNATURE SIGNATURE_32('S','e','B','r') #define EFI_SETUP_UTILITY_BROWSER_FROM_THIS(a) CR(a, SETUP_UTILITY_BROWSER_DATA, Interface, EFI_SETUP_UTILITY_BROWSER_SIGNATURE) typedef struct { UINT32 Signature; EFI_HANDLE CallbackHandle; EFI_HII_CONFIG_ACCESS_PROTOCOL DriverCallback; EFI_HII_HANDLE HiiHandle; EFI_GUID FormsetGuid; } EFI_CALLBACK_INFO; #define EFI_CALLBACK_INFO_SIGNATURE SIGNATURE_32('E','C','I','S') #define EFI_CALLBACK_INFO_FROM_THIS(a) CR (a, EFI_CALLBACK_INFO, DriverCallback, EFI_CALLBACK_INFO_SIGNATURE) // // Publica function from main menu // EFI_STATUS EFIAPI InstallMainCallbackRoutine ( IN EFI_HANDLE DriverHandle, IN EFI_HII_HANDLE HiiHandle ); EFI_STATUS EFIAPI UninstallMainCallbackRoutine ( IN EFI_HANDLE DriverHandle ); EFI_STATUS UpdateStringToken ( KERNEL_CONFIGURATION *IfrNVData ); EFI_STATUS UpdateLangItem ( IN const EFI_HII_CONFIG_ACCESS_PROTOCOL *This, IN UINT8 *Data ); EFI_STATUS SetupVariableConfig ( IN EFI_GUID *VariableGuid, OPTIONAL IN CHAR16 *VariableName, OPTIONAL IN OUT UINTN BufferSize, IN UINT8 *Buffer, IN BOOLEAN RetrieveData ); // // Publica function from security menu // EFI_STATUS EFIAPI InstallSecurityCallbackRoutine ( IN EFI_HANDLE DriverHandle, IN EFI_HII_HANDLE HiiHandle ); EFI_STATUS EFIAPI UninstallSecurityCallbackRoutine ( IN EFI_HANDLE DriverHandle ); EFI_STATUS SetSecurityStatus ( VOID ); EFI_STATUS UpdateAllHddPasswordFlag ( IN EFI_HII_HANDLE HiiHandle, IN HDD_PASSWORD_SCU_DATA *HddPasswordScuData, IN UINTN NumOfHdd ); EFI_STATUS UpdateHdPswLabel ( IN UINT16 CallBackFormId, IN BOOLEAN HaveSecurityData, IN UINTN HarddiskInfoIndex ); EFI_STATUS FrozenHddResetStatus ( VOID ); EFI_STATUS GetAllHwBootDeviceInfo ( OUT UINTN *HwBootDeviceInfoCount, OUT HARDWARE_BOOT_DEVICE_INFO **HwBootDeviceInfo ); BOOLEAN CheckAnyTcgDrive ( IN HDD_PASSWORD_SCU_DATA *HddPasswordScuData, IN UINTN NumOfHdd ); BOOLEAN CheckAnyHddLocked ( IN HDD_PASSWORD_SCU_DATA *HddPasswordScuData, IN UINTN NumOfHdd ); EFI_STATUS ValidatePassword ( IN EFI_SYS_PASSWORD_SERVICE_PROTOCOL *SysPasswordService, IN BOOLEAN SupervisorOrUser, IN SYS_PASSWORD_INFO_DATA *SysPasswordDataInfo, IN CHAR16 *Password ); EFI_STATUS SetPassword ( IN BOOLEAN SupervisorOrUser, IN SYS_PASSWORD_INFO_DATA *SysPasswordDataInfo, IN CHAR16 *Password ); EFI_STATUS SetAllHddPassword ( IN EFI_HII_HANDLE HiiHandle, IN HDD_PASSWORD_SCU_DATA *HddPasswordScuData, IN BOOLEAN UserOrMaster, IN UINTN NumOfHdd, IN CHAR16 *Password ); EFI_STATUS ValidateStoragePassword ( IN EFI_HII_HANDLE HiiHandle, IN UINT16 HddIndex, IN BOOLEAN UserOrMaster, IN CHAR16 *Password ); EFI_STATUS SetStoragePassword ( IN EFI_HII_HANDLE HiiHandle, IN UINT16 HddIndex, IN BOOLEAN UserOrMaster, IN CHAR16 *Password ); EFI_STATUS SetupUtilityLibPasswordCheck ( IN SETUP_UTILITY_CONFIGURATION *ScuInfo, IN KERNEL_CONFIGURATION *KernelConfig, IN EFI_HII_HANDLE HiiHandle ); EFI_STATUS PasswordCheck ( IN SETUP_UTILITY_CONFIGURATION *CallbackInfo, IN KERNEL_CONFIGURATION *KernelConfig ); EFI_STATUS UpdatePasswordState ( EFI_HII_HANDLE HiiHandle ); EFI_STATUS HddPasswordCallback ( IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *FormCallback, IN EFI_HII_HANDLE HiiHandle, IN UINT8 Type, IN EFI_IFR_TYPE_VALUE *Value, OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest, OUT BOOLEAN *PState, IN UINT16 CurrentHddIndex, IN EFI_HDD_PASSWORD_SERVICE_PROTOCOL *HddPasswordService, IN HDD_PASSWORD_SCU_DATA *HddPasswordScuData, IN BOOLEAN UserOrMaster, IN UINTN NumOfHdd ); /** Set disable password information to SecurityDataInfo and update string of Security mode. @param [in] FormCallback The form call back protocol. @param [in] HiiHandle Return string token of device status. @param [in] SecurityDataInfo Security Info table of Harddisk. @param [in] NumOfHddPswd Number of harddisk. @retval EFI_SUCCESS Always return. **/ EFI_STATUS EFIAPI DisableAllHarddiskPswd( IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *FormCallback, IN EFI_HII_HANDLE HiiHandle, IN HDD_PASSWORD_SCU_DATA *HddPasswordScuData, IN UINTN NumOfHdd ); // // Publica function from Boot menu // EFI_STATUS EFIAPI InstallBootCallbackRoutine ( IN EFI_HANDLE DriverHandle, IN EFI_HII_HANDLE HiiHandle ); EFI_STATUS EFIAPI UninstallBootCallbackRoutine ( IN EFI_HANDLE DriverHandle ); VOID MoveBootType ( IN BOOLEAN UpShift, IN UINT8 UpperType, IN UINT8 LowerType, IN OUT UINT8 *BootTypeOrder, IN UINTN TypeCount ); BOOLEAN CompareBlockIoDevicePath ( IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath ); // // Publica function from Exit menu // EFI_STATUS EFIAPI InstallExitCallbackRoutine ( IN EFI_HANDLE DriverHandle, IN EFI_HII_HANDLE HiiHandle ); EFI_STATUS EFIAPI UninstallExitCallbackRoutine ( IN EFI_HANDLE DriverHandle ); EFI_STATUS DiscardChange ( IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This ); VOID EFIAPI SetupUtilityLibGetNextLanguage ( IN OUT CHAR8 **LangCode, OUT CHAR8 *Lang ); EFI_STATUS GetLangDatabase ( OUT UINTN *LangNumber, OUT UINT8 **LanguageString ); BOOLEAN SetupUtilityLibIsLangCodeSupport ( IN CHAR8 *LangCode ); EFI_STATUS GetLangIndex ( IN CHAR8 *LangStr, OUT UINT8 *LangIndex ); UINT16 GetVarStoreSize ( IN EFI_HII_HANDLE HiiHandle, IN EFI_GUID *FormsetGuid, IN EFI_GUID *VarStoreGuid, IN CHAR8 *VarStoreName ); EFI_STATUS BrowserRefreshFormSet ( VOID ); EFI_STATUS InitHddPasswordScuData ( VOID ); EFI_STATUS ResetSysPasswordInfoForSCU ( VOID ); EFI_STATUS ResetHddPasswordInfoForSCU ( VOID ); EFI_STATUS StoragePasswordUpdateForm ( IN EFI_HII_HANDLE HiiHandle, IN UINT16 HddIndex ); EFI_STATUS StoragePasswordCallback ( IN EFI_HII_HANDLE HiiHandle, IN UINT8 Type, IN EFI_IFR_TYPE_VALUE *Value, IN UINT16 HddIndex, IN BOOLEAN UserOrMaster ); /** Load the default value of all varstores belongs to setup utility library. @retval EFI_SUCCESS Load the default value successfully @retval Other Load the default value failed. **/ EFI_STATUS SetupUtilityLibLoadDefault ( VOID ); /** Save the current settings of all varstores belong to setup utility library. @retval EFI_SUCCESS Save the current settings successfully @retval Other Save the current settings failed. **/ EFI_STATUS SetupUtilityLibRouteConfig ( VOID ); EFI_STATUS TcgStoragePasswordCallback ( IN EFI_HII_HANDLE HiiHandle, IN UINT8 Type, IN EFI_IFR_TYPE_VALUE *Value, IN UINT16 HddIndex, IN BOOLEAN UserOrMaster ); extern PASSWORD_CONFIGURATION mPasswordConfig; #endif