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:
@ -38,6 +38,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Protocol/DriverBinding.h>
|
#include <Protocol/DriverBinding.h>
|
||||||
#include <Protocol/DevicePathToText.h>
|
#include <Protocol/DevicePathToText.h>
|
||||||
#include <Protocol/DevicePath.h>
|
#include <Protocol/DevicePath.h>
|
||||||
|
#include <Guid/MdeModuleHii.h>
|
||||||
|
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
@ -46,12 +47,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Library/UefiApplicationEntryPoint.h>
|
#include <Library/UefiApplicationEntryPoint.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/PlatformDriverOverrideLib.h>
|
#include <Library/PlatformDriverOverrideLib.h>
|
||||||
#include <Library/HiiLib.h>
|
|
||||||
#include <Library/IfrSupportLib.h>
|
|
||||||
#include <Library/ExtendedIfrSupportLib.h>
|
|
||||||
#include <Library/BaseMemoryLib.h>
|
#include <Library/BaseMemoryLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
|
#include <Library/HiiLib.h>
|
||||||
|
|
||||||
#include "PlatOverMngr.h"
|
#include "PlatOverMngr.h"
|
||||||
|
|
||||||
#define EFI_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('C', 'l', 'b', 'k')
|
#define EFI_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('C', 'l', 'b', 'k')
|
||||||
@ -88,6 +88,7 @@ extern UINT8 PlatOverMngrStrings[];
|
|||||||
// module global data
|
// module global data
|
||||||
//
|
//
|
||||||
EFI_GUID mPlatformOverridesManagerGuid = PLAT_OVER_MNGR_GUID;
|
EFI_GUID mPlatformOverridesManagerGuid = PLAT_OVER_MNGR_GUID;
|
||||||
|
CHAR16 mVariableName[] = L"Data";
|
||||||
LIST_ENTRY mMappingDataBase = INITIALIZE_LIST_HEAD_VARIABLE (mMappingDataBase);
|
LIST_ENTRY mMappingDataBase = INITIALIZE_LIST_HEAD_VARIABLE (mMappingDataBase);
|
||||||
|
|
||||||
EFI_HANDLE *mDevicePathHandleBuffer;
|
EFI_HANDLE *mDevicePathHandleBuffer;
|
||||||
@ -103,6 +104,7 @@ EFI_DEVICE_PATH_PROTOCOL *mControllerDevicePathProtocol[MAX_CHOICE_NUM];
|
|||||||
UINTN mSelectedDriverImageNum;
|
UINTN mSelectedDriverImageNum;
|
||||||
UINTN mLastSavedDriverImageNum;
|
UINTN mLastSavedDriverImageNum;
|
||||||
UINT16 mCurrentPage;
|
UINT16 mCurrentPage;
|
||||||
|
EFI_CALLBACK_INFO *mCallbackInfo;
|
||||||
|
|
||||||
HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {
|
HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {
|
||||||
{
|
{
|
||||||
@ -114,10 +116,7 @@ HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath = {
|
|||||||
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
|
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
//
|
EFI_CALLER_ID_GUID
|
||||||
// {99936717-BF3D-4b04-9787-76CEE324D76F}
|
|
||||||
//
|
|
||||||
{ 0x99936717, 0xbf3d, 0x4b04, { 0x97, 0x87, 0x76, 0xce, 0xe3, 0x24, 0xd7, 0x6f } }
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
END_DEVICE_PATH_TYPE,
|
END_DEVICE_PATH_TYPE,
|
||||||
@ -345,7 +344,6 @@ UpdateDeviceSelectPage (
|
|||||||
IN PLAT_OVER_MNGR_DATA *FakeNvData
|
IN PLAT_OVER_MNGR_DATA *FakeNvData
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_HII_UPDATE_DATA UpdateData;
|
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN DevicePathHandleCount;
|
UINTN DevicePathHandleCount;
|
||||||
@ -356,9 +354,13 @@ UpdateDeviceSelectPage (
|
|||||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||||
EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;
|
EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;
|
||||||
UINTN Len;
|
UINTN Len;
|
||||||
|
VOID *StartOpCodeHandle;
|
||||||
|
VOID *EndOpCodeHandle;
|
||||||
|
EFI_IFR_GUID_LABEL *StartLabel;
|
||||||
|
EFI_IFR_GUID_LABEL *EndLabel;
|
||||||
|
|
||||||
//
|
//
|
||||||
// set current page form ID.
|
// Set current page form ID.
|
||||||
//
|
//
|
||||||
mCurrentPage = FORM_ID_DEVICE;
|
mCurrentPage = FORM_ID_DEVICE;
|
||||||
|
|
||||||
@ -366,25 +368,40 @@ UpdateDeviceSelectPage (
|
|||||||
// Initial the mapping database in memory
|
// Initial the mapping database in memory
|
||||||
//
|
//
|
||||||
FreeMappingDatabase (&mMappingDataBase);
|
FreeMappingDatabase (&mMappingDataBase);
|
||||||
Status = InitOverridesMapping (&mMappingDataBase);
|
InitOverridesMapping (&mMappingDataBase);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear all the content in the first page
|
// Init OpCode Handle
|
||||||
//
|
//
|
||||||
UpdateData.BufferSize = UPDATE_DATA_SIZE;
|
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||||
UpdateData.Offset = 0;
|
ASSERT (StartOpCodeHandle != NULL);
|
||||||
UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);
|
|
||||||
ASSERT (UpdateData.Data != 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 = FORM_ID_DEVICE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear first page form
|
// Clear first page form
|
||||||
//
|
//
|
||||||
IfrLibUpdateForm (
|
HiiUpdateForm (
|
||||||
Private->RegisteredHandle,
|
Private->RegisteredHandle,
|
||||||
&mPlatformOverridesManagerGuid,
|
&mPlatformOverridesManagerGuid,
|
||||||
FORM_ID_DEVICE,
|
FORM_ID_DEVICE,
|
||||||
FORM_ID_DEVICE,
|
StartOpCodeHandle, // Label FORM_ID_DEVICE
|
||||||
FALSE,
|
EndOpCodeHandle // LABEL_END
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -499,30 +516,31 @@ UpdateDeviceSelectPage (
|
|||||||
// Save the device path string toke for next access use
|
// Save the device path string toke for next access use
|
||||||
//
|
//
|
||||||
mControllerToken[Index] = NewStringToken;
|
mControllerToken[Index] = NewStringToken;
|
||||||
|
|
||||||
CreateGotoOpCode (
|
HiiCreateGotoOpCode (
|
||||||
|
StartOpCodeHandle,
|
||||||
FORM_ID_DRIVER,
|
FORM_ID_DRIVER,
|
||||||
NewStringToken,
|
NewStringToken,
|
||||||
STRING_TOKEN (STR_GOTO_HELP_DRIVER),
|
STRING_TOKEN (STR_GOTO_HELP_DRIVER),
|
||||||
EFI_IFR_FLAG_CALLBACK,
|
EFI_IFR_FLAG_CALLBACK,
|
||||||
(UINT16) (Index + KEY_VALUE_DEVICE_OFFSET),
|
(UINT16) (Index + KEY_VALUE_DEVICE_OFFSET)
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Update first page form
|
// Update first page form
|
||||||
//
|
//
|
||||||
IfrLibUpdateForm (
|
HiiUpdateForm (
|
||||||
Private->RegisteredHandle,
|
Private->RegisteredHandle,
|
||||||
&mPlatformOverridesManagerGuid,
|
&mPlatformOverridesManagerGuid,
|
||||||
FORM_ID_DEVICE,
|
FORM_ID_DEVICE,
|
||||||
FORM_ID_DEVICE,
|
StartOpCodeHandle, // Label FORM_ID_DEVICE
|
||||||
FALSE,
|
EndOpCodeHandle // LABEL_END
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
FreePool (UpdateData.Data);
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||||
|
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,7 +631,6 @@ UpdateBindingDriverSelectPage (
|
|||||||
IN PLAT_OVER_MNGR_DATA *FakeNvData
|
IN PLAT_OVER_MNGR_DATA *FakeNvData
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_HII_UPDATE_DATA UpdateData;
|
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
CHAR16 *NewString;
|
CHAR16 *NewString;
|
||||||
@ -626,6 +643,10 @@ UpdateBindingDriverSelectPage (
|
|||||||
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;
|
||||||
EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;
|
EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL *BusSpecificDriverOverride;
|
||||||
EFI_HANDLE DriverBindingHandle;
|
EFI_HANDLE DriverBindingHandle;
|
||||||
|
VOID *StartOpCodeHandle;
|
||||||
|
VOID *EndOpCodeHandle;
|
||||||
|
EFI_IFR_GUID_LABEL *StartLabel;
|
||||||
|
EFI_IFR_GUID_LABEL *EndLabel;
|
||||||
|
|
||||||
//
|
//
|
||||||
// If user select a controller item in the first page the following code will be run.
|
// If user select a controller item in the first page the following code will be run.
|
||||||
@ -641,26 +662,42 @@ UpdateBindingDriverSelectPage (
|
|||||||
// Switch the item callback key value to its NO. in mDevicePathHandleBuffer
|
// Switch the item callback key value to its NO. in mDevicePathHandleBuffer
|
||||||
//
|
//
|
||||||
mSelectedCtrIndex = KeyValue - KEY_VALUE_DEVICE_OFFSET;
|
mSelectedCtrIndex = KeyValue - KEY_VALUE_DEVICE_OFFSET;
|
||||||
ASSERT (mSelectedCtrIndex > 0 && mSelectedCtrIndex < MAX_CHOICE_NUM);
|
ASSERT (mSelectedCtrIndex < MAX_CHOICE_NUM);
|
||||||
|
|
||||||
mLastSavedDriverImageNum = 0;
|
mLastSavedDriverImageNum = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear all the content in dynamic page
|
// Init OpCode Handle
|
||||||
//
|
//
|
||||||
UpdateData.BufferSize = UPDATE_DATA_SIZE;
|
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||||
UpdateData.Offset = 0;
|
ASSERT (StartOpCodeHandle != NULL);
|
||||||
UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);
|
|
||||||
ASSERT (UpdateData.Data != 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 = FORM_ID_DRIVER;
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear second page form
|
// Clear second page form
|
||||||
//
|
//
|
||||||
IfrLibUpdateForm (
|
HiiUpdateForm (
|
||||||
Private->RegisteredHandle,
|
Private->RegisteredHandle,
|
||||||
&mPlatformOverridesManagerGuid,
|
&mPlatformOverridesManagerGuid,
|
||||||
FORM_ID_DRIVER,
|
FORM_ID_DRIVER,
|
||||||
FORM_ID_DRIVER,
|
StartOpCodeHandle,
|
||||||
FALSE,
|
EndOpCodeHandle
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -816,7 +853,8 @@ UpdateBindingDriverSelectPage (
|
|||||||
FreePool (NewString);
|
FreePool (NewString);
|
||||||
FreePool (DriverName);
|
FreePool (DriverName);
|
||||||
|
|
||||||
CreateCheckBoxOpCode (
|
HiiCreateCheckBoxOpCode (
|
||||||
|
StartOpCodeHandle,
|
||||||
(UINT16) (DRIVER_SELECTION_QUESTION_ID + Index),
|
(UINT16) (DRIVER_SELECTION_QUESTION_ID + Index),
|
||||||
VARSTORE_ID_PLAT_OVER_MNGR,
|
VARSTORE_ID_PLAT_OVER_MNGR,
|
||||||
(UINT16) (DRIVER_SELECTION_VAR_OFFSET + Index),
|
(UINT16) (DRIVER_SELECTION_VAR_OFFSET + Index),
|
||||||
@ -824,23 +862,23 @@ UpdateBindingDriverSelectPage (
|
|||||||
NewStringHelpToken,
|
NewStringHelpToken,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
&UpdateData
|
NULL
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Update second page form
|
// Update second page form
|
||||||
//
|
//
|
||||||
IfrLibUpdateForm (
|
HiiUpdateForm (
|
||||||
Private->RegisteredHandle,
|
Private->RegisteredHandle,
|
||||||
&mPlatformOverridesManagerGuid,
|
&mPlatformOverridesManagerGuid,
|
||||||
FORM_ID_DRIVER,
|
FORM_ID_DRIVER,
|
||||||
FORM_ID_DRIVER,
|
StartOpCodeHandle, // Label FORM_ID_DRIVER
|
||||||
FALSE,
|
EndOpCodeHandle // LABEL_END
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
FreePool (UpdateData.Data);
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||||
|
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -862,15 +900,19 @@ UpdatePrioritySelectPage (
|
|||||||
IN PLAT_OVER_MNGR_DATA *FakeNvData
|
IN PLAT_OVER_MNGR_DATA *FakeNvData
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_HII_UPDATE_DATA UpdateData;
|
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;
|
||||||
IFR_OPTION *IfrOptionList;
|
|
||||||
UINTN SelectedDriverImageNum;
|
UINTN SelectedDriverImageNum;
|
||||||
UINT32 DriverImageNO;
|
UINT32 DriverImageNO;
|
||||||
UINTN MinNO;
|
UINTN MinNO;
|
||||||
UINTN Index1;
|
UINTN Index1;
|
||||||
UINTN TempNO[100];
|
UINTN TempNO[100];
|
||||||
|
UINTN OrderNO[100];
|
||||||
|
VOID *StartOpCodeHandle;
|
||||||
|
VOID *EndOpCodeHandle;
|
||||||
|
VOID *OptionsOpCodeHandle;
|
||||||
|
EFI_IFR_GUID_LABEL *StartLabel;
|
||||||
|
EFI_IFR_GUID_LABEL *EndLabel;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Following code will be run if user select 'order ... priority' item in second page
|
// Following code will be run if user select 'order ... priority' item in second page
|
||||||
@ -878,20 +920,38 @@ UpdatePrioritySelectPage (
|
|||||||
//
|
//
|
||||||
mCurrentPage = FORM_ID_ORDER;
|
mCurrentPage = FORM_ID_ORDER;
|
||||||
|
|
||||||
UpdateData.BufferSize = UPDATE_DATA_SIZE;
|
//
|
||||||
UpdateData.Offset = 0;
|
// Init OpCode Handle
|
||||||
UpdateData.Data = AllocateZeroPool (UPDATE_DATA_SIZE);
|
//
|
||||||
ASSERT (UpdateData.Data != NULL);
|
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 = FORM_ID_ORDER;
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Clear third page form
|
// Clear third page form
|
||||||
//
|
//
|
||||||
IfrLibUpdateForm (
|
HiiUpdateForm (
|
||||||
Private->RegisteredHandle,
|
Private->RegisteredHandle,
|
||||||
&mPlatformOverridesManagerGuid,
|
&mPlatformOverridesManagerGuid,
|
||||||
FORM_ID_ORDER,
|
FORM_ID_ORDER,
|
||||||
FORM_ID_ORDER,
|
StartOpCodeHandle,
|
||||||
FALSE,
|
EndOpCodeHandle
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -908,21 +968,26 @@ UpdatePrioritySelectPage (
|
|||||||
if (SelectedDriverImageNum == 0) {
|
if (SelectedDriverImageNum == 0) {
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
IfrOptionList = AllocateZeroPool (sizeof (IFR_OPTION) * mSelectedDriverImageNum);
|
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||||
ASSERT (IfrOptionList != NULL);
|
ASSERT (OptionsOpCodeHandle != NULL);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Create order list for those selected drivers
|
// Create order list for those selected drivers
|
||||||
//
|
//
|
||||||
SelectedDriverImageNum = 0;
|
SelectedDriverImageNum = 0;
|
||||||
for (Index = 0; Index < mDriverImageHandleCount; Index++) {
|
for (Index = 0; Index < mDriverImageHandleCount; Index++) {
|
||||||
if (FakeNvData->DriSelection[Index] != 0) {
|
if (FakeNvData->DriSelection[Index] != 0) {
|
||||||
IfrOptionList[SelectedDriverImageNum].StringToken = mDriverImageToken[Index];
|
|
||||||
//
|
//
|
||||||
// Use the NO. in driver binding buffer as value, will use it later
|
// Use the NO. in driver binding buffer as value, will use it later
|
||||||
//
|
//
|
||||||
IfrOptionList[SelectedDriverImageNum].Value.u8 = (UINT8) (Index + 1);
|
HiiCreateOneOfOptionOpCode (
|
||||||
IfrOptionList[SelectedDriverImageNum].Flags = 0;
|
OptionsOpCodeHandle,
|
||||||
|
mDriverImageToken[Index],
|
||||||
|
0,
|
||||||
|
EFI_IFR_NUMERIC_SIZE_1,
|
||||||
|
Index + 1
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get the EFI Loaded Image Device Path Protocol
|
// Get the EFI Loaded Image Device Path Protocol
|
||||||
@ -951,6 +1016,7 @@ UpdatePrioritySelectPage (
|
|||||||
mLastSavedDriverImageNum++;
|
mLastSavedDriverImageNum++;
|
||||||
}
|
}
|
||||||
TempNO[SelectedDriverImageNum] = DriverImageNO;
|
TempNO[SelectedDriverImageNum] = DriverImageNO;
|
||||||
|
OrderNO[SelectedDriverImageNum] = Index + 1;
|
||||||
SelectedDriverImageNum ++;
|
SelectedDriverImageNum ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -978,11 +1044,15 @@ UpdatePrioritySelectPage (
|
|||||||
//
|
//
|
||||||
// the IfrOptionList[MinNO].Value = the driver NO. in driver binding buffer
|
// the IfrOptionList[MinNO].Value = the driver NO. in driver binding buffer
|
||||||
//
|
//
|
||||||
FakeNvData->DriOrder[Index] =IfrOptionList[MinNO].Value.u8;
|
FakeNvData->DriOrder[Index] = (UINT8) OrderNO[MinNO];
|
||||||
TempNO[MinNO] = MAX_CHOICE_NUM + 1;
|
TempNO[MinNO] = MAX_CHOICE_NUM + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateOrderedListOpCode (
|
//
|
||||||
|
// Create Order List OpCode
|
||||||
|
//
|
||||||
|
HiiCreateOrderedListOpCode (
|
||||||
|
StartOpCodeHandle,
|
||||||
(UINT16) DRIVER_ORDER_QUESTION_ID,
|
(UINT16) DRIVER_ORDER_QUESTION_ID,
|
||||||
VARSTORE_ID_PLAT_OVER_MNGR,
|
VARSTORE_ID_PLAT_OVER_MNGR,
|
||||||
(UINT16) DRIVER_ORDER_VAR_OFFSET,
|
(UINT16) DRIVER_ORDER_VAR_OFFSET,
|
||||||
@ -992,25 +1062,25 @@ UpdatePrioritySelectPage (
|
|||||||
0,
|
0,
|
||||||
EFI_IFR_NUMERIC_SIZE_1,
|
EFI_IFR_NUMERIC_SIZE_1,
|
||||||
(UINT8) MAX_CHOICE_NUM,
|
(UINT8) MAX_CHOICE_NUM,
|
||||||
IfrOptionList,
|
OptionsOpCodeHandle,
|
||||||
SelectedDriverImageNum,
|
NULL
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Update third page form
|
// Update third page form
|
||||||
//
|
//
|
||||||
IfrLibUpdateForm (
|
HiiUpdateForm (
|
||||||
Private->RegisteredHandle,
|
Private->RegisteredHandle,
|
||||||
&mPlatformOverridesManagerGuid,
|
&mPlatformOverridesManagerGuid,
|
||||||
FORM_ID_ORDER,
|
FORM_ID_ORDER,
|
||||||
FORM_ID_ORDER,
|
StartOpCodeHandle, // Label FORM_ID_ORDER
|
||||||
FALSE,
|
EndOpCodeHandle // LABEL_END
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
FreePool (IfrOptionList);
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||||
FreePool (UpdateData.Data);
|
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
||||||
|
HiiFreeOpCodeHandle (OptionsOpCodeHandle);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1102,7 +1172,7 @@ PlatOverMngrExtractConfig (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_CALLBACK_INFO *Private;
|
EFI_CALLBACK_INFO *Private;
|
||||||
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
|
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;
|
||||||
|
|
||||||
if (Request == NULL) {
|
if (Request == NULL) {
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
@ -1148,18 +1218,13 @@ PlatOverMngrRouteConfig (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_CALLBACK_INFO *Private;
|
EFI_CALLBACK_INFO *Private;
|
||||||
EFI_STATUS Status;
|
|
||||||
UINT16 KeyValue;
|
UINT16 KeyValue;
|
||||||
UINTN BufferSize;
|
|
||||||
PLAT_OVER_MNGR_DATA *FakeNvData;
|
PLAT_OVER_MNGR_DATA *FakeNvData;
|
||||||
|
|
||||||
Private = EFI_CALLBACK_INFO_FROM_THIS (This);
|
Private = EFI_CALLBACK_INFO_FROM_THIS (This);
|
||||||
|
FakeNvData = (PLAT_OVER_MNGR_DATA *) HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA));
|
||||||
FakeNvData = &Private->FakeNvData;
|
if (FakeNvData == NULL) {
|
||||||
BufferSize = sizeof (PLAT_OVER_MNGR_DATA);
|
return EFI_NOT_FOUND;
|
||||||
Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) FakeNvData);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mCurrentPage == FORM_ID_DRIVER) {
|
if (mCurrentPage == FORM_ID_DRIVER) {
|
||||||
@ -1178,6 +1243,11 @@ PlatOverMngrRouteConfig (
|
|||||||
KeyValue = KEY_VALUE_ORDER_SAVE_AND_EXIT;
|
KeyValue = KEY_VALUE_ORDER_SAVE_AND_EXIT;
|
||||||
CommintChanges (Private, KeyValue, FakeNvData);
|
CommintChanges (Private, KeyValue, FakeNvData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (FakeNvData != NULL) {
|
||||||
|
FreePool (FakeNvData);
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1216,17 +1286,13 @@ PlatOverMngrCallback (
|
|||||||
EFI_CALLBACK_INFO *Private;
|
EFI_CALLBACK_INFO *Private;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_STRING_ID NewStringToken;
|
EFI_STRING_ID NewStringToken;
|
||||||
UINTN BufferSize;
|
|
||||||
PLAT_OVER_MNGR_DATA *FakeNvData;
|
|
||||||
EFI_INPUT_KEY Key;
|
EFI_INPUT_KEY Key;
|
||||||
|
PLAT_OVER_MNGR_DATA *FakeNvData;
|
||||||
|
|
||||||
Private = EFI_CALLBACK_INFO_FROM_THIS (This);
|
Private = EFI_CALLBACK_INFO_FROM_THIS (This);
|
||||||
|
FakeNvData = (PLAT_OVER_MNGR_DATA *) HiiGetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA));
|
||||||
FakeNvData = &Private->FakeNvData;
|
if (FakeNvData == NULL) {
|
||||||
BufferSize = sizeof (PLAT_OVER_MNGR_DATA);
|
return EFI_NOT_FOUND;
|
||||||
Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) FakeNvData);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyValue == KEY_VALUE_DEVICE_REFRESH ||
|
if (KeyValue == KEY_VALUE_DEVICE_REFRESH ||
|
||||||
@ -1285,8 +1351,15 @@ PlatOverMngrCallback (
|
|||||||
//
|
//
|
||||||
// Pass changed uncommitted data back to Form Browser
|
// Pass changed uncommitted data back to Form Browser
|
||||||
//
|
//
|
||||||
BufferSize = sizeof (PLAT_OVER_MNGR_DATA);
|
HiiSetBrowserData (&mPlatformOverridesManagerGuid, mVariableName, sizeof (PLAT_OVER_MNGR_DATA), (UINT8 *) FakeNvData, NULL);
|
||||||
Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) FakeNvData, NULL);
|
|
||||||
|
//
|
||||||
|
// Update local configuration buffer.
|
||||||
|
//
|
||||||
|
CopyMem (&Private->FakeNvData, FakeNvData, sizeof (PLAT_OVER_MNGR_DATA));
|
||||||
|
if (FakeNvData != NULL) {
|
||||||
|
FreePool (FakeNvData);
|
||||||
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1312,7 +1385,6 @@ PlatOverMngrInit (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
|
EFI_HII_DATABASE_PROTOCOL *HiiDatabase;
|
||||||
EFI_HII_PACKAGE_LIST_HEADER *PackageList;
|
EFI_HII_PACKAGE_LIST_HEADER *PackageList;
|
||||||
EFI_CALLBACK_INFO *CallbackInfo;
|
|
||||||
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
|
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1339,25 +1411,25 @@ PlatOverMngrInit (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
CallbackInfo = AllocateZeroPool (sizeof (EFI_CALLBACK_INFO));
|
mCallbackInfo = AllocateZeroPool (sizeof (EFI_CALLBACK_INFO));
|
||||||
if (CallbackInfo == NULL) {
|
if (mCallbackInfo == NULL) {
|
||||||
return EFI_BAD_BUFFER_SIZE;
|
return EFI_BAD_BUFFER_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CallbackInfo->Signature = EFI_CALLBACK_INFO_SIGNATURE;
|
mCallbackInfo->Signature = EFI_CALLBACK_INFO_SIGNATURE;
|
||||||
CallbackInfo->ConfigAccess.ExtractConfig = PlatOverMngrExtractConfig;
|
mCallbackInfo->ConfigAccess.ExtractConfig = PlatOverMngrExtractConfig;
|
||||||
CallbackInfo->ConfigAccess.RouteConfig = PlatOverMngrRouteConfig;
|
mCallbackInfo->ConfigAccess.RouteConfig = PlatOverMngrRouteConfig;
|
||||||
CallbackInfo->ConfigAccess.Callback = PlatOverMngrCallback;
|
mCallbackInfo->ConfigAccess.Callback = PlatOverMngrCallback;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Install Device Path Protocol and Config Access protocol to driver handle
|
// Install Device Path Protocol and Config Access protocol to driver handle
|
||||||
//
|
//
|
||||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||||
&CallbackInfo->DriverHandle,
|
&mCallbackInfo->DriverHandle,
|
||||||
&gEfiDevicePathProtocolGuid,
|
&gEfiDevicePathProtocolGuid,
|
||||||
&mHiiVendorDevicePath,
|
&mHiiVendorDevicePath,
|
||||||
&gEfiHiiConfigAccessProtocolGuid,
|
&gEfiHiiConfigAccessProtocolGuid,
|
||||||
&CallbackInfo->ConfigAccess,
|
&mCallbackInfo->ConfigAccess,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -1378,8 +1450,8 @@ PlatOverMngrInit (
|
|||||||
Status = HiiDatabase->NewPackageList (
|
Status = HiiDatabase->NewPackageList (
|
||||||
HiiDatabase,
|
HiiDatabase,
|
||||||
PackageList,
|
PackageList,
|
||||||
CallbackInfo->DriverHandle,
|
mCallbackInfo->DriverHandle,
|
||||||
&CallbackInfo->RegisteredHandle
|
&mCallbackInfo->RegisteredHandle
|
||||||
);
|
);
|
||||||
FreePool (PackageList);
|
FreePool (PackageList);
|
||||||
|
|
||||||
@ -1393,7 +1465,7 @@ PlatOverMngrInit (
|
|||||||
Status = gBS->LocateProtocol (
|
Status = gBS->LocateProtocol (
|
||||||
&gEfiHiiConfigRoutingProtocolGuid,
|
&gEfiHiiConfigRoutingProtocolGuid,
|
||||||
NULL,
|
NULL,
|
||||||
(VOID **) &CallbackInfo->HiiConfigRouting
|
(VOID **) &mCallbackInfo->HiiConfigRouting
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Finish;
|
goto Finish;
|
||||||
@ -1414,37 +1486,34 @@ PlatOverMngrInit (
|
|||||||
//
|
//
|
||||||
Status = FormBrowser2->SendForm (
|
Status = FormBrowser2->SendForm (
|
||||||
FormBrowser2,
|
FormBrowser2,
|
||||||
&CallbackInfo->RegisteredHandle,
|
&mCallbackInfo->RegisteredHandle,
|
||||||
1,
|
1,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
goto Finish;
|
|
||||||
}
|
|
||||||
|
|
||||||
Status = HiiDatabase->RemovePackageList (HiiDatabase, CallbackInfo->RegisteredHandle);
|
HiiDatabase->RemovePackageList (HiiDatabase, mCallbackInfo->RegisteredHandle);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Finish;
|
goto Finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
|
||||||
|
|
||||||
Finish:
|
Finish:
|
||||||
if (CallbackInfo->DriverHandle != NULL) {
|
if (mCallbackInfo->DriverHandle != NULL) {
|
||||||
gBS->UninstallMultipleProtocolInterfaces (
|
gBS->UninstallMultipleProtocolInterfaces (
|
||||||
CallbackInfo->DriverHandle,
|
mCallbackInfo->DriverHandle,
|
||||||
&gEfiDevicePathProtocolGuid,
|
&gEfiDevicePathProtocolGuid,
|
||||||
&mHiiVendorDevicePath,
|
&mHiiVendorDevicePath,
|
||||||
&gEfiHiiConfigAccessProtocolGuid,
|
&gEfiHiiConfigAccessProtocolGuid,
|
||||||
&CallbackInfo->ConfigAccess,
|
&mCallbackInfo->ConfigAccess,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (CallbackInfo != NULL) {
|
|
||||||
FreePool (CallbackInfo);
|
if (mCallbackInfo != NULL) {
|
||||||
|
FreePool (mCallbackInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -47,6 +47,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
#define VARSTORE_ID_PLAT_OVER_MNGR 0x1000
|
#define VARSTORE_ID_PLAT_OVER_MNGR 0x1000
|
||||||
|
|
||||||
|
#define LABEL_END 0xffff
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT8 DriSelection[MAX_CHOICE_NUM];
|
UINT8 DriSelection[MAX_CHOICE_NUM];
|
||||||
UINT8 DriOrder[MAX_CHOICE_NUM];
|
UINT8 DriOrder[MAX_CHOICE_NUM];
|
||||||
|
@ -57,8 +57,6 @@
|
|||||||
UefiBootServicesTableLib
|
UefiBootServicesTableLib
|
||||||
PlatformDriverOverrideLib
|
PlatformDriverOverrideLib
|
||||||
HiiLib
|
HiiLib
|
||||||
IfrSupportLib
|
|
||||||
ExtendedIfrSupportLib
|
|
||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
DevicePathLib
|
DevicePathLib
|
||||||
@ -67,6 +65,7 @@
|
|||||||
## This GUID C Name is not required for build since it is from UefiLib and not directly used by this module source.
|
## This GUID C Name is not required for build since it is from UefiLib and not directly used by this module source.
|
||||||
## gEfiGlobalVariableGuid ## SOMETIMES_CONSUMED ## Variable:L"PlatformLang" this variable specifies the platform supported language string (RFC 4646 format)
|
## gEfiGlobalVariableGuid ## SOMETIMES_CONSUMED ## Variable:L"PlatformLang" this variable specifies the platform supported language string (RFC 4646 format)
|
||||||
## gEfiGlobalVariableGuid ## SOMETIMES_CONSUMED ## Variable:L"Lang" this variable specifies the platform supported language string (ISO 639-2 format)
|
## gEfiGlobalVariableGuid ## SOMETIMES_CONSUMED ## Variable:L"Lang" this variable specifies the platform supported language string (ISO 639-2 format)
|
||||||
|
gEfiIfrTianoGuid ## CONSUMES ## Guid
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiComponentName2ProtocolGuid ## SOMETIMES_CONSUMED (Get Driver Name if ComponentName2Protocol exists)
|
gEfiComponentName2ProtocolGuid ## SOMETIMES_CONSUMED (Get Driver Name if ComponentName2Protocol exists)
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#include "PlatOverMngr.h"
|
#include "PlatOverMngr.h"
|
||||||
|
|
||||||
#define EFI_DISK_DEVICE_CLASS 0x01
|
#define EFI_DISK_DEVICE_CLASS 0x01
|
||||||
#define LABEL_END 0xffff
|
|
||||||
|
|
||||||
formset
|
formset
|
||||||
guid = PLAT_OVER_MNGR_GUID,
|
guid = PLAT_OVER_MNGR_GUID,
|
||||||
|
@ -512,4 +512,943 @@ Rfc3066ToIso639 (
|
|||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
|
// HiiLib Functions
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
Registers a list of packages in the HII Database and returns the HII Handle
|
||||||
|
associated with that registration. If an HII Handle has already been registered
|
||||||
|
with the same PackageListGuid, then NULL is returned. If there are not enough
|
||||||
|
resources to perform the registration, then NULL is returned. If an empty list
|
||||||
|
of packages is passed in, then NULL is returned. If the size of the list of
|
||||||
|
package is 0, then NULL is returned.
|
||||||
|
|
||||||
|
@param[in] PackageListGuid An optional parameter that is used to identify
|
||||||
|
the GUID of the package list. If this parameter
|
||||||
|
is NULL, then gEfiCallerIdGuid is used.
|
||||||
|
@param[in] DeviceHandle Optional. If not NULL, the Device Handle on which
|
||||||
|
an instance of DEVICE_PATH_PROTOCOL is installed.
|
||||||
|
This Device Handle uniquely defines the device that
|
||||||
|
the added packages are associated with.
|
||||||
|
@param[in] ... The variable argument list that contains pointers
|
||||||
|
to packages terminated by a NULL.
|
||||||
|
|
||||||
|
@retval NULL A HII Handle has already been registered in the HII Database with
|
||||||
|
the same PackageListGuid.
|
||||||
|
@retval NULL The HII Handle could not be created.
|
||||||
|
@retval Other The HII Handle associated with the newly registered package list.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_HII_HANDLE
|
||||||
|
EFIAPI
|
||||||
|
HiiAddPackages (
|
||||||
|
IN CONST EFI_GUID *PackageListGuid, OPTIONAL
|
||||||
|
IN EFI_HANDLE DeviceHandle, OPTIONAL
|
||||||
|
...
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Removes a package list from the HII Database.
|
||||||
|
|
||||||
|
If HiiHandle is NULL, then ASSERT().
|
||||||
|
If HiiHandle is not a valid EFI_HII_HANDLE in the HII Database, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] HiiHandle A handle that was previously registered in the HII Database.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
HiiRemovePackages (
|
||||||
|
IN EFI_HII_HANDLE HiiHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves the array of all the HII Handles in the HII Database.
|
||||||
|
This array is terminated with a NULL HII Handle.
|
||||||
|
This function allocates the returned array using AllocatePool().
|
||||||
|
The caller is responsible for freeing the array with FreePool().
|
||||||
|
|
||||||
|
@param[in] PackageListGuid An optional parameter that is used to request
|
||||||
|
an HII Handle that is associatd with a specific
|
||||||
|
Package List GUID. If this parameter is NULL
|
||||||
|
then all the HII Handles in the HII Database
|
||||||
|
are returned. If this parameter is not NULL
|
||||||
|
then at most 1 HII Handle is returned.
|
||||||
|
|
||||||
|
@retval NULL There are no HII handles in the HII database
|
||||||
|
@retval NULL The array of HII Handles could not be retrieved
|
||||||
|
@retval Other A pointer to the NULL terminated array of HII Handles
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_HII_HANDLE *
|
||||||
|
EFIAPI
|
||||||
|
HiiGetHiiHandles (
|
||||||
|
IN CONST EFI_GUID *PackageListGuid OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves a pointer to the a Null-terminated ASCII string containing the list
|
||||||
|
of languages that an HII handle in the HII Database supports. The returned
|
||||||
|
string is allocated using AllocatePool(). The caller is responsible for freeing
|
||||||
|
the returned string using FreePool(). The format of the returned string follows
|
||||||
|
the language format assumed the HII Database.
|
||||||
|
|
||||||
|
If HiiHandle is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] HiiHandle A handle that was previously registered in the HII Database.
|
||||||
|
|
||||||
|
@retval NULL HiiHandle is not registered in the HII database
|
||||||
|
@retval NULL There are not enough resources available to retrieve the suported
|
||||||
|
languages.
|
||||||
|
@retval NULL The list of suported languages could not be retrieved.
|
||||||
|
@retval Other A pointer to the Null-terminated ASCII string of supported languages.
|
||||||
|
|
||||||
|
**/
|
||||||
|
CHAR8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiGetSupportedLanguages (
|
||||||
|
IN EFI_HII_HANDLE HiiHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves a string from a string package in a specific language. If the language
|
||||||
|
is not specified, then a string from a string package in the current platform
|
||||||
|
language is retrieved. If the string can not be retrieved using the specified
|
||||||
|
language or the current platform language, then the string is retrieved from
|
||||||
|
the string package in the first language the string package supports. The
|
||||||
|
returned string is allocated using AllocatePool(). The caller is responsible
|
||||||
|
for freeing the allocated buffer using FreePool().
|
||||||
|
|
||||||
|
If HiiHandle is NULL, then ASSERT().
|
||||||
|
If StringId is 0, then ASSET.
|
||||||
|
|
||||||
|
@param[in] HiiHandle A handle that was previously registered in the HII Database.
|
||||||
|
@param[in] StringId The identifier of the string to retrieved from the string
|
||||||
|
package associated with HiiHandle.
|
||||||
|
@param[in] Language The language of the string to retrieve. If this parameter
|
||||||
|
is NULL, then the current platform language is used. The
|
||||||
|
format of Language must follow the language format assumed
|
||||||
|
the HII Database.
|
||||||
|
|
||||||
|
@retval NULL The string specified by StringId is not present in the string package.
|
||||||
|
@retval Other The string was returned.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STRING
|
||||||
|
EFIAPI
|
||||||
|
HiiGetString (
|
||||||
|
IN EFI_HII_HANDLE HiiHandle,
|
||||||
|
IN EFI_STRING_ID StringId,
|
||||||
|
IN CONST CHAR8 *Language OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves a string from a string package names by GUID in a specific language.
|
||||||
|
If the language is not specified, then a string from a string package in the
|
||||||
|
current platform language is retrieved. If the string can not be retrieved
|
||||||
|
using the specified language or the current platform language, then the string
|
||||||
|
is retrieved from the string package in the first language the string package
|
||||||
|
supports. The returned string is allocated using AllocatePool(). The caller
|
||||||
|
is responsible for freeing the allocated buffer using FreePool().
|
||||||
|
|
||||||
|
If PackageListGuid is NULL, then ASSERT().
|
||||||
|
If StringId is 0, then ASSET.
|
||||||
|
|
||||||
|
@param[in] PackageListGuid The GUID of a package list that was previously
|
||||||
|
registered in the HII Database.
|
||||||
|
@param[in] StringId The identifier of the string to retrieved from the
|
||||||
|
string package associated with PackageListGuid.
|
||||||
|
@param[in] Language The language of the string to retrieve. If this
|
||||||
|
parameter is NULL, then the current platform
|
||||||
|
language is used. The format of Language must
|
||||||
|
follow the language format assumed the HII Database.
|
||||||
|
|
||||||
|
@retval NULL The package list specified by PackageListGuid is not present in the
|
||||||
|
HII Database.
|
||||||
|
@retval NULL The string specified by StringId is not present in the string package.
|
||||||
|
@retval Other The string was returned.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STRING
|
||||||
|
EFIAPI
|
||||||
|
HiiGetPackageString (
|
||||||
|
IN CONST EFI_GUID *PackageListGuid,
|
||||||
|
IN EFI_STRING_ID StringId,
|
||||||
|
IN CONST CHAR8 *Language OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function create a new string in String Package or updates an existing
|
||||||
|
string in a String Package. If StringId is 0, then a new string is added to
|
||||||
|
a String Package. If StringId is not zero, then a string in String Package is
|
||||||
|
updated. If SupportedLanguages is NULL, then the string is added or updated
|
||||||
|
for all the languages that the String Package supports. If SupportedLanguages
|
||||||
|
is not NULL, then the string is added or updated for the set of languages
|
||||||
|
specified by SupportedLanguages.
|
||||||
|
|
||||||
|
If HiiHandle is NULL, then ASSERT().
|
||||||
|
If String is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] HiiHandle A handle that was previously registered in the
|
||||||
|
HII Database.
|
||||||
|
@param[in] StringId If zero, then a new string is created in the
|
||||||
|
String Package associated with HiiHandle. If
|
||||||
|
non-zero, then the string specified by StringId
|
||||||
|
is updated in the String Package associated
|
||||||
|
with HiiHandle.
|
||||||
|
@param[in] String A pointer to the Null-terminated Unicode string
|
||||||
|
to add or update in the String Package associated
|
||||||
|
with HiiHandle.
|
||||||
|
@param[in] SupportedLanguages A pointer to a Null-terminated ASCII string of
|
||||||
|
language codes. If this parameter is NULL, then
|
||||||
|
String is added or updated in the String Package
|
||||||
|
associated with HiiHandle for all the languages
|
||||||
|
that the String Package supports. If this
|
||||||
|
parameter is not NULL, then then String is added
|
||||||
|
or updated in the String Package associated with
|
||||||
|
HiiHandle for the set oflanguages specified by
|
||||||
|
SupportedLanguages. The format of
|
||||||
|
SupportedLanguages must follow the language
|
||||||
|
format assumed the HII Database.
|
||||||
|
|
||||||
|
@retval 0 The string could not be added or updated in the String Package.
|
||||||
|
@retval Other The EFI_STRING_ID of the newly added or updated string.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STRING_ID
|
||||||
|
EFIAPI
|
||||||
|
HiiSetString (
|
||||||
|
IN EFI_HII_HANDLE HiiHandle,
|
||||||
|
IN EFI_STRING_ID StringId, OPTIONAL
|
||||||
|
IN CONST EFI_STRING String,
|
||||||
|
IN CONST CHAR8 *SupportedLanguages OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Validates the config data associated with an HII handle in the HII Database.
|
||||||
|
|
||||||
|
If HiiHandle is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] HiiHandle A handle that was previously registered in the HII Database.
|
||||||
|
|
||||||
|
@retval TRUE The config data associated with HiiHandle passes all validation
|
||||||
|
checks.
|
||||||
|
@retval FALSE The config data associated with HiiHandle failed one or more
|
||||||
|
validation checks.
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
HiiValidateDataFromHiiHandle (
|
||||||
|
IN EFI_HII_HANDLE HiiHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Allocates and returns a Null-terminated Unicode <ConfigHdr> string using routing
|
||||||
|
information that includes a GUID, an optional Unicode string name, and a device
|
||||||
|
path. The string returned is allocated with AllocatePool(). The caller is
|
||||||
|
responsible for freeing the allocated string with FreePool().
|
||||||
|
|
||||||
|
The format of a <ConfigHdr> is as follows:
|
||||||
|
|
||||||
|
GUID=<HexCh>32&NAME=<Char>NameLength&PATH=<HexChar>DevicePathSize<Null>
|
||||||
|
|
||||||
|
@param[in] Guid Pointer to an EFI_GUID that is the routing information
|
||||||
|
GUID. Each of the 16 bytes in Guid is converted to
|
||||||
|
a 2 Unicode character hexidecimal string. This is
|
||||||
|
an optional parameter that may be NULL.
|
||||||
|
@param[in] Name Pointer to a Null-terminated Unicode string that is
|
||||||
|
the routing information NAME. This is an optional
|
||||||
|
parameter that may be NULL. Each 16-bit Unicode
|
||||||
|
character in Name is converted to a 4 character Unicode
|
||||||
|
hexidecimal string.
|
||||||
|
@param[in] DriverHandle The driver handle which supports a Device Path Protocol
|
||||||
|
that is the routing information PATH. Each byte of
|
||||||
|
the Device Path associated with DriverHandle is converted
|
||||||
|
to a 2 Unicode character hexidecimal string.
|
||||||
|
|
||||||
|
@retval NULL DriverHandle does not support the Device Path Protocol.
|
||||||
|
@retval NULL DriverHandle does not support the Device Path Protocol.
|
||||||
|
@retval Other A pointer to the Null-terminate Unicode <ConfigHdr> string
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STRING
|
||||||
|
EFIAPI
|
||||||
|
HiiConstructConfigHdr (
|
||||||
|
IN CONST EFI_GUID *Guid, OPTIONAL
|
||||||
|
IN CONST CHAR16 *Name, OPTIONAL
|
||||||
|
IN EFI_HANDLE DriverHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Allocates and returns a Null-terminated Unicode <ConfigAltResp> string.
|
||||||
|
|
||||||
|
If Guid is NULL, then ASSERT().
|
||||||
|
If Name is NULL, then ASSERT().
|
||||||
|
If BlockNameArray is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] Guid GUID of the buffer storage.
|
||||||
|
@param[in] Name Name of the buffer storage.
|
||||||
|
@param[in] DriverHandle The DriverHandle that support a Device Path
|
||||||
|
Protocol.
|
||||||
|
@param[in] BufferStorage Content of the buffer storage.
|
||||||
|
@param[in] BufferStorageSize Length in bytes of the buffer storage.
|
||||||
|
@param[in] BlockNameArray Array generated by VFR compiler. This array
|
||||||
|
contains a UINT32 value that is the length
|
||||||
|
of BlockNameArray in bytes, followed by pairs
|
||||||
|
of 16-bit values that are the offset and length
|
||||||
|
values used to contruct a <ConfigRequest> string.
|
||||||
|
@param[in] ... A variable argument list that contains pairs of 16-bit
|
||||||
|
ALTCFG identifiers and pointers to DefaultValueArrays.
|
||||||
|
The variable argument list is terminated by a NULL
|
||||||
|
DefaultValueArray pointer. A DefaultValueArray
|
||||||
|
contains a UINT32 value that is the length, in bytes,
|
||||||
|
of the DefaultValueArray. The UINT32 length value
|
||||||
|
is followed by a series of records that contain
|
||||||
|
a 16-bit WIDTH value followed by a byte array with
|
||||||
|
WIDTH entries. The records must be parsed from
|
||||||
|
beginning to end until the UINT32 length limit
|
||||||
|
is reached.
|
||||||
|
|
||||||
|
@retval NULL There are not enough resources to process the request.
|
||||||
|
@retval NULL A <ConfigResp> could not be retrieved from the Config
|
||||||
|
Routing Protocol.
|
||||||
|
@retval Other A pointer to the Null-terminate Unicode <ConfigAltResp>
|
||||||
|
string.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STRING
|
||||||
|
EFIAPI
|
||||||
|
HiiConstructConfigAltResp (
|
||||||
|
IN CONST EFI_GUID *Guid,
|
||||||
|
IN CONST CHAR16 *Name,
|
||||||
|
IN EFI_HANDLE DriverHandle,
|
||||||
|
IN CONST VOID *BufferStorage,
|
||||||
|
IN UINTN BufferStorageSize,
|
||||||
|
IN CONST VOID *BlockNameArray,
|
||||||
|
...
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Determines if the routing data specified by GUID and NAME match a <ConfigHdr>.
|
||||||
|
|
||||||
|
If ConfigHdr is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] ConfigHdr Either <ConfigRequest> or <ConfigResp>.
|
||||||
|
@param[in] Guid GUID of the storage.
|
||||||
|
@param[in] Name NAME of the storage.
|
||||||
|
|
||||||
|
@retval TRUE Routing information matches <ConfigHdr>.
|
||||||
|
@retval FALSE Routing information does not match <ConfigHdr>.
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
HiiIsConfigHdrMatch (
|
||||||
|
IN CONST EFI_STRING ConfigHdr,
|
||||||
|
IN CONST EFI_GUID *Guid, OPTIONAL
|
||||||
|
IN CONST CHAR16 *Name OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Retrieves uncommited data from the Form Browser and converts it to a binary
|
||||||
|
buffer. The returned buffer is allocated using AllocatePool(). The caller
|
||||||
|
is responsible for freeing the returned buffer using FreePool().
|
||||||
|
|
||||||
|
@param[in] VariableName Pointer to a Null-terminated Unicode string. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
@param[in] VariableGuid Pointer to an EFI_GUID structure. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
@param[in] BufferSize Length in bytes of buffer to hold retrived data.
|
||||||
|
|
||||||
|
@retval NULL The uncommitted data could not be retrieved.
|
||||||
|
@retval Other A pointer to a buffer containing the uncommitted data.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiGetBrowserData (
|
||||||
|
IN CONST EFI_GUID *VariableGuid, OPTIONAL
|
||||||
|
IN CONST CHAR16 *VariableName, OPTIONAL
|
||||||
|
IN UINTN BlockSize
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Updates uncommitted data in the Form Browser.
|
||||||
|
|
||||||
|
If Buffer is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] VariableName Pointer to a Null-terminated Unicode string. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
@param[in] VariableGuid Pointer to an EFI_GUID structure. This is an optional
|
||||||
|
parameter that may be NULL.
|
||||||
|
@param[in] BufferSize Length, in bytes, of Buffer.
|
||||||
|
@param[in] Buffer Buffer of data to commit.
|
||||||
|
@param[in] RequestElement An optional field to specify which part of the
|
||||||
|
buffer data will be send back to Browser. If NULL,
|
||||||
|
the whole buffer of data will be committed to
|
||||||
|
Browser.
|
||||||
|
<RequestElement> ::= &OFFSET=<Number>&WIDTH=<Number>*
|
||||||
|
|
||||||
|
@retval FALSE The uncommitted data could not be updated.
|
||||||
|
@retval TRUE The uncommitted data was updated.
|
||||||
|
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
EFIAPI
|
||||||
|
HiiSetBrowserData (
|
||||||
|
IN CONST EFI_GUID *VariableGuid, OPTIONAL
|
||||||
|
IN CONST CHAR16 *VariableName, OPTIONAL
|
||||||
|
IN UINTN BufferSize,
|
||||||
|
IN CONST UINT8 *Buffer,
|
||||||
|
IN CONST CHAR16 *RequestElement OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/////////////////////////////////////////
|
||||||
|
/////////////////////////////////////////
|
||||||
|
/// IFR Functions
|
||||||
|
/////////////////////////////////////////
|
||||||
|
/////////////////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a UINT64 value that contains bitfields for Hour, Minute, and Second.
|
||||||
|
The lower 8-bits of Hour are placed in bits 0..7. The lower 8-bits of Minute
|
||||||
|
are placed in bits 8..15, and the lower 8-bits of Second are placed in bits
|
||||||
|
16..23. This format is selected because it can be easily translated to
|
||||||
|
an EFI_HII_TIME structure in an EFI_IFR_TYPE_VALUE union.
|
||||||
|
|
||||||
|
@param Hour The hour value to be encoded.
|
||||||
|
@param Minute The miniute value to be encoded.
|
||||||
|
@param Second The second value to be encoded.
|
||||||
|
|
||||||
|
@return A 64-bit containing Hour, Minute, and Second.
|
||||||
|
**/
|
||||||
|
#define EFI_HII_TIME_UINT64(Hour, Minute, Second) \
|
||||||
|
(UINT64)((Hour & 0xff) | ((Minute & 0xff) << 8) | ((Second & 0xff) << 16))
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns a UINT64 value that contains bitfields for Year, Month, and Day.
|
||||||
|
The lower 16-bits of Year are placed in bits 0..15. The lower 8-bits of Month
|
||||||
|
are placed in bits 16..23, and the lower 8-bits of Day are placed in bits
|
||||||
|
24..31. This format is selected because it can be easily translated to
|
||||||
|
an EFI_HII_DATE structure in an EFI_IFR_TYPE_VALUE union.
|
||||||
|
|
||||||
|
@param Year The year value to be encoded.
|
||||||
|
@param Month The month value to be encoded.
|
||||||
|
@param Day The day value to be encoded.
|
||||||
|
|
||||||
|
@return A 64-bit containing Year, Month, and Day.
|
||||||
|
**/
|
||||||
|
#define EFI_HII_DATE_UINT64(Year, Month, Day) \
|
||||||
|
(UINT64)((Year & 0xffff) | ((Month & 0xff) << 16) | ((Day & 0xff) << 24))
|
||||||
|
|
||||||
|
/**
|
||||||
|
Allocates and returns a new OpCode Handle. OpCode Handles must be freed with
|
||||||
|
HiiFreeOpCodeHandle().
|
||||||
|
|
||||||
|
@retval NULL There are not enough resources to allocate a new OpCode Handle.
|
||||||
|
@retval Other A new OpCode handle.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID *
|
||||||
|
EFIAPI
|
||||||
|
HiiAllocateOpCodeHandle (
|
||||||
|
VOID
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Frees an OpCode Handle that was peviously allocated with HiiAllocateOpCodeHandle().
|
||||||
|
When an OpCode Handle is freed, all of the opcodes associated with the OpCode
|
||||||
|
Handle are also freed.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
HiiFreeOpCodeHandle (
|
||||||
|
VOID *OpCodeHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_END_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateEndOpCode (
|
||||||
|
IN VOID *OpCodeHandle
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_ONE_OF_OPTION_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If Type is invalid, then ASSERT().
|
||||||
|
If Flags is invalid, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] StringId StringId for the option
|
||||||
|
@param[in] Flags Flags for the option
|
||||||
|
@param[in] Type Type for the option
|
||||||
|
@param[in] Value Value for the option
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateOneOfOptionOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN UINT16 StringId,
|
||||||
|
IN UINT8 Flags,
|
||||||
|
IN UINT8 Type,
|
||||||
|
IN UINT64 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_DEFAULT_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If Type is invalid, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] DefaultId DefaultId for the default
|
||||||
|
@param[in] Type Type for the default
|
||||||
|
@param[in] Value Value for the default
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateDefaultOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN UINT16 DefaultId,
|
||||||
|
IN UINT8 Type,
|
||||||
|
IN UINT64 Value
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_GUID opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If Guid is NULL, then ASSERT().
|
||||||
|
If OpCodeSize < sizeof (EFI_IFR_GUID), then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] Guid Pointer to EFI_GUID of this guided opcode.
|
||||||
|
@param[in] GuidOpCode Pointer to an EFI_IFR_GUID opcode. This is an
|
||||||
|
optional parameter that may be NULL. If this
|
||||||
|
parameter is NULL, then the GUID extension
|
||||||
|
region of the created opcode is filled with zeros.
|
||||||
|
If this parameter is not NULL, then the GUID
|
||||||
|
extension region of GuidData will be copied to
|
||||||
|
the GUID extension region of the created opcode.
|
||||||
|
@param[in] OpCodeSize The size, in bytes, of created opcode. This value
|
||||||
|
must be >= sizeof(EFI_IFR_GUID).
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateGuidOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN CONST EFI_GUID *Guid,
|
||||||
|
IN CONST VOID *GuidOpCode, OPTIONAL
|
||||||
|
IN UINTN OpCodeSize
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_ACTION_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in QuestionFlags, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] QuestionId Question ID
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] QuestionFlags Flags in Question Header
|
||||||
|
@param[in] QuestionConfig String ID for configuration
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateActionOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_QUESTION_ID QuestionId,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 QuestionFlags,
|
||||||
|
IN EFI_STRING_ID QuestionConfig
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_SUBTITLE_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in Flags, then ASSERT().
|
||||||
|
If Scope > 1, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] Flags Subtitle opcode flags
|
||||||
|
@param[in] Scope 1 if this opcpde is the beginning of a new scope.
|
||||||
|
0 if this opcode is within the current scope.
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateSubTitleOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 Flags,
|
||||||
|
IN UINT8 Scope
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_REF_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in QuestionFlags, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] FormId Destination Form ID
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] QuestionFlags Flags in Question Header
|
||||||
|
@param[in] QuestionId Question ID
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateGotoOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_FORM_ID FormId,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 QuestionFlags,
|
||||||
|
IN EFI_QUESTION_ID QuestionId
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_CHECKBOX_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in QuestionFlags, then ASSERT().
|
||||||
|
If any reserved bits are set in CheckBoxFlags, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] QuestionId Question ID
|
||||||
|
@param[in] VarStoreId Storage ID
|
||||||
|
@param[in] VarOffset Offset in Storage
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] QuestionFlags Flags in Question Header
|
||||||
|
@param[in] CheckBoxFlags Flags for checkbox opcode
|
||||||
|
@param[in] DefaultsOpCodeHandle Handle for a buffer of DEFAULT opcodes. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateCheckBoxOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_QUESTION_ID QuestionId,
|
||||||
|
IN EFI_VARSTORE_ID VarStoreId,
|
||||||
|
IN UINT16 VarOffset,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 QuestionFlags,
|
||||||
|
IN UINT8 CheckBoxFlags,
|
||||||
|
IN VOID *DefaultsOpCodeHandle OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_NUMERIC_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in QuestionFlags, then ASSERT().
|
||||||
|
If any reserved bits are set in NumericFlags, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] QuestionId Question ID
|
||||||
|
@param[in] VarStoreId Storage ID
|
||||||
|
@param[in] VarOffset Offset in Storage
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] QuestionFlags Flags in Question Header
|
||||||
|
@param[in] NumericFlags Flags for numeric opcode
|
||||||
|
@param[in] Minimum Numeric minimum value
|
||||||
|
@param[in] Maximum Numeric maximum value
|
||||||
|
@param[in] Step Numeric step for edit
|
||||||
|
@param[in] DefaultsOpCodeHandle Handle for a buffer of DEFAULT opcodes. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateNumericOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_QUESTION_ID QuestionId,
|
||||||
|
IN EFI_VARSTORE_ID VarStoreId,
|
||||||
|
IN UINT16 VarOffset,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 QuestionFlags,
|
||||||
|
IN UINT8 NumericFlags,
|
||||||
|
IN UINT64 Minimum,
|
||||||
|
IN UINT64 Maximum,
|
||||||
|
IN UINT64 Step,
|
||||||
|
IN VOID *DefaultsOpCodeHandle OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_STRING_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in QuestionFlags, then ASSERT().
|
||||||
|
If any reserved bits are set in StringFlags, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] QuestionId Question ID
|
||||||
|
@param[in] VarStoreId Storage ID
|
||||||
|
@param[in] VarOffset Offset in Storage
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] QuestionFlags Flags in Question Header
|
||||||
|
@param[in] StringFlags Flags for string opcode
|
||||||
|
@param[in] MinSize String minimum length
|
||||||
|
@param[in] MaxSize String maximum length
|
||||||
|
@param[in] DefaultsOpCodeHandle Handle for a buffer of DEFAULT opcodes. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateStringOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_QUESTION_ID QuestionId,
|
||||||
|
IN EFI_VARSTORE_ID VarStoreId,
|
||||||
|
IN UINT16 VarOffset,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 QuestionFlags,
|
||||||
|
IN UINT8 StringFlags,
|
||||||
|
IN UINT8 MinSize,
|
||||||
|
IN UINT8 MaxSize,
|
||||||
|
IN VOID *DefaultsOpCodeHandle OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_ONE_OF_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in QuestionFlags, then ASSERT().
|
||||||
|
If any reserved bits are set in OneOfFlags, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] QuestionId Question ID
|
||||||
|
@param[in] VarStoreId Storage ID
|
||||||
|
@param[in] VarOffset Offset in Storage
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] QuestionFlags Flags in Question Header
|
||||||
|
@param[in] OneOfFlags Flags for oneof opcode
|
||||||
|
@param[in] OptionsOpCodeHandle Handle for a buffer of ONE_OF_OPTION opcodes.
|
||||||
|
@param[in] DefaultsOpCodeHandle Handle for a buffer of DEFAULT opcodes. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateOneOfOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_QUESTION_ID QuestionId,
|
||||||
|
IN EFI_VARSTORE_ID VarStoreId,
|
||||||
|
IN UINT16 VarOffset,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 QuestionFlags,
|
||||||
|
IN UINT8 OneOfFlags,
|
||||||
|
IN VOID *OptionsOpCodeHandle,
|
||||||
|
IN VOID *DefaultsOpCodeHandle OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Create EFI_IFR_ORDERED_LIST_OP opcode.
|
||||||
|
|
||||||
|
If OpCodeHandle is NULL, then ASSERT().
|
||||||
|
If any reserved bits are set in QuestionFlags, then ASSERT().
|
||||||
|
If any reserved bits are set in OrderedListFlags, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] OpCodeHandle Handle to the buffer of opcodes.
|
||||||
|
@param[in] QuestionId Question ID
|
||||||
|
@param[in] VarStoreId Storage ID
|
||||||
|
@param[in] VarOffset Offset in Storage
|
||||||
|
@param[in] Prompt String ID for Prompt
|
||||||
|
@param[in] Help String ID for Help
|
||||||
|
@param[in] QuestionFlags Flags in Question Header
|
||||||
|
@param[in] OrderedListFlags Flags for ordered list opcode
|
||||||
|
@param[in] DataType Type for option value
|
||||||
|
@param[in] MaxContainers Maximum count for options in this ordered list
|
||||||
|
@param[in] OptionsOpCodeHandle Handle for a buffer of ONE_OF_OPTION opcodes.
|
||||||
|
@param[in] DefaultsOpCodeHandle Handle for a buffer of DEFAULT opcodes. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
|
||||||
|
@retval NULL There is not enough space left in Buffer to add the opcode.
|
||||||
|
@retval Other A pointer to the created opcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
UINT8 *
|
||||||
|
EFIAPI
|
||||||
|
HiiCreateOrderedListOpCode (
|
||||||
|
IN VOID *OpCodeHandle,
|
||||||
|
IN EFI_QUESTION_ID QuestionId,
|
||||||
|
IN EFI_VARSTORE_ID VarStoreId,
|
||||||
|
IN UINT16 VarOffset,
|
||||||
|
IN EFI_STRING_ID Prompt,
|
||||||
|
IN EFI_STRING_ID Help,
|
||||||
|
IN UINT8 QuestionFlags,
|
||||||
|
IN UINT8 OrderedListFlags,
|
||||||
|
IN UINT8 DataType,
|
||||||
|
IN UINT8 MaxContainers,
|
||||||
|
IN VOID *OptionsOpCodeHandle,
|
||||||
|
IN VOID *DefaultsOpCodeHandle OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function updates a form that has previously been registered with the HII
|
||||||
|
Database. This function will perform at most one update operation.
|
||||||
|
|
||||||
|
The form to update is specified by Handle, FormSetGuid, and FormId. Binary
|
||||||
|
comparisons of IFR opcodes are performed from the beginning of the form being
|
||||||
|
updated until an IFR opcode is found that exactly matches the first IFR opcode
|
||||||
|
specifed by StartOpCodeHandle. The following rules are used to determine if
|
||||||
|
an insert, replace, or delete operation is performed.
|
||||||
|
|
||||||
|
1) If no matches are found, then NULL is returned.
|
||||||
|
2) If a match is found, and EndOpCodeHandle is NULL, then all of the IFR opcodes
|
||||||
|
from StartOpcodeHandle except the first opcode are inserted immediately after
|
||||||
|
the matching IFR opcode in the form beng updated.
|
||||||
|
3) If a match is found, and EndOpCodeHandle is not NULL, then a search is made
|
||||||
|
from the matching IFR opcode until an IFR opcode exatly matches the first
|
||||||
|
IFR opcode specified by EndOpCodeHandle. If no match is found for the first
|
||||||
|
IFR opcode specified by EndOpCodeHandle, then NULL is returned. If a match
|
||||||
|
is found, then all of the IFR opcodes between the start match and the end
|
||||||
|
match are deleted from the form being updated and all of the IFR opcodes
|
||||||
|
from StartOpcodeHandle except the first opcode are inserted immediately after
|
||||||
|
the matching start IFR opcode. If StartOpCcodeHandle only contains one
|
||||||
|
IFR instruction, then the result of ths operation will delete all of the IFR
|
||||||
|
opcodes between the start end matches.
|
||||||
|
|
||||||
|
If HiiHandle is NULL, then ASSERT().
|
||||||
|
If StartOpCodeHandle is NULL, then ASSERT().
|
||||||
|
|
||||||
|
@param[in] HiiHandle The HII Handle of the form to update.
|
||||||
|
@param[in] FormSetGuid The Formset GUID of the form to update. This
|
||||||
|
is an optional parameter that may be NULL.
|
||||||
|
If it is NULL, all FormSet will be updated.
|
||||||
|
@param[in] FormId The ID of the form to update.
|
||||||
|
@param[in] StartOpCodeHandle An OpCode Handle that contains the set of IFR
|
||||||
|
opcodes to be inserted or replaced in the form.
|
||||||
|
The first IFR instruction in StartOpCodeHandle
|
||||||
|
is used to find matching IFR opcode in the
|
||||||
|
form.
|
||||||
|
@param[in] EndOpCodeHandle An OpCcode Handle that contains the IFR opcode
|
||||||
|
that marks the end of a replace operation in
|
||||||
|
the form. This is an optional parameter that
|
||||||
|
may be NULL. If it is NULL, then an the IFR
|
||||||
|
opcodes specified by StartOpCodeHandle are
|
||||||
|
inserted into the form.
|
||||||
|
|
||||||
|
@retval EFI_OUT_OF_RESOURCES No enough memory resource is allocated.
|
||||||
|
@retval EFI_NOT_FOUND The following cases will return EFI_NOT_FOUND.
|
||||||
|
1) The form specified by HiiHandle, FormSetGuid,
|
||||||
|
and FormId could not be found in the HII Database.
|
||||||
|
2) No IFR opcodes in the target form match the first
|
||||||
|
IFR opcode in StartOpCodeHandle.
|
||||||
|
3) EndOpCOde is not NULL, and no IFR opcodes in the
|
||||||
|
target form following a matching start opcode match
|
||||||
|
the first IFR opcode in EndOpCodeHandle.
|
||||||
|
@retval EFI_SUCCESS The matched form is updated by StartOpcode.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
HiiUpdateForm (
|
||||||
|
IN EFI_HII_HANDLE HiiHandle,
|
||||||
|
IN EFI_GUID *FormSetGuid, OPTIONAL
|
||||||
|
IN EFI_FORM_ID FormId,
|
||||||
|
IN VOID *StartOpcodeHandle,
|
||||||
|
IN VOID *EndOpcodeHandle OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Configure the buffer accrording to ConfigBody strings in the format of
|
||||||
|
<Length:4 bytes>, <Offset: 2 bytes>, <Width:2 bytes>, <Data:n bytes>.
|
||||||
|
This ConfigBody strings is generated by EDKII UEFI VfrCompiler for the default
|
||||||
|
values in a Form Set. The name of the ConfigBody strings is VfrMyIfrNVDataDefault0000
|
||||||
|
constructed following this rule:
|
||||||
|
"Vfr" + varstore.name + "Default" + defaultstore.attributes.
|
||||||
|
Check the generated C file in Output for details.
|
||||||
|
|
||||||
|
@param Buffer the start address of buffer.
|
||||||
|
@param BufferSize the size of buffer.
|
||||||
|
@param Number the number of the ConfigBody strings.
|
||||||
|
@param ... the ConfigBody strings
|
||||||
|
|
||||||
|
@retval EFI_BUFFER_TOO_SMALL the BufferSize is too small to operate.
|
||||||
|
@retval EFI_INVALID_PARAMETER Buffer is NULL or BufferSize is 0.
|
||||||
|
@retval EFI_SUCCESS Operation successful.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
IfrLibExtractDefault(
|
||||||
|
IN VOID *Buffer,
|
||||||
|
IN UINTN *BufferSize,
|
||||||
|
UINTN Number,
|
||||||
|
...
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -925,4 +925,32 @@ HiiUpdateForm (
|
|||||||
IN VOID *EndOpcodeHandle OPTIONAL
|
IN VOID *EndOpcodeHandle OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Configure the buffer accrording to ConfigBody strings in the format of
|
||||||
|
<Length:4 bytes>, <Offset: 2 bytes>, <Width:2 bytes>, <Data:n bytes>.
|
||||||
|
This ConfigBody strings is generated by EDKII UEFI VfrCompiler for the default
|
||||||
|
values in a Form Set. The name of the ConfigBody strings is VfrMyIfrNVDataDefault0000
|
||||||
|
constructed following this rule:
|
||||||
|
"Vfr" + varstore.name + "Default" + defaultstore.attributes.
|
||||||
|
Check the generated C file in Output for details.
|
||||||
|
|
||||||
|
@param Buffer the start address of buffer.
|
||||||
|
@param BufferSize the size of buffer.
|
||||||
|
@param Number the number of the ConfigBody strings.
|
||||||
|
@param ... the ConfigBody strings
|
||||||
|
|
||||||
|
@retval EFI_BUFFER_TOO_SMALL the BufferSize is too small to operate.
|
||||||
|
@retval EFI_INVALID_PARAMETER Buffer is NULL or BufferSize is 0.
|
||||||
|
@retval EFI_SUCCESS Operation successful.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
IfrLibExtractDefault(
|
||||||
|
IN VOID *Buffer,
|
||||||
|
IN UINTN *BufferSize,
|
||||||
|
UINTN Number,
|
||||||
|
...
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -794,7 +794,7 @@ InternalHiiLowerConfigString (
|
|||||||
EFI_STRING String;
|
EFI_STRING String;
|
||||||
BOOLEAN Lower;
|
BOOLEAN Lower;
|
||||||
|
|
||||||
ASSERT (String != NULL);
|
ASSERT (ConfigString != NULL);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Convert all hex digits in range [A-F] in the configuration header to [a-f]
|
// Convert all hex digits in range [A-F] in the configuration header to [a-f]
|
||||||
@ -2938,3 +2938,77 @@ Finish:
|
|||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Configure the buffer accrording to ConfigBody strings in the format of
|
||||||
|
<Length:4 bytes>, <Offset: 2 bytes>, <Width:2 bytes>, <Data:n bytes>.
|
||||||
|
This ConfigBody strings is generated by UEFI VfrCompiler for the default
|
||||||
|
values in a Form Set. The name of the ConfigBody strings is VfrMyIfrNVDataDefault0000
|
||||||
|
constructed following this rule:
|
||||||
|
"Vfr" + varstore.name + "Default" + defaultstore.attributes.
|
||||||
|
Check the generated C file in Output for details.
|
||||||
|
|
||||||
|
@param Buffer The start address of buffer.
|
||||||
|
@param BufferSize The size of buffer.
|
||||||
|
@param Number The number of the strings.
|
||||||
|
@param ... Variable argument list for default value in <AltResp> format
|
||||||
|
generated by the tool.
|
||||||
|
|
||||||
|
@retval EFI_BUFFER_TOO_SMALL the BufferSize is too small to operate.
|
||||||
|
@retval EFI_INVALID_PARAMETER Buffer is NULL or BufferSize is 0.
|
||||||
|
@retval EFI_SUCCESS Operation successful.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
IfrLibExtractDefault(
|
||||||
|
IN VOID *Buffer,
|
||||||
|
IN UINTN *BufferSize,
|
||||||
|
UINTN Number,
|
||||||
|
...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
VA_LIST Args;
|
||||||
|
UINTN Index;
|
||||||
|
UINT32 TotalLen;
|
||||||
|
UINT8 *BufCfgArray;
|
||||||
|
UINT8 *BufferPos;
|
||||||
|
UINT16 Offset;
|
||||||
|
UINT16 Width;
|
||||||
|
UINT8 *Value;
|
||||||
|
|
||||||
|
if ((Buffer == NULL) || (BufferSize == NULL)) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
Offset = 0;
|
||||||
|
Width = 0;
|
||||||
|
Value = NULL;
|
||||||
|
|
||||||
|
VA_START (Args, Number);
|
||||||
|
for (Index = 0; Index < Number; Index++) {
|
||||||
|
BufCfgArray = (UINT8 *) VA_ARG (Args, VOID *);
|
||||||
|
TotalLen = ReadUnaligned32 ((UINT32 *)BufCfgArray);
|
||||||
|
BufferPos = BufCfgArray + sizeof (UINT32);
|
||||||
|
|
||||||
|
while ((UINT32)(BufferPos - BufCfgArray) < TotalLen) {
|
||||||
|
Offset = ReadUnaligned16 ((UINT16 *)BufferPos);
|
||||||
|
BufferPos += sizeof (UINT16);
|
||||||
|
Width = ReadUnaligned16 ((UINT16 *)BufferPos);
|
||||||
|
BufferPos += sizeof (UINT16);
|
||||||
|
Value = BufferPos;
|
||||||
|
BufferPos += Width;
|
||||||
|
|
||||||
|
if ((UINTN)(Offset + Width) > *BufferSize) {
|
||||||
|
return EFI_BUFFER_TOO_SMALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyMem ((UINT8 *)Buffer + Offset, Value, Width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VA_END (Args);
|
||||||
|
|
||||||
|
*BufferSize = (UINTN)Offset;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
@ -90,7 +90,7 @@ HiiLibGetSupportedLanguages (
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
|
Status = gHiiString->GetLanguages (gHiiString, HiiHandle, LanguageString, &BufferSize);
|
||||||
|
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
FreePool (LanguageString);
|
FreePool (LanguageString);
|
||||||
@ -99,7 +99,7 @@ HiiLibGetSupportedLanguages (
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = mHiiStringProt->GetLanguages (mHiiStringProt, HiiHandle, LanguageString, &BufferSize);
|
Status = gHiiString->GetLanguages (gHiiString, HiiHandle, LanguageString, &BufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -189,7 +189,7 @@ HiiLibGetSupportedSecondaryLanguages (
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
|
Status = gHiiString->GetSecondaryLanguages (gHiiString, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
|
||||||
|
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
FreePool (LanguageString);
|
FreePool (LanguageString);
|
||||||
@ -198,7 +198,7 @@ HiiLibGetSupportedSecondaryLanguages (
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = mHiiStringProt->GetSecondaryLanguages (mHiiStringProt, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
|
Status = gHiiString->GetSecondaryLanguages (gHiiString, HiiHandle, FirstLanguage, LanguageString, &BufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -214,8 +214,8 @@ HiiLibNewString (
|
|||||||
// For each language supported by the package,
|
// For each language supported by the package,
|
||||||
// a string token is created.
|
// a string token is created.
|
||||||
//
|
//
|
||||||
Status = mHiiStringProt->NewString (
|
Status = gHiiString->NewString (
|
||||||
mHiiStringProt,
|
gHiiString,
|
||||||
PackageList,
|
PackageList,
|
||||||
StringId,
|
StringId,
|
||||||
Lang,
|
Lang,
|
||||||
@ -287,8 +287,8 @@ HiiLibSetString (
|
|||||||
// For each language supported by the package,
|
// For each language supported by the package,
|
||||||
// the string is updated.
|
// the string is updated.
|
||||||
//
|
//
|
||||||
Status = mHiiStringProt->SetString (
|
Status = gHiiString->SetString (
|
||||||
mHiiStringProt,
|
gHiiString,
|
||||||
PackageList,
|
PackageList,
|
||||||
StringId,
|
StringId,
|
||||||
Lang,
|
Lang,
|
||||||
@ -425,8 +425,8 @@ HiiLibGetString (
|
|||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
if (BestLanguage != NULL ) {
|
if (BestLanguage != NULL ) {
|
||||||
Status = mHiiStringProt->GetString (
|
Status = gHiiString->GetString (
|
||||||
mHiiStringProt,
|
gHiiString,
|
||||||
BestLanguage,
|
BestLanguage,
|
||||||
PackageList,
|
PackageList,
|
||||||
StringId,
|
StringId,
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <Protocol/HiiDatabase.h>
|
#include <Protocol/HiiDatabase.h>
|
||||||
#include <Protocol/HiiString.h>
|
#include <Protocol/HiiString.h>
|
||||||
#include <Protocol/DevicePath.h>
|
#include <Protocol/DevicePath.h>
|
||||||
|
#include <Protocol/FormBrowser2.h>
|
||||||
|
|
||||||
#include <Guid/GlobalVariable.h>
|
#include <Guid/GlobalVariable.h>
|
||||||
|
|
||||||
@ -30,7 +31,9 @@
|
|||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
|
#include <Library/UefiHiiServicesLib.h>
|
||||||
#include <Library/UefiLib.h>
|
#include <Library/UefiLib.h>
|
||||||
|
#include <Library/PrintLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
LIBRARY_CLASS = HiiLib|DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
|
LIBRARY_CLASS = HiiLib|DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SAL_DRIVER DXE_SMM_DRIVER UEFI_APPLICATION UEFI_DRIVER
|
||||||
EFI_SPECIFICATION_VERSION = 0x0002000A
|
EFI_SPECIFICATION_VERSION = 0x0002000A
|
||||||
CONSTRUCTOR = HiiLibConstructor
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||||
@ -49,21 +48,13 @@
|
|||||||
UefiBootServicesTableLib
|
UefiBootServicesTableLib
|
||||||
DevicePathLib
|
DevicePathLib
|
||||||
UefiLib
|
UefiLib
|
||||||
|
UefiHiiServicesLib
|
||||||
|
PrintLib
|
||||||
PcdLib
|
PcdLib
|
||||||
UefiRuntimeServicesTableLib
|
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiHiiDatabaseProtocolGuid ## CONSUMES
|
gEfiFormBrowser2ProtocolGuid ## CONSUMES
|
||||||
gEfiHiiStringProtocolGuid ## CONSUMES
|
|
||||||
gEfiDevicePathProtocolGuid ## CONSUMES
|
gEfiDevicePathProtocolGuid ## CONSUMES
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang
|
gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang
|
||||||
|
|
||||||
[Guids]
|
|
||||||
gEfiGlobalVariableGuid ## SOMETIMES_CONSUMES ## Variable:L"PlatformLang"
|
|
||||||
|
|
||||||
[Depex]
|
|
||||||
gEfiHiiDatabaseProtocolGuid AND
|
|
||||||
gEfiHiiStringProtocolGuid
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
#include "DriverSample.h"
|
#include "DriverSample.h"
|
||||||
|
|
||||||
#define DISPLAY_ONLY_MY_ITEM 0x0000
|
#define DISPLAY_ONLY_MY_ITEM 0x0002
|
||||||
|
|
||||||
EFI_GUID mFormSetGuid = FORMSET_GUID;
|
EFI_GUID mFormSetGuid = FORMSET_GUID;
|
||||||
EFI_GUID mInventoryGuid = INVENTORY_GUID;
|
EFI_GUID mInventoryGuid = INVENTORY_GUID;
|
||||||
@ -218,10 +218,10 @@ SetPassword (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN BufferSize;
|
|
||||||
CHAR16 *Password;
|
CHAR16 *Password;
|
||||||
UINTN PasswordSize;
|
UINTN PasswordSize;
|
||||||
DRIVER_SAMPLE_CONFIGURATION *Configuration;
|
DRIVER_SAMPLE_CONFIGURATION *Configuration;
|
||||||
|
UINTN BufferSize;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get Buffer Storage data from EFI variable
|
// Get Buffer Storage data from EFI variable
|
||||||
@ -253,11 +253,8 @@ SetPassword (
|
|||||||
//
|
//
|
||||||
// Retrive uncommitted data from Browser
|
// Retrive uncommitted data from Browser
|
||||||
//
|
//
|
||||||
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);
|
Configuration = (DRIVER_SAMPLE_CONFIGURATION *) HiiGetBrowserData (&mFormSetGuid, VariableName, sizeof (DRIVER_SAMPLE_CONFIGURATION));
|
||||||
Configuration = AllocateZeroPool (sizeof (DRIVER_SAMPLE_PRIVATE_DATA));
|
if (Configuration != NULL) {
|
||||||
ASSERT (Configuration != NULL);
|
|
||||||
Status = GetBrowserData (&mFormSetGuid, VariableName, &BufferSize, (UINT8 *) Configuration);
|
|
||||||
if (!EFI_ERROR (Status)) {
|
|
||||||
//
|
//
|
||||||
// Update password's clear text in the screen
|
// Update password's clear text in the screen
|
||||||
//
|
//
|
||||||
@ -266,16 +263,17 @@ SetPassword (
|
|||||||
//
|
//
|
||||||
// Update uncommitted data of Browser
|
// Update uncommitted data of Browser
|
||||||
//
|
//
|
||||||
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);
|
HiiSetBrowserData (
|
||||||
Status = SetBrowserData (
|
&mFormSetGuid,
|
||||||
&mFormSetGuid,
|
VariableName,
|
||||||
VariableName,
|
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
||||||
BufferSize,
|
(UINT8 *) Configuration,
|
||||||
(UINT8 *) Configuration,
|
NULL
|
||||||
NULL
|
);
|
||||||
);
|
|
||||||
|
FreePool (Configuration);
|
||||||
}
|
}
|
||||||
FreePool (Configuration);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set password
|
// Set password
|
||||||
@ -355,31 +353,36 @@ ExtractConfig (
|
|||||||
//
|
//
|
||||||
// Request is set to NULL, return all configurable elements together with ALTCFG
|
// Request is set to NULL, return all configurable elements together with ALTCFG
|
||||||
//
|
//
|
||||||
Status = ConstructConfigAltResp (
|
*Results = HiiConstructConfigAltResp (
|
||||||
NULL,
|
&mFormSetGuid,
|
||||||
NULL,
|
VariableName,
|
||||||
Results,
|
PrivateData->DriverHandle[0],
|
||||||
&mFormSetGuid,
|
&PrivateData->Configuration,
|
||||||
VariableName,
|
BufferSize,
|
||||||
PrivateData->DriverHandle[0],
|
VfrMyIfrNVDataBlockName,
|
||||||
&PrivateData->Configuration,
|
STRING_TOKEN (STR_STANDARD_DEFAULT_PROMPT),
|
||||||
BufferSize,
|
VfrMyIfrNVDataDefault0000,
|
||||||
VfrMyIfrNVDataBlockName,
|
STRING_TOKEN (STR_MANUFACTURE_DEFAULT_PROMPT),
|
||||||
2,
|
VfrMyIfrNVDataDefault0001,
|
||||||
STRING_TOKEN (STR_STANDARD_DEFAULT_PROMPT),
|
0,
|
||||||
VfrMyIfrNVDataDefault0000,
|
NULL
|
||||||
STRING_TOKEN (STR_MANUFACTURE_DEFAULT_PROMPT),
|
|
||||||
VfrMyIfrNVDataDefault0001
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// No matched storage is found.
|
||||||
|
//
|
||||||
|
if (*Results == NULL) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
return Status;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check routing data in <ConfigHdr>.
|
// Check routing data in <ConfigHdr>.
|
||||||
// Note: if only one Storage is used, then this checking could be skipped.
|
// Note: if only one Storage is used, then this checking could be skipped.
|
||||||
//
|
//
|
||||||
if (!IsConfigHdrMatch (Request, &mFormSetGuid, VariableName)) {
|
if (!HiiIsConfigHdrMatch (Request, &mFormSetGuid, VariableName)) {
|
||||||
*Progress = Request;
|
*Progress = Request;
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
@ -440,7 +443,7 @@ RouteConfig (
|
|||||||
// Check routing data in <ConfigHdr>.
|
// Check routing data in <ConfigHdr>.
|
||||||
// Note: if only one Storage is used, then this checking could be skipped.
|
// Note: if only one Storage is used, then this checking could be skipped.
|
||||||
//
|
//
|
||||||
if (!IsConfigHdrMatch (Configuration, &mFormSetGuid, VariableName)) {
|
if (!HiiIsConfigHdrMatch (Configuration, &mFormSetGuid, VariableName)) {
|
||||||
*Progress = Configuration;
|
*Progress = Configuration;
|
||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
@ -525,9 +528,12 @@ DriverCallback (
|
|||||||
{
|
{
|
||||||
DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;
|
DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HII_UPDATE_DATA UpdateData;
|
|
||||||
IFR_OPTION *IfrOptionList;
|
|
||||||
UINT8 MyVar;
|
UINT8 MyVar;
|
||||||
|
VOID *StartOpCodeHandle;
|
||||||
|
VOID *OptionsOpCodeHandle;
|
||||||
|
EFI_IFR_GUID_LABEL *StartLabel;
|
||||||
|
VOID *EndOpCodeHandle;
|
||||||
|
EFI_IFR_GUID_LABEL *EndLabel;
|
||||||
|
|
||||||
if ((Value == NULL) || (ActionRequest == NULL)) {
|
if ((Value == NULL) || (ActionRequest == NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
@ -541,139 +547,179 @@ DriverCallback (
|
|||||||
//
|
//
|
||||||
// Initialize the container for dynamic opcodes
|
// Initialize the container for dynamic opcodes
|
||||||
//
|
//
|
||||||
IfrLibInitUpdateData (&UpdateData, 0x1000);
|
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||||
|
ASSERT (StartOpCodeHandle != NULL);
|
||||||
|
|
||||||
IfrOptionList = AllocatePool (2 * sizeof (IFR_OPTION));
|
EndOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||||
ASSERT (IfrOptionList != NULL);
|
ASSERT (EndOpCodeHandle != NULL);
|
||||||
|
|
||||||
IfrOptionList[0].Flags = 0;
|
//
|
||||||
IfrOptionList[0].StringToken = STRING_TOKEN (STR_BOOT_OPTION1);
|
// Create Hii Extend Label OpCode as the start opcode
|
||||||
IfrOptionList[0].Value.u8 = 1;
|
//
|
||||||
IfrOptionList[1].Flags = EFI_IFR_OPTION_DEFAULT;
|
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
|
||||||
IfrOptionList[1].StringToken = STRING_TOKEN (STR_BOOT_OPTION2);
|
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
||||||
IfrOptionList[1].Value.u8 = 2;
|
StartLabel->Number = LABEL_UPDATE1;
|
||||||
|
|
||||||
CreateActionOpCode (
|
//
|
||||||
0x1237, // Question ID
|
// Create Hii Extend Label OpCode as the end opcode
|
||||||
STRING_TOKEN(STR_EXIT_TEXT), // Prompt text
|
//
|
||||||
STRING_TOKEN(STR_EXIT_TEXT), // Help text
|
EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
|
||||||
EFI_IFR_FLAG_CALLBACK, // Question flag
|
EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
||||||
0, // Action String ID
|
EndLabel->Number = LABEL_END;
|
||||||
&UpdateData // Container for dynamic created opcodes
|
|
||||||
);
|
HiiCreateActionOpCode (
|
||||||
|
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||||
|
0x1237, // Question ID
|
||||||
|
STRING_TOKEN(STR_EXIT_TEXT), // Prompt text
|
||||||
|
STRING_TOKEN(STR_EXIT_TEXT), // Help text
|
||||||
|
EFI_IFR_FLAG_CALLBACK, // Question flag
|
||||||
|
0 // Action String ID
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Create Option OpCode
|
||||||
|
//
|
||||||
|
OptionsOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||||
|
ASSERT (OptionsOpCodeHandle != NULL);
|
||||||
|
|
||||||
|
HiiCreateOneOfOptionOpCode (
|
||||||
|
OptionsOpCodeHandle,
|
||||||
|
STRING_TOKEN (STR_BOOT_OPTION1),
|
||||||
|
0,
|
||||||
|
EFI_IFR_NUMERIC_SIZE_1,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
|
HiiCreateOneOfOptionOpCode (
|
||||||
|
OptionsOpCodeHandle,
|
||||||
|
STRING_TOKEN (STR_BOOT_OPTION2),
|
||||||
|
0,
|
||||||
|
EFI_IFR_NUMERIC_SIZE_1,
|
||||||
|
2
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare initial value for the dynamic created oneof Question
|
||||||
|
//
|
||||||
|
PrivateData->Configuration.DynamicOneof = 2;
|
||||||
|
Status = gRT->SetVariable(
|
||||||
|
VariableName,
|
||||||
|
&mFormSetGuid,
|
||||||
|
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
||||||
|
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
||||||
|
&PrivateData->Configuration
|
||||||
|
);
|
||||||
|
|
||||||
|
HiiCreateOneOfOpCode (
|
||||||
|
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||||
|
0x8001, // Question ID (or call it "key")
|
||||||
|
CONFIGURATION_VARSTORE_ID, // VarStore ID
|
||||||
|
(UINT16) DYNAMIC_ONE_OF_VAR_OFFSET, // Offset in Buffer Storage
|
||||||
|
STRING_TOKEN (STR_ONE_OF_PROMPT), // Question prompt text
|
||||||
|
STRING_TOKEN (STR_ONE_OF_HELP), // Question help text
|
||||||
|
EFI_IFR_FLAG_CALLBACK, // Question flag
|
||||||
|
EFI_IFR_NUMERIC_SIZE_1, // Data type of Question Value
|
||||||
|
OptionsOpCodeHandle, // Option Opcode list
|
||||||
|
NULL // Default Opcode is NULl
|
||||||
|
);
|
||||||
|
|
||||||
|
HiiCreateOrderedListOpCode (
|
||||||
|
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||||
|
0x8002, // Question ID
|
||||||
|
CONFIGURATION_VARSTORE_ID, // VarStore ID
|
||||||
|
(UINT16) DYNAMIC_ORDERED_LIST_VAR_OFFSET, // Offset in Buffer Storage
|
||||||
|
STRING_TOKEN (STR_BOOT_OPTIONS), // Question prompt text
|
||||||
|
STRING_TOKEN (STR_BOOT_OPTIONS), // Question help text
|
||||||
|
EFI_IFR_FLAG_RESET_REQUIRED, // Question flag
|
||||||
|
0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET
|
||||||
|
EFI_IFR_NUMERIC_SIZE_1, // Data type of Question value
|
||||||
|
5, // Maximum container
|
||||||
|
OptionsOpCodeHandle, // Option Opcode list
|
||||||
|
NULL // Default Opcode is NULl
|
||||||
|
);
|
||||||
|
|
||||||
|
HiiCreateGotoOpCode (
|
||||||
|
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||||
|
1, // Target Form ID
|
||||||
|
STRING_TOKEN (STR_GOTO_FORM1), // Prompt text
|
||||||
|
STRING_TOKEN (STR_GOTO_HELP), // Help text
|
||||||
|
0, // Question flag
|
||||||
|
0x8003 // Question ID
|
||||||
|
);
|
||||||
|
|
||||||
|
HiiUpdateForm (
|
||||||
|
PrivateData->HiiHandle[0], // HII handle
|
||||||
|
&mFormSetGuid, // Formset GUID
|
||||||
|
0x1234, // Form ID
|
||||||
|
StartOpCodeHandle, // Label for where to insert opcodes
|
||||||
|
EndOpCodeHandle // Replace data
|
||||||
|
);
|
||||||
|
|
||||||
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||||
|
HiiFreeOpCodeHandle (OptionsOpCodeHandle);
|
||||||
|
break;
|
||||||
|
|
||||||
//
|
case 0x5678:
|
||||||
// Prepare initial value for the dynamic created oneof Question
|
//
|
||||||
//
|
// We will reach here once the Question is refreshed
|
||||||
PrivateData->Configuration.DynamicOneof = 2;
|
//
|
||||||
Status = gRT->SetVariable(
|
|
||||||
VariableName,
|
//
|
||||||
&mFormSetGuid,
|
// Initialize the container for dynamic opcodes
|
||||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
//
|
||||||
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
StartOpCodeHandle = HiiAllocateOpCodeHandle ();
|
||||||
&PrivateData->Configuration
|
ASSERT (StartOpCodeHandle != NULL);
|
||||||
);
|
|
||||||
CreateOneOfOpCode (
|
//
|
||||||
0x8001, // Question ID (or call it "key")
|
// Create Hii Extend Label OpCode as the start opcode
|
||||||
CONFIGURATION_VARSTORE_ID, // VarStore ID
|
//
|
||||||
(UINT16) DYNAMIC_ONE_OF_VAR_OFFSET, // Offset in Buffer Storage
|
StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));
|
||||||
STRING_TOKEN (STR_ONE_OF_PROMPT), // Question prompt text
|
StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;
|
||||||
STRING_TOKEN (STR_ONE_OF_HELP), // Question help text
|
StartLabel->Number = LABEL_UPDATE2;
|
||||||
EFI_IFR_FLAG_CALLBACK, // Question flag
|
|
||||||
EFI_IFR_NUMERIC_SIZE_1, // Data type of Question Value
|
HiiCreateActionOpCode (
|
||||||
IfrOptionList, // Option list
|
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||||
2, // Number of options in Option list
|
0x1237, // Question ID
|
||||||
&UpdateData // Container for dynamic created opcodes
|
STRING_TOKEN(STR_EXIT_TEXT), // Prompt text
|
||||||
);
|
STRING_TOKEN(STR_EXIT_TEXT), // Help text
|
||||||
|
EFI_IFR_FLAG_CALLBACK, // Question flag
|
||||||
|
0 // Action String ID
|
||||||
|
);
|
||||||
|
|
||||||
CreateOrderedListOpCode (
|
HiiUpdateForm (
|
||||||
0x8002, // Question ID
|
PrivateData->HiiHandle[0], // HII handle
|
||||||
CONFIGURATION_VARSTORE_ID, // VarStore ID
|
&mFormSetGuid, // Formset GUID
|
||||||
(UINT16) DYNAMIC_ORDERED_LIST_VAR_OFFSET, // Offset in Buffer Storage
|
0x3, // Form ID
|
||||||
STRING_TOKEN (STR_BOOT_OPTIONS), // Question prompt text
|
StartOpCodeHandle, // Label for where to insert opcodes
|
||||||
STRING_TOKEN (STR_BOOT_OPTIONS), // Question help text
|
NULL // Insert data
|
||||||
EFI_IFR_FLAG_RESET_REQUIRED, // Question flag
|
);
|
||||||
0, // Ordered list flag, e.g. EFI_IFR_UNIQUE_SET
|
|
||||||
EFI_IFR_NUMERIC_SIZE_1, // Data type of Question value
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||||
5, // Maximum container
|
|
||||||
IfrOptionList, // Option list
|
//
|
||||||
2, // Number of options in Option list
|
// Refresh the Question value
|
||||||
&UpdateData // Container for dynamic created opcodes
|
//
|
||||||
);
|
PrivateData->Configuration.DynamicRefresh++;
|
||||||
|
Status = gRT->SetVariable(
|
||||||
CreateGotoOpCode (
|
VariableName,
|
||||||
1, // Target Form ID
|
&mFormSetGuid,
|
||||||
STRING_TOKEN (STR_GOTO_FORM1), // Prompt text
|
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
||||||
STRING_TOKEN (STR_GOTO_HELP), // Help text
|
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
||||||
0, // Question flag
|
&PrivateData->Configuration
|
||||||
0x8003, // Question ID
|
);
|
||||||
&UpdateData // Container for dynamic created opcodes
|
|
||||||
);
|
//
|
||||||
|
// Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause
|
||||||
Status = IfrLibUpdateForm (
|
// the first statement in Form 3 be suppressed
|
||||||
PrivateData->HiiHandle[0], // HII handle
|
//
|
||||||
&mFormSetGuid, // Formset GUID
|
MyVar = 111;
|
||||||
0x1234, // Form ID
|
Status = gRT->SetVariable(
|
||||||
0x1234, // Label for where to insert opcodes
|
L"MyVar",
|
||||||
TRUE, // Append or replace
|
&mFormSetGuid,
|
||||||
&UpdateData // Dynamic created opcodes
|
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
||||||
);
|
1,
|
||||||
FreePool (IfrOptionList);
|
&MyVar
|
||||||
IfrLibFreeUpdateData (&UpdateData);
|
);
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x5678:
|
|
||||||
//
|
|
||||||
// We will reach here once the Question is refreshed
|
|
||||||
//
|
|
||||||
IfrLibInitUpdateData (&UpdateData, 0x1000);
|
|
||||||
|
|
||||||
IfrOptionList = AllocatePool (2 * sizeof (IFR_OPTION));
|
|
||||||
ASSERT (IfrOptionList != NULL);
|
|
||||||
|
|
||||||
CreateActionOpCode (
|
|
||||||
0x1237, // Question ID
|
|
||||||
STRING_TOKEN(STR_EXIT_TEXT), // Prompt text
|
|
||||||
STRING_TOKEN(STR_EXIT_TEXT), // Help text
|
|
||||||
EFI_IFR_FLAG_CALLBACK, // Question flag
|
|
||||||
0, // Action String ID
|
|
||||||
&UpdateData // Container for dynamic created opcodes
|
|
||||||
);
|
|
||||||
|
|
||||||
Status = IfrLibUpdateForm (
|
|
||||||
PrivateData->HiiHandle[0], // HII handle
|
|
||||||
&mFormSetGuid, // Formset GUID
|
|
||||||
3, // Form ID
|
|
||||||
0x2234, // Label for where to insert opcodes
|
|
||||||
TRUE, // Append or replace
|
|
||||||
&UpdateData // Dynamic created opcodes
|
|
||||||
);
|
|
||||||
IfrLibFreeUpdateData (&UpdateData);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Refresh the Question value
|
|
||||||
//
|
|
||||||
PrivateData->Configuration.DynamicRefresh++;
|
|
||||||
Status = gRT->SetVariable(
|
|
||||||
VariableName,
|
|
||||||
&mFormSetGuid,
|
|
||||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
|
||||||
sizeof (DRIVER_SAMPLE_CONFIGURATION),
|
|
||||||
&PrivateData->Configuration
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause
|
|
||||||
// the first statement in Form 3 be suppressed
|
|
||||||
//
|
|
||||||
MyVar = 111;
|
|
||||||
Status = gRT->SetVariable(
|
|
||||||
L"MyVar",
|
|
||||||
&mFormSetGuid,
|
|
||||||
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
|
|
||||||
1,
|
|
||||||
&MyVar
|
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x1237:
|
case 0x1237:
|
||||||
@ -934,32 +980,43 @@ DriverSampleInit (
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SavedStatus = EFI_SUCCESS;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Default this driver is built into Flash device image,
|
||||||
|
// the following code doesn't run.
|
||||||
|
//
|
||||||
|
|
||||||
//
|
//
|
||||||
// Example of how to display only the item we sent to HII
|
// Example of how to display only the item we sent to HII
|
||||||
|
// When this driver is not built into Flash device image,
|
||||||
|
// it need to call SendForm to show front page by itself.
|
||||||
//
|
//
|
||||||
//
|
if (DISPLAY_ONLY_MY_ITEM <= 1) {
|
||||||
// Have the browser pull out our copy of the data, and only display our data
|
//
|
||||||
//
|
// Have the browser pull out our copy of the data, and only display our data
|
||||||
Status = FormBrowser2->SendForm (
|
//
|
||||||
FormBrowser2,
|
Status = FormBrowser2->SendForm (
|
||||||
&(HiiHandle[DISPLAY_ONLY_MY_ITEM]),
|
FormBrowser2,
|
||||||
1,
|
&(HiiHandle[DISPLAY_ONLY_MY_ITEM]),
|
||||||
NULL,
|
1,
|
||||||
0,
|
NULL,
|
||||||
NULL,
|
0,
|
||||||
NULL
|
NULL,
|
||||||
);
|
NULL
|
||||||
SavedStatus = Status;
|
);
|
||||||
|
SavedStatus = Status;
|
||||||
Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[0]);
|
|
||||||
if (EFI_ERROR (Status)) {
|
Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[0]);
|
||||||
return Status;
|
if (EFI_ERROR (Status)) {
|
||||||
}
|
return Status;
|
||||||
|
}
|
||||||
Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[1]);
|
|
||||||
if (EFI_ERROR (Status)) {
|
Status = HiiDatabase->RemovePackageList (HiiDatabase, HiiHandle[1]);
|
||||||
return Status;
|
if (EFI_ERROR (Status)) {
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return SavedStatus;
|
return SavedStatus;
|
||||||
|
@ -39,8 +39,6 @@ Revision History
|
|||||||
#include <Library/UefiDriverEntryPoint.h>
|
#include <Library/UefiDriverEntryPoint.h>
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/IfrSupportLib.h>
|
|
||||||
#include <Library/ExtendedIfrSupportLib.h>
|
|
||||||
#include <Library/HiiLib.h>
|
#include <Library/HiiLib.h>
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
|
|
||||||
|
@ -53,8 +53,9 @@
|
|||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
DebugLib
|
DebugLib
|
||||||
HiiLib
|
HiiLib
|
||||||
IfrSupportLib
|
|
||||||
ExtendedIfrSupportLib
|
[Guids]
|
||||||
|
gEfiIfrTianoGuid ## CONSUMES ## Guid
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiHiiStringProtocolGuid ## CONSUMES
|
gEfiHiiStringProtocolGuid ## CONSUMES
|
||||||
|
@ -71,6 +71,12 @@ typedef struct {
|
|||||||
UINT8 OrderedList[3];
|
UINT8 OrderedList[3];
|
||||||
} MY_DATA2;
|
} MY_DATA2;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Labels definition
|
||||||
|
//
|
||||||
|
#define LABEL_UPDATE1 0x1234
|
||||||
|
#define LABEL_UPDATE2 0x2234
|
||||||
|
#define LABEL_END 0x2223
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
#define LABEL_1_VALUE 0x01
|
#define LABEL_1_VALUE 0x01
|
||||||
#define LABEL_2_VALUE 0x1000
|
#define LABEL_2_VALUE 0x1000
|
||||||
#define LABEL_UPDATE_BBS 0x2222
|
#define LABEL_UPDATE_BBS 0x2222
|
||||||
#define LABEL_END 0x2223
|
|
||||||
|
|
||||||
formset
|
formset
|
||||||
guid = FORMSET_GUID,
|
guid = FORMSET_GUID,
|
||||||
@ -519,7 +518,7 @@ formset
|
|||||||
refresh interval = 3 // Refresh interval in seconds
|
refresh interval = 3 // Refresh interval in seconds
|
||||||
endnumeric;
|
endnumeric;
|
||||||
|
|
||||||
label 0x2234;
|
label LABEL_UPDATE2;
|
||||||
label LABEL_END;
|
label LABEL_END;
|
||||||
|
|
||||||
endform;
|
endform;
|
||||||
@ -531,7 +530,7 @@ formset
|
|||||||
form formid = 0x1234, // Dynamically created page,
|
form formid = 0x1234, // Dynamically created page,
|
||||||
title = STRING_TOKEN(STR_DYNAMIC_TITLE); // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code
|
title = STRING_TOKEN(STR_DYNAMIC_TITLE); // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code
|
||||||
|
|
||||||
label 0x1234;
|
label LABEL_UPDATE1;
|
||||||
//
|
//
|
||||||
// This is where we will insert dynamic created opcodes
|
// This is where we will insert dynamic created opcodes
|
||||||
//
|
//
|
||||||
|
@ -15,6 +15,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include "IScsiImpl.h"
|
#include "IScsiImpl.h"
|
||||||
|
|
||||||
EFI_GUID mVendorGuid = ISCSI_CONFIG_GUID;
|
EFI_GUID mVendorGuid = ISCSI_CONFIG_GUID;
|
||||||
|
CHAR16 mVendorStorageName[] = L"ISCSI_CONFIG_IFR_NVDATA";
|
||||||
BOOLEAN mIScsiDeviceListUpdated = FALSE;
|
BOOLEAN mIScsiDeviceListUpdated = FALSE;
|
||||||
UINTN mNumberOfIScsiDevices = 0;
|
UINTN mNumberOfIScsiDevices = 0;
|
||||||
ISCSI_FORM_CALLBACK_INFO *mCallbackInfo = NULL;
|
ISCSI_FORM_CALLBACK_INFO *mCallbackInfo = NULL;
|
||||||
@ -504,14 +505,12 @@ IScsiFormCallback (
|
|||||||
//
|
//
|
||||||
// Retrive uncommitted data from Browser
|
// Retrive uncommitted data from Browser
|
||||||
//
|
//
|
||||||
BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);
|
IfrNvData = (ISCSI_CONFIG_IFR_NVDATA *) HiiGetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA));
|
||||||
IfrNvData = AllocateZeroPool (BufferSize);
|
if (IfrNvData == NULL) {
|
||||||
ASSERT (IfrNvData != NULL);
|
return EFI_NOT_FOUND;
|
||||||
Status = GetBrowserData (NULL, NULL, &BufferSize, (UINT8 *) IfrNvData);
|
|
||||||
if (EFI_ERROR (Status)) {
|
|
||||||
gBS->FreePool (IfrNvData);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
switch (QuestionId) {
|
switch (QuestionId) {
|
||||||
case KEY_INITIATOR_NAME:
|
case KEY_INITIATOR_NAME:
|
||||||
@ -730,11 +729,10 @@ IScsiFormCallback (
|
|||||||
//
|
//
|
||||||
// Pass changed uncommitted data back to Form Browser
|
// Pass changed uncommitted data back to Form Browser
|
||||||
//
|
//
|
||||||
BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA);
|
HiiSetBrowserData (&mVendorGuid, mVendorStorageName, sizeof (ISCSI_CONFIG_IFR_NVDATA), (UINT8 *) IfrNvData, NULL);
|
||||||
Status = SetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gBS->FreePool (IfrNvData);
|
FreePool (IfrNvData);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -761,12 +759,14 @@ IScsiConfigUpdateForm (
|
|||||||
ISCSI_CONFIG_FORM_ENTRY *ConfigFormEntry;
|
ISCSI_CONFIG_FORM_ENTRY *ConfigFormEntry;
|
||||||
BOOLEAN EntryExisted;
|
BOOLEAN EntryExisted;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HII_UPDATE_DATA UpdateData;
|
|
||||||
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
|
EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
|
||||||
CHAR16 PortString[128];
|
CHAR16 PortString[128];
|
||||||
UINT16 FormIndex;
|
UINT16 FormIndex;
|
||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
|
VOID *StartOpCodeHandle;
|
||||||
|
VOID *EndOpCodeHandle;
|
||||||
|
EFI_IFR_GUID_LABEL *StartLabel;
|
||||||
|
EFI_IFR_GUID_LABEL *EndLabel;
|
||||||
|
|
||||||
ConfigFormEntry = NULL;
|
ConfigFormEntry = NULL;
|
||||||
EntryExisted = FALSE;
|
EntryExisted = FALSE;
|
||||||
@ -861,36 +861,56 @@ IScsiConfigUpdateForm (
|
|||||||
//
|
//
|
||||||
// Allocate space for creation of Buffer
|
// 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;
|
FormIndex = 0;
|
||||||
NET_LIST_FOR_EACH (Entry, &mIScsiConfigFormList) {
|
NET_LIST_FOR_EACH (Entry, &mIScsiConfigFormList) {
|
||||||
ConfigFormEntry = NET_LIST_USER_STRUCT (Entry, ISCSI_CONFIG_FORM_ENTRY, Link);
|
ConfigFormEntry = NET_LIST_USER_STRUCT (Entry, ISCSI_CONFIG_FORM_ENTRY, Link);
|
||||||
|
|
||||||
CreateGotoOpCode (
|
HiiCreateGotoOpCode (
|
||||||
FORMID_DEVICE_FORM,
|
StartOpCodeHandle, // Container for dynamic created opcodes
|
||||||
ConfigFormEntry->PortTitleToken,
|
FORMID_DEVICE_FORM, // Target Form ID
|
||||||
ConfigFormEntry->PortTitleHelpToken,
|
ConfigFormEntry->PortTitleToken, // Prompt text
|
||||||
EFI_IFR_FLAG_CALLBACK,
|
ConfigFormEntry->PortTitleHelpToken, // Help text
|
||||||
(UINT16)(KEY_DEVICE_ENTRY_BASE + FormIndex),
|
EFI_IFR_FLAG_CALLBACK, // Question flag
|
||||||
&UpdateData
|
(UINT16)(KEY_DEVICE_ENTRY_BASE + FormIndex) // Question ID
|
||||||
);
|
);
|
||||||
|
|
||||||
FormIndex++;
|
FormIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
IfrLibUpdateForm (
|
HiiUpdateForm (
|
||||||
mCallbackInfo->RegisteredHandle,
|
mCallbackInfo->RegisteredHandle,
|
||||||
&mVendorGuid,
|
&mVendorGuid,
|
||||||
FORMID_MAIN_FORM,
|
FORMID_MAIN_FORM,
|
||||||
DEVICE_ENTRY_LABEL,
|
StartOpCodeHandle, // Label DEVICE_ENTRY_LABEL
|
||||||
FALSE,
|
EndOpCodeHandle // LABEL_END
|
||||||
&UpdateData
|
|
||||||
);
|
);
|
||||||
|
|
||||||
gBS->FreePool (UpdateData.Data);
|
HiiFreeOpCodeHandle (StartOpCodeHandle);
|
||||||
|
HiiFreeOpCodeHandle (EndOpCodeHandle);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -15,11 +15,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#ifndef _ISCSI_CONFIG_H_
|
#ifndef _ISCSI_CONFIG_H_
|
||||||
#define _ISCSI_CONFIG_H_
|
#define _ISCSI_CONFIG_H_
|
||||||
|
|
||||||
|
#include <Guid/MdeModuleHii.h>
|
||||||
#include <Protocol/HiiConfigRouting.h>
|
#include <Protocol/HiiConfigRouting.h>
|
||||||
#include <Library/HiiLib.h>
|
#include <Library/HiiLib.h>
|
||||||
#include <Library/DevicePathLib.h>
|
#include <Library/DevicePathLib.h>
|
||||||
#include <Library/IfrSupportLib.h>
|
|
||||||
#include <Library/ExtendedIfrSupportLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/NetLib.h>
|
#include <Library/NetLib.h>
|
||||||
|
@ -16,8 +16,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include "IScsiConfigNVDataStruc.h"
|
#include "IScsiConfigNVDataStruc.h"
|
||||||
#define EFI_NETWORK_DEVICE_CLASS 0x04
|
#define EFI_NETWORK_DEVICE_CLASS 0x04
|
||||||
|
|
||||||
#define LABEL_END 0xffff
|
|
||||||
|
|
||||||
formset
|
formset
|
||||||
guid = ISCSI_CONFIG_GUID,
|
guid = ISCSI_CONFIG_GUID,
|
||||||
title = STRING_TOKEN(STR_ISCSI_CONFIG_FORM_TITLE),
|
title = STRING_TOKEN(STR_ISCSI_CONFIG_FORM_TITLE),
|
||||||
|
@ -47,6 +47,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#define TARGET_PORT_MAX_NUM 65535
|
#define TARGET_PORT_MAX_NUM 65535
|
||||||
|
|
||||||
#define DEVICE_ENTRY_LABEL 0x1234
|
#define DEVICE_ENTRY_LABEL 0x1234
|
||||||
|
#define LABEL_END 0xffff
|
||||||
|
|
||||||
#define KEY_INITIATOR_NAME 0x101
|
#define KEY_INITIATOR_NAME 0x101
|
||||||
#define KEY_DHCP_ENABLE 0x102
|
#define KEY_DHCP_ENABLE 0x102
|
||||||
|
@ -78,8 +78,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
DebugLib
|
DebugLib
|
||||||
PrintLib
|
PrintLib
|
||||||
HiiLib
|
HiiLib
|
||||||
IfrSupportLib
|
|
||||||
ExtendedIfrSupportLib
|
|
||||||
NetLib
|
NetLib
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
@ -97,3 +95,4 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiEventExitBootServicesGuid
|
gEfiEventExitBootServicesGuid
|
||||||
|
gEfiIfrTianoGuid ## CONSUMES ## Guid
|
||||||
|
@ -323,40 +323,25 @@ InitializeConfigHdr (
|
|||||||
IN OUT FORMSET_STORAGE *Storage
|
IN OUT FORMSET_STORAGE *Storage
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
|
||||||
UINTN StrBufferLen;
|
|
||||||
CHAR16 *Name;
|
CHAR16 *Name;
|
||||||
|
|
||||||
if (Storage->Type == EFI_HII_VARSTORE_BUFFER) {
|
if (Storage->Type == EFI_HII_VARSTORE_BUFFER) {
|
||||||
Name = Storage->Name;
|
Name = Storage->Name;
|
||||||
} else {
|
} else {
|
||||||
Name = NULL;
|
Name = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
StrBufferLen = 0;
|
Storage->ConfigHdr = HiiConstructConfigHdr (
|
||||||
Status = ConstructConfigHdr (
|
&Storage->Guid,
|
||||||
Storage->ConfigHdr,
|
Name,
|
||||||
&StrBufferLen,
|
FormSet->DriverHandle
|
||||||
&Storage->Guid,
|
);
|
||||||
Name,
|
|
||||||
FormSet->DriverHandle
|
if (Storage->ConfigHdr == NULL) {
|
||||||
);
|
return EFI_NOT_FOUND;
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
|
||||||
Storage->ConfigHdr = AllocateZeroPool (StrBufferLen);
|
|
||||||
Status = ConstructConfigHdr (
|
|
||||||
Storage->ConfigHdr,
|
|
||||||
&StrBufferLen,
|
|
||||||
&Storage->Guid,
|
|
||||||
Name,
|
|
||||||
FormSet->DriverHandle
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
Storage->ConfigRequest = AllocateCopyPool (StrSize (Storage->ConfigHdr), Storage->ConfigHdr);
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
Storage->ConfigRequest = AllocateCopyPool (StrBufferLen, Storage->ConfigHdr);
|
|
||||||
Storage->SpareStrLen = 0;
|
Storage->SpareStrLen = 0;
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
|
@ -39,7 +39,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include <Library/UefiBootServicesTableLib.h>
|
#include <Library/UefiBootServicesTableLib.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
#include <Library/MemoryAllocationLib.h>
|
#include <Library/MemoryAllocationLib.h>
|
||||||
#include <Library/IfrSupportLib.h>
|
|
||||||
#include <Library/HiiLib.h>
|
#include <Library/HiiLib.h>
|
||||||
#include <Library/PcdLib.h>
|
#include <Library/PcdLib.h>
|
||||||
|
|
||||||
|
@ -49,7 +49,6 @@
|
|||||||
MdePkg/MdePkg.dec
|
MdePkg/MdePkg.dec
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
MdeModulePkg/MdeModulePkg.dec
|
||||||
|
|
||||||
|
|
||||||
[LibraryClasses]
|
[LibraryClasses]
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
BaseLib
|
BaseLib
|
||||||
@ -59,9 +58,8 @@
|
|||||||
BaseMemoryLib
|
BaseMemoryLib
|
||||||
DebugLib
|
DebugLib
|
||||||
PrintLib
|
PrintLib
|
||||||
IfrSupportLib
|
|
||||||
HiiLib
|
HiiLib
|
||||||
|
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiIfrTianoGuid ## CONSUMES ## GUID
|
gEfiIfrTianoGuid ## CONSUMES ## GUID
|
||||||
gEfiIfrFrameworkGuid ## CONSUMES ## GUID
|
gEfiIfrFrameworkGuid ## CONSUMES ## GUID
|
||||||
|
Reference in New Issue
Block a user