diff options
author | xdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-07-22 09:46:41 +0000 |
---|---|---|
committer | xdu2 <xdu2@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-07-22 09:46:41 +0000 |
commit | 7119d96a6fdd28b2e215b20f97996193ca871a57 (patch) | |
tree | 2f01aa8db028f13dcf0af4c1dc44dc02e7c0c3fa | |
parent | 6a60f8cb11317bf50e28f4b8be0a99d6602191d8 (diff) | |
download | edk2-7119d96a6fdd28b2e215b20f97996193ca871a57.zip edk2-7119d96a6fdd28b2e215b20f97996193ca871a57.tar.gz edk2-7119d96a6fdd28b2e215b20f97996193ca871a57.tar.bz2 |
Fix bug that cursor position will change when enter newly registered HII Form after ConnectAll() in DeviceManager.
Root cause is that in old code, reinstall of HII handle for DeviceManager will cause inconsistent HII handle index for newly installed HII packages by ConnectAll(), thus cause inconsistent QuestionId. FormBrowser will record QuestionId of a Form ever visited, so the cursor position is changed.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10682 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r-- | IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c | 106 |
1 files changed, 43 insertions, 63 deletions
diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c b/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c index 6965615..2e3d355 100644 --- a/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c @@ -181,38 +181,6 @@ InitializeDeviceManager ( );
ASSERT_EFI_ERROR (Status);
- //
- // Publish our HII data
- //
- gDeviceManagerPrivate.HiiHandle = HiiAddPackages (
- &mDeviceManagerGuid,
- gDeviceManagerPrivate.DriverHandle,
- DeviceManagerVfrBin,
- BdsDxeStrings,
- NULL
- );
- if (gDeviceManagerPrivate.HiiHandle == NULL) {
- return EFI_OUT_OF_RESOURCES;
- } else {
- Status = EFI_SUCCESS;
- }
-
- //
- // Publish Driver Health HII data
- //
- gDeviceManagerPrivate.DriverHealthHiiHandle = HiiAddPackages (
- &mDeviceManagerGuid,
- gDeviceManagerPrivate.DriverHealthHandle,
- DriverHealthVfrBin,
- BdsDxeStrings,
- NULL
- );
- if (gDeviceManagerPrivate.DriverHealthHiiHandle == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- } else {
- Status = EFI_SUCCESS;
- }
-
return Status;
}
@@ -389,6 +357,26 @@ CallDeviceManager ( BdsLibConnectAllDriversToAllControllers ();
gConnectAllHappened = TRUE;
}
+
+ HiiHandle = gDeviceManagerPrivate.HiiHandle;
+ if (HiiHandle == NULL) {
+ //
+ // Publish our HII data.
+ //
+ HiiHandle = HiiAddPackages (
+ &mDeviceManagerGuid,
+ gDeviceManagerPrivate.DriverHandle,
+ DeviceManagerVfrBin,
+ BdsDxeStrings,
+ NULL
+ );
+ if (HiiHandle == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ gDeviceManagerPrivate.HiiHandle = HiiHandle;
+ }
+
//
// Create Subtitle OpCodes
//
@@ -423,8 +411,6 @@ CallDeviceManager ( HiiHandles = HiiGetHiiHandles (NULL);
ASSERT (HiiHandles != NULL);
- HiiHandle = gDeviceManagerPrivate.HiiHandle;
-
//
// Search for formset of each class type
//
@@ -565,22 +551,10 @@ CallDeviceManager ( }
//
- // Cleanup dynamic created strings in HII database by reinstall the packagelist
+ // Remove our packagelist from HII database.
//
HiiRemovePackages (HiiHandle);
-
- gDeviceManagerPrivate.HiiHandle = HiiAddPackages (
- &mDeviceManagerGuid,
- gDeviceManagerPrivate.DriverHandle,
- DeviceManagerVfrBin,
- BdsDxeStrings,
- NULL
- );
- if (gDeviceManagerPrivate.HiiHandle == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- } else {
- Status = EFI_SUCCESS;
- }
+ gDeviceManagerPrivate.HiiHandle = NULL;
HiiFreeOpCodeHandle (StartOpCodeHandle);
HiiFreeOpCodeHandle (EndOpCodeHandle);
@@ -676,13 +650,31 @@ CallDriverHealth ( EFI_DEVICE_PATH_PROTOCOL *DriverDevicePath;
UINTN Length;
- HiiHandle = gDeviceManagerPrivate.DriverHealthHiiHandle;
Index = 0;
Length = 0;
DriverHealthInfo = NULL;
DriverDevicePath = NULL;
InitializeListHead (&DriverHealthList);
+ HiiHandle = gDeviceManagerPrivate.DriverHealthHiiHandle;
+ if (HiiHandle == NULL) {
+ //
+ // Publish Driver Health HII data.
+ //
+ HiiHandle = HiiAddPackages (
+ &mDeviceManagerGuid,
+ gDeviceManagerPrivate.DriverHealthHandle,
+ DriverHealthVfrBin,
+ BdsDxeStrings,
+ NULL
+ );
+ if (HiiHandle == NULL) {
+ return;
+ }
+
+ gDeviceManagerPrivate.DriverHealthHiiHandle = HiiHandle;
+ }
+
//
// Allocate space for creation of UpdateData Buffer
//
@@ -964,23 +956,11 @@ CallDriverHealth ( }
//
- // Cleanup dynamic created strings in HII database by reinstall the packagelist
+ // Remove driver health packagelist from HII database.
//
-
HiiRemovePackages (HiiHandle);
+ gDeviceManagerPrivate.DriverHealthHiiHandle = NULL;
- gDeviceManagerPrivate.DriverHealthHiiHandle = HiiAddPackages (
- &mDriverHealthGuid,
- gDeviceManagerPrivate.DriverHealthHandle,
- DriverHealthVfrBin,
- BdsDxeStrings,
- NULL
- );
- if (gDeviceManagerPrivate.DriverHealthHiiHandle == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- } else {
- Status = EFI_SUCCESS;
- }
//
// Free driver health info list
//
|