Update SetupBrowser to support call to SendForm() by specify a formset class GUID with input parameter FormsetGuid.

With this update, SendForm() could support formset class GUID other than EFI_HII_PLATFORM_SETUP_FORMSET_GUID, for example, the EFI_HII_DRIVER_HEALTH_FORMSET_GUID.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9369 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
xdu2
2009-10-26 07:44:10 +00:00
parent c2a19e9235
commit f5006bd99e

View File

@@ -2273,9 +2273,11 @@ InitializeCurrentSetting (
Fetch the Ifr binary data of a FormSet. Fetch the Ifr binary data of a FormSet.
@param Handle PackageList Handle @param Handle PackageList Handle
@param FormSetGuid GUID of a formset. If not specified (NULL or zero @param FormSetGuid On input, GUID or class GUID of a formset. If not
GUID), take the first FormSet found in package specified (NULL or zero GUID), take the first
list. FormSet with class GUID EFI_HII_PLATFORM_SETUP_FORMSET_GUID
found in package list.
On output, GUID of the formset found(if not NULL).
@param BinaryLength The length of the FormSet IFR binary. @param BinaryLength The length of the FormSet IFR binary.
@param BinaryData The buffer designed to receive the FormSet. @param BinaryData The buffer designed to receive the FormSet.
@@ -2301,25 +2303,25 @@ GetIfrBinaryData (
UINT8 *OpCodeData; UINT8 *OpCodeData;
UINT32 Offset; UINT32 Offset;
UINT32 Offset2; UINT32 Offset2;
BOOLEAN ReturnDefault;
UINT32 PackageListLength; UINT32 PackageListLength;
EFI_HII_PACKAGE_HEADER PackageHeader; EFI_HII_PACKAGE_HEADER PackageHeader;
UINT8 Index; UINT8 Index;
UINT8 NumberOfClassGuid; UINT8 NumberOfClassGuid;
BOOLEAN IsSetupClassGuid; BOOLEAN ClassGuidMatch;
EFI_GUID *ClassGuid; EFI_GUID *ClassGuid;
EFI_GUID *ComparingGuid;
OpCodeData = NULL; OpCodeData = NULL;
Package = NULL; Package = NULL;
ZeroMem (&PackageHeader, sizeof (EFI_HII_PACKAGE_HEADER));; ZeroMem (&PackageHeader, sizeof (EFI_HII_PACKAGE_HEADER));;
// //
// if FormSetGuid is NULL or zero GUID, return first FormSet in the package list // if FormSetGuid is NULL or zero GUID, return first Setup FormSet in the package list
// //
if (FormSetGuid == NULL || CompareGuid (FormSetGuid, &gZeroGuid)) { if (FormSetGuid == NULL || CompareGuid (FormSetGuid, &gZeroGuid)) {
ReturnDefault = TRUE; ComparingGuid = &gEfiHiiPlatformSetupFormsetGuid;
} else { } else {
ReturnDefault = FALSE; ComparingGuid = FormSetGuid;
} }
// //
@@ -2346,6 +2348,7 @@ GetIfrBinaryData (
Offset2 = 0; Offset2 = 0;
CopyMem (&PackageListLength, &HiiPackageList->PackageLength, sizeof (UINT32)); CopyMem (&PackageListLength, &HiiPackageList->PackageLength, sizeof (UINT32));
ClassGuidMatch = FALSE;
while (Offset < PackageListLength) { while (Offset < PackageListLength) {
Package = ((UINT8 *) HiiPackageList) + Offset; Package = ((UINT8 *) HiiPackageList) + Offset;
CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER)); CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));
@@ -2360,30 +2363,24 @@ GetIfrBinaryData (
if (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_FORM_SET_OP) { if (((EFI_IFR_OP_HEADER *) OpCodeData)->OpCode == EFI_IFR_FORM_SET_OP) {
// //
// Check whether return default FormSet // Try to compare against formset GUID
// //
if (ReturnDefault) { if (CompareGuid (ComparingGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) {
// break;
// Check ClassGuid of formset OpCode
//
IsSetupClassGuid = FALSE;
NumberOfClassGuid = (UINT8) (((EFI_IFR_FORM_SET *) OpCodeData)->Flags & 0x3);
ClassGuid = (EFI_GUID *) (OpCodeData + sizeof (EFI_IFR_FORM_SET));
for (Index = 0; Index < NumberOfClassGuid; Index++) {
if (CompareGuid (ClassGuid + Index, &gEfiHiiPlatformSetupFormsetGuid)) {
IsSetupClassGuid = TRUE;
break;
}
}
if (IsSetupClassGuid) {
break;
}
} }
// //
// FormSet GUID is specified, check it // Try to compare against formset class GUID
// //
if (CompareGuid (FormSetGuid, (EFI_GUID *)(OpCodeData + sizeof (EFI_IFR_OP_HEADER)))) { NumberOfClassGuid = (UINT8) (((EFI_IFR_FORM_SET *) OpCodeData)->Flags & 0x3);
ClassGuid = (EFI_GUID *) (OpCodeData + sizeof (EFI_IFR_FORM_SET));
for (Index = 0; Index < NumberOfClassGuid; Index++) {
if (CompareGuid (ComparingGuid, ClassGuid + Index)) {
ClassGuidMatch = TRUE;
break;
}
}
if (ClassGuidMatch) {
break; break;
} }
} }
@@ -2410,9 +2407,9 @@ GetIfrBinaryData (
return EFI_NOT_FOUND; return EFI_NOT_FOUND;
} }
if (ReturnDefault && FormSetGuid != NULL) { if (ClassGuidMatch && (FormSetGuid != NULL)) {
// //
// Return the default FormSet GUID // Return the FormSet GUID
// //
CopyMem (FormSetGuid, &((EFI_IFR_FORM_SET *) OpCodeData)->Guid, sizeof (EFI_GUID)); CopyMem (FormSetGuid, &((EFI_IFR_FORM_SET *) OpCodeData)->Guid, sizeof (EFI_GUID));
} }
@@ -2439,9 +2436,11 @@ GetIfrBinaryData (
Initialize the internal data structure of a FormSet. Initialize the internal data structure of a FormSet.
@param Handle PackageList Handle @param Handle PackageList Handle
@param FormSetGuid GUID of a formset. If not specified (NULL or zero @param FormSetGuid On input, GUID or class GUID of a formset. If not
GUID), take the first FormSet found in package specified (NULL or zero GUID), take the first
list. FormSet with class GUID EFI_HII_PLATFORM_SETUP_FORMSET_GUID
found in package list.
On output, GUID of the formset found(if not NULL).
@param FormSet FormSet data structure. @param FormSet FormSet data structure.
@retval EFI_SUCCESS The function completed successfully. @retval EFI_SUCCESS The function completed successfully.