From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4864:20::642; helo=mail-pl1-x642.google.com; envelope-from=ming.huang@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-pl1-x642.google.com (mail-pl1-x642.google.com [IPv6:2607:f8b0:4864:20::642]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 9787D211300B1 for ; Fri, 14 Sep 2018 23:37:07 -0700 (PDT) Received: by mail-pl1-x642.google.com with SMTP id f6-v6so5148580plo.1 for ; Fri, 14 Sep 2018 23:37:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LFF+ZnYx7vWTim+EuZaBADqgvsHYw5EcUW3yhahmd4A=; b=ZQ8NW7ARFdmvr4hIcDrmg7uIlJBVkqDu87Lidl9bqt9mCDFpCN31fdcFKdbnx8liT9 f45elIsKtki8txHhnQkww65GubH4/WTMjdcFZAfY7q0x20J8KWEgjXN+BT0mAfzlGBz4 txo3bVYEXPYV6u03EgvJdMNzmftL3NF/Ha9Nk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=LFF+ZnYx7vWTim+EuZaBADqgvsHYw5EcUW3yhahmd4A=; b=bD3GZESmvzg39OV7yl54TsYFB6ein8X0dkWoPiiNRCY+V14/kTUlL6kOi4NJtVN3Gy 1cgHly0HP6YGiXa0VJMY3iLCOVD3kCddOTqdFseQDhJE7iNGPIGUIksEg4hFhmMScJX5 HlByIi/q95z3zVPp3ptf/4pKjYonemyRphNoUsQoivHpVtmxdIRVl+5+AcDJqLdcj2Ab s8e08/WbLs9Mxb4DTCKFzJZXcB4A/mr/Xn5uJU7XhD9kZaa8Rbm5b7DIOv/93JIJtm3P 3ffdHfOwcTux2jfyyTJFs1GEvFPApbtHmFt6jO9ByR8S6Fh1Uwy0GZBeI/bKYGI8GrSZ 4c1A== X-Gm-Message-State: APzg51DJky7jZKT1rsrWojtAVpC/vFUOGm2r2kvj/hB18oayveWSPHDw KN50V+avIVNs3LDiwg8Ep6HGwQ== X-Google-Smtp-Source: ANB0VdZ9fzIC7qhndqyOAbQxMVvNURX5FpLfY/jL0FIRWLVyYXcc8kyNXQKXUCleAgcWTnXAAhIhvA== X-Received: by 2002:a17:902:b81:: with SMTP id 1-v6mr15503918plr.319.1536993427263; Fri, 14 Sep 2018 23:37:07 -0700 (PDT) Received: from localhost.localdomain ([120.31.149.194]) by smtp.gmail.com with ESMTPSA id r205-v6sm14794048pgr.11.2018.09.14.23.37.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 14 Sep 2018 23:37:06 -0700 (PDT) From: Ming Huang To: linaro-uefi@lists.linaro.org, edk2-devel@lists.01.org, star.zeng@intel.com, eric.dong@intel.com Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org, michael.d.kinney@intel.com, liming.gao@intel.com, wanghuiqiang@huawei.com, huangming23@huawei.com, zhangjinsong2@huawei.com, huangdaode@hisilicon.com, waip23@126.com, Ming Huang Date: Sat, 15 Sep 2018 14:36:56 +0800 Message-Id: <20180915063656.6250-2-ming.huang@linaro.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180915063656.6250-1-ming.huang@linaro.org> References: <20180915063656.6250-1-ming.huang@linaro.org> Subject: [RFC MdeModulePkg/UefiBootManagerLib v1 1/1] MdeModulePkg/UefiBootManagerLib: Fix raid card repair fail issue X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Sep 2018 06:37:07 -0000 When some type raid cards is not healthy, such as Broadcom 3108/3508 raid card, board will enter endless loop in BmRepairAllControllers() and can't show configuration formset which need to repair raid card. DriverHealthManagerDxe is added to platform dsc/fdf, driver health manager menu can show drivers which are not healthy, but raid card can not be repaired by the menus under Device Manager. This modification of BmRepairAllControllers() can show configuration formset for repair when booting an option. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ming Huang --- MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf | 2 + MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c | 48 +++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf index 228b91033695..b9f96c763ff6 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf +++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf @@ -89,6 +89,8 @@ [Guids] gEfiDiskInfoIdeInterfaceGuid ## SOMETIMES_CONSUMES ## GUID gEfiDiskInfoScsiInterfaceGuid ## SOMETIMES_CONSUMES ## GUID gEfiDiskInfoSdMmcInterfaceGuid ## SOMETIMES_CONSUMES ## GUID + gEfiHiiDriverHealthFormsetGuid + gEfiHiiPlatformSetupFormsetGuid [Protocols] gEfiPciRootBridgeIoProtocolGuid ## CONSUMES diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c b/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c index ecd01bbb81e3..fd47651ec937 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmDriverHealth.c @@ -421,6 +421,47 @@ EfiBootManagerFreeDriverHealthInfo ( return gBS->FreePool (DriverHealthInfo); } +STATIC +VOID +ShowConfigureForm ( + EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2, + EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo + ) +{ + EFI_STATUS Status; + EFI_HII_HANDLE FormHiiHandle; + EFI_DRIVER_HEALTH_STATUS HealthStatus; + + if (DriverHealthInfo != NULL) { + Status = DriverHealthInfo->DriverHealth->GetHealthStatus ( + DriverHealthInfo->DriverHealth, + DriverHealthInfo->ControllerHandle, + DriverHealthInfo->ChildHandle, + &HealthStatus, + NULL, + &FormHiiHandle + ); + if (!EFI_ERROR (Status) && + (HealthStatus == EfiDriverHealthStatusConfigurationRequired) && + (FormHiiHandle != NULL)) { + Status = FormBrowser2->SendForm ( + FormBrowser2, + &FormHiiHandle, + 1, + &gEfiHiiPlatformSetupFormsetGuid, + 0, + NULL, + NULL + ); + if (EFI_ERROR (Status)) { + Print (L"Show configurae menu:%r\n", Status); + } + } + } + + return; +} + /** Repair all the controllers according to the Driver Health status queried. @@ -434,6 +475,7 @@ BmRepairAllControllers ( { EFI_STATUS Status; EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *DriverHealthInfo; + EFI_BOOT_MANAGER_DRIVER_HEALTH_INFO *InfoConfigurationRequired; EFI_DRIVER_HEALTH_STATUS HealthStatus; UINTN Count; UINTN Index; @@ -462,6 +504,7 @@ BmRepairAllControllers ( do { RepairRequired = FALSE; ConfigurationRequired = FALSE; + InfoConfigurationRequired = NULL; // // Deal with Repair Required @@ -470,6 +513,7 @@ BmRepairAllControllers ( for (Index = 0; Index < Count; Index++) { if (DriverHealthInfo[Index].HealthStatus == EfiDriverHealthStatusConfigurationRequired) { ConfigurationRequired = TRUE; + InfoConfigurationRequired = &DriverHealthInfo[Index]; } if (DriverHealthInfo[Index].HealthStatus == EfiDriverHealthStatusRepairRequired) { @@ -494,6 +538,7 @@ BmRepairAllControllers ( ); if (!EFI_ERROR (Status) && (HealthStatus == EfiDriverHealthStatusConfigurationRequired)) { ConfigurationRequired = TRUE; + InfoConfigurationRequired = &DriverHealthInfo[Index]; } } } @@ -507,12 +552,13 @@ BmRepairAllControllers ( FormBrowser2, &HiiHandles[Index], 1, - PcdGetPtr (PcdDriverHealthConfigureForm), + &gEfiHiiDriverHealthFormsetGuid, 0, NULL, NULL ); if (!EFI_ERROR (Status)) { + ShowConfigureForm (FormBrowser2, InfoConfigurationRequired); break; } } -- 2.18.0