Update UefiHiiLib to support new defined IFR related HII APIs.

Apply new defined IFR related HII APIs in PlatOverMngr, DriverSample, IScsiDxe and Setup drivers.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8066 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4
2009-04-13 06:05:15 +00:00
parent 3f07728f2a
commit 7e3bcccb0e
25 changed files with 3837 additions and 461 deletions

View File

@@ -15,6 +15,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include "IScsiImpl.h"
EFI_GUID mVendorGuid = ISCSI_CONFIG_GUID;
CHAR16 mVendorStorageName[] = L"ISCSI_CONFIG_IFR_NVDATA";
BOOLEAN mIScsiDeviceListUpdated = FALSE;
UINTN mNumberOfIScsiDevices = 0;
ISCSI_FORM_CALLBACK_INFO *mCallbackInfo = NULL;
@@ -504,14 +505,12 @@ IScsiFormCallback (
//
// 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;
IfrNvData = (ISCSI_CONFIG_IFR_NVDATA *) HiiGetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA));
if (IfrNvData == NULL) {
return EFI_NOT_FOUND;
}
Status = EFI_SUCCESS;
switch (QuestionId) {
case KEY_INITIATOR_NAME:
@@ -730,11 +729,10 @@ IScsiFormCallback (
//
// Pass changed uncommitted data back to Form Browser
//
BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);
Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL);
HiiSetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA), (UINT8 *) IfrNvData, NULL);
}
gBS->FreePool (IfrNvData);
FreePool (IfrNvData);
return Status;
}
@@ -761,12 +759,14 @@ IScsiConfigUpdateForm (
ISCSI_CONFIG_FORM_ENTRY *ConfigFormEntry;
BOOLEAN EntryExisted;
EFI_STATUS Status;
EFI_HII_UPDATE_DATA UpdateData;
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
CHAR16 PortString[128];
UINT16 FormIndex;
UINTN BufferSize;
VOID *StartOpCodeHandle;
VOID *EndOpCodeHandle;
EFI_IFR_GUID_LABEL *StartLabel;
EFI_IFR_GUID_LABEL *EndLabel;
ConfigFormEntry = NULL;
EntryExisted = FALSE;
@@ -861,36 +861,56 @@ IScsiConfigUpdateForm (
//
// Allocate space for creation of Buffer
//
UpdateData.BufferSize = 0x1000;
UpdateData.Data = AllocateZeroPool (0x1000);
UpdateData.Offset = 0;
//
// Init OpCode Handle
//
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
ASSERT (StartOpCodeHandle != NULL);
EndOpCodeHandle = HiiAllocateOpCodeHandle ();
ASSERT (EndOpCodeHandle != NULL);
//
// Create Hii Extend Label OpCode as the start opcode
//
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
StartLabel->Number = DEVICE_ENTRY_LABEL;
//
// Create Hii Extend Label OpCode as the end opcode
//
EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
EndLabel->Number = LABEL_END;
FormIndex = 0;
NET_LIST_FOR_EACH (Entry, &mIScsiConfigFormList) {
ConfigFormEntry = NET_LIST_USER_STRUCT (Entry, ISCSI_CONFIG_FORM_ENTRY, Link);
CreateGotoOpCode (
FORMID_DEVICE_FORM,
ConfigFormEntry->PortTitleToken,
ConfigFormEntry->PortTitleHelpToken,
EFI_IFR_FLAG_CALLBACK,
(UINT16)(KEY_DEVICE_ENTRY_BASE + FormIndex),
&UpdateData
HiiCreateGotoOpCode (
StartOpCodeHandle, // Container for dynamic created opcodes
FORMID_DEVICE_FORM, // Target Form ID
ConfigFormEntry->PortTitleToken, // Prompt text
ConfigFormEntry->PortTitleHelpToken, // Help text
EFI_IFR_FLAG_CALLBACK, // Question flag
(UINT16)(KEY_DEVICE_ENTRY_BASE + FormIndex) // Question ID
);
FormIndex++;
}
IfrLibUpdateForm (
HiiUpdateForm (
mCallbackInfo->RegisteredHandle,
&mVendorGuid,
FORMID_MAIN_FORM,
DEVICE_ENTRY_LABEL,
FALSE,
&UpdateData
StartOpCodeHandle, // Label DEVICE_ENTRY_LABEL
EndOpCodeHandle // LABEL_END
);
gBS->FreePool (UpdateData.Data);
HiiFreeOpCodeHandle (StartOpCodeHandle);
HiiFreeOpCodeHandle (EndOpCodeHandle);
return EFI_SUCCESS;
}