EFI_GUID mVendorGuid = ISCSI_CONFIG_GUID;\r
BOOLEAN mIScsiDeviceListUpdated = FALSE;\r
UINTN mNumberOfIScsiDevices = 0;\r
+ISCSI_FORM_CALLBACK_INFO *mCallbackInfo;\r
\r
NET_LIST_ENTRY mIScsiConfigFormList = {\r
&mIScsiConfigFormList,\r
\r
--*/\r
{\r
- EFI_FORM_BROWSER_PROTOCOL *FormBrowser;\r
- EFI_STATUS Status;\r
EFI_INPUT_KEY Key;\r
- CHAR16 Buffer[10];\r
-\r
- Status = gBS->LocateProtocol (\r
- &gEfiFormBrowserProtocolGuid,\r
- NULL,\r
- (VOID **)&FormBrowser\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return ;\r
- }\r
\r
- FormBrowser->CreatePopUp (1, TRUE, 10, Buffer, &Key, Warning);\r
+ IfrLibCreatePopUp (1, &Key, Warning);\r
}\r
\r
EFI_STATUS\r
IScsiAsciiStrToUnicodeStr (AuthConfigData->ReverseCHAPSecret, IfrNvData->ReverseCHAPSecret);\r
}\r
\r
+\r
EFI_STATUS\r
EFIAPI\r
-IScsiFormNvRead (\r
- IN EFI_FORM_CALLBACK_PROTOCOL * This,\r
- IN CHAR16 *VariableName,\r
- IN EFI_GUID * VendorGuid,\r
- OUT UINT32 *Attributes OPTIONAL,\r
- IN OUT UINTN *DataSize,\r
- OUT VOID *Buffer\r
+IScsiFormExtractConfig (\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN CONST EFI_STRING Request,\r
+ OUT EFI_STRING *Progress,\r
+ OUT EFI_STRING *Results\r
)\r
/*++\r
\r
-Routine Description:\r
-\r
- NV read function for the iSCSI form callback protocol.\r
-\r
-Arguments:\r
-\r
- This - The EFI form callback protocol instance.\r
- VariableName - Name of the variable to read.\r
- VendorGuid - Guid of the variable to read.\r
- Attributes - The storage to get the attributes of the variable.\r
- DataSize - The size of the buffer to store the variable.\r
- Buffer - The buffer to store the variable to read.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS - The variable is read.\r
- EFI_BUFFER_TOO_SMALL - The buffer provided is too small to hold the variable.\r
+ Routine Description:\r
+ This function allows a caller to extract the current configuration for one\r
+ or more named elements from the target driver.\r
+\r
+ Arguments:\r
+ This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.\r
+ Request - A null-terminated Unicode string in <ConfigRequest> format.\r
+ Progress - On return, points to a character in the Request string.\r
+ Points to the string's null terminator if request was successful.\r
+ Points to the most recent '&' before the first failing name/value\r
+ pair (or the beginning of the string if the failure is in the\r
+ first name/value pair) if the request was not successful.\r
+ Results - A null-terminated Unicode string in <ConfigAltResp> format which\r
+ has all values filled in for the names in the Request string.\r
+ String to be allocated by the called function.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The Results is filled with the requested values.\r
+ EFI_OUT_OF_RESOURCES - Not enough memory to store the results.\r
+ EFI_INVALID_PARAMETER - Request is NULL, illegal syntax, or unknown name.\r
+ EFI_NOT_FOUND - Routing data doesn't match any storage in this driver.\r
\r
--*/\r
{\r
- EFI_STATUS Status;\r
- CHAR8 InitiatorName[ISCSI_NAME_IFR_MAX_SIZE];\r
- UINTN BufferSize;\r
- ISCSI_CONFIG_IFR_NVDATA *IfrNvData;\r
+ EFI_STATUS Status;\r
+ CHAR8 InitiatorName[ISCSI_NAME_IFR_MAX_SIZE];\r
+ UINTN BufferSize;\r
+ ISCSI_CONFIG_IFR_NVDATA *IfrNvData;\r
+ ISCSI_FORM_CALLBACK_INFO *Private;\r
+ EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;\r
\r
if (!mIScsiDeviceListUpdated) {\r
//\r
mIScsiDeviceListUpdated = TRUE;\r
}\r
\r
- IfrNvData = (ISCSI_CONFIG_IFR_NVDATA *) Buffer;\r
- BufferSize = ISCSI_NAME_IFR_MAX_SIZE;\r
+ Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);\r
+ IfrNvData = AllocateZeroPool (sizeof (ISCSI_CONFIG_IFR_NVDATA));\r
+ ASSERT (IfrNvData != NULL);\r
+ if (Private->Current != NULL) {\r
+ IScsiConvertDeviceConfigDataToIfrNvData (Private->Current, IfrNvData);\r
+ }\r
\r
+ BufferSize = ISCSI_NAME_IFR_MAX_SIZE;\r
Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);\r
if (EFI_ERROR (Status)) {\r
IfrNvData->InitiatorName[0] = L'\0';\r
IScsiAsciiStrToUnicodeStr (InitiatorName, IfrNvData->InitiatorName);\r
}\r
\r
- return EFI_SUCCESS;\r
+ //\r
+ // Convert buffer data to <ConfigResp> by helper function BlockToConfig()\r
+ //\r
+ HiiConfigRouting = Private->ConfigRouting;\r
+ BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);\r
+ Status = HiiConfigRouting->BlockToConfig (\r
+ HiiConfigRouting,\r
+ Request,\r
+ (UINT8 *) IfrNvData,\r
+ BufferSize,\r
+ Results,\r
+ Progress\r
+ );\r
+ NetFreePool (IfrNvData);\r
+ return Status;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
-IScsiFormCallback (\r
- IN EFI_FORM_CALLBACK_PROTOCOL *This,\r
- IN UINT16 KeyValue,\r
- IN EFI_IFR_DATA_ARRAY *Data,\r
- OUT EFI_HII_CALLBACK_PACKET **Packet\r
+IScsiFormRouteConfig (\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN CONST EFI_STRING Configuration,\r
+ OUT EFI_STRING *Progress\r
)\r
/*++\r
\r
-Routine Description:\r
+ Routine Description:\r
+ This function processes the results of changes in configuration.\r
\r
- The form callback function for iSCSI form callback protocol, it processes\r
- the events tiggered in the UI and take some operations to update the form,\r
- store the data, etc.\r
+ Arguments:\r
+ This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.\r
+ Configuration - A null-terminated Unicode string in <ConfigResp> format.\r
+ Progress - A pointer to a string filled in with the offset of the most\r
+ recent '&' before the first failing name/value pair (or the\r
+ beginning of the string if the failure is in the first\r
+ name/value pair) or the terminating NULL if all was successful.\r
\r
-Arguments:\r
+ Returns:\r
+ EFI_SUCCESS - The Results is processed successfully.\r
+ EFI_INVALID_PARAMETER - Configuration is NULL.\r
+ EFI_NOT_FOUND - Routing data doesn't match any storage in this driver.\r
\r
- This - The EFI form callback protocol instance.\r
- KeyValue - A unique value which is sent to the original exporting driver so that it\r
- can identify the type of data to expect. The format of the data tends to\r
- vary based on the op-code that geerated the callback.\r
- Data - A pointer to the data being sent to the original exporting driver.\r
+--*/\r
+{\r
+ return EFI_SUCCESS;\r
+}\r
\r
-Returns:\r
+EFI_STATUS\r
+EFIAPI\r
+IScsiFormCallback (\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN EFI_BROWSER_ACTION Action,\r
+ IN EFI_QUESTION_ID KeyValue,\r
+ IN UINT8 Type,\r
+ IN EFI_IFR_TYPE_VALUE *Value,\r
+ OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
+ )\r
+/*++\r
+\r
+ Routine Description:\r
+ This function processes the results of changes in configuration.\r
\r
- EFI_SUCCESS - The data is valid and the correspondance operation is done.\r
- EFI_INVALID_PARAMETER - The data is invalid.\r
+ Arguments:\r
+ This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.\r
+ Action - Specifies the type of action taken by the browser.\r
+ QuestionId - A unique value which is sent to the original exporting driver\r
+ so that it can identify the type of data to expect.\r
+ Type - The type of value for the question.\r
+ Value - A pointer to the data being sent to the original exporting driver.\r
+ ActionRequest - On return, points to the action requested by the callback function.\r
+\r
+ Returns:\r
+ EFI_SUCCESS - The callback successfully handled the action.\r
+ EFI_OUT_OF_RESOURCES - Not enough storage is available to hold the variable and its data.\r
+ EFI_DEVICE_ERROR - The variable could not be saved.\r
+ EFI_UNSUPPORTED - The specified Action is not supported by the callback.\r
\r
--*/\r
{\r
EFI_STATUS Status;\r
\r
Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);\r
- IfrNvData = (ISCSI_CONFIG_IFR_NVDATA *) Data->NvRamMap;\r
- Status = EFI_SUCCESS;\r
+\r
+ //\r
+ // Retrive uncommitted data from Browser\r
+ //\r
+ BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);\r
+ IfrNvData = AllocateZeroPool (BufferSize);\r
+ ASSERT (IfrNvData != NULL);\r
+ Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) IfrNvData);\r
+ if (EFI_ERROR (Status)) {\r
+ gBS->FreePool (IfrNvData);\r
+ return Status;\r
+ }\r
\r
switch (KeyValue) {\r
case KEY_INITIATOR_NAME:\r
BufferSize,\r
&Private->Current->AuthConfigData\r
);\r
-\r
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
break;\r
\r
default:\r
ConfigFormEntry = IScsiGetConfigFormEntryByIndex ((UINT32) (KeyValue - KEY_DEVICE_ENTRY_BASE));\r
ASSERT (ConfigFormEntry != NULL);\r
\r
- UnicodeSPrint (PortString, 128, L"Port %s", ConfigFormEntry->MacString);\r
+ UnicodeSPrint (PortString, (UINTN) 128, L"Port %s", ConfigFormEntry->MacString);\r
DeviceFormTitleToken = (STRING_REF) STR_ISCSI_DEVICE_FORM_TITLE;\r
-\r
- Private->Hii->NewString (\r
- Private->Hii,\r
- NULL,\r
- Private->RegisteredHandle,\r
- &DeviceFormTitleToken,\r
- PortString\r
- );\r
+ IfrLibSetString (Private->RegisteredHandle, DeviceFormTitleToken, PortString);\r
\r
IScsiConvertDeviceConfigDataToIfrNvData (ConfigFormEntry, IfrNvData);\r
\r
break;\r
}\r
\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // Pass changed uncommitted data back to Form Browser\r
+ //\r
+ BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);\r
+ Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL);\r
+ }\r
+\r
+ NetFreePool (IfrNvData);\r
return Status;\r
}\r
\r
+\r
EFI_STATUS\r
IScsiConfigUpdateForm (\r
IN EFI_HANDLE DriverBindingHandle,\r
NET_LIST_ENTRY *Entry;\r
ISCSI_CONFIG_FORM_ENTRY *ConfigFormEntry;\r
BOOLEAN EntryExisted;\r
- EFI_HII_UPDATE_DATA *UpdateData;\r
EFI_STATUS Status;\r
- EFI_FORM_CALLBACK_PROTOCOL *Callback;\r
- ISCSI_FORM_CALLBACK_INFO *CallbackInfo;\r
+ EFI_HII_UPDATE_DATA UpdateData;\r
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;\r
CHAR16 PortString[128];\r
UINT16 FormIndex;\r
UINTN BufferSize;\r
\r
- //\r
- // Get the EFI_FORM_CALLBACK_PROTOCOL.\r
- //\r
- Status = gBS->HandleProtocol (\r
- DriverBindingHandle,\r
- &gEfiFormCallbackProtocolGuid,\r
- (VOID **)&Callback\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- CallbackInfo = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (Callback);\r
\r
ConfigFormEntry = NULL;\r
EntryExisted = FALSE;\r
// Compose the Port string and create a new STRING_REF.\r
//\r
UnicodeSPrint (PortString, 128, L"Port %s", ConfigFormEntry->MacString);\r
- CallbackInfo->Hii->NewString (\r
- CallbackInfo->Hii,\r
- NULL,\r
- CallbackInfo->RegisteredHandle,\r
- &ConfigFormEntry->PortTitleToken,\r
- PortString\r
- );\r
+ IfrLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleToken, PortString);\r
\r
//\r
// Compose the help string of this port and create a new STRING_REF.\r
//\r
UnicodeSPrint (PortString, 128, L"Set the iSCSI parameters on port %s", ConfigFormEntry->MacString);\r
- CallbackInfo->Hii->NewString (\r
- CallbackInfo->Hii,\r
- NULL,\r
- CallbackInfo->RegisteredHandle,\r
- &ConfigFormEntry->PortTitleHelpToken,\r
- PortString\r
- );\r
+ IfrLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleHelpToken, PortString);\r
\r
NetListInsertTail (&mIScsiConfigFormList, &ConfigFormEntry->Link);\r
mNumberOfIScsiDevices++;\r
//\r
// Allocate space for creation of Buffer\r
//\r
- UpdateData = (EFI_HII_UPDATE_DATA *) NetAllocatePool (0x1000);\r
- NetZeroMem (UpdateData, 0x1000);\r
-\r
- //\r
- // Flag update pending in FormSet\r
- //\r
- UpdateData->FormSetUpdate = TRUE;\r
-\r
- //\r
- // Register CallbackHandle data for FormSet\r
- //\r
- UpdateData->FormCallbackHandle = (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackInfo->CallbackHandle;\r
- UpdateData->FormUpdate = FALSE;\r
- UpdateData->FormTitle = 0;\r
-\r
- //\r
- // first of all, remove all the forms.\r
- //\r
- UpdateData->DataCount = 0xFF;\r
-\r
- CallbackInfo->Hii->UpdateForm (\r
- CallbackInfo->Hii,\r
- CallbackInfo->RegisteredHandle,\r
- (EFI_FORM_LABEL) DEVICE_ENTRY_LABEL,\r
- FALSE,\r
- UpdateData\r
- );\r
-\r
- UpdateData->DataCount = 1;\r
- FormIndex = 0;\r
+ UpdateData.BufferSize = 0x1000;\r
+ UpdateData.Data = NetAllocateZeroPool (0x1000);\r
+ UpdateData.Offset = 0;\r
\r
+ FormIndex = 0;\r
NET_LIST_FOR_EACH (Entry, &mIScsiConfigFormList) {\r
ConfigFormEntry = NET_LIST_USER_STRUCT (Entry, ISCSI_CONFIG_FORM_ENTRY, Link);\r
\r
FORMID_DEVICE_FORM,\r
ConfigFormEntry->PortTitleToken,\r
ConfigFormEntry->PortTitleHelpToken,\r
- EFI_IFR_FLAG_INTERACTIVE,\r
- (UINT16) (KEY_DEVICE_ENTRY_BASE + FormIndex),\r
- &UpdateData->Data\r
+ EFI_IFR_FLAG_CALLBACK,\r
+ KEY_DEVICE_ENTRY_BASE + FormIndex,\r
+ &UpdateData\r
);\r
\r
- CallbackInfo->Hii->UpdateForm (\r
- CallbackInfo->Hii,\r
- CallbackInfo->RegisteredHandle,\r
- (EFI_FORM_LABEL) DEVICE_ENTRY_LABEL,\r
- TRUE,\r
- UpdateData\r
- );\r
-\r
FormIndex++;\r
}\r
\r
- NetFreePool (UpdateData);\r
+ IfrLibUpdateForm (\r
+ mCallbackInfo->RegisteredHandle,\r
+ &mVendorGuid,\r
+ FORMID_MAIN_FORM,\r
+ DEVICE_ENTRY_LABEL,\r
+ FALSE,\r
+ &UpdateData\r
+ );\r
+\r
+ NetFreePool (UpdateData.Data);\r
\r
return EFI_SUCCESS;\r
}\r
\r
--*/\r
{\r
- EFI_STATUS Status;\r
- EFI_HII_PROTOCOL *Hii;\r
- EFI_HII_PACKAGES *PackageList;\r
- EFI_HII_HANDLE HiiHandle;\r
- EFI_HII_UPDATE_DATA *UpdateData;\r
- ISCSI_FORM_CALLBACK_INFO *CallbackInfo;\r
- EFI_GUID StringPackGuid = ISCSI_CONFIG_GUID;\r
-\r
- Status = gBS->LocateProtocol (&gEfiHiiProtocolGuid, NULL, (VOID **)&Hii);\r
+ EFI_STATUS Status;\r
+ EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
+ EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
+ ISCSI_FORM_CALLBACK_INFO *CallbackInfo;\r
+\r
+ Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, &HiiDatabase);\r
if (EFI_ERROR (Status)) {\r
- return Status;;\r
+ return Status;\r
}\r
\r
CallbackInfo = (ISCSI_FORM_CALLBACK_INFO *) NetAllocatePool (sizeof (ISCSI_FORM_CALLBACK_INFO));\r
}\r
\r
CallbackInfo->Signature = ISCSI_FORM_CALLBACK_INFO_SIGNATURE;\r
- CallbackInfo->Hii = Hii;\r
+ CallbackInfo->HiiDatabase = HiiDatabase;\r
CallbackInfo->Current = NULL;\r
\r
- CallbackInfo->FormCallback.NvRead = IScsiFormNvRead;\r
- CallbackInfo->FormCallback.NvWrite = NULL;\r
- CallbackInfo->FormCallback.Callback = IScsiFormCallback;\r
+ CallbackInfo->ConfigAccess.ExtractConfig = IScsiFormExtractConfig;\r
+ CallbackInfo->ConfigAccess.RouteConfig = IScsiFormRouteConfig;\r
+ CallbackInfo->ConfigAccess.Callback = IScsiFormCallback;\r
\r
+ Status = gBS->LocateProtocol (&gEfiHiiConfigRoutingProtocolGuid, NULL, &CallbackInfo->ConfigRouting);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Create driver handle used by HII database\r
+ //\r
+ Status = HiiLibCreateHiiDriverHandle (&CallbackInfo->DriverHandle);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ \r
//\r
- // Install protocol interface\r
+ // Install Config Access protocol to driver handle\r
//\r
Status = gBS->InstallProtocolInterface (\r
- &DriverBindingHandle,\r
- &gEfiFormCallbackProtocolGuid,\r
+ &CallbackInfo->DriverHandle,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
EFI_NATIVE_INTERFACE,\r
- &CallbackInfo->FormCallback\r
+ &CallbackInfo->ConfigAccess\r
);\r
-\r
ASSERT_EFI_ERROR (Status);\r
-\r
- CallbackInfo->CallbackHandle = DriverBindingHandle;\r
- PackageList = PreparePackages (2, &StringPackGuid, iSCSIStrings, IScsiConfigDxeBin);\r
- Status = Hii->NewPack (Hii, PackageList, &HiiHandle);\r
- NetFreePool (PackageList);\r
-\r
- CallbackInfo->RegisteredHandle = HiiHandle;\r
-\r
+ \r
//\r
- // Allocate space for creation of Buffer\r
+ // Publish our HII data\r
//\r
- UpdateData = (EFI_HII_UPDATE_DATA *) NetAllocatePool (0x1000);\r
- ASSERT (UpdateData != NULL);\r
- if (UpdateData == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ PackageList = PreparePackageList (2, &mVendorGuid, iSCSIStrings, IScsiConfigDxeBin);\r
+ ASSERT (PackageList != NULL);\r
+ \r
+ Status = HiiDatabase->NewPackageList (\r
+ HiiDatabase,\r
+ PackageList,\r
+ CallbackInfo->DriverHandle,\r
+ &CallbackInfo->RegisteredHandle\r
+ );\r
+ NetFreePool (PackageList);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
}\r
\r
- NetZeroMem (UpdateData, 0x1000);\r
-\r
- //\r
- // Flag update pending in FormSet\r
- //\r
- UpdateData->FormSetUpdate = TRUE;\r
-\r
- //\r
- // Register CallbackHandle data for FormSet\r
- //\r
- UpdateData->FormCallbackHandle = (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackInfo->CallbackHandle;\r
- UpdateData->FormUpdate = FALSE;\r
- UpdateData->FormTitle = 0;\r
- UpdateData->DataCount = 0x1;\r
-\r
- Hii->UpdateForm (Hii, HiiHandle, (EFI_FORM_LABEL) 0x1000, TRUE, UpdateData);\r
-\r
- NetFreePool (UpdateData);\r
+ mCallbackInfo = CallbackInfo;\r
\r
return Status;\r
}\r
--*/\r
{\r
ISCSI_CONFIG_FORM_ENTRY *ConfigFormEntry;\r
- EFI_STATUS Status;\r
- EFI_HII_PROTOCOL *Hii;\r
- EFI_HII_UPDATE_DATA *UpdateData;\r
- EFI_FORM_CALLBACK_PROTOCOL *FormCallback;\r
- ISCSI_FORM_CALLBACK_INFO *CallbackInfo;\r
\r
while (!NetListIsEmpty (&mIScsiConfigFormList)) {\r
//\r
IScsiConfigUpdateForm (DriverBindingHandle, ConfigFormEntry->Controller, FALSE);\r
}\r
\r
- Status = gBS->LocateProtocol (&gEfiHiiProtocolGuid, NULL, (VOID **)&Hii);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- Status = gBS->HandleProtocol (DriverBindingHandle, &gEfiFormCallbackProtocolGuid, (VOID **)&FormCallback);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- CallbackInfo = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (FormCallback);\r
-\r
//\r
- // remove the form.\r
+ // Remove HII package list\r
//\r
- UpdateData = (EFI_HII_UPDATE_DATA *) NetAllocatePool (0x1000);\r
- ASSERT (UpdateData != NULL);\r
- if (UpdateData == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
-\r
- NetZeroMem (UpdateData, 0x1000);\r
-\r
- UpdateData->FormSetUpdate = FALSE;\r
- UpdateData->FormCallbackHandle = 0;\r
- UpdateData->FormUpdate = FALSE;\r
- UpdateData->FormTitle = 0;\r
- UpdateData->DataCount = 0xFF;\r
-\r
- Hii->UpdateForm (Hii, CallbackInfo->RegisteredHandle, (EFI_FORM_LABEL) 0x1000, FALSE, UpdateData);\r
-\r
- NetFreePool (UpdateData);\r
+ mCallbackInfo->HiiDatabase->RemovePackageList (\r
+ mCallbackInfo->HiiDatabase,\r
+ mCallbackInfo->RegisteredHandle\r
+ );\r
\r
//\r
- // Uninstall the EFI_FORM_CALLBACK_PROTOCOL.\r
+ // Uninstall EFI_HII_CONFIG_ACCESS_PROTOCOL\r
//\r
gBS->UninstallProtocolInterface (\r
- DriverBindingHandle,\r
- &gEfiFormCallbackProtocolGuid,\r
- FormCallback\r
+ mCallbackInfo->DriverHandle,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ &mCallbackInfo->ConfigAccess\r
);\r
+ HiiLibDestroyHiiDriverHandle (mCallbackInfo->DriverHandle);\r
\r
- //\r
- // Remove the package.\r
- //\r
- Hii->RemovePack (Hii, CallbackInfo->RegisteredHandle);\r
-\r
- NetFreePool (CallbackInfo);\r
+ NetFreePool (mCallbackInfo);\r
\r
return EFI_SUCCESS;\r
}\r