summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2008-01-16 10:13:10 +0000
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>2008-01-16 10:13:10 +0000
commitb99270e04620592d98fd1cc57dca843ac794d90b (patch)
treeac59834b4c75c7910283711ca6569b61dc525cea
parent7b77c1f04f8970e139fda51d53b5ea7765c76b53 (diff)
downloadedk2-b99270e04620592d98fd1cc57dca843ac794d90b.zip
edk2-b99270e04620592d98fd1cc57dca843ac794d90b.tar.gz
edk2-b99270e04620592d98fd1cc57dca843ac794d90b.tar.bz2
Update iScsi driver to switch to UEFI 2.1 HII infrastructure.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/branches/UefiHiiEnable4354@4564 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--MdeModulePkg/Universal/iScsi/IScsi.inf8
-rw-r--r--MdeModulePkg/Universal/iScsi/IScsiCHAP.h2
-rw-r--r--MdeModulePkg/Universal/iScsi/IScsiConfig.c446
-rw-r--r--MdeModulePkg/Universal/iScsi/IScsiConfig.h25
-rw-r--r--MdeModulePkg/Universal/iScsi/IScsiConfigDxe.vfr8
-rw-r--r--MdeModulePkg/Universal/iScsi/IScsiConfigNVDataStruc.h26
-rw-r--r--MdeModulePkg/Universal/iScsi/IScsiMisc.h4
7 files changed, 244 insertions, 275 deletions
diff --git a/MdeModulePkg/Universal/iScsi/IScsi.inf b/MdeModulePkg/Universal/iScsi/IScsi.inf
index faa570d..73cd61f 100644
--- a/MdeModulePkg/Universal/iScsi/IScsi.inf
+++ b/MdeModulePkg/Universal/iScsi/IScsi.inf
@@ -77,8 +77,8 @@
DevicePathLib
DebugLib
PrintLib
- FrameworkHiiLib
- FrameworkIfrSupportLib
+ HiiLib
+ UefiIfrSupportLib
NetLib
[Protocols]
@@ -88,8 +88,8 @@
gEfiExtScsiPassThruProtocolGuid
gEfiDevicePathProtocolGuid
gEfiTcp4ServiceBindingProtocolGuid
- gEfiFormCallbackProtocolGuid
- gEfiFormBrowserProtocolGuid
+ gEfiHiiDatabaseProtocolGuid
+ gEfiHiiConfigAccessProtocolGuid
gEfiPciIoProtocolGuid
gEfiAcpiSupportProtocolGuid
gEfiDhcp4ProtocolGuid
diff --git a/MdeModulePkg/Universal/iScsi/IScsiCHAP.h b/MdeModulePkg/Universal/iScsi/IScsiCHAP.h
index 4a15291..130cccf 100644
--- a/MdeModulePkg/Universal/iScsi/IScsiCHAP.h
+++ b/MdeModulePkg/Universal/iScsi/IScsiCHAP.h
@@ -22,7 +22,7 @@ Abstract:
#define ISCSI_CHAP_AUTH_INFO_GUID \
{ \
- 0x786ec0ac, 0x65ae, 0x4d1b, 0xb1, 0x37, 0xd, 0x11, 0xa, 0x48, 0x37, 0x97 \
+ 0x786ec0ac, 0x65ae, 0x4d1b, {0xb1, 0x37, 0xd, 0x11, 0xa, 0x48, 0x37, 0x97} \
}
extern EFI_GUID mIScsiCHAPAuthInfoGuid;
diff --git a/MdeModulePkg/Universal/iScsi/IScsiConfig.c b/MdeModulePkg/Universal/iScsi/IScsiConfig.c
index f9e6cc9..67dcb8b 100644
--- a/MdeModulePkg/Universal/iScsi/IScsiConfig.c
+++ b/MdeModulePkg/Universal/iScsi/IScsiConfig.c
@@ -22,6 +22,7 @@ Abstract:
EFI_GUID mVendorGuid = ISCSI_CONFIG_GUID;
BOOLEAN mIScsiDeviceListUpdated = FALSE;
UINTN mNumberOfIScsiDevices = 0;
+ISCSI_FORM_CALLBACK_INFO *mCallbackInfo;
NET_LIST_ENTRY mIScsiConfigFormList = {
&mIScsiConfigFormList,
@@ -74,21 +75,9 @@ Returns:
--*/
{
- EFI_FORM_BROWSER_PROTOCOL *FormBrowser;
- EFI_STATUS Status;
EFI_INPUT_KEY Key;
- CHAR16 Buffer[10];
-
- Status = gBS->LocateProtocol (
- &gEfiFormBrowserProtocolGuid,
- NULL,
- (VOID **)&FormBrowser
- );
- if (EFI_ERROR (Status)) {
- return ;
- }
- FormBrowser->CreatePopUp (1, TRUE, 10, Buffer, &Key, Warning);
+ IfrLibCreatePopUp (1, &Key, Warning);
}
EFI_STATUS
@@ -335,42 +324,47 @@ Returns:
IScsiAsciiStrToUnicodeStr (AuthConfigData->ReverseCHAPSecret, IfrNvData->ReverseCHAPSecret);
}
+
EFI_STATUS
EFIAPI
-IScsiFormNvRead (
- IN EFI_FORM_CALLBACK_PROTOCOL * This,
- IN CHAR16 *VariableName,
- IN EFI_GUID * VendorGuid,
- OUT UINT32 *Attributes OPTIONAL,
- IN OUT UINTN *DataSize,
- OUT VOID *Buffer
+IScsiFormExtractConfig (
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
+ IN CONST EFI_STRING Request,
+ OUT EFI_STRING *Progress,
+ OUT EFI_STRING *Results
)
/*++
-Routine Description:
-
- NV read function for the iSCSI form callback protocol.
-
-Arguments:
-
- This - The EFI form callback protocol instance.
- VariableName - Name of the variable to read.
- VendorGuid - Guid of the variable to read.
- Attributes - The storage to get the attributes of the variable.
- DataSize - The size of the buffer to store the variable.
- Buffer - The buffer to store the variable to read.
-
-Returns:
-
- EFI_SUCCESS - The variable is read.
- EFI_BUFFER_TOO_SMALL - The buffer provided is too small to hold the variable.
+ Routine Description:
+ This function allows a caller to extract the current configuration for one
+ or more named elements from the target driver.
+
+ Arguments:
+ This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
+ Request - A null-terminated Unicode string in <ConfigRequest> format.
+ Progress - On return, points to a character in the Request string.
+ Points to the string's null terminator if request was successful.
+ Points to the most recent '&' before the first failing name/value
+ pair (or the beginning of the string if the failure is in the
+ first name/value pair) if the request was not successful.
+ Results - A null-terminated Unicode string in <ConfigAltResp> format which
+ has all values filled in for the names in the Request string.
+ String to be allocated by the called function.
+
+ Returns:
+ EFI_SUCCESS - The Results is filled with the requested values.
+ EFI_OUT_OF_RESOURCES - Not enough memory to store the results.
+ EFI_INVALID_PARAMETER - Request is NULL, illegal syntax, or unknown name.
+ EFI_NOT_FOUND - Routing data doesn't match any storage in this driver.
--*/
{
- EFI_STATUS Status;
- CHAR8 InitiatorName[ISCSI_NAME_IFR_MAX_SIZE];
- UINTN BufferSize;
- ISCSI_CONFIG_IFR_NVDATA *IfrNvData;
+ EFI_STATUS Status;
+ CHAR8 InitiatorName[ISCSI_NAME_IFR_MAX_SIZE];
+ UINTN BufferSize;
+ ISCSI_CONFIG_IFR_NVDATA *IfrNvData;
+ ISCSI_FORM_CALLBACK_INFO *Private;
+ EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
if (!mIScsiDeviceListUpdated) {
//
@@ -380,9 +374,14 @@ Returns:
mIScsiDeviceListUpdated = TRUE;
}
- IfrNvData = (ISCSI_CONFIG_IFR_NVDATA *) Buffer;
- BufferSize = ISCSI_NAME_IFR_MAX_SIZE;
+ Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);
+ IfrNvData = AllocateZeroPool (sizeof (ISCSI_CONFIG_IFR_NVDATA));
+ ASSERT (IfrNvData != NULL);
+ if (Private->Current != NULL) {
+ IScsiConvertDeviceConfigDataToIfrNvData (Private->Current, IfrNvData);
+ }
+ BufferSize = ISCSI_NAME_IFR_MAX_SIZE;
Status = gIScsiInitiatorName.Get (&gIScsiInitiatorName, &BufferSize, InitiatorName);
if (EFI_ERROR (Status)) {
IfrNvData->InitiatorName[0] = L'\0';
@@ -390,37 +389,82 @@ Returns:
IScsiAsciiStrToUnicodeStr (InitiatorName, IfrNvData->InitiatorName);
}
- return EFI_SUCCESS;
+ //
+ // Convert buffer data to <ConfigResp> by helper function BlockToConfig()
+ //
+ HiiConfigRouting = Private->ConfigRouting;
+ BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);
+ Status = HiiConfigRouting->BlockToConfig (
+ HiiConfigRouting,
+ Request,
+ (UINT8 *) IfrNvData,
+ BufferSize,
+ Results,
+ Progress
+ );
+ NetFreePool (IfrNvData);
+ return Status;
}
EFI_STATUS
EFIAPI
-IScsiFormCallback (
- IN EFI_FORM_CALLBACK_PROTOCOL *This,
- IN UINT16 KeyValue,
- IN FRAMEWORK_EFI_IFR_DATA_ARRAY *Data,
- OUT EFI_HII_CALLBACK_PACKET **Packet
+IScsiFormRouteConfig (
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
+ IN CONST EFI_STRING Configuration,
+ OUT EFI_STRING *Progress
)
/*++
-Routine Description:
+ Routine Description:
+ This function processes the results of changes in configuration.
- The form callback function for iSCSI form callback protocol, it processes
- the events tiggered in the UI and take some operations to update the form,
- store the data, etc.
+ Arguments:
+ This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
+ Configuration - A null-terminated Unicode string in <ConfigResp> format.
+ Progress - A pointer to a string filled in with the offset of the most
+ recent '&' before the first failing name/value pair (or the
+ beginning of the string if the failure is in the first
+ name/value pair) or the terminating NULL if all was successful.
-Arguments:
+ Returns:
+ EFI_SUCCESS - The Results is processed successfully.
+ EFI_INVALID_PARAMETER - Configuration is NULL.
+ EFI_NOT_FOUND - Routing data doesn't match any storage in this driver.
- This - The EFI form callback protocol instance.
- KeyValue - A unique value which is sent to the original exporting driver so that it
- can identify the type of data to expect. The format of the data tends to
- vary based on the op-code that geerated the callback.
- Data - A pointer to the data being sent to the original exporting driver.
+--*/
+{
+ return EFI_SUCCESS;
+}
-Returns:
+EFI_STATUS
+EFIAPI
+IScsiFormCallback (
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,
+ IN EFI_BROWSER_ACTION Action,
+ IN EFI_QUESTION_ID KeyValue,
+ IN UINT8 Type,
+ IN EFI_IFR_TYPE_VALUE *Value,
+ OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest
+ )
+/*++
+
+ Routine Description:
+ This function processes the results of changes in configuration.
- EFI_SUCCESS - The data is valid and the correspondance operation is done.
- EFI_INVALID_PARAMETER - The data is invalid.
+ Arguments:
+ This - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
+ Action - Specifies the type of action taken by the browser.
+ QuestionId - A unique value which is sent to the original exporting driver
+ so that it can identify the type of data to expect.
+ Type - The type of value for the question.
+ Value - A pointer to the data being sent to the original exporting driver.
+ ActionRequest - On return, points to the action requested by the callback function.
+
+ Returns:
+ EFI_SUCCESS - The callback successfully handled the action.
+ EFI_OUT_OF_RESOURCES - Not enough storage is available to hold the variable and its data.
+ EFI_DEVICE_ERROR - The variable could not be saved.
+ EFI_UNSUPPORTED - The specified Action is not supported by the callback.
--*/
{
@@ -440,8 +484,18 @@ Returns:
EFI_STATUS Status;
Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This);
- IfrNvData = (ISCSI_CONFIG_IFR_NVDATA *) Data->NvRamMap;
- Status = EFI_SUCCESS;
+
+ //
+ // Retrive uncommitted data from Browser
+ //
+ BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);
+ IfrNvData = AllocateZeroPool (BufferSize);
+ ASSERT (IfrNvData != NULL);
+ Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) IfrNvData);
+ if (EFI_ERROR (Status)) {
+ gBS->FreePool (IfrNvData);
+ return Status;
+ }
switch (KeyValue) {
case KEY_INITIATOR_NAME:
@@ -633,7 +687,7 @@ Returns:
BufferSize,
&Private->Current->AuthConfigData
);
-
+ *ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;
break;
default:
@@ -644,16 +698,9 @@ Returns:
ConfigFormEntry = IScsiGetConfigFormEntryByIndex ((UINT32) (KeyValue - KEY_DEVICE_ENTRY_BASE));
ASSERT (ConfigFormEntry != NULL);
- UnicodeSPrint (PortString, 128, L"Port %s", ConfigFormEntry->MacString);
+ UnicodeSPrint (PortString, (UINTN) 128, L"Port %s", ConfigFormEntry->MacString);
DeviceFormTitleToken = (STRING_REF) STR_ISCSI_DEVICE_FORM_TITLE;
-
- Private->Hii->NewString (
- Private->Hii,
- NULL,
- Private->RegisteredHandle,
- &DeviceFormTitleToken,
- PortString
- );
+ IfrLibSetString (Private->RegisteredHandle, DeviceFormTitleToken, PortString);
IScsiConvertDeviceConfigDataToIfrNvData (ConfigFormEntry, IfrNvData);
@@ -663,9 +710,19 @@ Returns:
break;
}
+ if (!EFI_ERROR (Status)) {
+ //
+ // Pass changed uncommitted data back to Form Browser
+ //
+ BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);
+ Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL);
+ }
+
+ NetFreePool (IfrNvData);
return Status;
}
+
EFI_STATUS
IScsiConfigUpdateForm (
IN EFI_HANDLE DriverBindingHandle,
@@ -695,28 +752,13 @@ Returns:
NET_LIST_ENTRY *Entry;
ISCSI_CONFIG_FORM_ENTRY *ConfigFormEntry;
BOOLEAN EntryExisted;
- EFI_HII_UPDATE_DATA *UpdateData;
EFI_STATUS Status;
- EFI_FORM_CALLBACK_PROTOCOL *Callback;
- ISCSI_FORM_CALLBACK_INFO *CallbackInfo;
+ EFI_HII_UPDATE_DATA UpdateData;
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
CHAR16 PortString[128];
UINT16 FormIndex;
UINTN BufferSize;
- //
- // Get the EFI_FORM_CALLBACK_PROTOCOL.
- //
- Status = gBS->HandleProtocol (
- DriverBindingHandle,
- &gEfiFormCallbackProtocolGuid,
- (VOID **)&Callback
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- CallbackInfo = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (Callback);
ConfigFormEntry = NULL;
EntryExisted = FALSE;
@@ -790,25 +832,13 @@ Returns:
// Compose the Port string and create a new STRING_REF.
//
UnicodeSPrint (PortString, 128, L"Port %s", ConfigFormEntry->MacString);
- CallbackInfo->Hii->NewString (
- CallbackInfo->Hii,
- NULL,
- CallbackInfo->RegisteredHandle,
- &ConfigFormEntry->PortTitleToken,
- PortString
- );
+ IfrLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleToken, PortString);
//
// Compose the help string of this port and create a new STRING_REF.
//
UnicodeSPrint (PortString, 128, L"Set the iSCSI parameters on port %s", ConfigFormEntry->MacString);
- CallbackInfo->Hii->NewString (
- CallbackInfo->Hii,
- NULL,
- CallbackInfo->RegisteredHandle,
- &ConfigFormEntry->PortTitleHelpToken,
- PortString
- );
+ IfrLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleHelpToken, PortString);
NetListInsertTail (&mIScsiConfigFormList, &ConfigFormEntry->Link);
mNumberOfIScsiDevices++;
@@ -823,37 +853,11 @@ Returns:
//
// Allocate space for creation of Buffer
//
- UpdateData = (EFI_HII_UPDATE_DATA *) NetAllocatePool (0x1000);
- NetZeroMem (UpdateData, 0x1000);
-
- //
- // Flag update pending in FormSet
- //
- UpdateData->FormSetUpdate = TRUE;
-
- //
- // Register CallbackHandle data for FormSet
- //
- UpdateData->FormCallbackHandle = (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackInfo->CallbackHandle;
- UpdateData->FormUpdate = FALSE;
- UpdateData->FormTitle = 0;
-
- //
- // first of all, remove all the forms.
- //
- UpdateData->DataCount = 0xFF;
-
- CallbackInfo->Hii->UpdateForm (
- CallbackInfo->Hii,
- CallbackInfo->RegisteredHandle,
- (EFI_FORM_LABEL) DEVICE_ENTRY_LABEL,
- FALSE,
- UpdateData
- );
-
- UpdateData->DataCount = 1;
- FormIndex = 0;
+ UpdateData.BufferSize = 0x1000;
+ UpdateData.Data = NetAllocateZeroPool (0x1000);
+ UpdateData.Offset = 0;
+ FormIndex = 0;
NET_LIST_FOR_EACH (Entry, &mIScsiConfigFormList) {
ConfigFormEntry = NET_LIST_USER_STRUCT (Entry, ISCSI_CONFIG_FORM_ENTRY, Link);
@@ -861,23 +865,24 @@ Returns:
FORMID_DEVICE_FORM,
ConfigFormEntry->PortTitleToken,
ConfigFormEntry->PortTitleHelpToken,
- FRAMEWORK_EFI_IFR_FLAG_INTERACTIVE,
- (UINT16) (KEY_DEVICE_ENTRY_BASE + FormIndex),
- &UpdateData->Data
+ EFI_IFR_FLAG_CALLBACK,
+ KEY_DEVICE_ENTRY_BASE + FormIndex,
+ &UpdateData
);
- CallbackInfo->Hii->UpdateForm (
- CallbackInfo->Hii,
- CallbackInfo->RegisteredHandle,
- (EFI_FORM_LABEL) DEVICE_ENTRY_LABEL,
- TRUE,
- UpdateData
- );
-
FormIndex++;
}
- NetFreePool (UpdateData);
+ IfrLibUpdateForm (
+ mCallbackInfo->RegisteredHandle,
+ &mVendorGuid,
+ FORMID_MAIN_FORM,
+ DEVICE_ENTRY_LABEL,
+ FALSE,
+ &UpdateData
+ );
+
+ NetFreePool (UpdateData.Data);
return EFI_SUCCESS;
}
@@ -903,17 +908,14 @@ Returns:
--*/
{
- EFI_STATUS Status;
- EFI_HII_PROTOCOL *Hii;
- EFI_HII_PACKAGES *PackageList;
- FRAMEWORK_EFI_HII_HANDLE HiiHandle;
- EFI_HII_UPDATE_DATA *UpdateData;
- ISCSI_FORM_CALLBACK_INFO *CallbackInfo;
- EFI_GUID StringPackGuid = ISCSI_CONFIG_GUID;
-
- Status = gBS->LocateProtocol (&gEfiHiiProtocolGuid, NULL, (VOID **)&Hii);
+ EFI_STATUS Status;
+ EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
+ EFI_HII_PACKAGE_LIST_HEADER *PackageList;
+ ISCSI_FORM_CALLBACK_INFO *CallbackInfo;
+
+ Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, &HiiDatabase);
if (EFI_ERROR (Status)) {
- return Status;;
+ return Status;
}
CallbackInfo = (ISCSI_FORM_CALLBACK_INFO *) NetAllocatePool (sizeof (ISCSI_FORM_CALLBACK_INFO));
@@ -922,59 +924,55 @@ Returns:
}
CallbackInfo->Signature = ISCSI_FORM_CALLBACK_INFO_SIGNATURE;
- CallbackInfo->Hii = Hii;
+ CallbackInfo->HiiDatabase = HiiDatabase;
CallbackInfo->Current = NULL;
- CallbackInfo->FormCallback.NvRead = IScsiFormNvRead;
- CallbackInfo->FormCallback.NvWrite = NULL;
- CallbackInfo->FormCallback.Callback = IScsiFormCallback;
+ CallbackInfo->ConfigAccess.ExtractConfig = IScsiFormExtractConfig;
+ CallbackInfo->ConfigAccess.RouteConfig = IScsiFormRouteConfig;
+ CallbackInfo->ConfigAccess.Callback = IScsiFormCallback;
+ Status = gBS->LocateProtocol (&gEfiHiiConfigRoutingProtocolGuid, NULL, &CallbackInfo->ConfigRouting);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ //
+ // Create driver handle used by HII database
+ //
+ Status = HiiLibCreateHiiDriverHandle (&CallbackInfo->DriverHandle);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
//
- // Install protocol interface
+ // Install Config Access protocol to driver handle
//
Status = gBS->InstallProtocolInterface (
- &DriverBindingHandle,
- &gEfiFormCallbackProtocolGuid,
+ &CallbackInfo->DriverHandle,
+ &gEfiHiiConfigAccessProtocolGuid,
EFI_NATIVE_INTERFACE,
- &CallbackInfo->FormCallback
+ &CallbackInfo->ConfigAccess
);
-
ASSERT_EFI_ERROR (Status);
-
- CallbackInfo->CallbackHandle = DriverBindingHandle;
- PackageList = PreparePackages (2, &StringPackGuid, iSCSIStrings, IScsiConfigDxeBin);
- Status = Hii->NewPack (Hii, PackageList, &HiiHandle);
- NetFreePool (PackageList);
-
- CallbackInfo->RegisteredHandle = HiiHandle;
-
+
//
- // Allocate space for creation of Buffer
+ // Publish our HII data
//
- UpdateData = (EFI_HII_UPDATE_DATA *) NetAllocatePool (0x1000);
- ASSERT (UpdateData != NULL);
- if (UpdateData == NULL) {
- return EFI_OUT_OF_RESOURCES;
+ PackageList = PreparePackageList (2, &mVendorGuid, iSCSIStrings, IScsiConfigDxeBin);
+ ASSERT (PackageList != NULL);
+
+ Status = HiiDatabase->NewPackageList (
+ HiiDatabase,
+ PackageList,
+ CallbackInfo->DriverHandle,
+ &CallbackInfo->RegisteredHandle
+ );
+ NetFreePool (PackageList);
+ if (EFI_ERROR (Status)) {
+ return Status;
}
- NetZeroMem (UpdateData, 0x1000);
-
- //
- // Flag update pending in FormSet
- //
- UpdateData->FormSetUpdate = TRUE;
-
- //
- // Register CallbackHandle data for FormSet
- //
- UpdateData->FormCallbackHandle = (EFI_PHYSICAL_ADDRESS) (UINTN) CallbackInfo->CallbackHandle;
- UpdateData->FormUpdate = FALSE;
- UpdateData->FormTitle = 0;
- UpdateData->DataCount = 0x1;
-
- Hii->UpdateForm (Hii, HiiHandle, (EFI_FORM_LABEL) 0x1000, TRUE, UpdateData);
-
- NetFreePool (UpdateData);
+ mCallbackInfo = CallbackInfo;
return Status;
}
@@ -1003,11 +1001,6 @@ Returns:
--*/
{
ISCSI_CONFIG_FORM_ENTRY *ConfigFormEntry;
- EFI_STATUS Status;
- EFI_HII_PROTOCOL *Hii;
- EFI_HII_UPDATE_DATA *UpdateData;
- EFI_FORM_CALLBACK_PROTOCOL *FormCallback;
- ISCSI_FORM_CALLBACK_INFO *CallbackInfo;
while (!NetListIsEmpty (&mIScsiConfigFormList)) {
//
@@ -1021,54 +1014,25 @@ Returns:
IScsiConfigUpdateForm (DriverBindingHandle, ConfigFormEntry->Controller, FALSE);
}
- Status = gBS->LocateProtocol (&gEfiHiiProtocolGuid, NULL, (VOID **)&Hii);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- Status = gBS->HandleProtocol (DriverBindingHandle, &gEfiFormCallbackProtocolGuid, (VOID **)&FormCallback);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- CallbackInfo = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (FormCallback);
-
//
- // remove the form.
+ // Remove HII package list
//
- UpdateData = (EFI_HII_UPDATE_DATA *) NetAllocatePool (0x1000);
- ASSERT (UpdateData != NULL);
- if (UpdateData == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- NetZeroMem (UpdateData, 0x1000);
-
- UpdateData->FormSetUpdate = FALSE;
- UpdateData->FormCallbackHandle = 0;
- UpdateData->FormUpdate = FALSE;
- UpdateData->FormTitle = 0;
- UpdateData->DataCount = 0xFF;
-
- Hii->UpdateForm (Hii, CallbackInfo->RegisteredHandle, (EFI_FORM_LABEL) 0x1000, FALSE, UpdateData);
-
- NetFreePool (UpdateData);
+ mCallbackInfo->HiiDatabase->RemovePackageList (
+ mCallbackInfo->HiiDatabase,
+ mCallbackInfo->RegisteredHandle
+ );
//
- // Uninstall the EFI_FORM_CALLBACK_PROTOCOL.
+ // Uninstall EFI_HII_CONFIG_ACCESS_PROTOCOL
//
gBS->UninstallProtocolInterface (
- DriverBindingHandle,
- &gEfiFormCallbackProtocolGuid,
- FormCallback
+ mCallbackInfo->DriverHandle,
+ &gEfiHiiConfigAccessProtocolGuid,
+ &mCallbackInfo->ConfigAccess
);
+ HiiLibDestroyHiiDriverHandle (mCallbackInfo->DriverHandle);
- //
- // Remove the package.
- //
- Hii->RemovePack (Hii, CallbackInfo->RegisteredHandle);
-
- NetFreePool (CallbackInfo);
+ NetFreePool (mCallbackInfo);
return EFI_SUCCESS;
}
diff --git a/MdeModulePkg/Universal/iScsi/IScsiConfig.h b/MdeModulePkg/Universal/iScsi/IScsiConfig.h
index bbd4188..b694b7b 100644
--- a/MdeModulePkg/Universal/iScsi/IScsiConfig.h
+++ b/MdeModulePkg/Universal/iScsi/IScsiConfig.h
@@ -24,10 +24,8 @@ Abstract:
//#include "Tiano.h"
//#include "EfiDriverLib.h"
//#include "Base.h"
-#include <Library/FrameworkHiiLib.h>
-#include <Protocol/FrameworkFormBrowser.h>
-#include <Protocol/FrameworkFormCallback.h>
-#include <Library/FrameworkIfrSupportLib.h>
+#include <Library/HiiLib.h>
+#include <Library/UefiIfrSupportLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseLib.h>
//#include "EfiPrintLib.h"
@@ -51,7 +49,7 @@ extern UINT8 iSCSIStrings[];
CR ( \
Callback, \
ISCSI_FORM_CALLBACK_INFO, \
- FormCallback, \
+ ConfigAccess, \
ISCSI_FORM_CALLBACK_INFO_SIGNATURE \
)
@@ -81,14 +79,15 @@ typedef struct _ISCSI_CONFIG_FORM_ENTRY {
} ISCSI_CONFIG_FORM_ENTRY;
typedef struct _ISCSI_FORM_CALLBACK_INFO {
- UINTN Signature;
- EFI_HANDLE CallbackHandle;
- EFI_FORM_CALLBACK_PROTOCOL FormCallback;
- UINT16 *KeyList;
- VOID *FormBuffer;
- FRAMEWORK_EFI_HII_HANDLE RegisteredHandle;
- EFI_HII_PROTOCOL *Hii;
- ISCSI_CONFIG_FORM_ENTRY *Current;
+ UINTN Signature;
+ EFI_HANDLE DriverHandle;
+ EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
+ EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
+ EFI_HII_CONFIG_ROUTING_PROTOCOL *ConfigRouting;
+ UINT16 *KeyList;
+ VOID *FormBuffer;
+ EFI_HII_HANDLE RegisteredHandle;
+ ISCSI_CONFIG_FORM_ENTRY *Current;
} ISCSI_FORM_CALLBACK_INFO;
EFI_STATUS
diff --git a/MdeModulePkg/Universal/iScsi/IScsiConfigDxe.vfr b/MdeModulePkg/Universal/iScsi/IScsiConfigDxe.vfr
index 3df9b18..db89aff 100644
--- a/MdeModulePkg/Universal/iScsi/IScsiConfigDxe.vfr
+++ b/MdeModulePkg/Universal/iScsi/IScsiConfigDxe.vfr
@@ -22,6 +22,8 @@
#include "IScsiConfigNVDataStruc.h"
#define EFI_NETWORK_DEVICE_CLASS 0x04
+#define LABEL_END 0xffff
+
formset
guid = ISCSI_CONFIG_GUID,
title = STRING_TOKEN(STR_ISCSI_CONFIG_FORM_TITLE),
@@ -29,8 +31,11 @@ formset
class = EFI_NETWORK_DEVICE_CLASS,
subclass = 0x03,
+ varstore ISCSI_CONFIG_IFR_NVDATA,
+ name = ISCSI_CONFIG_IFR_NVDATA,
+ guid = ISCSI_CONFIG_GUID;
form formid = FORMID_MAIN_FORM,
- title = STRING_TOKEN(STR_ISCSI_MAIN_FORM_TITLE); // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code
+ title = STRING_TOKEN(STR_ISCSI_MAIN_FORM_TITLE);
string varid = ISCSI_CONFIG_IFR_NVDATA.InitiatorName,
prompt = STRING_TOKEN(STR_ISCSI_CONFIG_INIT_NAME),
@@ -42,6 +47,7 @@ formset
endstring;
label DEVICE_ENTRY_LABEL;
+ label LABEL_END;
endform;
diff --git a/MdeModulePkg/Universal/iScsi/IScsiConfigNVDataStruc.h b/MdeModulePkg/Universal/iScsi/IScsiConfigNVDataStruc.h
index 444cb69..7e1d2f8 100644
--- a/MdeModulePkg/Universal/iScsi/IScsiConfigNVDataStruc.h
+++ b/MdeModulePkg/Universal/iScsi/IScsiConfigNVDataStruc.h
@@ -55,19 +55,19 @@ Abstract:
#define DEVICE_ENTRY_LABEL 0x1234
-#define KEY_INITIATOR_NAME 0x01
-#define KEY_DHCP_ENABLE 0x02
-#define KEY_LOCAL_IP 0x03
-#define KEY_SUBNET_MASK 0x04
-#define KEY_GATE_WAY 0x05
-#define KEY_TARGET_IP 0x06
-#define KEY_CHAP_NAME 0x07
-#define KEY_CHAP_SECRET 0x08
-#define KEY_REVERSE_CHAP_NAME 0x09
-#define KEY_REVERSE_CHAP_SECRET 0x0a
-#define KEY_SAVE_CHANGES 0x0b
-#define KEY_TARGET_NAME 0x0c
-#define KEY_BOOT_LUN 0x0d
+#define KEY_INITIATOR_NAME 0x101
+#define KEY_DHCP_ENABLE 0x102
+#define KEY_LOCAL_IP 0x103
+#define KEY_SUBNET_MASK 0x104
+#define KEY_GATE_WAY 0x105
+#define KEY_TARGET_IP 0x106
+#define KEY_CHAP_NAME 0x107
+#define KEY_CHAP_SECRET 0x108
+#define KEY_REVERSE_CHAP_NAME 0x109
+#define KEY_REVERSE_CHAP_SECRET 0x10a
+#define KEY_SAVE_CHANGES 0x10b
+#define KEY_TARGET_NAME 0x10c
+#define KEY_BOOT_LUN 0x10d
#define KEY_DEVICE_ENTRY_BASE 0x1000
diff --git a/MdeModulePkg/Universal/iScsi/IScsiMisc.h b/MdeModulePkg/Universal/iScsi/IScsiMisc.h
index 33c5184..1f98a8e 100644
--- a/MdeModulePkg/Universal/iScsi/IScsiMisc.h
+++ b/MdeModulePkg/Universal/iScsi/IScsiMisc.h
@@ -39,13 +39,13 @@ typedef struct _ISCSI_SESSION_CONFIG_NVDATA {
} ISCSI_SESSION_CONFIG_NVDATA;
#pragma pack()
-typedef struct _ISCSI_SESSION_CONFIG_DATA {
+struct _ISCSI_SESSION_CONFIG_DATA {
ISCSI_SESSION_CONFIG_NVDATA NvData;
EFI_IPv4_ADDRESS PrimaryDns;
EFI_IPv4_ADDRESS SecondaryDns;
EFI_IPv4_ADDRESS DhcpServer;
-} ISCSI_SESSION_CONFIG_DATA;
+};
UINT8
IScsiGetSubnetMaskPrefixLength (