]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/Forms.c
Add in some features for the thunk layer:
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / Forms.c
index 0e49e2066b535f5359e638f01c07e6923f154460..6cf81c3f8aedaa59aefe04bb4114ac3cd3f52483 100644 (file)
@@ -122,6 +122,46 @@ HiiGetDefaultImage (
   return EFI_SUCCESS;\r
 }\r
 \r
+EFI_STATUS\r
+ThunkUpdateFormCallBack (\r
+  IN       EFI_HANDLE                                CallbackHandle,\r
+  IN CONST HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY  *HandleMapEntry\r
+  )\r
+{\r
+  EFI_STATUS                                Status;\r
+  EFI_FORM_CALLBACK_PROTOCOL                *FrameworkFormCallbackProtocol;\r
+  EFI_HII_CONFIG_ACCESS_PROTOCOL            *ConfigAccessProtocol;\r
+  EFI_HANDLE                                UefiDriverHandle;\r
+  HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE *ConfigAccessProtocolInstance;\r
+  \r
+  Status = gBS->HandleProtocol (\r
+                   CallbackHandle,\r
+                   &gEfiFormCallbackProtocolGuid,\r
+                   (VOID **) &FrameworkFormCallbackProtocol\r
+                   );\r
+  if (EFI_ERROR (Status)) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+  \r
+  Status = mUefiHiiDatabaseProtocol->GetPackageListHandle (\r
+                                        mUefiHiiDatabaseProtocol,\r
+                                        HandleMapEntry->UefiHiiHandle,\r
+                                        &UefiDriverHandle\r
+                                        );\r
+  ASSERT_EFI_ERROR (Status);\r
+  Status = gBS->HandleProtocol (\r
+                   UefiDriverHandle,\r
+                   &gEfiHiiConfigAccessProtocolGuid,\r
+                   (VOID **) &ConfigAccessProtocol\r
+                   );\r
+  ASSERT_EFI_ERROR (Status);\r
+  \r
+  ConfigAccessProtocolInstance = HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_FROM_PROTOCOL (ConfigAccessProtocol);\r
+  \r
+  ConfigAccessProtocolInstance->FrameworkFormCallbackProtocol = FrameworkFormCallbackProtocol;\r
+\r
+  return EFI_SUCCESS;\r
+}\r
 \r
 EFI_STATUS\r
 EFIAPI\r
@@ -150,5 +190,23 @@ Returns:
 \r
 --*/\r
 {\r
+  EFI_STATUS                                Status;\r
+  EFI_HII_THUNK_PRIVATE_DATA                *Private;\r
+  HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY  *HandleMapEntry;\r
+\r
+  Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
+\r
+  HandleMapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, Handle);\r
+\r
+  if (HandleMapEntry == NULL) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+  \r
+  if (Data->FormSetUpdate) {\r
+    Status = ThunkUpdateFormCallBack ((EFI_HANDLE) (UINTN) Data->FormCallbackHandle, HandleMapEntry);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
+  }\r
   return EFI_SUCCESS;\r
 }\r