From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id C9DC9AC00EB for ; Wed, 10 Apr 2024 01:54:54 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=aIe/w5i8ICSAdT2uiyee/J6jhBO7e5J467XI1sxuv/0=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20240206; t=1712714093; v=1; b=r+UTQXg6QaMJ4LUiglG2oWf3uasSqwMBlt8UQkDy1MWXReA+EtgEUwiBG4p88F166ObsFBel Vb111QnCTrgGbT9EzQnOPlxyUju+MOQTV6CtQccJCBUYOxqheRuTvSerbDjfhiROYhDzMeNHyKd Q2yQG16W1t5amQ80VMN2Hfr5zTTc/nfaTMDokyyPIae6KsL/XUb3xY+FfrmPgZtdDZGsQbOe6Uf Kb6Y5YkNvJ+TUubfSkCMF33eHGvNd8PshqOwcFsAfVShTNnCMTOdSh5Tt0mxjxPPPHo6cz2UfMC kgapIt2ICiOj/rUQ2YuuoLS2SKg4QBjjtzlX/a7BLEDog== X-Received: by 127.0.0.2 with SMTP id U5xmYY7687511xS5cUP7fWNe; Tue, 09 Apr 2024 18:54:53 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.16]) by mx.groups.io with SMTP id smtpd.web10.131095.1712651326451388259 for ; Tue, 09 Apr 2024 01:28:46 -0700 X-CSE-ConnectionGUID: Hur753/ESOKo3oR+kiCj5Q== X-CSE-MsgGUID: ZeIr1/LlTkytO7H3mxKI0g== X-IronPort-AV: E=McAfee;i="6600,9927,11038"; a="8079460" X-IronPort-AV: E=Sophos;i="6.07,189,1708416000"; d="scan'208";a="8079460" X-Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Apr 2024 01:28:46 -0700 X-CSE-ConnectionGUID: jfjkYle/T82z0Cr25F4qyg== X-CSE-MsgGUID: O9TKeCkMTwemUyj8sFcXpg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,189,1708416000"; d="scan'208";a="51347807" X-Received: from cindykux-mobl.gar.corp.intel.com ([10.225.33.115]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Apr 2024 01:28:42 -0700 From: "Cindy Kuo" To: devel@edk2.groups.io Cc: Cindy Kuo , Jiewen Yao , Rahul Kumar , Dandan Bi , Ming Tan , Arthur Chen , Xiao X Chen , Tina Chen Subject: [edk2-devel] [PATCH] SecurityPkg/OpalPasswordDxe: Update UI according to UEFI spec Date: Tue, 9 Apr 2024 16:27:20 +0800 Message-Id: <452870dbb033c0c6d5d9cd05bf8268bd7cdb5f29.1712650955.git.cindyx.kuo@intel.com> MIME-Version: 1.0 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Tue, 09 Apr 2024 18:54:52 -0700 Resent-From: cindyx.kuo@intel.com Reply-To: devel@edk2.groups.io,cindyx.kuo@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: ILtRxCuOCRRWqAMMDHcTS3k4x7686176AA= Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=r+UTQXg6; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4735 Should not call HiiGetBrowserData() and HiiSetBrowserData() in FORM_OPEN call back function. Those APIs are called within OpalHiiSetBrowserData/OpalHiiGetBrowserData which have been used by OpalHii.c. 1. Change callback action from FORM_OPEN to RETRIEVE. 2. Create dummy label with suppressif statement in VFR for form update usage. 3. Add HiiUpdateForm() to force reparsing the IFR binary. Cc: Jiewen Yao Cc: Rahul Kumar Cc: Dandan Bi Cc: Ming Tan Cc: Arthur Chen Cc: Xiao X Chen Cc: Tina Chen Signed-off-by: CindyX Kuo --- .../Tcg/Opal/OpalPassword/OpalDriver.h | 1 + SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c | 76 +++++++++++++++++-- .../Tcg/Opal/OpalPassword/OpalHiiFormValues.h | 5 ++ .../Tcg/Opal/OpalPassword/OpalPasswordDxe.inf | 1 + .../Opal/OpalPassword/OpalPasswordForm.vfr | 10 +++ 5 files changed, 86 insertions(+), 7 deletions(-) diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h b/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h index 2089bd81b6..1a4671c602 100644 --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalDriver.h @@ -23,6 +23,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include +#include #include #include diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c b/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c index 8035f44ebe..b513c053b9 100644 --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalHii.c @@ -40,6 +40,7 @@ EFI_HII_HANDLE gHiiPackageListHandle = NULL; // const EFI_GUID gHiiPackageListGuid = PACKAGE_LIST_GUID; const EFI_GUID gHiiSetupVariableGuid = SETUP_VARIABLE_GUID; +const EFI_GUID gOpalSetupFormSetGuid = SETUP_FORMSET_GUID; // // Structure that contains state of the HII @@ -611,10 +612,15 @@ DriverCallback ( EFI_BROWSER_ACTION_REQUEST *ActionRequest ) { - HII_KEY HiiKey; - UINT8 HiiKeyId; - UINT32 PpRequest; - OPAL_DISK *OpalDisk; + HII_KEY HiiKey; + UINT8 HiiKeyId; + UINT32 PpRequest; + OPAL_DISK *OpalDisk; + EFI_STATUS Status; + VOID *StartOpCodeHandle; + VOID *EndOpCodeHandle; + EFI_IFR_GUID_LABEL *StartLabel; + EFI_IFR_GUID_LABEL *EndLabel; if (ActionRequest != NULL) { *ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE; @@ -632,16 +638,72 @@ DriverCallback ( HiiKey.Raw = QuestionId; HiiKeyId = (UINT8)HiiKey.KeyBits.Id; - if (Action == EFI_BROWSER_ACTION_FORM_OPEN) { + if (Action == EFI_BROWSER_ACTION_RETRIEVE) { + // + // Allocate space for creation of UpdateData Buffer + // + StartOpCodeHandle = HiiAllocateOpCodeHandle (); + if (StartOpCodeHandle == NULL) { + return EFI_OUT_OF_RESOURCES; + } + EndOpCodeHandle = HiiAllocateOpCodeHandle (); + if (EndOpCodeHandle == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + // + // Create Hii Extend Label OpCode as the start opcode + // + StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); + StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; + + // + // Create Hii Extend Label OpCode as the end opcode + // + EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL)); + EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL; + switch (HiiKeyId) { case HII_KEY_ID_VAR_SUPPORTED_DISKS: DEBUG ((DEBUG_INFO, "HII_KEY_ID_VAR_SUPPORTED_DISKS\n")); - return HiiPopulateMainMenuForm (); + Status = HiiPopulateMainMenuForm (); + + StartLabel->Number = OPAL_MAIN_MENU_LABEL_START; + EndLabel->Number = OPAL_MAIN_MENU_LABEL_END; + HiiUpdateForm ( + gHiiPackageListHandle, + (EFI_GUID *)&gOpalSetupFormSetGuid, + FORMID_VALUE_MAIN_MENU, + StartOpCodeHandle, + EndOpCodeHandle + ); + break; case HII_KEY_ID_VAR_SELECTED_DISK_AVAILABLE_ACTIONS: DEBUG ((DEBUG_INFO, "HII_KEY_ID_VAR_SELECTED_DISK_AVAILABLE_ACTIONS\n")); - return HiiPopulateDiskInfoForm (); + Status = HiiPopulateDiskInfoForm (); + + StartLabel->Number = OPAL_DISK_INFO_LABEL_START; + EndLabel->Number = OPAL_DISK_INFO_LABEL_END; + HiiUpdateForm ( + gHiiPackageListHandle, + (EFI_GUID *)&gOpalSetupFormSetGuid, + FORMID_VALUE_DISK_INFO_FORM_MAIN, + StartOpCodeHandle, + EndOpCodeHandle + ); + break; + + default: + Status = EFI_UNSUPPORTED; + break; } + + HiiFreeOpCodeHandle (StartOpCodeHandle); + HiiFreeOpCodeHandle (EndOpCodeHandle); + + return Status; + } else if (Action == EFI_BROWSER_ACTION_CHANGING) { switch (HiiKeyId) { case HII_KEY_ID_GOTO_DISK_INFO: diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalHiiFormValues.h b/SecurityPkg/Tcg/Opal/OpalPassword/OpalHiiFormValues.h index ab6957fc6f..eec41caf01 100644 --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalHiiFormValues.h +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalHiiFormValues.h @@ -96,6 +96,11 @@ typedef struct { #define HII_KEY(id) HII_KEY_WITH_INDEX(id, 0) +#define OPAL_MAIN_MENU_LABEL_START 0x6100 +#define OPAL_MAIN_MENU_LABEL_END 0x6101 +#define OPAL_DISK_INFO_LABEL_START 0x6200 +#define OPAL_DISK_INFO_LABEL_END 0x6201 + #define PACKAGE_LIST_GUID { 0xf0308176, 0x9058, 0x4153, { 0x93, 0x3d, 0xda, 0x2f, 0xdc, 0xc8, 0x3e, 0x44 } } /* {410483CF-F4F9-4ece-848A-1958FD31CEB7} */ diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf b/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf index 87519198c0..89e72a74bc 100644 --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordDxe.inf @@ -69,6 +69,7 @@ [Guids] gEfiEndOfDxeEventGroupGuid ## CONSUMES ## Event gS3StorageDeviceInitListGuid ## SOMETIMES_PRODUCES ## UNDEFINED + gEfiIfrTianoGuid ## CONSUMES [Pcd] gEfiSecurityPkgTokenSpaceGuid.PcdSkipOpalPasswordPrompt ## CONSUMES diff --git a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordForm.vfr b/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordForm.vfr index f0d3e220b2..a03c19af11 100644 --- a/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordForm.vfr +++ b/SecurityPkg/Tcg/Opal/OpalPassword/OpalPasswordForm.vfr @@ -25,6 +25,11 @@ formset form formid = FORMID_VALUE_MAIN_MENU, title = STRING_TOKEN(STR_OPAL); + suppressif TRUE; + label OPAL_MAIN_MENU_LABEL_START; + label OPAL_MAIN_MENU_LABEL_END; + endif; + //CONFIG_VARIABLE(HII_KEY(HII_KEY_ID_VAR_SUPPORTED_DISKS), SupportedDisks, 0x0, 0xFFFF); suppressif TRUE; numeric @@ -148,6 +153,11 @@ endform; // MAIN MENU FORM form formid = FORMID_VALUE_DISK_INFO_FORM_MAIN, title = STRING_TOKEN(STR_OPAL); + suppressif TRUE; + label OPAL_DISK_INFO_LABEL_START; + label OPAL_DISK_INFO_LABEL_END; + endif; + suppressif TRUE; numeric name = SelectedDiskAvailableActions, -- 2.39.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#117562): https://edk2.groups.io/g/devel/message/117562 Mute This Topic: https://groups.io/mt/105434774/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-