+ NumericQst = (CIfrNumeric *) gCurrentQuestion;\r
+ if ((NumericQst->GetNumericFlags() & EFI_IFR_DISPLAY) == 0 && !(_GET_CURRQEST_VARTINFO().mIsBitVar)) {\r
+ switch (_GET_CURRQEST_DATATYPE()) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8:\r
+ if (((INT8) Val->u8 < (INT8) gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE(), FALSE)) ||\r
+ ((INT8) Val->u8 > (INT8) gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE(), FALSE))) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
+ }\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16:\r
+ if (((INT16) Val->u16 < (INT16) gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE(), FALSE)) ||\r
+ ((INT16) Val->u16 > (INT16) gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE(), FALSE))) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
+ }\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_32:\r
+ if (((INT32) Val->u32 < (INT32) gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE(), FALSE)) ||\r
+ ((INT32) Val->u32 > (INT32) gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE(), FALSE))) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
+ }\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_64:\r
+ if (((INT64) Val->u64 < (INT64) gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE(), FALSE)) ||\r
+ ((INT64) Val->u64 > (INT64) gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE(), FALSE))) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ } else {\r
+ //\r
+ // Value for question stored in bit fields is always set to UINT32 type.\r
+ //\r
+ if (_GET_CURRQEST_VARTINFO().mIsBitVar) {\r
+ if (Val->u32 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE(), TRUE) || Val->u32 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE(), TRUE)) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
+ }\r
+ } else {\r
+ if (Val->u64 < gCurrentMinMaxData->GetMinData(_GET_CURRQEST_DATATYPE(), FALSE) || Val->u64 > gCurrentMinMaxData->GetMaxData(_GET_CURRQEST_DATATYPE(), FALSE)) {\r
+ _PCATCH (VFR_RETURN_INVALID_PARAMETER, D->getLine(), "Numeric default value must be between MinValue and MaxValue.");\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (_GET_CURRQEST_DATATYPE() == EFI_IFR_TYPE_OTHER) {\r
+ _PCATCH (VFR_RETURN_FATAL_ERROR, D->getLine(), "Default data type error.");\r
+ Size = sizeof (EFI_IFR_TYPE_VALUE);\r
+ } else if (ArrayType) {\r
+ switch (_GET_CURRQEST_DATATYPE()) {\r
+ case EFI_IFR_TYPE_NUM_SIZE_8 :\r
+ while (Type8[Size] != 0) {\r
+ Size++;\r
+ }\r
+ break;\r
+ case EFI_IFR_TYPE_NUM_SIZE_16 :\r
+ while (Type16[Size] != 0) {\r
+ Size++;\r
+ }\r
+ Size *= sizeof (UINT16);\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_32 :\r
+ while (Type32[Size] != 0) {\r
+ Size++;\r
+ }\r
+ Size *= sizeof (UINT32);\r
+ break;\r
+\r
+ case EFI_IFR_TYPE_NUM_SIZE_64 :\r
+ while (Type64[Size] != 0) {\r
+ Size++;\r
+ }\r
+ Size *= sizeof (UINT64);\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+ } else {\r
+ if (_GET_CURRQEST_VARTINFO().mIsBitVar) {\r
+ Size = sizeof (UINT32);\r
+ } else {\r
+ _PCATCH (gCVfrVarDataTypeDB.GetDataTypeSize (_GET_CURRQEST_DATATYPE(), &Size), D->getLine());\r
+ }\r
+ }\r
+ Size += OFFSET_OF (EFI_IFR_DEFAULT, Value);\r
+ DObj = new CIfrDefault ((UINT8)Size);\r
+ DObj->SetLineNo(D->getLine());\r
+ if (ArrayType) {\r
+ DObj->SetType (EFI_IFR_TYPE_BUFFER);\r
+ } else if (gIsStringOp) {\r
+ DObj->SetType (EFI_IFR_TYPE_STRING);\r
+ } else {\r
+ if (_GET_CURRQEST_VARTINFO().mIsBitVar) {\r
+ DObj->SetType (EFI_IFR_TYPE_NUM_SIZE_32);\r
+ } else {\r
+ DObj->SetType (_GET_CURRQEST_DATATYPE());\r