#include "UefiIfrDefault.h"\r
#include "OpcodeCreation.h"\r
\r
-EFI_STATUS\r
-EFIAPI\r
-HiiExportDatabase (\r
- IN EFI_HII_PROTOCOL *This,\r
- IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
- IN OUT UINTN *BufferSize,\r
- OUT VOID *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- This function allows a program to extract a form or form package that has\r
- previously been registered with the EFI HII database.\r
-\r
-Arguments:\r
-\r
-Returns:\r
-\r
---*/\r
-{\r
- ASSERT (FALSE);\r
- return EFI_UNSUPPORTED;\r
-}\r
-\r
+//\r
+// This structure is only intended to be used in this file.\r
+//\r
#pragma pack(push, 1)\r
typedef struct {\r
EFI_HII_PACK_HEADER PackageHeader;\r
FRAMEWORK_EFI_IFR_FORM_SET FormSet;\r
FRAMEWORK_EFI_IFR_END_FORM_SET EndFormSet;\r
-} FRAMEWORK_HII_FORMSET_TEMPLATE;\r
+} FW_HII_FORMSET_TEMPLATE;\r
#pragma pack(pop)\r
\r
-FRAMEWORK_HII_FORMSET_TEMPLATE FormSetTemplate = {\r
+FW_HII_FORMSET_TEMPLATE FormSetTemplate = {\r
{\r
- sizeof (FRAMEWORK_HII_FORMSET_TEMPLATE),\r
+ sizeof (FW_HII_FORMSET_TEMPLATE),\r
EFI_HII_IFR\r
},\r
{\r
}\r
};\r
\r
-EFI_STATUS\r
-EFIAPI\r
-HiiGetForms (\r
- IN EFI_HII_PROTOCOL *This,\r
- IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
- IN EFI_FORM_ID FormId,\r
- IN OUT UINTN *BufferLengthTemp,\r
- OUT UINT8 *Buffer\r
- )\r
-/*++\r
-\r
-Routine Description:\r
\r
- This function allows a program to extract a form or form package that has\r
- previously been registered with the EFI HII database.\r
+/**\r
\r
-Arguments:\r
- This - A pointer to the EFI_HII_PROTOCOL instance.\r
+ This thunk module only handles UEFI HII packages. The caller of this function \r
+ won¡¯t be able to parse the content. Therefore, it is not supported.\r
+ \r
+ This function will ASSERT and return EFI_UNSUPPORTED.\r
\r
- Handle - Handle on which the form resides. Type FRAMEWORK_EFI_HII_HANDLE is defined in\r
- EFI_HII_PROTOCOL.NewPack() in the Packages section.\r
+ @param This N.A.\r
+ @param Handle N.A.\r
+ @param BufferSize N.A.\r
+ @param Buffer N.A.\r
\r
- FormId - The ID of the form to return. If the ID is zero, the entire form package is returned.\r
- Type EFI_FORM_ID is defined in "Related Definitions" below.\r
+ @retval EFI_UNSUPPORTED\r
\r
- BufferLength - On input, the length of the Buffer. On output, the length of the returned buffer, if\r
- the length was sufficient and, if it was not, the length that is required to fit the\r
- requested form(s).\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiExportDatabase (\r
+ IN EFI_HII_PROTOCOL *This,\r
+ IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
+ IN OUT UINTN *BufferSize,\r
+ OUT VOID *Buffer\r
+ )\r
+{\r
+ ASSERT (FALSE);\r
+ return EFI_UNSUPPORTED;\r
+}\r
\r
- Buffer - The buffer designed to receive the form(s).\r
\r
-Returns:\r
+/**\r
+ This function allows a program to extract a form or form package that has\r
+ previously been registered with the EFI HII database.\r
\r
- EFI_SUCCESS - Buffer filled with the requested forms. BufferLength\r
- was updated.\r
+ In this thunk module, this function will create a IFR Package with only \r
+ one Formset. Effectively, only the GUID of the Formset is updated and return\r
+ in this IFR package to caller. This is enable the Framework modules which call \r
+ a API named GetStringFromToken. GetStringFromToken retieves a String based on\r
+ a String Token from a Package List known only by the Formset GUID.\r
+ \r
\r
- EFI_INVALID_PARAMETER - The handle is unknown.\r
\r
- EFI_NOT_FOUND - A form on the requested handle cannot be found with the\r
- requested FormId.\r
+ @param This A pointer to the EFI_HII_PROTOCOL instance.\r
+ @param Handle Handle on which the form resides. Type FRAMEWORK_EFI_HII_HANDLE is defined in\r
+ EFI_HII_PROTOCOL.NewPack() in the Packages section.\r
+ @param FormId Ignored by this implementation.\r
+ @param BufferLengthTemp On input, the size of input buffer. On output, it\r
+ is the size of FW_HII_FORMSET_TEMPLATE.\r
+ @param Buffer The buffer designed to receive the form(s).\r
\r
- EFI_BUFFER_TOO_SMALL - The buffer provided was not large enough to allow the form to be stored.\r
+ @retval EFI_SUCCESS Buffer filled with the requested forms. BufferLength\r
+ was updated.\r
+ @retval EFI_INVALID_PARAMETER The handle is unknown.\r
+ @retval EFI_NOT_FOUND A form on the requested handle cannot be found with the\r
+ requested FormId.\r
+ @retval EFI_BUFFER_TOO_SMALL The buffer provided was not large enough to allow the form to be stored.\r
\r
---*/\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetForms (\r
+ IN EFI_HII_PROTOCOL *This,\r
+ IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
+ IN EFI_FORM_ID FormId,\r
+ IN OUT UINTN *BufferLengthTemp,\r
+ OUT UINT8 *Buffer\r
+ )\r
{\r
- EFI_HII_THUNK_PRIVATE_DATA *Private;\r
- HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *MapEntry;\r
- FRAMEWORK_HII_FORMSET_TEMPLATE *OutputFormSet;\r
+ HII_THUNK_PRIVATE_DATA *Private;\r
+ HII_THUNK_CONTEXT *ThunkContext;\r
+ FW_HII_FORMSET_TEMPLATE *OutputFormSet;\r
\r
- if (*BufferLengthTemp < sizeof(FRAMEWORK_HII_FORMSET_TEMPLATE)) {\r
- *BufferLengthTemp = sizeof(FRAMEWORK_HII_FORMSET_TEMPLATE);\r
+ if (*BufferLengthTemp < sizeof(FW_HII_FORMSET_TEMPLATE)) {\r
+ *BufferLengthTemp = sizeof(FW_HII_FORMSET_TEMPLATE);\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
\r
- Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
+ Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
- MapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, Handle);\r
+ ThunkContext = FwHiiHandleToThunkContext (Private, Handle);\r
\r
- if (MapEntry == NULL) {\r
+ if (ThunkContext == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
\r
- OutputFormSet = (FRAMEWORK_HII_FORMSET_TEMPLATE *) Buffer;\r
- \r
- CopyMem (OutputFormSet, &FormSetTemplate, sizeof (FRAMEWORK_HII_FORMSET_TEMPLATE));\r
- CopyMem (&OutputFormSet->FormSet.Guid, &MapEntry->TagGuid, sizeof (EFI_GUID)); \r
+ OutputFormSet = (FW_HII_FORMSET_TEMPLATE *) Buffer;\r
\r
+ CopyMem (OutputFormSet, &FormSetTemplate, sizeof (FW_HII_FORMSET_TEMPLATE));\r
+ CopyMem (&OutputFormSet->FormSet.Guid, &ThunkContext->TagGuid, sizeof (EFI_GUID)); \r
+\r
+ OutputFormSet->FormSet.Class = ThunkContext->FormSetClass;\r
+ OutputFormSet->FormSet.SubClass = ThunkContext->FormSetSubClass;\r
+ OutputFormSet->FormSet.Help = ThunkContext->FormSetHelp;\r
+ OutputFormSet->FormSet.FormSetTitle = ThunkContext->FormSetTitle;\r
+\r
return EFI_SUCCESS;\r
}\r
\r
\r
-EFI_STATUS\r
-EFIAPI\r
-HiiGetDefaultImage (\r
- IN EFI_HII_PROTOCOL *This,\r
- IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
- IN UINTN DefaultMask,\r
- OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList\r
- )\r
-/*++\r
-\r
- Routine Description:\r
+/**\r
\r
This function allows a program to extract the NV Image\r
that represents the default storage image\r
\r
- Arguments:\r
- This - A pointer to the EFI_HII_PROTOCOL instance.\r
- Handle - The HII handle from which will have default data retrieved.\r
- UINTN - Mask used to retrieve the default image.\r
- VariablePackList - Callee allocated, tightly-packed, link list data\r
+\r
+ @param This A pointer to the EFI_HII_PROTOCOL instance.\r
+ @param Handle The HII handle from which will have default data retrieved.\r
+ UINTN - Mask used to retrieve the default image.\r
+ @param DefaultMask EDES_TODO: Add parameter description\r
+ @param VariablePackList Callee allocated, tightly-packed, link list data\r
structure that contain all default varaible packs\r
from the Hii Database.\r
\r
- Returns:\r
- EFI_NOT_FOUND - If Hii database does not contain any default images.\r
- EFI_INVALID_PARAMETER - Invalid input parameter.\r
- EFI_SUCCESS - Operation successful.\r
+ @retval EFI_NOT_FOUND If Hii database does not contain any default images.\r
+ @retval EFI_INVALID_PARAMETER Invalid input parameter.\r
+ @retval EFI_SUCCESS Operation successful.\r
\r
---*/\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HiiGetDefaultImage (\r
+ IN EFI_HII_PROTOCOL *This,\r
+ IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
+ IN UINTN DefaultMask,\r
+ OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList\r
+ )\r
{\r
LIST_ENTRY *UefiDefaults;\r
EFI_HII_HANDLE UefiHiiHandle;\r
EFI_STATUS Status;\r
- EFI_HII_THUNK_PRIVATE_DATA *Private;\r
+ HII_THUNK_PRIVATE_DATA *Private;\r
\r
- Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
+ Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
- UefiHiiHandle = FrameworkHiiHandleToUefiHiiHandle (Private, Handle);\r
+ UefiHiiHandle = FwHiiHandleToUefiHiiHandle (Private, Handle);\r
if (UefiHiiHandle == NULL) {\r
ASSERT (FALSE);\r
return EFI_INVALID_PARAMETER;\r
goto Done;\r
}\r
\r
- Status = UefiDefaultsToFrameworkDefaults (UefiDefaults, DefaultMask, VariablePackList);\r
+ Status = UefiDefaultsToFwDefaults (UefiDefaults, DefaultMask, VariablePackList);\r
\r
Done:\r
FreeDefaultList (UefiDefaults);\r
return Status;\r
}\r
\r
+/**\r
+ EDES_TODO: Add function description.\r
+\r
+ @param CallbackHandle EDES_TODO: Add parameter description\r
+ @param ThunkContext EDES_TODO: Add parameter description\r
+\r
+ @return EDES_TODO: Add description for return value\r
+\r
+**/\r
EFI_STATUS\r
-ThunkUpdateFormCallBack (\r
+UpdateFormCallBack (\r
IN EFI_HANDLE CallbackHandle,\r
- IN CONST HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry\r
+ IN CONST HII_THUNK_CONTEXT *ThunkContext\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_FORM_CALLBACK_PROTOCOL *FrameworkFormCallbackProtocol;\r
+ EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccessProtocol;\r
EFI_HANDLE UefiDriverHandle;\r
- HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE *ConfigAccessProtocolInstance;\r
+ CONFIG_ACCESS_PRIVATE *ConfigAccessPrivate;\r
\r
Status = gBS->HandleProtocol (\r
CallbackHandle,\r
&gEfiFormCallbackProtocolGuid,\r
- (VOID **) &FrameworkFormCallbackProtocol\r
+ (VOID **) &FormCallbackProtocol\r
);\r
if (EFI_ERROR (Status)) {\r
return EFI_INVALID_PARAMETER;\r
\r
Status = mHiiDatabase->GetPackageListHandle (\r
mHiiDatabase,\r
- HandleMapEntry->UefiHiiHandle,\r
+ ThunkContext->UefiHiiHandle,\r
&UefiDriverHandle\r
);\r
ASSERT_EFI_ERROR (Status);\r
);\r
ASSERT_EFI_ERROR (Status);\r
\r
- ConfigAccessProtocolInstance = HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_FROM_PROTOCOL (ConfigAccessProtocol);\r
+ ConfigAccessPrivate = CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL (ConfigAccessProtocol);\r
\r
- ConfigAccessProtocolInstance->FrameworkFormCallbackProtocol = FrameworkFormCallbackProtocol;\r
+ ConfigAccessPrivate->FormCallbackProtocol = FormCallbackProtocol;\r
\r
return EFI_SUCCESS;\r
}\r
\r
\r
+/**\r
+ EDES_TODO: Add function description.\r
+\r
+ @param HiiPackageList EDES_TODO: Add parameter description\r
+ @param PackageIndex EDES_TODO: Add parameter description\r
+ @param BufferLen EDES_TODO: Add parameter description\r
+ @param Buffer EDES_TODO: Add parameter description\r
+\r
+ @return EDES_TODO: Add description for return value\r
+\r
+**/\r
STATIC\r
EFI_STATUS\r
-GetPackageDataFromPackageList (\r
+GetPackageData (\r
IN EFI_HII_PACKAGE_LIST_HEADER *HiiPackageList,\r
IN UINT32 PackageIndex,\r
OUT UINT32 *BufferLen,\r
@retval EFI_SUCCESS The first found Form ID is returned in FormId.\r
**/\r
EFI_STATUS\r
-ThunkLocateFormId (\r
+LocateFormId (\r
IN EFI_HII_HANDLE Handle,\r
IN EFI_FORM_LABEL Label,\r
OUT EFI_GUID *FormsetGuid,\r
}\r
\r
for (Index = 0; ; Index++) {\r
- Status = GetPackageDataFromPackageList (HiiPackageList, Index, &PackageLength, &Package);\r
+ Status = GetPackageData (HiiPackageList, Index, &PackageLength, &Package);\r
if (!EFI_ERROR (Status)) {\r
CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
if (PackageHeader.Type == EFI_HII_PACKAGE_FORM) {\r
\r
return Status;\r
}\r
+/**\r
+ This function allows the caller to update a form that has\r
+ previously been registered with the EFI HII database.\r
+\r
+\r
+ @param This EDES_TODO: Add parameter description\r
+ @param Handle Hii Handle associated with the Formset to modify\r
+ @param Label Update information starting immediately after this label in the IFR\r
+ @param AddData If TRUE, add data. If FALSE, remove data\r
+ @param Data If adding data, this is the pointer to the data to add\r
+\r
+ @retval EFI_SUCCESS Update success.\r
+ @retval Other Update fail.\r
+\r
+**/\r
EFI_STATUS\r
EFIAPI\r
HiiUpdateForm (\r
- IN EFI_HII_PROTOCOL *This,\r
+ IN EFI_HII_PROTOCOL *This,\r
IN FRAMEWORK_EFI_HII_HANDLE Handle,\r
- IN EFI_FORM_LABEL Label,\r
- IN BOOLEAN AddData,\r
+ IN EFI_FORM_LABEL Label,\r
+ IN BOOLEAN AddData,\r
IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data\r
)\r
-/*++\r
-\r
-Routine Description:\r
- This function allows the caller to update a form that has\r
- previously been registered with the EFI HII database.\r
-\r
-Arguments:\r
- Handle - Hii Handle associated with the Formset to modify\r
- Label - Update information starting immediately after this label in the IFR\r
- AddData - If TRUE, add data. If FALSE, remove data\r
- Data - If adding data, this is the pointer to the data to add\r
-\r
-Returns:\r
- EFI_SUCCESS - Update success.\r
- Other - Update fail.\r
-\r
---*/\r
{\r
EFI_STATUS Status;\r
- EFI_HII_THUNK_PRIVATE_DATA *Private;\r
- HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;\r
+ HII_THUNK_PRIVATE_DATA *Private;\r
+ HII_THUNK_CONTEXT *ThunkContext;\r
EFI_HII_UPDATE_DATA *UefiHiiUpdateData;\r
EFI_HII_HANDLE UefiHiiHandle;\r
EFI_GUID FormsetGuid;\r
EFI_FORM_ID FormId;\r
+ EFI_TPL OldTpl;\r
\r
+ OldTpl = gBS->RaiseTPL (TPL_NOTIFY);\r
+ \r
+ mInFrameworkUpdatePakcage = TRUE;\r
Status = EFI_SUCCESS;\r
+ UefiHiiUpdateData = NULL;\r
\r
- Private = EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
- HandleMapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, Handle);\r
+ Private = HII_THUNK_PRIVATE_DATA_FROM_THIS(This);\r
\r
- if (HandleMapEntry == NULL) {\r
- return EFI_NOT_FOUND;\r
+ ThunkContext = FwHiiHandleToThunkContext (Private, Handle);\r
+\r
+ if (ThunkContext == NULL) {\r
+ Status = EFI_NOT_FOUND;\r
+ goto Done;\r
}\r
\r
if (Data->FormSetUpdate) {\r
- Status = ThunkUpdateFormCallBack ((EFI_HANDLE) (UINTN) Data->FormCallbackHandle, HandleMapEntry);\r
+ Status = UpdateFormCallBack ((EFI_HANDLE) (UINTN) Data->FormCallbackHandle, ThunkContext);\r
if (EFI_ERROR (Status)) {\r
- return Status;\r
+ goto Done;\r
}\r
}\r
\r
- if (HandleMapEntry->IsPackageListWithOnlyStringPackages) {\r
- UefiHiiHandle = TagGuidToUefiIfrHiiHandle (Private, &HandleMapEntry->TagGuid);\r
+ if ((ThunkContext->IfrPackageCount == 0) && (ThunkContext->StringPackageCount != 0)) {\r
+ UefiHiiHandle = TagGuidToUefiHiiHandle (Private, &ThunkContext->TagGuid);\r
\r
if (UefiHiiHandle == NULL) {\r
- return EFI_INVALID_PARAMETER;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
} else {\r
- UefiHiiHandle = HandleMapEntry->UefiHiiHandle;\r
+ UefiHiiHandle = ThunkContext->UefiHiiHandle;\r
}\r
\r
- UefiHiiUpdateData = NULL;\r
+ Status = LocateFormId (UefiHiiHandle, Label, &FormsetGuid, &FormId);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Can't find the label.\r
+ //\r
+ goto Done;\r
+ }\r
\r
if (AddData) {\r
if (Data->DataCount != 0) {\r
- \r
- Status = ThunkFrameworkUpdateDataToUefiUpdateData (Data, AddData, &UefiHiiUpdateData);\r
- ASSERT_EFI_ERROR (Status);\r
\r
- Status = ThunkLocateFormId (UefiHiiHandle, Label, &FormsetGuid, &FormId);\r
+ ThunkContext = UefiHiiHandleToThunkContext (Private, UefiHiiHandle);\r
+ Status = FwUpdateDataToUefiUpdateData (ThunkContext, Data, AddData, &UefiHiiUpdateData);\r
ASSERT_EFI_ERROR (Status);\r
\r
Status = IfrLibUpdateForm (UefiHiiHandle, &FormsetGuid, FormId, Label, AddData, UefiHiiUpdateData);\r
\r
} \r
} else {\r
- Status = ThunkLocateFormId (UefiHiiHandle, Label, &FormsetGuid, &FormId);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
//\r
// Delete Opcode starting from Labe in FormId found\r
//\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
+Done:\r
if (UefiHiiUpdateData != NULL) {\r
SafeFreePool (UefiHiiUpdateData->Data);\r
SafeFreePool (UefiHiiUpdateData);\r
}\r
\r
+ mInFrameworkUpdatePakcage = FALSE; \r
+\r
+ gBS->RestoreTPL (OldTpl);\r
+\r
return Status;\r
}\r