mirror of https://github.com/acidanthera/audk.git
Update SetUp Browser doesn't set a default value to Numeric field per UEFI spec. And Update Setup Browser driver parse the introduced IFR FormSet classguid in UEFI2.1.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8146 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
96f99e1df8
commit
0a1147ed7a
|
@ -21,8 +21,10 @@ UINT16 mExpressionOpCodeIndex;
|
||||||
BOOLEAN mInScopeSubtitle;
|
BOOLEAN mInScopeSubtitle;
|
||||||
BOOLEAN mInScopeSuppress;
|
BOOLEAN mInScopeSuppress;
|
||||||
BOOLEAN mInScopeGrayOut;
|
BOOLEAN mInScopeGrayOut;
|
||||||
|
BOOLEAN mInScopeDisable;
|
||||||
FORM_EXPRESSION *mSuppressExpression;
|
FORM_EXPRESSION *mSuppressExpression;
|
||||||
FORM_EXPRESSION *mGrayOutExpression;
|
FORM_EXPRESSION *mGrayOutExpression;
|
||||||
|
FORM_EXPRESSION *mDisableExpression;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Initialize Statement header members.
|
Initialize Statement header members.
|
||||||
|
@ -75,6 +77,11 @@ CreateStatement (
|
||||||
Statement->GrayOutExpression = mGrayOutExpression;
|
Statement->GrayOutExpression = mGrayOutExpression;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (mInScopeDisable) {
|
||||||
|
Statement->DisableExpression = mDisableExpression;
|
||||||
|
}
|
||||||
|
|
||||||
Statement->InSubtitle = mInScopeSubtitle;
|
Statement->InSubtitle = mInScopeSubtitle;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -810,7 +817,6 @@ ParseOpCodes (
|
||||||
BOOLEAN SuppressForOption;
|
BOOLEAN SuppressForOption;
|
||||||
BOOLEAN InScopeOptionSuppress;
|
BOOLEAN InScopeOptionSuppress;
|
||||||
FORM_EXPRESSION *OptionSuppressExpression;
|
FORM_EXPRESSION *OptionSuppressExpression;
|
||||||
BOOLEAN InScopeDisable;
|
|
||||||
UINT16 DepthOfDisable;
|
UINT16 DepthOfDisable;
|
||||||
BOOLEAN OpCodeDisabled;
|
BOOLEAN OpCodeDisabled;
|
||||||
BOOLEAN SingleOpCodeExpression;
|
BOOLEAN SingleOpCodeExpression;
|
||||||
|
@ -822,7 +828,7 @@ ParseOpCodes (
|
||||||
mInScopeSuppress = FALSE;
|
mInScopeSuppress = FALSE;
|
||||||
InScopeOptionSuppress = FALSE;
|
InScopeOptionSuppress = FALSE;
|
||||||
mInScopeGrayOut = FALSE;
|
mInScopeGrayOut = FALSE;
|
||||||
InScopeDisable = FALSE;
|
mInScopeDisable = FALSE;
|
||||||
DepthOfDisable = 0;
|
DepthOfDisable = 0;
|
||||||
OpCodeDisabled = FALSE;
|
OpCodeDisabled = FALSE;
|
||||||
SingleOpCodeExpression = FALSE;
|
SingleOpCodeExpression = FALSE;
|
||||||
|
@ -890,7 +896,7 @@ ParseOpCodes (
|
||||||
|
|
||||||
if (ScopeOpCode == EFI_IFR_DISABLE_IF_OP) {
|
if (ScopeOpCode == EFI_IFR_DISABLE_IF_OP) {
|
||||||
if (DepthOfDisable == 0) {
|
if (DepthOfDisable == 0) {
|
||||||
InScopeDisable = FALSE;
|
mInScopeDisable = FALSE;
|
||||||
OpCodeDisabled = FALSE;
|
OpCodeDisabled = FALSE;
|
||||||
} else {
|
} else {
|
||||||
DepthOfDisable--;
|
DepthOfDisable--;
|
||||||
|
@ -1035,9 +1041,9 @@ ParseOpCodes (
|
||||||
//
|
//
|
||||||
SingleOpCodeExpression = FALSE;
|
SingleOpCodeExpression = FALSE;
|
||||||
|
|
||||||
if (InScopeDisable) {
|
if (mInScopeDisable && CurrentForm == NULL) {
|
||||||
//
|
//
|
||||||
// Evaluate DisableIf expression
|
// This is DisableIf expression for Form, it should be a constant expression
|
||||||
//
|
//
|
||||||
Status = EvaluateExpression (FormSet, CurrentForm, CurrentExpression);
|
Status = EvaluateExpression (FormSet, CurrentForm, CurrentExpression);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
@ -1073,6 +1079,12 @@ ParseOpCodes (
|
||||||
|
|
||||||
CopyMem (&FormSet->FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));
|
CopyMem (&FormSet->FormSetTitle, &((EFI_IFR_FORM_SET *) OpCodeData)->FormSetTitle, sizeof (EFI_STRING_ID));
|
||||||
CopyMem (&FormSet->Help, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));
|
CopyMem (&FormSet->Help, &((EFI_IFR_FORM_SET *) OpCodeData)->Help, sizeof (EFI_STRING_ID));
|
||||||
|
|
||||||
|
//
|
||||||
|
// The formset OpCode contains ClassGuid
|
||||||
|
//
|
||||||
|
FormSet->NumberOfClassGuid = ((EFI_IFR_FORM_SET *) OpCodeData)->Flags & 0x3;
|
||||||
|
CopyMem (FormSet->ClassGuid, OpCodeData + sizeof (EFI_IFR_FORM_SET), FormSet->NumberOfClassGuid * sizeof (EFI_GUID));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EFI_IFR_FORM_OP:
|
case EFI_IFR_FORM_OP:
|
||||||
|
@ -1208,8 +1220,10 @@ ParseOpCodes (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EFI_IFR_RESET_BUTTON_OP:
|
case EFI_IFR_RESET_BUTTON_OP:
|
||||||
CurrentStatement = CreateQuestion (OpCodeData, FormSet, CurrentForm);
|
//
|
||||||
|
// Create Statement todo
|
||||||
|
//
|
||||||
|
CurrentStatement = CreateStatement (OpCodeData, FormSet, CurrentForm);
|
||||||
CopyMem (&CurrentStatement->DefaultId, &((EFI_IFR_RESET_BUTTON *) OpCodeData)->DefaultId, sizeof (EFI_DEFAULT_ID));
|
CopyMem (&CurrentStatement->DefaultId, &((EFI_IFR_RESET_BUTTON *) OpCodeData)->DefaultId, sizeof (EFI_DEFAULT_ID));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1504,7 +1518,15 @@ ParseOpCodes (
|
||||||
CurrentExpression->Type = EFI_HII_EXPRESSION_DISABLE_IF;
|
CurrentExpression->Type = EFI_HII_EXPRESSION_DISABLE_IF;
|
||||||
InitializeListHead (&CurrentExpression->OpCodeListHead);
|
InitializeListHead (&CurrentExpression->OpCodeListHead);
|
||||||
|
|
||||||
InScopeDisable = TRUE;
|
if (CurrentForm != NULL) {
|
||||||
|
//
|
||||||
|
// This is DisableIf for Question, enqueue it to Form expression list
|
||||||
|
//
|
||||||
|
InsertTailList (&CurrentForm->ExpressionListHead, &CurrentExpression->Link);
|
||||||
|
}
|
||||||
|
|
||||||
|
mDisableExpression = CurrentExpression;
|
||||||
|
mInScopeDisable = TRUE;
|
||||||
OpCodeDisabled = FALSE;
|
OpCodeDisabled = FALSE;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1614,9 +1636,12 @@ ParseOpCodes (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EFI_IFR_EXTEND_OP_BANNER:
|
case EFI_IFR_EXTEND_OP_BANNER:
|
||||||
|
//
|
||||||
|
// By SubClass or By ClassGuid to get Banner Data?
|
||||||
|
//
|
||||||
if (FormSet->SubClass == EFI_FRONT_PAGE_SUBCLASS) {
|
if (FormSet->SubClass == EFI_FRONT_PAGE_SUBCLASS) {
|
||||||
CopyMem (
|
CopyMem (
|
||||||
&BannerData->Banner[((EFI_IFR_GUID_BANNER *) OpCodeData)->LineNumber][
|
&gBannerData->Banner[((EFI_IFR_GUID_BANNER *) OpCodeData)->LineNumber][
|
||||||
((EFI_IFR_GUID_BANNER *) OpCodeData)->Alignment],
|
((EFI_IFR_GUID_BANNER *) OpCodeData)->Alignment],
|
||||||
&((EFI_IFR_GUID_BANNER *) OpCodeData)->Title,
|
&((EFI_IFR_GUID_BANNER *) OpCodeData)->Title,
|
||||||
sizeof (EFI_STRING_ID)
|
sizeof (EFI_STRING_ID)
|
||||||
|
@ -1696,7 +1721,7 @@ ParseOpCodes (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EFI_IFR_DISABLE_IF_OP:
|
case EFI_IFR_DISABLE_IF_OP:
|
||||||
InScopeDisable = FALSE;
|
mInScopeDisable = FALSE;
|
||||||
OpCodeDisabled = FALSE;
|
OpCodeDisabled = FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1711,9 +1736,9 @@ ParseOpCodes (
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (IsExpressionOpCode (ScopeOpCode)) {
|
if (IsExpressionOpCode (ScopeOpCode)) {
|
||||||
if (InScopeDisable) {
|
if (mInScopeDisable && CurrentForm == NULL) {
|
||||||
//
|
//
|
||||||
// Evaluate DisableIf expression
|
// This is DisableIf expression for Form, it should be a constant expression
|
||||||
//
|
//
|
||||||
Status = EvaluateExpression (FormSet, CurrentForm, CurrentExpression);
|
Status = EvaluateExpression (FormSet, CurrentForm, CurrentExpression);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
|
|
|
@ -209,7 +209,7 @@ DisplayPageFrame (
|
||||||
Buffer[Index] = Character;
|
Buffer[Index] = Character;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gClassOfVfr == EFI_FRONT_PAGE_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) {
|
||||||
//
|
//
|
||||||
// ClearLines(0, LocalScreen.RightColumn, 0, BANNER_HEIGHT-1, BANNER_TEXT | BANNER_BACKGROUND);
|
// ClearLines(0, LocalScreen.RightColumn, 0, BANNER_HEIGHT-1, BANNER_TEXT | BANNER_BACKGROUND);
|
||||||
//
|
//
|
||||||
|
@ -237,10 +237,10 @@ DisplayPageFrame (
|
||||||
ASSERT (RowIdx < BANNER_HEIGHT);
|
ASSERT (RowIdx < BANNER_HEIGHT);
|
||||||
ASSERT (ColumnIdx < BANNER_COLUMNS);
|
ASSERT (ColumnIdx < BANNER_COLUMNS);
|
||||||
|
|
||||||
if (BannerData->Banner[RowIdx][ColumnIdx] != 0x0000) {
|
if (gBannerData->Banner[RowIdx][ColumnIdx] != 0x0000) {
|
||||||
StrFrontPageBanner = GetToken (
|
StrFrontPageBanner = GetToken (
|
||||||
BannerData->Banner[RowIdx][ColumnIdx],
|
gBannerData->Banner[RowIdx][ColumnIdx],
|
||||||
FrontPageHandle
|
gFrontPageHandle
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
|
@ -290,7 +290,7 @@ DisplayPageFrame (
|
||||||
KEYHELP_TEXT | KEYHELP_BACKGROUND
|
KEYHELP_TEXT | KEYHELP_BACKGROUND
|
||||||
);
|
);
|
||||||
|
|
||||||
if (gClassOfVfr != EFI_FRONT_PAGE_SUBCLASS) {
|
if (gClassOfVfr != FORMSET_CLASS_FRONT_PAGE) {
|
||||||
ClearLines (
|
ClearLines (
|
||||||
LocalScreen.LeftColumn,
|
LocalScreen.LeftColumn,
|
||||||
LocalScreen.RightColumn,
|
LocalScreen.RightColumn,
|
||||||
|
@ -325,7 +325,7 @@ DisplayPageFrame (
|
||||||
Character = BOXDRAW_UP_LEFT;
|
Character = BOXDRAW_UP_LEFT;
|
||||||
PrintChar (Character);
|
PrintChar (Character);
|
||||||
|
|
||||||
if (gClassOfVfr == EFI_SETUP_APPLICATION_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
|
||||||
//
|
//
|
||||||
// Print Bottom border line
|
// Print Bottom border line
|
||||||
// +------------------------------------------------------------------------------+
|
// +------------------------------------------------------------------------------+
|
||||||
|
@ -472,7 +472,7 @@ DisplayForm (
|
||||||
|
|
||||||
StringPtr = GetToken (Selection->Form->FormTitle, Handle);
|
StringPtr = GetToken (Selection->Form->FormTitle, Handle);
|
||||||
|
|
||||||
if (gClassOfVfr != EFI_FRONT_PAGE_SUBCLASS) {
|
if (gClassOfVfr != FORMSET_CLASS_FRONT_PAGE) {
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, TITLE_TEXT | TITLE_BACKGROUND);
|
gST->ConOut->SetAttribute (gST->ConOut, TITLE_TEXT | TITLE_BACKGROUND);
|
||||||
PrintStringAt (
|
PrintStringAt (
|
||||||
(LocalScreen.RightColumn + LocalScreen.LeftColumn - GetStringWidth (StringPtr) / 2) / 2,
|
(LocalScreen.RightColumn + LocalScreen.LeftColumn - GetStringWidth (StringPtr) / 2) / 2,
|
||||||
|
@ -481,7 +481,7 @@ DisplayForm (
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gClassOfVfr == EFI_SETUP_APPLICATION_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -514,6 +514,10 @@ DisplayForm (
|
||||||
Suppress = FALSE;
|
Suppress = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Statement->DisableExpression != NULL) {
|
||||||
|
Suppress = Suppress || Statement->DisableExpression->Result.Value.b;
|
||||||
|
}
|
||||||
|
|
||||||
if (!Suppress) {
|
if (!Suppress) {
|
||||||
StringPtr = GetToken (Statement->Prompt, Handle);
|
StringPtr = GetToken (Statement->Prompt, Handle);
|
||||||
|
|
||||||
|
@ -671,10 +675,6 @@ UpdateKeyHelp (
|
||||||
TopRowOfHelp = LocalScreen.BottomRow - 4;
|
TopRowOfHelp = LocalScreen.BottomRow - 4;
|
||||||
BottomRowOfHelp = LocalScreen.BottomRow - 3;
|
BottomRowOfHelp = LocalScreen.BottomRow - 3;
|
||||||
|
|
||||||
if (gClassOfVfr == EFI_GENERAL_APPLICATION_SUBCLASS) {
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
|
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
gST->ConOut->SetAttribute (gST->ConOut, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
||||||
|
|
||||||
Statement = MenuOption->ThisTag;
|
Statement = MenuOption->ThisTag;
|
||||||
|
@ -687,7 +687,7 @@ UpdateKeyHelp (
|
||||||
ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
||||||
|
|
||||||
if (!Selected) {
|
if (!Selected) {
|
||||||
if (gClassOfVfr == EFI_SETUP_APPLICATION_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
|
||||||
PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);
|
PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);
|
||||||
PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);
|
PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);
|
||||||
PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);
|
PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);
|
||||||
|
@ -743,7 +743,7 @@ UpdateKeyHelp (
|
||||||
case EFI_IFR_CHECKBOX_OP:
|
case EFI_IFR_CHECKBOX_OP:
|
||||||
ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
||||||
|
|
||||||
if (gClassOfVfr == EFI_SETUP_APPLICATION_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
|
||||||
PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);
|
PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);
|
||||||
PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);
|
PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);
|
||||||
PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);
|
PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);
|
||||||
|
@ -763,7 +763,7 @@ UpdateKeyHelp (
|
||||||
ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
ClearLines (LeftColumnOfHelp, RightColumnOfHelp, TopRowOfHelp, BottomRowOfHelp, KEYHELP_TEXT | KEYHELP_BACKGROUND);
|
||||||
|
|
||||||
if (!Selected) {
|
if (!Selected) {
|
||||||
if (gClassOfVfr == EFI_SETUP_APPLICATION_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_PLATFORM_SETUP) {
|
||||||
PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);
|
PrintStringAt (StartColumnOfHelp, TopRowOfHelp, gFunctionOneString);
|
||||||
PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);
|
PrintStringAt (SecCol, TopRowOfHelp, gFunctionNineString);
|
||||||
PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);
|
PrintStringAt (ThdCol, TopRowOfHelp, gFunctionTenString);
|
||||||
|
@ -903,6 +903,13 @@ SetupBrowser (
|
||||||
Selection->Form = IdToForm (Selection->FormSet, Selection->FormId);
|
Selection->Form = IdToForm (Selection->FormSet, Selection->FormId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Selection->Form == NULL) {
|
||||||
|
//
|
||||||
|
// No Form to display
|
||||||
|
//
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Load Questions' Value for display
|
// Load Questions' Value for display
|
||||||
//
|
//
|
||||||
|
|
|
@ -29,8 +29,8 @@ EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
|
||||||
EFI_HII_STRING_PROTOCOL *mHiiString;
|
EFI_HII_STRING_PROTOCOL *mHiiString;
|
||||||
EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting;
|
EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting;
|
||||||
|
|
||||||
BANNER_DATA *BannerData;
|
BANNER_DATA *gBannerData;
|
||||||
EFI_HII_HANDLE FrontPageHandle;
|
EFI_HII_HANDLE gFrontPageHandle;
|
||||||
UINTN gClassOfVfr;
|
UINTN gClassOfVfr;
|
||||||
UINTN gFunctionKeySetting;
|
UINTN gFunctionKeySetting;
|
||||||
BOOLEAN gResetRequired;
|
BOOLEAN gResetRequired;
|
||||||
|
@ -268,7 +268,7 @@ SendForm (
|
||||||
InitializeBrowserStrings ();
|
InitializeBrowserStrings ();
|
||||||
|
|
||||||
gFunctionKeySetting = DEFAULT_FUNCTION_KEY_SETTING;
|
gFunctionKeySetting = DEFAULT_FUNCTION_KEY_SETTING;
|
||||||
gClassOfVfr = EFI_SETUP_APPLICATION_SUBCLASS;
|
gClassOfVfr = FORMSET_CLASS_PLATFORM_SETUP;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Ensure we are in Text mode
|
// Ensure we are in Text mode
|
||||||
|
@ -564,8 +564,8 @@ InitializeSetup (
|
||||||
//
|
//
|
||||||
// Initialize Driver private data
|
// Initialize Driver private data
|
||||||
//
|
//
|
||||||
BannerData = AllocateZeroPool (sizeof (BANNER_DATA));
|
gBannerData = AllocateZeroPool (sizeof (BANNER_DATA));
|
||||||
ASSERT (BannerData != NULL);
|
ASSERT (gBannerData != NULL);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Install FormBrowser2 protocol
|
// Install FormBrowser2 protocol
|
||||||
|
@ -1874,22 +1874,17 @@ GetQuestionDefault (
|
||||||
// For Questions without default
|
// For Questions without default
|
||||||
//
|
//
|
||||||
switch (Question->Operand) {
|
switch (Question->Operand) {
|
||||||
case EFI_IFR_NUMERIC_OP:
|
|
||||||
//
|
|
||||||
// Take minimal value as numeric's default value
|
|
||||||
//
|
|
||||||
HiiValue->Value.u64 = Question->Minimum;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EFI_IFR_ONE_OF_OP:
|
case EFI_IFR_ONE_OF_OP:
|
||||||
//
|
//
|
||||||
// Take first oneof option as oneof's default value
|
// Take first oneof option as oneof's default value
|
||||||
//
|
//
|
||||||
|
if (ValueToOption (Question, HiiValue) == NULL) {
|
||||||
Link = GetFirstNode (&Question->OptionListHead);
|
Link = GetFirstNode (&Question->OptionListHead);
|
||||||
if (!IsNull (&Question->OptionListHead, Link)) {
|
if (!IsNull (&Question->OptionListHead, Link)) {
|
||||||
Option = QUESTION_OPTION_FROM_LINK (Link);
|
Option = QUESTION_OPTION_FROM_LINK (Link);
|
||||||
CopyMem (HiiValue, &Option->Value, sizeof (EFI_HII_VALUE));
|
CopyMem (HiiValue, &Option->Value, sizeof (EFI_HII_VALUE));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EFI_IFR_ORDERED_LIST_OP:
|
case EFI_IFR_ORDERED_LIST_OP:
|
||||||
|
@ -1948,11 +1943,11 @@ ExtractFormDefault (
|
||||||
Link = GetNextNode (&Form->StatementListHead, Link);
|
Link = GetNextNode (&Form->StatementListHead, Link);
|
||||||
|
|
||||||
//
|
//
|
||||||
// If Question is suppressed, don't reset it to default
|
// If Question is disabled, don't reset it to default
|
||||||
//
|
//
|
||||||
if (Question->SuppressExpression != NULL) {
|
if (Question->DisableExpression != NULL) {
|
||||||
Status = EvaluateExpression (FormSet, Form, Question->SuppressExpression);
|
Status = EvaluateExpression (FormSet, Form, Question->DisableExpression);
|
||||||
if (!EFI_ERROR (Status) && Question->SuppressExpression->Result.Value.b) {
|
if (!EFI_ERROR (Status) && Question->DisableExpression->Result.Value.b) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2167,6 +2162,10 @@ GetIfrBinaryData (
|
||||||
BOOLEAN ReturnDefault;
|
BOOLEAN ReturnDefault;
|
||||||
UINT32 PackageListLength;
|
UINT32 PackageListLength;
|
||||||
EFI_HII_PACKAGE_HEADER PackageHeader;
|
EFI_HII_PACKAGE_HEADER PackageHeader;
|
||||||
|
UINT8 Index;
|
||||||
|
UINT8 NumberOfClassGuid;
|
||||||
|
BOOLEAN IsSetupClassGuid;
|
||||||
|
EFI_GUID *ClassGuid;
|
||||||
|
|
||||||
OpCodeData = NULL;
|
OpCodeData = NULL;
|
||||||
Package = NULL;
|
Package = NULL;
|
||||||
|
@ -2222,8 +2221,22 @@ GetIfrBinaryData (
|
||||||
// Check whether return default FormSet
|
// Check whether return default FormSet
|
||||||
//
|
//
|
||||||
if (ReturnDefault) {
|
if (ReturnDefault) {
|
||||||
|
//
|
||||||
|
// Check ClassGuid of formset OpCode
|
||||||
|
//
|
||||||
|
IsSetupClassGuid = FALSE;
|
||||||
|
NumberOfClassGuid = ((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;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (IsSetupClassGuid) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// FormSet GUID is specified, check it
|
// FormSet GUID is specified, check it
|
||||||
|
@ -2341,9 +2354,10 @@ InitializeFormSet (
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
gClassOfVfr = FormSet->SubClass;
|
gClassOfVfr = FORMSET_CLASS_PLATFORM_SETUP;
|
||||||
if (gClassOfVfr == EFI_FRONT_PAGE_SUBCLASS) {
|
if (FormSet->SubClass == EFI_FRONT_PAGE_SUBCLASS) {
|
||||||
FrontPageHandle = FormSet->HiiHandle;
|
gClassOfVfr = FORMSET_CLASS_FRONT_PAGE;
|
||||||
|
gFrontPageHandle = FormSet->HiiHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -30,6 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
#include <Protocol/HiiString.h>
|
#include <Protocol/HiiString.h>
|
||||||
|
|
||||||
#include <Guid/MdeModuleHii.h>
|
#include <Guid/MdeModuleHii.h>
|
||||||
|
#include <Guid/HiiPlatformSetupFormset.h>
|
||||||
|
|
||||||
#include <Library/PrintLib.h>
|
#include <Library/PrintLib.h>
|
||||||
#include <Library/DebugLib.h>
|
#include <Library/DebugLib.h>
|
||||||
|
@ -193,6 +194,9 @@ typedef struct {
|
||||||
#define FORM_INCONSISTENT_VALIDATION 0
|
#define FORM_INCONSISTENT_VALIDATION 0
|
||||||
#define FORM_NO_SUBMIT_VALIDATION 1
|
#define FORM_NO_SUBMIT_VALIDATION 1
|
||||||
|
|
||||||
|
#define FORMSET_CLASS_PLATFORM_SETUP 0
|
||||||
|
#define FORMSET_CLASS_FRONT_PAGE 1
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT8 Type;
|
UINT8 Type;
|
||||||
EFI_IFR_TYPE_VALUE Value;
|
EFI_IFR_TYPE_VALUE Value;
|
||||||
|
@ -379,6 +383,7 @@ typedef struct {
|
||||||
LIST_ENTRY NoSubmitListHead; // nested nosubmit expression list (FORM_EXPRESSION)
|
LIST_ENTRY NoSubmitListHead; // nested nosubmit expression list (FORM_EXPRESSION)
|
||||||
FORM_EXPRESSION *GrayOutExpression; // nesting inside of GrayOutIf
|
FORM_EXPRESSION *GrayOutExpression; // nesting inside of GrayOutIf
|
||||||
FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf
|
FORM_EXPRESSION *SuppressExpression; // nesting inside of SuppressIf
|
||||||
|
FORM_EXPRESSION *DisableExpression; // nesting inside of DisableIf
|
||||||
|
|
||||||
} FORM_BROWSER_STATEMENT;
|
} FORM_BROWSER_STATEMENT;
|
||||||
|
|
||||||
|
@ -425,8 +430,10 @@ typedef struct {
|
||||||
EFI_GUID Guid;
|
EFI_GUID Guid;
|
||||||
EFI_STRING_ID FormSetTitle;
|
EFI_STRING_ID FormSetTitle;
|
||||||
EFI_STRING_ID Help;
|
EFI_STRING_ID Help;
|
||||||
UINT16 Class;
|
UINT8 NumberOfClassGuid;
|
||||||
UINT16 SubClass;
|
EFI_GUID ClassGuid[3]; // Up to three ClassGuid
|
||||||
|
UINT16 Class; // Tiano extended Class code
|
||||||
|
UINT16 SubClass; // Tiano extended Subclass code
|
||||||
EFI_IMAGE_ID ImageId;
|
EFI_IMAGE_ID ImageId;
|
||||||
|
|
||||||
FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions
|
FORM_BROWSER_STATEMENT *StatementBuffer; // Buffer for all Statements and Questions
|
||||||
|
@ -442,8 +449,8 @@ extern EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
|
||||||
extern EFI_HII_STRING_PROTOCOL *mHiiString;
|
extern EFI_HII_STRING_PROTOCOL *mHiiString;
|
||||||
extern EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting;
|
extern EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRouting;
|
||||||
|
|
||||||
extern BANNER_DATA *BannerData;
|
extern BANNER_DATA *gBannerData;
|
||||||
extern EFI_HII_HANDLE FrontPageHandle;
|
extern EFI_HII_HANDLE gFrontPageHandle;
|
||||||
extern UINTN gClassOfVfr;
|
extern UINTN gClassOfVfr;
|
||||||
extern UINTN gFunctionKeySetting;
|
extern UINTN gFunctionKeySetting;
|
||||||
extern BOOLEAN gResetRequired;
|
extern BOOLEAN gResetRequired;
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
[Guids]
|
[Guids]
|
||||||
gEfiIfrTianoGuid ## CONSUMES ## GUID
|
gEfiIfrTianoGuid ## CONSUMES ## GUID
|
||||||
gEfiIfrFrameworkGuid ## CONSUMES ## GUID
|
gEfiIfrFrameworkGuid ## CONSUMES ## GUID
|
||||||
|
gEfiHiiPlatformSetupFormsetGuid
|
||||||
|
|
||||||
[Protocols]
|
[Protocols]
|
||||||
gEfiHiiConfigAccessProtocolGuid ## CONSUMES
|
gEfiHiiConfigAccessProtocolGuid ## CONSUMES
|
||||||
|
|
|
@ -978,7 +978,7 @@ UpdateStatusBar (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV_UPDATE_REQUIRED:
|
case NV_UPDATE_REQUIRED:
|
||||||
if (gClassOfVfr != EFI_FRONT_PAGE_SUBCLASS) {
|
if (gClassOfVfr != FORMSET_CLASS_FRONT_PAGE) {
|
||||||
if (State) {
|
if (State) {
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, INFO_TEXT);
|
gST->ConOut->SetAttribute (gST->ConOut, INFO_TEXT);
|
||||||
PrintStringAt (
|
PrintStringAt (
|
||||||
|
@ -1629,7 +1629,7 @@ UiDisplayMenu (
|
||||||
|
|
||||||
ZeroMem (&Key, sizeof (EFI_INPUT_KEY));
|
ZeroMem (&Key, sizeof (EFI_INPUT_KEY));
|
||||||
|
|
||||||
if (gClassOfVfr == EFI_FRONT_PAGE_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) {
|
||||||
TopRow = LocalScreen.TopRow + FRONT_PAGE_HEADER_HEIGHT + SCROLL_ARROW_HEIGHT;
|
TopRow = LocalScreen.TopRow + FRONT_PAGE_HEADER_HEIGHT + SCROLL_ARROW_HEIGHT;
|
||||||
Row = LocalScreen.TopRow + FRONT_PAGE_HEADER_HEIGHT + SCROLL_ARROW_HEIGHT;
|
Row = LocalScreen.TopRow + FRONT_PAGE_HEADER_HEIGHT + SCROLL_ARROW_HEIGHT;
|
||||||
} else {
|
} else {
|
||||||
|
@ -2202,7 +2202,7 @@ UiDisplayMenu (
|
||||||
case CfUpdateHelpString:
|
case CfUpdateHelpString:
|
||||||
ControlFlag = CfPrepareToReadKey;
|
ControlFlag = CfPrepareToReadKey;
|
||||||
|
|
||||||
if ((Repaint || NewLine) && (gClassOfVfr != EFI_GENERAL_APPLICATION_SUBCLASS)) {
|
if (Repaint || NewLine) {
|
||||||
//
|
//
|
||||||
// Don't print anything if it is a NULL help token
|
// Don't print anything if it is a NULL help token
|
||||||
//
|
//
|
||||||
|
@ -2324,7 +2324,7 @@ UiDisplayMenu (
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ' ':
|
case ' ':
|
||||||
if (gClassOfVfr != EFI_FRONT_PAGE_SUBCLASS) {
|
if (gClassOfVfr != FORMSET_CLASS_FRONT_PAGE) {
|
||||||
if (MenuOption->ThisTag->Operand == EFI_IFR_CHECKBOX_OP && !MenuOption->GrayOut) {
|
if (MenuOption->ThisTag->Operand == EFI_IFR_CHECKBOX_OP && !MenuOption->GrayOut) {
|
||||||
ScreenOperation = UiSelect;
|
ScreenOperation = UiSelect;
|
||||||
}
|
}
|
||||||
|
@ -2585,7 +2585,7 @@ UiDisplayMenu (
|
||||||
//
|
//
|
||||||
ControlFlag = CfCheckSelection;
|
ControlFlag = CfCheckSelection;
|
||||||
|
|
||||||
if (gClassOfVfr == EFI_FRONT_PAGE_SUBCLASS) {
|
if (gClassOfVfr == FORMSET_CLASS_FRONT_PAGE) {
|
||||||
//
|
//
|
||||||
// There is no parent menu for FrontPage
|
// There is no parent menu for FrontPage
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue