BaseTools: Enable buffer type value for default and oneofoption opcode.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17335 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
The definition of CFormPkg's member function
|
The definition of CFormPkg's member function
|
||||||
|
|
||||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -595,6 +595,7 @@ public:
|
|||||||
|
|
||||||
static CIfrQuestionHeader *gCurrentQuestion = NULL;
|
static CIfrQuestionHeader *gCurrentQuestion = NULL;
|
||||||
static CIfrMinMaxStepData *gCurrentMinMaxData = NULL;
|
static CIfrMinMaxStepData *gCurrentMinMaxData = NULL;
|
||||||
|
static BOOLEAN gIsOrderedList = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The definition of all of the UEFI IFR Objects
|
* The definition of all of the UEFI IFR Objects
|
||||||
@ -1710,6 +1711,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {
|
EFI_VFR_RETURN_CODE SetFlags (IN UINT8 LFlags) {
|
||||||
|
mOneOfOption->Flags = 0;
|
||||||
if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT)) {
|
if (_FLAG_TEST_AND_CLEAR (LFlags, EFI_IFR_OPTION_DEFAULT)) {
|
||||||
mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;
|
mOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*++ @file
|
/*++ @file
|
||||||
Vfr Syntax
|
Vfr Syntax
|
||||||
|
|
||||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -1393,9 +1393,15 @@ vfrQuestionDataFieldName [EFI_QUESTION_ID &QId, UINT32 &Mask, CHAR8 *&VarIdStr,
|
|||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
||||||
vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
|
vfrConstantValueField[UINT8 Type, EFI_IFR_TYPE_VALUE &Value, BOOLEAN &ListType] :
|
||||||
<<
|
<<
|
||||||
EFI_GUID Guid;
|
EFI_GUID Guid;
|
||||||
|
UINT8 *Type8 = (UINT8 *) &Value;
|
||||||
|
UINT16 *Type16 = (UINT16 *) &Value;
|
||||||
|
UINT32 *Type32 = (UINT32 *) &Value;
|
||||||
|
UINT64 *Type64 = (UINT64 *) &Value;
|
||||||
|
UINT16 Index = 0;
|
||||||
|
ListType = FALSE;
|
||||||
>>
|
>>
|
||||||
N1:Number <<
|
N1:Number <<
|
||||||
switch ($Type) {
|
switch ($Type) {
|
||||||
@ -1434,6 +1440,49 @@ vfrConstantValueField[UINT8 Type] > [EFI_IFR_TYPE_VALUE Value] :
|
|||||||
| QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)"
|
| QI:Number";" FI:Number";" guidDefinition[Guid] ";" "STRING_TOKEN" "\(" DP:Number "\)"
|
||||||
<< $Value.ref = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText(), QI->getLine()); >>
|
<< $Value.ref = _STOR(QI->getText(), FI->getText(), &Guid, DP->getText(), QI->getLine()); >>
|
||||||
| "STRING_TOKEN" "\(" S1:Number "\)" << $Value.string = _STOSID(S1->getText(), S1->getLine()); >>
|
| "STRING_TOKEN" "\(" S1:Number "\)" << $Value.string = _STOSID(S1->getText(), S1->getLine()); >>
|
||||||
|
| "\{" << ListType = TRUE; >>
|
||||||
|
L1:Number <<
|
||||||
|
switch (Type) {
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_8 :
|
||||||
|
Type8[Index] = _STOU8(L1->getText(), L1->getLine());
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_16 :
|
||||||
|
Type16[Index] = _STOU16(L1->getText(), L1->getLine());
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_32 :
|
||||||
|
Type32[Index] = _STOU32(L1->getText(), L1->getLine());
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_64 :
|
||||||
|
Type64[Index] = _STOU64(L1->getText(), L1->getLine());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Index++;
|
||||||
|
>>
|
||||||
|
(
|
||||||
|
","
|
||||||
|
L2:Number <<
|
||||||
|
switch (Type) {
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_8 :
|
||||||
|
Type8[Index] = _STOU8(L2->getText(), L2->getLine());
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_16 :
|
||||||
|
Type16[Index] = _STOU16(L2->getText(), L2->getLine());
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_32 :
|
||||||
|
Type32[Index] = _STOU32(L2->getText(), L2->getLine());
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_64 :
|
||||||
|
Type64[Index] = _STOU64(L2->getText(), L2->getLine());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Index++;
|
||||||
|
>>
|
||||||
|
)*
|
||||||
|
"\}"
|
||||||
;
|
;
|
||||||
|
|
||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
@ -1527,7 +1576,8 @@ vfrStatementRules :
|
|||||||
vfrStatementDefault :
|
vfrStatementDefault :
|
||||||
<<
|
<<
|
||||||
BOOLEAN IsExp = FALSE;
|
BOOLEAN IsExp = FALSE;
|
||||||
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
|
UINT64 ValueList[EFI_IFR_MAX_LENGTH] = {0,};
|
||||||
|
EFI_IFR_TYPE_VALUE *Val = (EFI_IFR_TYPE_VALUE *) ValueList;
|
||||||
CIfrDefault *DObj = NULL;
|
CIfrDefault *DObj = NULL;
|
||||||
CIfrDefault2 *DObj2 = NULL;
|
CIfrDefault2 *DObj2 = NULL;
|
||||||
EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
|
EFI_DEFAULT_ID DefaultId = EFI_HII_DEFAULT_CLASS_STANDARD;
|
||||||
@ -1535,29 +1585,70 @@ vfrStatementDefault :
|
|||||||
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
|
EFI_VFR_VARSTORE_TYPE VarStoreType = EFI_VFR_VARSTORE_INVALID;
|
||||||
UINT32 Size = 0;
|
UINT32 Size = 0;
|
||||||
EFI_GUID *VarGuid = NULL;
|
EFI_GUID *VarGuid = NULL;
|
||||||
|
BOOLEAN ArrayType = FALSE;
|
||||||
|
UINT8 *Type8 = (UINT8 *) ValueList;
|
||||||
|
UINT16 *Type16 = (UINT16 *) ValueList;
|
||||||
|
UINT32 *Type32 = (UINT32 *) ValueList;
|
||||||
|
UINT64 *Type64 = (UINT64 *) ValueList;
|
||||||
|
|
||||||
>>
|
>>
|
||||||
D:Default
|
D:Default
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
"=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] > [Val] ","
|
"=" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","
|
||||||
<<
|
<<
|
||||||
if (gCurrentMinMaxData != NULL && gCurrentMinMaxData->IsNumericOpcode()) {
|
if (gCurrentMinMaxData != NULL && gCurrentMinMaxData->IsNumericOpcode()) {
|
||||||
//check default value is valid for Numeric Opcode
|
//check default value is valid for Numeric Opcode
|
||||||
if (Val.u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val.u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {
|
if (Val->u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE()) || Val->u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE())) {
|
||||||
_PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");
|
_PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
|
if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
|
||||||
_PCATCH (VFR_RETURN_FATAL_ERROR, D->getLine(), "Default data type error.");
|
_PCATCH (VFR_RETURN_FATAL_ERROR, D->getLine(), "Default data type error.");
|
||||||
Size = sizeof (EFI_IFR_TYPE_VALUE);
|
Size = sizeof (EFI_IFR_TYPE_VALUE);
|
||||||
|
} else if (ArrayType) {
|
||||||
|
switch (_GET_CURRQEST_DATATYPE()) {
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_8 :
|
||||||
|
while (Type8[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_16 :
|
||||||
|
while (Type16[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
Size *= sizeof (UINT16);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_32 :
|
||||||
|
while (Type32[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
Size *= sizeof (UINT32);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_64 :
|
||||||
|
while (Type64[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
Size *= sizeof (UINT64);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size), D->getLine());
|
_PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size), D->getLine());
|
||||||
}
|
}
|
||||||
Size += OFFSET_OF (EFI_IFR_DEFAULT, Value);
|
Size += OFFSET_OF (EFI_IFR_DEFAULT, Value);
|
||||||
DObj = new CIfrDefault ((UINT8)Size);
|
DObj = new CIfrDefault ((UINT8)Size);
|
||||||
DObj->SetLineNo(D->getLine());
|
DObj->SetLineNo(D->getLine());
|
||||||
DObj->SetType (_GET_CURRQEST_DATATYPE());
|
if (ArrayType) {
|
||||||
DObj->SetValue(Val);
|
DObj->SetType (EFI_IFR_TYPE_BUFFER);
|
||||||
|
} else {
|
||||||
|
DObj->SetType (_GET_CURRQEST_DATATYPE());
|
||||||
|
}
|
||||||
|
DObj->SetValue(*Val);
|
||||||
>>
|
>>
|
||||||
| << IsExp = TRUE; DObj2 = new CIfrDefault2; DObj2->SetLineNo(D->getLine()); DObj2->SetScope (1); >>
|
| << IsExp = TRUE; DObj2 = new CIfrDefault2; DObj2->SetLineNo(D->getLine()); DObj2->SetScope (1); >>
|
||||||
vfrStatementValue "," << CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>
|
vfrStatementValue "," << CIfrEnd EndObj1; EndObj1.SetLineNo(D->getLine()); >>
|
||||||
@ -1587,9 +1678,9 @@ vfrStatementDefault :
|
|||||||
VarStoreName,
|
VarStoreName,
|
||||||
VarGuid,
|
VarGuid,
|
||||||
_GET_CURRQEST_DATATYPE (),
|
_GET_CURRQEST_DATATYPE (),
|
||||||
Val),
|
*Val),
|
||||||
D->getLine()
|
D->getLine()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (DObj != NULL) {delete DObj;}
|
if (DObj != NULL) {delete DObj;}
|
||||||
@ -2565,7 +2656,7 @@ vfrStatementOrderedList :
|
|||||||
CIfrOrderedList OLObj;
|
CIfrOrderedList OLObj;
|
||||||
UINT32 VarArraySize;
|
UINT32 VarArraySize;
|
||||||
>>
|
>>
|
||||||
L:OrderedList << OLObj.SetLineNo(L->getLine()); >>
|
L:OrderedList << OLObj.SetLineNo(L->getLine()); gIsOrderedList = TRUE;>>
|
||||||
vfrQuestionHeader[OLObj] ","
|
vfrQuestionHeader[OLObj] ","
|
||||||
<<
|
<<
|
||||||
VarArraySize = _GET_CURRQEST_ARRAY_SIZE();
|
VarArraySize = _GET_CURRQEST_ARRAY_SIZE();
|
||||||
@ -2583,7 +2674,7 @@ vfrStatementOrderedList :
|
|||||||
}
|
}
|
||||||
{ F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] {","}}
|
{ F:FLAGS "=" vfrOrderedListFlags[OLObj, F->getLine()] {","}}
|
||||||
vfrStatementQuestionOptionList
|
vfrStatementQuestionOptionList
|
||||||
E:EndList << CRT_END_OP (E); >>
|
E:EndList << CRT_END_OP (E); gIsOrderedList = FALSE;>>
|
||||||
";"
|
";"
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -2975,64 +3066,117 @@ vfrStatementOptions :
|
|||||||
|
|
||||||
vfrStatementOneOfOption :
|
vfrStatementOneOfOption :
|
||||||
<<
|
<<
|
||||||
EFI_IFR_TYPE_VALUE Val = gZeroEfiIfrTypeValue;
|
UINT8 ValueList[EFI_IFR_MAX_LENGTH] = {0,};
|
||||||
|
EFI_IFR_TYPE_VALUE *Val = (EFI_IFR_TYPE_VALUE *) ValueList;
|
||||||
CHAR8 *VarStoreName = NULL;
|
CHAR8 *VarStoreName = NULL;
|
||||||
UINT32 Size = 0;
|
UINT32 Size = 0;
|
||||||
BOOLEAN TypeError = FALSE;
|
BOOLEAN TypeError = FALSE;
|
||||||
EFI_VFR_RETURN_CODE ReturnCode = VFR_RETURN_SUCCESS;
|
EFI_VFR_RETURN_CODE ReturnCode = VFR_RETURN_SUCCESS;
|
||||||
EFI_GUID *VarStoreGuid = NULL;
|
EFI_GUID *VarStoreGuid = NULL;
|
||||||
|
BOOLEAN ArrayType = FALSE;
|
||||||
if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
|
CIfrOneOfOption *OOOObj;
|
||||||
TypeError = TRUE;
|
UINT8 *Type8 = (UINT8 *) ValueList;
|
||||||
Size = sizeof (EFI_IFR_TYPE_VALUE);
|
UINT16 *Type16 = (UINT16 *) ValueList;
|
||||||
} else {
|
UINT32 *Type32 = (UINT32 *) ValueList;
|
||||||
ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size);
|
UINT64 *Type64 = (UINT64 *) ValueList;
|
||||||
}
|
|
||||||
|
|
||||||
Size += OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value);
|
|
||||||
CIfrOneOfOption OOOObj ((UINT8)Size);
|
|
||||||
>>
|
>>
|
||||||
L:Option <<
|
L:Option <<
|
||||||
OOOObj.SetLineNo(L->getLine());
|
if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
|
||||||
if (TypeError) {
|
|
||||||
_PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type error.");
|
_PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Get data type error.");
|
||||||
}
|
}
|
||||||
if (ReturnCode != VFR_RETURN_SUCCESS) {
|
|
||||||
_PCATCH (ReturnCode, L->getLine());
|
|
||||||
}
|
|
||||||
>>
|
>>
|
||||||
Text "=" "STRING_TOKEN" "\(" S:Number "\)" "," << OOOObj.SetOption (_STOSID(S->getText(), S->getLine())); >>
|
Text "=" "STRING_TOKEN" "\(" S:Number "\)" ","
|
||||||
Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE()] >[Val] ","
|
Value "=" vfrConstantValueField[_GET_CURRQEST_DATATYPE(), *Val, ArrayType] ","
|
||||||
<<
|
<<
|
||||||
if (gCurrentMinMaxData != NULL) {
|
if (gCurrentMinMaxData != NULL) {
|
||||||
//set min/max value for oneof opcode
|
//set min/max value for oneof opcode
|
||||||
UINT64 Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE());
|
UINT64 Step = gCurrentMinMaxData->GetStepData(_GET_CURRQEST_DATATYPE());
|
||||||
switch (_GET_CURRQEST_DATATYPE()) {
|
switch (_GET_CURRQEST_DATATYPE()) {
|
||||||
case EFI_IFR_TYPE_NUM_SIZE_64:
|
case EFI_IFR_TYPE_NUM_SIZE_64:
|
||||||
gCurrentMinMaxData->SetMinMaxStepData(Val.u64, Val.u64, Step);
|
gCurrentMinMaxData->SetMinMaxStepData(Val->u64, Val->u64, Step);
|
||||||
break;
|
break;
|
||||||
case EFI_IFR_TYPE_NUM_SIZE_32:
|
case EFI_IFR_TYPE_NUM_SIZE_32:
|
||||||
gCurrentMinMaxData->SetMinMaxStepData(Val.u32, Val.u32, (UINT32) Step);
|
gCurrentMinMaxData->SetMinMaxStepData(Val->u32, Val->u32, (UINT32) Step);
|
||||||
break;
|
break;
|
||||||
case EFI_IFR_TYPE_NUM_SIZE_16:
|
case EFI_IFR_TYPE_NUM_SIZE_16:
|
||||||
gCurrentMinMaxData->SetMinMaxStepData(Val.u16, Val.u16, (UINT16) Step);
|
gCurrentMinMaxData->SetMinMaxStepData(Val->u16, Val->u16, (UINT16) Step);
|
||||||
break;
|
break;
|
||||||
case EFI_IFR_TYPE_NUM_SIZE_8:
|
case EFI_IFR_TYPE_NUM_SIZE_8:
|
||||||
gCurrentMinMaxData->SetMinMaxStepData(Val.u8, Val.u8, (UINT8) Step);
|
gCurrentMinMaxData->SetMinMaxStepData(Val->u8, Val->u8, (UINT8) Step);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
OOOObj.SetType (_GET_CURRQEST_DATATYPE());
|
if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {
|
||||||
OOOObj.SetValue (Val);
|
Size = sizeof (EFI_IFR_TYPE_VALUE);
|
||||||
|
} else if (ArrayType) {
|
||||||
|
switch (_GET_CURRQEST_DATATYPE()) {
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_8 :
|
||||||
|
while (Type8[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_16 :
|
||||||
|
while (Type16[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
Size *= sizeof (UINT16);
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_32 :
|
||||||
|
while (Type32[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
Size *= sizeof (UINT32);
|
||||||
|
break;
|
||||||
|
case EFI_IFR_TYPE_NUM_SIZE_64 :
|
||||||
|
while (Type64[Size] != 0) {
|
||||||
|
Size++;
|
||||||
|
}
|
||||||
|
Size *= sizeof (UINT64);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ReturnCode = gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size);
|
||||||
|
}
|
||||||
|
if (ReturnCode != VFR_RETURN_SUCCESS) {
|
||||||
|
_PCATCH (ReturnCode, L->getLine());
|
||||||
|
}
|
||||||
|
|
||||||
|
Size += OFFSET_OF (EFI_IFR_ONE_OF_OPTION, Value);
|
||||||
|
OOOObj = new CIfrOneOfOption((UINT8)Size);
|
||||||
|
OOOObj->SetLineNo(L->getLine());
|
||||||
|
OOOObj->SetOption (_STOSID(S->getText(), S->getLine()));
|
||||||
|
if (ArrayType) {
|
||||||
|
OOOObj->SetType (EFI_IFR_TYPE_BUFFER);
|
||||||
|
} else {
|
||||||
|
OOOObj->SetType (_GET_CURRQEST_DATATYPE());
|
||||||
|
}
|
||||||
|
OOOObj->SetValue (*Val);
|
||||||
>>
|
>>
|
||||||
F:FLAGS "=" vfrOneOfOptionFlags[OOOObj, F->getLine()]
|
F:FLAGS "=" vfrOneOfOptionFlags[*OOOObj, F->getLine()]
|
||||||
<<
|
<<
|
||||||
|
//
|
||||||
|
// Array type only for default type OneOfOption.
|
||||||
|
//
|
||||||
|
if ((OOOObj->GetFlags () & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) == 0 && ArrayType) {
|
||||||
|
_PCATCH (VFR_RETURN_FATAL_ERROR, L->getLine(), "Default keyword should with array value type!");
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Clear the default flag if the option not use array value but has default flag.
|
||||||
|
//
|
||||||
|
if ((OOOObj->GetFlags () & (EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG)) != 0 && !ArrayType && gIsOrderedList) {
|
||||||
|
OOOObj->SetFlags(OOOObj->GetFlags () & ~(EFI_IFR_OPTION_DEFAULT | EFI_IFR_OPTION_DEFAULT_MFG));
|
||||||
|
}
|
||||||
|
|
||||||
if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
|
if (_GET_CURRQEST_VARTINFO().mVarStoreId != EFI_VARSTORE_ID_INVALID) {
|
||||||
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());
|
_PCATCH(mCVfrDataStorage.GetVarStoreName (_GET_CURRQEST_VARTINFO().mVarStoreId, &VarStoreName), L->getLine());
|
||||||
VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
|
VarStoreGuid = mCVfrDataStorage.GetVarStoreGuid(_GET_CURRQEST_VARTINFO().mVarStoreId);
|
||||||
if (OOOObj.GetFlags () & 0x10) {
|
if (OOOObj->GetFlags () & EFI_IFR_OPTION_DEFAULT) {
|
||||||
CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
|
CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_STANDARD, F);
|
||||||
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
|
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
|
||||||
EFI_HII_DEFAULT_CLASS_STANDARD,
|
EFI_HII_DEFAULT_CLASS_STANDARD,
|
||||||
@ -3040,10 +3184,10 @@ vfrStatementOneOfOption :
|
|||||||
VarStoreName,
|
VarStoreName,
|
||||||
VarStoreGuid,
|
VarStoreGuid,
|
||||||
_GET_CURRQEST_DATATYPE (),
|
_GET_CURRQEST_DATATYPE (),
|
||||||
Val
|
*Val
|
||||||
), L->getLine());
|
), L->getLine());
|
||||||
}
|
}
|
||||||
if (OOOObj.GetFlags () & 0x20) {
|
if (OOOObj->GetFlags () & EFI_IFR_OPTION_DEFAULT_MFG) {
|
||||||
CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
|
CheckDuplicateDefaultValue (EFI_HII_DEFAULT_CLASS_MANUFACTURING, F);
|
||||||
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
|
_PCATCH(mCVfrDefaultStore.BufferVarStoreAltConfigAdd (
|
||||||
EFI_HII_DEFAULT_CLASS_MANUFACTURING,
|
EFI_HII_DEFAULT_CLASS_MANUFACTURING,
|
||||||
@ -3051,7 +3195,7 @@ vfrStatementOneOfOption :
|
|||||||
VarStoreName,
|
VarStoreName,
|
||||||
VarStoreGuid,
|
VarStoreGuid,
|
||||||
_GET_CURRQEST_DATATYPE (),
|
_GET_CURRQEST_DATATYPE (),
|
||||||
Val
|
*Val
|
||||||
), L->getLine());
|
), L->getLine());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3066,16 +3210,16 @@ vfrStatementOneOfOption :
|
|||||||
//
|
//
|
||||||
CIfrOptionKey IfrOptionKey (
|
CIfrOptionKey IfrOptionKey (
|
||||||
gCurrentQuestion->QUESTION_ID(),
|
gCurrentQuestion->QUESTION_ID(),
|
||||||
Val,
|
*Val,
|
||||||
_STOQID(KN->getText(), KN->getLine())
|
_STOQID(KN->getText(), KN->getLine())
|
||||||
);
|
);
|
||||||
SET_LINE_INFO (IfrOptionKey, KN);
|
SET_LINE_INFO (IfrOptionKey, KN);
|
||||||
>>
|
>>
|
||||||
}
|
}
|
||||||
(
|
(
|
||||||
T:"," vfrImageTag << OOOObj.SetScope (1); CRT_END_OP (T); >>
|
T:"," vfrImageTag << OOOObj->SetScope (1); CRT_END_OP (T); >>
|
||||||
)*
|
)*
|
||||||
";"
|
";" << if (OOOObj != NULL) {delete OOOObj;} >>
|
||||||
;
|
;
|
||||||
|
|
||||||
vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :
|
vfrOneOfOptionFlags [CIfrOneOfOption & OOOObj, UINT32 LineNum] :
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Vfr common library functions.
|
Vfr common library functions.
|
||||||
|
|
||||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -110,6 +110,10 @@ SConfigInfo::SConfigInfo (
|
|||||||
case EFI_IFR_TYPE_STRING :
|
case EFI_IFR_TYPE_STRING :
|
||||||
memcpy (mValue, &Value.string, mWidth);
|
memcpy (mValue, &Value.string, mWidth);
|
||||||
break;
|
break;
|
||||||
|
case EFI_IFR_TYPE_BUFFER :
|
||||||
|
memcpy (mValue, &Value.u8, mWidth);
|
||||||
|
break;
|
||||||
|
|
||||||
case EFI_IFR_TYPE_OTHER :
|
case EFI_IFR_TYPE_OTHER :
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user