#include "HiiDatabase.h"\r
\r
\r
+BOOLEAN mInFrameworkHiiNewPack = FALSE;\r
+BOOLEAN mInFrameworkHiiRemovePack = FALSE;\r
+\r
+\r
EFI_STATUS\r
GetIfrAndStringPackNum (\r
IN CONST EFI_HII_PACKAGES *Packages,\r
EFI_HII_PACKAGE_LIST_HEADER *\r
PrepareUefiPackageListFromFrameworkHiiPackages (\r
IN CONST EFI_HII_PACKAGES *Packages,\r
- IN CONST EFI_GUID *GuidId OPTIONAL\r
+ IN CONST EFI_GUID *PackageListGuid\r
)\r
{\r
UINTN NumberOfPackages;\r
UINTN Index;\r
TIANO_AUTOGEN_PACKAGES_HEADER **TianoAutogenPackageHdrArray;\r
\r
+ ASSERT (Packages != NULL);\r
+ ASSERT (PackageListGuid != NULL);\r
+\r
TianoAutogenPackageHdrArray = (TIANO_AUTOGEN_PACKAGES_HEADER **) ((UINT8 *) &Packages->GuidId + sizeof (Packages->GuidId));\r
NumberOfPackages = Packages->NumberOfPackages;\r
\r
PackageListLength += sizeof (EFI_HII_PACKAGE_HEADER);\r
PackageListHeader = AllocateZeroPool (PackageListLength);\r
ASSERT (PackageListHeader != NULL);\r
- if (GuidId == NULL) {\r
- CopyMem (&PackageListHeader->PackageListGuid, Packages->GuidId, sizeof (EFI_GUID));\r
- } else {\r
- CopyMem (&PackageListHeader->PackageListGuid, GuidId, sizeof (EFI_GUID));\r
- }\r
+\r
+ CopyMem (&PackageListHeader->PackageListGuid, PackageListGuid, sizeof (EFI_GUID));\r
PackageListHeader->PackageLength = PackageListLength;\r
\r
PackageListData = ((UINT8 *) PackageListHeader) + sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
EFI_HII_PACKAGE_LIST_HEADER *UefiPackageListHeader;\r
HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMappingEntry;\r
EFI_GUID GuidId;\r
- EFI_HANDLE UefiHiiDriverHandle;\r
\r
- UefiHiiDriverHandle = NULL;\r
UefiPackageListHeader = NULL;\r
\r
Status = GetIfrAndStringPackNum (Packages, &IfrPackNum, &StringPackNum);\r
if (Packages->GuidId == NULL) {\r
Packages->GuidId = &GuidId;\r
GenerateGuidId (&mAGuid, Packages->GuidId);\r
+ } else {\r
+ CopyGuid (&GuidId, Packages->GuidId);\r
}\r
\r
CopyGuid (&HandleMappingEntry->TagGuid, Packages->GuidId);\r
// that Setup Utility can load the Buffer Storage using this protocol.\r
//\r
if (IfrPackNum != 0) {\r
- InstallDefaultUefiConfigAccessProtocol (Packages, &UefiHiiDriverHandle, HandleMappingEntry);\r
+ InstallDefaultUefiConfigAccessProtocol (Packages, HandleMappingEntry);\r
}\r
UefiPackageListHeader = PrepareUefiPackageListFromFrameworkHiiPackages (Packages, &GuidId);\r
Status = mHiiDatabase->NewPackageList (\r
mHiiDatabase,\r
UefiPackageListHeader, \r
- UefiHiiDriverHandle,\r
+ HandleMappingEntry->UefiHiiDriverHandle,\r
&HandleMappingEntry->UefiHiiHandle\r
);\r
ASSERT_EFI_ERROR (Status);\r
return Status;\r
}\r
\r
-BOOLEAN mInFrameworkHiiNewPack = FALSE;\r
\r
EFI_STATUS\r
EFIAPI\r
{\r
EFI_STATUS Status;\r
EFI_HII_THUNK_PRIVATE_DATA *Private;\r
+ EFI_TPL OldTpl;\r
\r
if (Handle == NULL) {\r
return EFI_INVALID_PARAMETER;\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ \r
//\r
// We use a simple Global variable to inform NewPackNotify\r
// that the package list registered here is already registered\r
\r
mInFrameworkHiiNewPack = FALSE;\r
\r
+ gBS->RestoreTPL (OldTpl);\r
+\r
return Status;\r
}\r
\r
EFI_STATUS Status;\r
EFI_HII_THUNK_PRIVATE_DATA *Private;\r
HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;\r
- EFI_DEVICE_PATH_PROTOCOL *Path;\r
+ EFI_TPL OldTpl;\r
+ EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
+\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+\r
+ mInFrameworkHiiRemovePack = TRUE;\r
\r
Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
HandleMapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, Handle);\r
\r
- if (HandleMapEntry->UefiHiiHandle != NULL) {\r
+ if (HandleMapEntry != NULL) {\r
Status = mHiiDatabase->RemovePackageList (\r
mHiiDatabase,\r
HandleMapEntry->UefiHiiHandle\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
+ HiiLibDestroyHiiDriverHandle (HandleMapEntry->UefiHiiHandle);\r
+\r
Status = gBS->HandleProtocol (\r
- HandleMapEntry->UefiHiiHandle,\r
- &gEfiDevicePathProtocolGuid,\r
- &Path\r
+ HandleMapEntry->UefiHiiDriverHandle,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ (VOID **) &ConfigAccess\r
);\r
\r
if (!EFI_ERROR (Status)) {\r
Status = gBS->UninstallProtocolInterface (\r
- HandleMapEntry->UefiHiiHandle,\r
- &gEfiDevicePathProtocolGuid,\r
- Path\r
+ HandleMapEntry->UefiHiiDriverHandle,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ ConfigAccess\r
);\r
- if (!EFI_ERROR (Status)) {\r
- FreePool (Path);\r
- }\r
+ ASSERT_EFI_ERROR (Status);\r
+ } else {\r
+ Status = EFI_SUCCESS;\r
}\r
\r
RemoveEntryList (&HandleMapEntry->List);\r
\r
FreePool (HandleMapEntry);\r
- return Status;\r
+\r
+ }else {\r
+ Status = EFI_NOT_FOUND;\r
}\r
\r
- return EFI_NOT_FOUND;\r
+ mInFrameworkHiiRemovePack = FALSE;\r
+ \r
+ gBS->RestoreTPL (OldTpl);\r
+\r
+ return Status;\r
}\r