51 if ((Private == NULL) || (DatabaseNode == NULL)) {
52 return EFI_INVALID_PARAMETER;
56 if (DatabaseRecord == NULL) {
57 return EFI_OUT_OF_RESOURCES;
64 FreePool (DatabaseRecord);
65 return EFI_OUT_OF_RESOURCES;
83 if (HiiHandle == NULL) {
85 FreePool (DatabaseRecord);
86 return EFI_OUT_OF_RESOURCES;
93 Private->HiiHandleCount++;
94 HiiHandle->
Key = (UINTN)Private->HiiHandleCount;
98 InsertTailList (&Private->HiiHandleList, &HiiHandle->
Handle);
100 DatabaseRecord->
Handle = (EFI_HII_HANDLE)HiiHandle;
105 InsertTailList (&Private->DatabaseList, &DatabaseRecord->
DatabaseEntry);
107 *DatabaseNode = DatabaseRecord;
131 if (HiiHandle == NULL) {
162 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
163 IN VOID *PackageInstance,
164 IN UINT8 PackageType,
170 EFI_HII_PACKAGE_HEADER *Package;
174 UINT32 ImageBlockSize;
175 UINT32 PaletteInfoSize;
177 if ((Private == NULL) || ((NotifyType & 0xF) == 0) || (PackageInstance == NULL)) {
178 return EFI_INVALID_PARAMETER;
182 return EFI_INVALID_PARAMETER;
186 return EFI_INVALID_PARAMETER;
196 switch (PackageType) {
197 case EFI_HII_PACKAGE_TYPE_GUID:
201 case EFI_HII_PACKAGE_FORMS:
203 Buffer = (UINT8 *)AllocateZeroPool (BufferSize);
208 sizeof (EFI_HII_PACKAGE_HEADER)
211 Buffer +
sizeof (EFI_HII_PACKAGE_HEADER),
213 BufferSize -
sizeof (EFI_HII_PACKAGE_HEADER)
215 Package = (EFI_HII_PACKAGE_HEADER *)
Buffer;
218 case EFI_HII_PACKAGE_KEYBOARD_LAYOUT:
222 case EFI_HII_PACKAGE_STRINGS:
225 Buffer = (UINT8 *)AllocateZeroPool (BufferSize);
235 BufferSize - HeaderSize
237 Package = (EFI_HII_PACKAGE_HEADER *)
Buffer;
240 case EFI_HII_PACKAGE_FONTS:
243 Buffer = (UINT8 *)AllocateZeroPool (BufferSize);
253 BufferSize - HeaderSize
255 Package = (EFI_HII_PACKAGE_HEADER *)
Buffer;
258 case EFI_HII_PACKAGE_IMAGES:
260 HeaderSize =
sizeof (EFI_HII_IMAGE_PACKAGE_HDR);
261 Buffer = (UINT8 *)AllocateZeroPool (BufferSize);
270 Buffer +
sizeof (EFI_HII_PACKAGE_HEADER),
276 if (ImageBlockSize != 0) {
285 if (PaletteInfoSize != 0) {
287 Buffer + HeaderSize + ImageBlockSize,
291 HeaderSize += ImageBlockSize;
293 Buffer +
sizeof (EFI_HII_PACKAGE_HEADER) +
sizeof (UINT32),
299 Package = (EFI_HII_PACKAGE_HEADER *)
Buffer;
302 case EFI_HII_PACKAGE_SIMPLE_FONTS:
304 Buffer = (UINT8 *)AllocateZeroPool (BufferSize);
311 Package = (EFI_HII_PACKAGE_HEADER *)
Buffer;
314 case EFI_HII_PACKAGE_DEVICE_PATH:
315 Package = (EFI_HII_PACKAGE_HEADER *)PackageInstance;
319 return EFI_INVALID_PARAMETER;
322 for (Link = Private->DatabaseNotifyList.ForwardLink;
323 Link != &Private->DatabaseNotifyList;
324 Link = Link->ForwardLink
332 if (PackageType != EFI_HII_PACKAGE_TYPE_GUID) {
376 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
382 EFI_HII_PACKAGE_HEADER PackageHeader;
384 if ((PackageHdr == NULL) || (PackageList == NULL)) {
385 return EFI_INVALID_PARAMETER;
388 CopyMem (&PackageHeader, PackageHdr,
sizeof (EFI_HII_PACKAGE_HEADER));
394 if (GuidPackage == NULL) {
395 return EFI_OUT_OF_RESOURCES;
398 GuidPackage->
GuidPkg = (UINT8 *)AllocateZeroPool (PackageHeader.Length);
399 if (GuidPackage->
GuidPkg == NULL) {
400 FreePool (GuidPackage);
401 return EFI_OUT_OF_RESOURCES;
406 InsertTailList (&PackageList->GuidPkgHdr, &GuidPackage->
GuidEntry);
407 *Package = GuidPackage;
409 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
410 PackageList->PackageListHdr.PackageLength += PackageHeader.Length;
441 IN OUT UINTN *ResultSize
447 EFI_HII_PACKAGE_HEADER PackageHeader;
450 if ((PackageList == NULL) || (ResultSize == NULL)) {
451 return EFI_INVALID_PARAMETER;
454 if ((BufferSize > 0) && (
Buffer == NULL)) {
455 return EFI_INVALID_PARAMETER;
459 Status = EFI_SUCCESS;
461 for (Link = PackageList->GuidPkgHdr.ForwardLink; Link != &PackageList->GuidPkgHdr; Link = Link->ForwardLink) {
463 CopyMem (&PackageHeader, GuidPackage->
GuidPkg, sizeof (EFI_HII_PACKAGE_HEADER));
464 PackageLength += PackageHeader.Length;
465 if (PackageLength + *ResultSize + UsedSize <= BufferSize) {
468 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
470 EFI_HII_PACKAGE_TYPE_GUID,
473 ASSERT_EFI_ERROR (Status);
474 CopyMem (
Buffer, GuidPackage->GuidPkg, PackageHeader.Length);
479 *ResultSize += PackageLength;
504 LIST_ENTRY *ListHead;
507 EFI_HII_PACKAGE_HEADER PackageHeader;
509 ListHead = &PackageList->GuidPkgHdr;
511 while (!IsListEmpty (ListHead)) {
513 ListHead->ForwardLink,
520 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
522 EFI_HII_PACKAGE_TYPE_GUID,
525 if (EFI_ERROR (Status)) {
529 RemoveEntryList (&Package->GuidEntry);
530 CopyMem (&PackageHeader, Package->GuidPkg, sizeof (EFI_HII_PACKAGE_HEADER));
531 PackageList->PackageListHdr.PackageLength -= PackageHeader.Length;
532 FreePool (Package->GuidPkg);
551 EFI_IFR_QUESTION_HEADER *IfrQuestionHdr,
552 EFI_IFR_VARSTORE_EFI **EfiVarStoreList,
553 UINTN EfiVarStoreNumber
558 for (Index = 0; Index < EfiVarStoreNumber; Index++) {
559 if (IfrQuestionHdr->VarStoreId == EfiVarStoreList[Index]->VarStoreId) {
564 return EfiVarStoreNumber;
579 IN VARIABLE_STORE_HEADER *VariableStorage,
580 IN EFI_GUID *VarGuid,
581 IN UINT32 VarAttribute,
585 VARIABLE_HEADER *VariableHeader;
586 VARIABLE_HEADER *VariableEnd;
588 VariableEnd = (VARIABLE_HEADER *)((UINT8 *)VariableStorage + VariableStorage->Size);
589 VariableHeader = (VARIABLE_HEADER *)(VariableStorage + 1);
590 VariableHeader = (VARIABLE_HEADER *)HEADER_ALIGN (VariableHeader);
591 while (VariableHeader < VariableEnd) {
592 if (
CompareGuid (&VariableHeader->VendorGuid, VarGuid) &&
593 (VariableHeader->Attributes == VarAttribute) &&
594 (StrCmp (VarName, (CHAR16 *)(VariableHeader + 1)) == 0))
596 return VariableHeader;
599 VariableHeader = (VARIABLE_HEADER *)((UINT8 *)VariableHeader +
sizeof (VARIABLE_HEADER) + VariableHeader->NameSize + VariableHeader->DataSize);
600 VariableHeader = (VARIABLE_HEADER *)HEADER_ALIGN (VariableHeader);
622 IN EFI_IFR_VARSTORE_EFI *EfiVarStore,
623 IN EFI_IFR_QUESTION_HEADER *IfrQuestionHdr,
624 OUT VOID *ValueBuffer,
626 IN BOOLEAN BitFieldQuestion
629 VARIABLE_HEADER *VariableHeader;
630 VARIABLE_STORE_HEADER *VariableStorage;
633 VARIABLE_STORE_HEADER *NvStoreBuffer;
645 PCD_DEFAULT_DATA *DataHeader;
646 PCD_DEFAULT_INFO *DefaultInfo;
647 PCD_DATA_DELTA *DeltaData;
649 if (
gSkuId == 0xFFFFFFFFFFFFFFFF) {
656 VariableStorage = NULL;
665 Link = Link->ForwardLink;
669 DataBuffer = (UINT8 *)PcdGetPtr (PcdNvStoreDefaultValueBuffer);
674 DataHeader = (PCD_DEFAULT_DATA *)(DataBuffer +
sizeof (PCD_NV_STORE_DEFAULT_BUFFER_HEADER));
675 NvStoreBuffer = (VARIABLE_STORE_HEADER *)((UINT8 *)DataHeader +
sizeof (DataHeader->DataSize) + DataHeader->HeaderSize);
676 VariableStorage = AllocatePool (NvStoreBuffer->Size);
677 ASSERT (VariableStorage != NULL);
678 CopyMem (VariableStorage, NvStoreBuffer, NvStoreBuffer->Size);
684 DefaultInfo = &(DataHeader->DefaultInfo[0]);
685 BufferEnd = (UINT8 *)DataHeader +
sizeof (DataHeader->DataSize) + DataHeader->HeaderSize;
686 while ((UINT8 *)DefaultInfo < BufferEnd) {
687 if ((DefaultInfo->DefaultId == DefaultId) && (DefaultInfo->SkuId ==
gSkuId)) {
698 Index =
sizeof (PCD_NV_STORE_DEFAULT_BUFFER_HEADER) + ((DataHeader->DataSize + 7) & (~7));
699 DataHeader = (PCD_DEFAULT_DATA *)(DataBuffer + Index);
700 while (!IsFound && Index < gNvDefaultStoreSize && DataHeader->DataSize != 0xFFFF) {
701 DefaultInfo = &(DataHeader->DefaultInfo[0]);
702 BufferEnd = (UINT8 *)DataHeader +
sizeof (DataHeader->DataSize) + DataHeader->HeaderSize;
703 while ((UINT8 *)DefaultInfo < BufferEnd) {
704 if ((DefaultInfo->DefaultId == DefaultId) && (DefaultInfo->SkuId ==
gSkuId)) {
713 DeltaData = (PCD_DATA_DELTA *)BufferEnd;
714 BufferEnd = (UINT8 *)DataHeader + DataHeader->DataSize;
715 while ((UINT8 *)DeltaData < BufferEnd) {
716 *((UINT8 *)VariableStorage + DeltaData->Offset) = (UINT8)DeltaData->Value;
723 Index = (Index + DataHeader->DataSize + 7) & (~7);
724 DataHeader = (PCD_DEFAULT_DATA *)(DataBuffer + Index);
731 FreePool (VariableStorage);
732 VariableStorage = NULL;
740 }
else if (VariableStorage != NULL) {
741 FreePool (VariableStorage);
742 VariableStorage = NULL;
749 if (VariableStorage == NULL) {
750 return EFI_NOT_FOUND;
756 VariableHeader =
FindVariableData (VariableStorage, &EfiVarStore->Guid, EfiVarStore->Attributes, (CHAR16 *)EfiVarStore->Name);
757 if (VariableHeader == NULL) {
758 return EFI_NOT_FOUND;
763 ByteOffset = IfrQuestionHdr->VarStoreInfo.VarOffset;
764 if (BitFieldQuestion) {
765 BitOffset = IfrQuestionHdr->VarStoreInfo.VarOffset;
766 ByteOffset = BitOffset / 8;
768 StartBit = BitOffset % 8;
769 EndBit = StartBit + BitWidth - 1;
770 Width = EndBit / 8 + 1;
773 if (VariableHeader->DataSize < ByteOffset + Width) {
774 return EFI_INVALID_PARAMETER;
780 if (ValueBuffer != NULL) {
781 if (BitFieldQuestion) {
782 CopyMem (&BufferValue, (UINT8 *)VariableHeader +
sizeof (VARIABLE_HEADER) + VariableHeader->NameSize + ByteOffset, Width);
783 BitFieldVal = BitFieldRead32 (BufferValue, StartBit, EndBit);
784 CopyMem (ValueBuffer, &BitFieldVal, Width);
786 CopyMem (ValueBuffer, (UINT8 *)VariableHeader +
sizeof (VARIABLE_HEADER) + VariableHeader->NameSize + IfrQuestionHdr->VarStoreInfo.VarOffset, Width);
806 EFI_IFR_VARSTORE_EFI *IfrEfiVarStore;
807 EFI_IFR_OP_HEADER *IfrOpHdr;
808 EFI_IFR_ONE_OF_OPTION *IfrOneOfOption;
809 UINT8 IfrQuestionType;
811 EFI_IFR_QUESTION_HEADER *IfrQuestionHdr;
812 EFI_IFR_VARSTORE_EFI **EfiVarStoreList;
813 UINTN EfiVarStoreMaxNum;
814 UINTN EfiVarStoreNumber;
815 UINT16 *DefaultIdList;
816 UINTN DefaultIdNumber;
817 UINTN DefaultIdMaxNum;
819 UINTN EfiVarStoreIndex;
820 EFI_IFR_TYPE_VALUE IfrValue;
821 EFI_IFR_TYPE_VALUE IfrManufactValue;
822 BOOLEAN StandardDefaultIsSet;
823 BOOLEAN ManufactDefaultIsSet;
824 EFI_IFR_CHECKBOX *IfrCheckBox;
826 EFI_IFR_DEFAULT *IfrDefault;
828 EFI_IFR_QUESTION_HEADER VarStoreQuestionHeader;
829 BOOLEAN QuestionReferBitField;
842 ZeroMem (&VarStoreQuestionHeader,
sizeof (VarStoreQuestionHeader));
843 PackageLength = FormPackage->
FormPkgHdr.Length -
sizeof (EFI_HII_PACKAGE_HEADER);
847 IfrOpHdr = (EFI_IFR_OP_HEADER *)FormPackage->
IfrData;
848 IfrQuestionHdr = NULL;
850 EfiVarStoreMaxNum = 0;
851 EfiVarStoreNumber = 0;
854 EfiVarStoreList = NULL;
855 DefaultIdList = NULL;
856 StandardDefaultIsSet = FALSE;
857 ManufactDefaultIsSet = FALSE;
858 QuestionReferBitField = FALSE;
860 while (IfrOffset < PackageLength) {
861 switch (IfrOpHdr->OpCode) {
862 case EFI_IFR_VARSTORE_EFI_OP:
863 if (EfiVarStoreNumber >= EfiVarStoreMaxNum) {
867 EfiVarStoreList = ReallocatePool (EfiVarStoreMaxNum *
sizeof (UINTN), (EfiVarStoreMaxNum +
BASE_NUMBER) *
sizeof (UINTN), EfiVarStoreList);
868 if (EfiVarStoreList == NULL) {
872 EfiVarStoreMaxNum = EfiVarStoreMaxNum +
BASE_NUMBER;
875 IfrEfiVarStore = (EFI_IFR_VARSTORE_EFI *)IfrOpHdr;
879 EfiVarStoreList[EfiVarStoreNumber] = AllocatePool (IfrEfiVarStore->Header.Length + AsciiStrSize ((CHAR8 *)IfrEfiVarStore->Name));
880 if (EfiVarStoreList[EfiVarStoreNumber] == NULL) {
884 CopyMem (EfiVarStoreList[EfiVarStoreNumber], IfrEfiVarStore, IfrEfiVarStore->Header.Length);
885 AsciiStrToUnicodeStrS ((CHAR8 *)IfrEfiVarStore->Name, (CHAR16 *)&(EfiVarStoreList[EfiVarStoreNumber]->Name[0]), AsciiStrSize ((CHAR8 *)IfrEfiVarStore->Name) * sizeof (CHAR16));
886 Status =
FindQuestionDefaultSetting (EFI_HII_DEFAULT_CLASS_STANDARD, EfiVarStoreList[EfiVarStoreNumber], &VarStoreQuestionHeader, NULL, IfrEfiVarStore->Size, FALSE);
887 if (!EFI_ERROR (Status)) {
890 FreePool (EfiVarStoreList[EfiVarStoreNumber]);
891 EfiVarStoreList[EfiVarStoreNumber] = NULL;
895 case EFI_IFR_DEFAULTSTORE_OP:
896 if (DefaultIdNumber >= DefaultIdMaxNum) {
900 DefaultIdList = ReallocatePool (DefaultIdMaxNum *
sizeof (UINT16), (DefaultIdMaxNum +
BASE_NUMBER) *
sizeof (UINT16), DefaultIdList);
901 if (DefaultIdList == NULL) {
908 DefaultIdList[DefaultIdNumber++] = ((EFI_IFR_DEFAULTSTORE *)IfrOpHdr)->DefaultId;
910 case EFI_IFR_FORM_OP:
911 case EFI_IFR_FORM_MAP_OP:
915 if ((EfiVarStoreNumber == 0) || (DefaultIdNumber == 0)) {
920 case EFI_IFR_CHECKBOX_OP:
921 IfrScope = IfrOpHdr->Scope;
922 IfrQuestionType = IfrOpHdr->OpCode;
923 IfrQuestionHdr = (EFI_IFR_QUESTION_HEADER *)(IfrOpHdr + 1);
924 IfrCheckBox = (EFI_IFR_CHECKBOX *)IfrOpHdr;
926 Width =
sizeof (BOOLEAN);
927 if (EfiVarStoreIndex < EfiVarStoreNumber) {
928 for (Index = 0; Index < DefaultIdNumber; Index++) {
929 if (DefaultIdList[Index] == EFI_HII_DEFAULT_CLASS_STANDARD) {
930 Status =
FindQuestionDefaultSetting (DefaultIdList[Index], EfiVarStoreList[EfiVarStoreIndex], IfrQuestionHdr, &IfrValue,
sizeof (BOOLEAN), QuestionReferBitField);
931 if (!EFI_ERROR (Status)) {
933 IfrCheckBox->Flags = IfrCheckBox->Flags | EFI_IFR_CHECKBOX_DEFAULT;
935 IfrCheckBox->Flags = IfrCheckBox->Flags & (~EFI_IFR_CHECKBOX_DEFAULT);
938 }
else if (DefaultIdList[Index] == EFI_HII_DEFAULT_CLASS_MANUFACTURING) {
939 Status =
FindQuestionDefaultSetting (DefaultIdList[Index], EfiVarStoreList[EfiVarStoreIndex], IfrQuestionHdr, &IfrValue,
sizeof (BOOLEAN), QuestionReferBitField);
940 if (!EFI_ERROR (Status)) {
942 IfrCheckBox->Flags = IfrCheckBox->Flags | EFI_IFR_CHECKBOX_DEFAULT_MFG;
944 IfrCheckBox->Flags = IfrCheckBox->Flags & (~EFI_IFR_CHECKBOX_DEFAULT_MFG);
952 case EFI_IFR_NUMERIC_OP:
953 IfrScope = IfrOpHdr->Scope;
954 IfrQuestionType = IfrOpHdr->OpCode;
955 IfrQuestionHdr = (EFI_IFR_QUESTION_HEADER *)(IfrOpHdr + 1);
956 if (QuestionReferBitField) {
957 Width = (UINTN)(((EFI_IFR_ONE_OF *)IfrOpHdr)->Flags & EDKII_IFR_NUMERIC_SIZE_BIT);
959 Width = (UINTN)((UINT32)1 << (((EFI_IFR_ONE_OF *)IfrOpHdr)->Flags & EFI_IFR_NUMERIC_SIZE));
963 case EFI_IFR_ONE_OF_OP:
964 IfrScope = IfrOpHdr->Scope;
965 IfrQuestionType = IfrOpHdr->OpCode;
966 IfrQuestionHdr = (EFI_IFR_QUESTION_HEADER *)(IfrOpHdr + 1);
967 if (QuestionReferBitField) {
968 Width = (UINTN)(((EFI_IFR_ONE_OF *)IfrOpHdr)->Flags & EDKII_IFR_NUMERIC_SIZE_BIT);
970 Width = (UINTN)((UINT32)1 << (((EFI_IFR_ONE_OF *)IfrOpHdr)->Flags & EFI_IFR_NUMERIC_SIZE));
974 StandardDefaultIsSet = FALSE;
975 ManufactDefaultIsSet = FALSE;
979 if (EfiVarStoreIndex < EfiVarStoreNumber) {
980 for (Index = 0; Index < DefaultIdNumber; Index++) {
981 if (DefaultIdList[Index] == EFI_HII_DEFAULT_CLASS_STANDARD) {
982 Status =
FindQuestionDefaultSetting (EFI_HII_DEFAULT_CLASS_STANDARD, EfiVarStoreList[EfiVarStoreIndex], IfrQuestionHdr, &IfrValue, Width, QuestionReferBitField);
983 if (!EFI_ERROR (Status)) {
984 StandardDefaultIsSet = TRUE;
986 }
else if (DefaultIdList[Index] == EFI_HII_DEFAULT_CLASS_MANUFACTURING) {
987 Status =
FindQuestionDefaultSetting (EFI_HII_DEFAULT_CLASS_MANUFACTURING, EfiVarStoreList[EfiVarStoreIndex], IfrQuestionHdr, &IfrManufactValue, Width, QuestionReferBitField);
988 if (!EFI_ERROR (Status)) {
989 ManufactDefaultIsSet = TRUE;
996 case EFI_IFR_ORDERED_LIST_OP:
997 IfrScope = IfrOpHdr->Scope;
998 IfrQuestionType = IfrOpHdr->OpCode;
999 IfrQuestionHdr = (EFI_IFR_QUESTION_HEADER *)(IfrOpHdr + 1);
1001 case EFI_IFR_ONE_OF_OPTION_OP:
1002 if ((IfrQuestionHdr != NULL) && (IfrScope > 0)) {
1003 IfrOneOfOption = (EFI_IFR_ONE_OF_OPTION *)IfrOpHdr;
1004 if (IfrQuestionType == EFI_IFR_ONE_OF_OP) {
1005 Width = (UINTN)((UINT32)1 << (IfrOneOfOption->Flags & EFI_IFR_NUMERIC_SIZE));
1006 if (StandardDefaultIsSet) {
1007 if (
CompareMem (&IfrOneOfOption->Value, &IfrValue, Width) == 0) {
1008 IfrOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT;
1010 IfrOneOfOption->Flags &= ~EFI_IFR_OPTION_DEFAULT;
1014 if (ManufactDefaultIsSet) {
1015 if (
CompareMem (&IfrOneOfOption->Value, &IfrManufactValue, Width) == 0) {
1016 IfrOneOfOption->Flags |= EFI_IFR_OPTION_DEFAULT_MFG;
1018 IfrOneOfOption->Flags &= ~EFI_IFR_OPTION_DEFAULT_MFG;
1025 case EFI_IFR_DEFAULT_OP:
1026 if ((IfrQuestionHdr != NULL) && (IfrScope > 0)) {
1027 IfrDefault = (EFI_IFR_DEFAULT *)IfrOpHdr;
1031 if (!QuestionReferBitField) {
1033 if ((IfrDefault->Type == EFI_IFR_TYPE_NUM_SIZE_8) || (IfrDefault->Type == EFI_IFR_TYPE_BOOLEAN)) {
1035 }
else if (IfrDefault->Type == EFI_IFR_TYPE_NUM_SIZE_16) {
1037 }
else if (IfrDefault->Type == EFI_IFR_TYPE_NUM_SIZE_32) {
1039 }
else if (IfrDefault->Type == EFI_IFR_TYPE_NUM_SIZE_64) {
1041 }
else if (IfrDefault->Type == EFI_IFR_TYPE_BUFFER) {
1042 Width = IfrDefault->Header.Length - OFFSET_OF (EFI_IFR_DEFAULT, Value);
1051 if (EfiVarStoreIndex < EfiVarStoreNumber) {
1052 Status =
FindQuestionDefaultSetting (IfrDefault->DefaultId, EfiVarStoreList[EfiVarStoreIndex], IfrQuestionHdr, &IfrDefault->Value, Width, QuestionReferBitField);
1058 case EFI_IFR_END_OP:
1059 if (IfrQuestionHdr != NULL) {
1064 if (IfrScope == 0) {
1065 IfrQuestionHdr = NULL;
1066 QuestionReferBitField = FALSE;
1071 case EFI_IFR_GUID_OP:
1072 if (
CompareGuid ((EFI_GUID *)((UINT8 *)IfrOpHdr +
sizeof (EFI_IFR_OP_HEADER)), &gEdkiiIfrBitVarstoreGuid)) {
1073 QuestionReferBitField = TRUE;
1081 IfrOffset = IfrOffset + IfrOpHdr->Length;
1082 IfrOpHdr = (EFI_IFR_OP_HEADER *)((UINT8 *)IfrOpHdr + IfrOpHdr->Length);
1084 IfrScope += IfrOpHdr->Scope;
1089 if (EfiVarStoreList != NULL) {
1090 for (Index = 0; Index < EfiVarStoreNumber; Index++) {
1091 FreePool (EfiVarStoreList[Index]);
1117 IN VOID *PackageHdr,
1118 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
1124 EFI_HII_PACKAGE_HEADER PackageHeader;
1126 if ((PackageHdr == NULL) || (PackageList == NULL)) {
1127 return EFI_INVALID_PARAMETER;
1133 CopyMem (&PackageHeader, PackageHdr,
sizeof (EFI_HII_PACKAGE_HEADER));
1139 if (FormPackage == NULL) {
1140 return EFI_OUT_OF_RESOURCES;
1143 FormPackage->
IfrData = (UINT8 *)AllocateZeroPool (PackageHeader.Length - sizeof (EFI_HII_PACKAGE_HEADER));
1144 if (FormPackage->
IfrData == NULL) {
1145 FreePool (FormPackage);
1146 return EFI_OUT_OF_RESOURCES;
1153 CopyMem (&FormPackage->
FormPkgHdr, &PackageHeader, sizeof (EFI_HII_PACKAGE_HEADER));
1160 (UINT8 *)PackageHdr + sizeof (EFI_HII_PACKAGE_HEADER),
1161 PackageHeader.Length - sizeof (EFI_HII_PACKAGE_HEADER)
1164 InsertTailList (&PackageList->FormPkgHdr, &FormPackage->
IfrEntry);
1165 *Package = FormPackage;
1172 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
1173 PackageList->PackageListHdr.PackageLength += FormPackage->
FormPkgHdr.Length;
1199 IN EFI_HII_HANDLE
Handle,
1202 IN UINTN BufferSize,
1204 IN OUT UINTN *ResultSize
1208 UINTN PackageLength;
1212 if ((Private == NULL) || (PackageList == NULL) || (ResultSize == NULL)) {
1213 return EFI_INVALID_PARAMETER;
1216 if ((BufferSize > 0) && (
Buffer == NULL)) {
1217 return EFI_INVALID_PARAMETER;
1221 Status = EFI_SUCCESS;
1226 for (Link = PackageList->FormPkgHdr.ForwardLink; Link != &PackageList->FormPkgHdr; Link = Link->ForwardLink) {
1228 PackageLength += FormPackage->
FormPkgHdr.Length;
1229 if ((
Buffer != NULL) && (PackageLength + *ResultSize + UsedSize <= BufferSize)) {
1235 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
1236 (VOID *)FormPackage,
1237 EFI_HII_PACKAGE_FORMS,
1240 ASSERT_EFI_ERROR (Status);
1244 CopyMem (
Buffer, (VOID *)(&FormPackage->FormPkgHdr), sizeof (EFI_HII_PACKAGE_HEADER));
1245 Buffer = (UINT8 *)
Buffer +
sizeof (EFI_HII_PACKAGE_HEADER);
1248 (VOID *)FormPackage->IfrData,
1249 FormPackage->FormPkgHdr.Length - sizeof (EFI_HII_PACKAGE_HEADER)
1251 Buffer = (UINT8 *)
Buffer + FormPackage->FormPkgHdr.Length - sizeof (EFI_HII_PACKAGE_HEADER);
1255 *ResultSize += PackageLength;
1277 IN EFI_HII_HANDLE
Handle,
1281 LIST_ENTRY *ListHead;
1287 while (!IsListEmpty (ListHead)) {
1289 ListHead->ForwardLink,
1296 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
1298 EFI_HII_PACKAGE_FORMS,
1301 if (EFI_ERROR (Status)) {
1305 RemoveEntryList (&Package->IfrEntry);
1306 PackageList->PackageListHdr.PackageLength -= Package->FormPkgHdr.Length;
1307 FreePool (Package->IfrData);
1347 IN VOID *PackageHdr,
1348 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
1356 EFI_HII_PACKAGE_HEADER PackageHeader;
1358 UINT32 LanguageSize;
1361 if ((Private == NULL) || (PackageHdr == NULL) || (PackageList == NULL)) {
1362 return EFI_INVALID_PARAMETER;
1366 return EFI_INVALID_PARAMETER;
1369 CopyMem (&PackageHeader, PackageHdr,
sizeof (EFI_HII_PACKAGE_HEADER));
1370 CopyMem (&HeaderSize, (UINT8 *)PackageHdr +
sizeof (EFI_HII_PACKAGE_HEADER),
sizeof (UINT32));
1376 LanguageSize = HeaderSize -
sizeof (EFI_HII_STRING_PACKAGE_HDR) +
sizeof (CHAR8);
1377 Language = (CHAR8 *)AllocateZeroPool (LanguageSize);
1378 if (Language == NULL) {
1379 return EFI_OUT_OF_RESOURCES;
1382 AsciiStrCpyS (Language, LanguageSize /
sizeof (CHAR8), (CHAR8 *)PackageHdr + HeaderSize - LanguageSize);
1383 for (Link = PackageList->StringPkgHdr.ForwardLink; Link != &PackageList->StringPkgHdr; Link = Link->ForwardLink) {
1386 FreePool (Language);
1387 return EFI_UNSUPPORTED;
1391 FreePool (Language);
1397 if (StringPackage == NULL) {
1398 Status = EFI_OUT_OF_RESOURCES;
1402 StringPackage->
StringPkgHdr = (EFI_HII_STRING_PACKAGE_HDR *)AllocateZeroPool (HeaderSize);
1404 Status = EFI_OUT_OF_RESOURCES;
1408 StringPackage->
StringBlock = (UINT8 *)AllocateZeroPool (PackageHeader.Length - HeaderSize);
1410 Status = EFI_OUT_OF_RESOURCES;
1415 StringPackage->
FontId = 0;
1428 (UINT8 *)PackageHdr + HeaderSize,
1429 PackageHeader.Length - HeaderSize
1436 if (EFI_ERROR (Status)) {
1443 InsertTailList (&PackageList->StringPkgHdr, &StringPackage->
StringEntry);
1444 *Package = StringPackage;
1446 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
1447 PackageList->PackageListHdr.PackageLength += StringPackage->
StringPkgHdr->Header.Length;
1454 if (StringPackage != NULL) {
1463 FreePool (StringPackage);
1485 UINT32 Skip2BlockSize;
1486 UINT32 OldBlockSize;
1489 EFI_STRING_ID MaxStringId;
1493 for (Link = PackageList->StringPkgHdr.ForwardLink;
1494 Link != &PackageList->StringPkgHdr;
1495 Link = Link->ForwardLink
1499 if (MaxStringId < StringPackage->MaxStringId) {
1504 for (Link = PackageList->StringPkgHdr.ForwardLink;
1505 Link != &PackageList->StringPkgHdr;
1506 Link = Link->ForwardLink
1515 SkipCount = (UINT16)(MaxStringId - StringPackage->
MaxStringId);
1516 Skip2BlockSize = (UINT32)
sizeof (EFI_HII_SIBT_SKIP2_BLOCK);
1518 StringBlock = (UINT8 *)AllocateZeroPool (OldBlockSize + Skip2BlockSize);
1519 if (StringBlock == NULL) {
1520 return EFI_OUT_OF_RESOURCES;
1526 CopyMem (StringBlock, StringPackage->
StringBlock, OldBlockSize - sizeof (EFI_HII_SIBT_END_BLOCK));
1530 BlockPtr = StringBlock + OldBlockSize -
sizeof (EFI_HII_SIBT_END_BLOCK);
1531 *BlockPtr = EFI_HII_SIBT_SKIP2;
1532 CopyMem (BlockPtr + 1, &SkipCount,
sizeof (UINT16));
1533 BlockPtr +=
sizeof (EFI_HII_SIBT_SKIP2_BLOCK);
1538 *BlockPtr = EFI_HII_SIBT_END;
1541 StringPackage->
StringPkgHdr->Header.Length += Skip2BlockSize;
1542 PackageList->PackageListHdr.PackageLength += Skip2BlockSize;
1570 IN EFI_HII_HANDLE
Handle,
1573 IN UINTN BufferSize,
1575 IN OUT UINTN *ResultSize
1579 UINTN PackageLength;
1583 if ((Private == NULL) || (PackageList == NULL) || (ResultSize == NULL)) {
1584 return EFI_INVALID_PARAMETER;
1587 if ((BufferSize > 0) && (
Buffer == NULL)) {
1588 return EFI_INVALID_PARAMETER;
1592 Status = EFI_SUCCESS;
1594 for (Link = PackageList->StringPkgHdr.ForwardLink; Link != &PackageList->StringPkgHdr; Link = Link->ForwardLink) {
1596 PackageLength += StringPackage->
StringPkgHdr->Header.Length;
1597 if (PackageLength + *ResultSize + UsedSize <= BufferSize) {
1603 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
1604 (VOID *)StringPackage,
1605 EFI_HII_PACKAGE_STRINGS,
1608 ASSERT_EFI_ERROR (Status);
1612 CopyMem (
Buffer, StringPackage->StringPkgHdr, StringPackage->StringPkgHdr->HdrSize);
1613 Buffer = (UINT8 *)
Buffer + StringPackage->StringPkgHdr->HdrSize;
1620 StringPackage->StringBlock,
1621 StringPackage->StringPkgHdr->Header.Length - StringPackage->StringPkgHdr->HdrSize
1623 Buffer = (UINT8 *)
Buffer + StringPackage->StringPkgHdr->Header.Length - StringPackage->StringPkgHdr->HdrSize;
1627 *ResultSize += PackageLength;
1648 IN EFI_HII_HANDLE
Handle,
1652 LIST_ENTRY *ListHead;
1657 ListHead = &PackageList->StringPkgHdr;
1659 while (!IsListEmpty (ListHead)) {
1661 ListHead->ForwardLink,
1668 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
1670 EFI_HII_PACKAGE_STRINGS,
1673 if (EFI_ERROR (Status)) {
1677 RemoveEntryList (&Package->StringEntry);
1678 PackageList->PackageListHdr.PackageLength -= Package->StringPkgHdr->Header.Length;
1679 FreePool (Package->StringBlock);
1680 FreePool (Package->StringPkgHdr);
1684 while (!IsListEmpty (&Package->FontInfoList)) {
1686 Package->FontInfoList.ForwardLink,
1691 RemoveEntryList (&FontInfo->
Entry);
1692 FreePool (FontInfo);
1724 IN VOID *PackageHdr,
1725 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
1731 EFI_HII_FONT_PACKAGE_HDR *FontPkgHdr;
1734 EFI_HII_PACKAGE_HEADER PackageHeader;
1735 EFI_FONT_INFO *FontInfo;
1736 UINT32 FontInfoSize;
1739 if ((Private == NULL) || (PackageHdr == NULL) || (PackageList == NULL)) {
1740 return EFI_INVALID_PARAMETER;
1743 CopyMem (&PackageHeader, PackageHdr,
sizeof (EFI_HII_PACKAGE_HEADER));
1744 CopyMem (&HeaderSize, (UINT8 *)PackageHdr +
sizeof (EFI_HII_PACKAGE_HEADER),
sizeof (UINT32));
1755 FontPkgHdr = (EFI_HII_FONT_PACKAGE_HDR *)AllocateZeroPool (HeaderSize);
1756 if (FontPkgHdr == NULL) {
1757 Status = EFI_OUT_OF_RESOURCES;
1761 CopyMem (FontPkgHdr, PackageHdr, HeaderSize);
1763 FontInfoSize =
sizeof (EFI_FONT_INFO) + HeaderSize -
sizeof (EFI_HII_FONT_PACKAGE_HDR);
1764 FontInfo = (EFI_FONT_INFO *)AllocateZeroPool (FontInfoSize);
1765 if (FontInfo == NULL) {
1766 Status = EFI_OUT_OF_RESOURCES;
1770 FontInfo->FontStyle = FontPkgHdr->FontStyle;
1771 FontInfo->FontSize = FontPkgHdr->Cell.Height;
1772 StrCpyS (FontInfo->FontName, (FontInfoSize - OFFSET_OF (EFI_FONT_INFO, FontName)) /
sizeof (CHAR16), FontPkgHdr->FontFamily);
1775 Status = EFI_UNSUPPORTED;
1783 if (FontPackage == NULL) {
1784 Status = EFI_OUT_OF_RESOURCES;
1792 FontPackage->
GlyphBlock = (UINT8 *)AllocateZeroPool (PackageHeader.Length - HeaderSize);
1794 Status = EFI_OUT_OF_RESOURCES;
1798 CopyMem (FontPackage->
GlyphBlock, (UINT8 *)PackageHdr + HeaderSize, PackageHeader.Length - HeaderSize);
1803 Status =
FindGlyphBlock (FontPackage, (CHAR16)(-1), NULL, NULL, NULL);
1804 if (EFI_ERROR (Status)) {
1813 if (GlobalFont == NULL) {
1814 Status = EFI_OUT_OF_RESOURCES;
1822 InsertTailList (&Private->FontInfoList, &GlobalFont->
Entry);
1827 InsertTailList (&PackageList->FontPkgHdr, &FontPackage->
FontEntry);
1828 *Package = FontPackage;
1830 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
1831 PackageList->PackageListHdr.PackageLength += FontPackage->
FontPkgHdr->Header.Length;
1838 if (FontPkgHdr != NULL) {
1839 FreePool (FontPkgHdr);
1842 if (FontInfo != NULL) {
1843 FreePool (FontInfo);
1846 if (FontPackage != NULL) {
1851 FreePool (FontPackage);
1854 if (GlobalFont != NULL) {
1855 FreePool (GlobalFont);
1881 IN EFI_HII_HANDLE
Handle,
1884 IN UINTN BufferSize,
1886 IN OUT UINTN *ResultSize
1890 UINTN PackageLength;
1894 if ((Private == NULL) || (PackageList == NULL) || (ResultSize == NULL)) {
1895 return EFI_INVALID_PARAMETER;
1898 if ((BufferSize > 0) && (
Buffer == NULL)) {
1899 return EFI_INVALID_PARAMETER;
1903 Status = EFI_SUCCESS;
1905 for (Link = PackageList->FontPkgHdr.ForwardLink; Link != &PackageList->FontPkgHdr; Link = Link->ForwardLink) {
1907 PackageLength += Package->
FontPkgHdr->Header.Length;
1908 if (PackageLength + *ResultSize + UsedSize <= BufferSize) {
1914 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
1916 EFI_HII_PACKAGE_FONTS,
1919 ASSERT_EFI_ERROR (Status);
1923 CopyMem (
Buffer, Package->FontPkgHdr, Package->FontPkgHdr->HdrSize);
1924 Buffer = (UINT8 *)
Buffer + Package->FontPkgHdr->HdrSize;
1931 Package->GlyphBlock,
1932 Package->FontPkgHdr->Header.Length - Package->FontPkgHdr->HdrSize
1934 Buffer = (UINT8 *)
Buffer + Package->FontPkgHdr->Header.Length - Package->FontPkgHdr->HdrSize;
1938 *ResultSize += PackageLength;
1959 IN EFI_HII_HANDLE
Handle,
1963 LIST_ENTRY *ListHead;
1970 ListHead = &PackageList->FontPkgHdr;
1972 while (!IsListEmpty (ListHead)) {
1974 ListHead->ForwardLink,
1981 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
1983 EFI_HII_PACKAGE_FONTS,
1986 if (EFI_ERROR (Status)) {
1990 RemoveEntryList (&Package->FontEntry);
1991 PackageList->PackageListHdr.PackageLength -= Package->FontPkgHdr->Header.Length;
1993 if (Package->GlyphBlock != NULL) {
1994 FreePool (Package->GlyphBlock);
1997 FreePool (Package->FontPkgHdr);
2001 while (!IsListEmpty (&Package->GlyphInfoList)) {
2003 Package->GlyphInfoList.ForwardLink,
2008 RemoveEntryList (&GlyphInfo->
Entry);
2009 FreePool (GlyphInfo);
2015 for (Link = Private->FontInfoList.ForwardLink; Link != &Private->FontInfoList; Link = Link->ForwardLink) {
2018 RemoveEntryList (&GlobalFont->
Entry);
2020 FreePool (GlobalFont);
2050 IN VOID *PackageHdr,
2051 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
2060 EFI_HII_IMAGE_PALETTE_INFO_HEADER *PaletteHdr;
2061 EFI_HII_IMAGE_PALETTE_INFO *PaletteInfo;
2062 UINT32 PaletteInfoOffset;
2063 UINT32 ImageInfoOffset;
2066 if ((PackageHdr == NULL) || (PackageList == NULL)) {
2067 return EFI_INVALID_PARAMETER;
2073 if (PackageList->ImagePkg != NULL) {
2074 return EFI_INVALID_PARAMETER;
2081 if (ImagePackage == NULL) {
2082 return EFI_OUT_OF_RESOURCES;
2088 CopyMem (&ImagePackage->
ImagePkgHdr, PackageHdr, sizeof (EFI_HII_IMAGE_PACKAGE_HDR));
2090 PaletteInfoOffset = ImagePackage->
ImagePkgHdr.PaletteInfoOffset;
2091 ImageInfoOffset = ImagePackage->
ImagePkgHdr.ImageInfoOffset;
2098 if (PaletteInfoOffset != 0) {
2099 PaletteHdr = (EFI_HII_IMAGE_PALETTE_INFO_HEADER *)((UINT8 *)PackageHdr + PaletteInfoOffset);
2100 PaletteSize =
sizeof (EFI_HII_IMAGE_PALETTE_INFO_HEADER);
2101 PaletteInfo = (EFI_HII_IMAGE_PALETTE_INFO *)((UINT8 *)PaletteHdr + PaletteSize);
2103 for (Index = 0; Index < PaletteHdr->PaletteCount; Index++) {
2104 CopyMem (&CurrentSize, PaletteInfo,
sizeof (UINT16));
2105 CurrentSize +=
sizeof (UINT16);
2106 PaletteSize += (UINT32)CurrentSize;
2107 PaletteInfo = (EFI_HII_IMAGE_PALETTE_INFO *)((UINT8 *)PaletteInfo + CurrentSize);
2110 ImagePackage->
PaletteBlock = (UINT8 *)AllocateZeroPool (PaletteSize);
2112 FreePool (ImagePackage);
2113 return EFI_OUT_OF_RESOURCES;
2118 (UINT8 *)PackageHdr + PaletteInfoOffset,
2128 if (ImageInfoOffset != 0) {
2129 ImageSize = ImagePackage->
ImagePkgHdr.Header.Length -
2130 sizeof (EFI_HII_IMAGE_PACKAGE_HDR) - PaletteSize;
2131 ImagePackage->
ImageBlock = AllocateZeroPool (ImageSize);
2134 FreePool (ImagePackage);
2135 return EFI_OUT_OF_RESOURCES;
2140 (UINT8 *)PackageHdr + ImageInfoOffset,
2147 PackageList->ImagePkg = ImagePackage;
2148 *Package = ImagePackage;
2150 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
2151 PackageList->PackageListHdr.PackageLength += ImagePackage->
ImagePkgHdr.Header.Length;
2177 IN EFI_HII_HANDLE
Handle,
2180 IN UINTN BufferSize,
2182 IN OUT UINTN *ResultSize
2185 UINTN PackageLength;
2189 if ((Private == NULL) || (PackageList == NULL) || (ResultSize == NULL)) {
2190 return EFI_INVALID_PARAMETER;
2193 if ((BufferSize > 0) && (
Buffer == NULL)) {
2194 return EFI_INVALID_PARAMETER;
2197 Package = PackageList->ImagePkg;
2199 if (Package == NULL) {
2203 PackageLength = Package->
ImagePkgHdr.Header.Length;
2205 if (PackageLength + *ResultSize + UsedSize <= BufferSize) {
2211 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
2213 EFI_HII_PACKAGE_IMAGES,
2216 ASSERT_EFI_ERROR (Status);
2218 Package->ImagePkgHdr.Header.Length ==
2219 sizeof (EFI_HII_IMAGE_PACKAGE_HDR) + Package->ImageBlockSize + Package->PaletteInfoSize
2225 CopyMem (
Buffer, &Package->ImagePkgHdr, sizeof (EFI_HII_IMAGE_PACKAGE_HDR));
2226 Buffer = (UINT8 *)
Buffer +
sizeof (EFI_HII_IMAGE_PACKAGE_HDR);
2231 if (Package->ImageBlockSize != 0) {
2232 CopyMem (
Buffer, Package->ImageBlock, Package->ImageBlockSize);
2239 if (Package->PaletteInfoSize != 0) {
2240 CopyMem (
Buffer, Package->PaletteBlock, Package->PaletteInfoSize);
2245 *ResultSize += PackageLength;
2266 IN EFI_HII_HANDLE
Handle,
2273 Package = PackageList->ImagePkg;
2278 if (Package == NULL) {
2284 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
2286 EFI_HII_PACKAGE_IMAGES,
2289 if (EFI_ERROR (Status)) {
2293 PackageList->PackageListHdr.PackageLength -= Package->
ImagePkgHdr.Header.Length;
2302 PackageList->ImagePkg = NULL;
2326 IN VOID *PackageHdr,
2327 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
2334 EFI_HII_PACKAGE_HEADER
Header;
2336 if ((PackageHdr == NULL) || (PackageList == NULL)) {
2337 return EFI_INVALID_PARAMETER;
2344 if (SimpleFontPackage == NULL) {
2345 Status = EFI_OUT_OF_RESOURCES;
2354 CopyMem (&
Header, PackageHdr,
sizeof (EFI_HII_PACKAGE_HEADER));
2358 Status = EFI_OUT_OF_RESOURCES;
2367 InsertTailList (&PackageList->SimpleFontPkgHdr, &SimpleFontPackage->
SimpleFontEntry);
2368 *Package = SimpleFontPackage;
2370 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
2371 PackageList->PackageListHdr.PackageLength +=
Header.Length;
2378 if (SimpleFontPackage != NULL) {
2383 FreePool (SimpleFontPackage);
2409 IN EFI_HII_HANDLE
Handle,
2412 IN UINTN BufferSize,
2414 IN OUT UINTN *ResultSize
2418 UINTN PackageLength;
2422 if ((Private == NULL) || (PackageList == NULL) || (ResultSize == NULL)) {
2423 return EFI_INVALID_PARAMETER;
2426 if ((BufferSize > 0) && (
Buffer == NULL)) {
2427 return EFI_INVALID_PARAMETER;
2431 Status = EFI_SUCCESS;
2433 for (Link = PackageList->SimpleFontPkgHdr.ForwardLink; Link != &PackageList->SimpleFontPkgHdr; Link = Link->ForwardLink) {
2436 if (PackageLength + *ResultSize + UsedSize <= BufferSize) {
2442 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
2444 EFI_HII_PACKAGE_SIMPLE_FONTS,
2447 ASSERT_EFI_ERROR (Status);
2452 CopyMem (
Buffer, Package->SimpleFontPkgHdr, Package->SimpleFontPkgHdr->Header.Length);
2453 Buffer = (UINT8 *)
Buffer + Package->SimpleFontPkgHdr->Header.Length;
2457 *ResultSize += PackageLength;
2478 IN EFI_HII_HANDLE
Handle,
2482 LIST_ENTRY *ListHead;
2488 while (!IsListEmpty (ListHead)) {
2490 ListHead->ForwardLink,
2497 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
2499 EFI_HII_PACKAGE_SIMPLE_FONTS,
2502 if (EFI_ERROR (Status)) {
2506 RemoveEntryList (&Package->SimpleFontEntry);
2507 PackageList->PackageListHdr.PackageLength -= Package->SimpleFontPkgHdr->Header.Length;
2508 FreePool (Package->SimpleFontPkgHdr);
2533 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
2534 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
2538 UINT32 PackageLength;
2539 EFI_HII_PACKAGE_HEADER
Header;
2541 if ((DevicePath == NULL) || (PackageList == NULL)) {
2542 return EFI_INVALID_PARAMETER;
2548 if (PackageList->DevicePathPkg != NULL) {
2549 return EFI_INVALID_PARAMETER;
2552 PackageLength = (UINT32)GetDevicePathSize (DevicePath) +
sizeof (EFI_HII_PACKAGE_HEADER);
2553 PackageList->DevicePathPkg = (UINT8 *)AllocateZeroPool (PackageLength);
2554 if (PackageList->DevicePathPkg == NULL) {
2555 return EFI_OUT_OF_RESOURCES;
2558 Header.Length = PackageLength;
2559 Header.Type = EFI_HII_PACKAGE_DEVICE_PATH;
2560 CopyMem (PackageList->DevicePathPkg, &
Header, sizeof (EFI_HII_PACKAGE_HEADER));
2562 PackageList->DevicePathPkg + sizeof (EFI_HII_PACKAGE_HEADER),
2564 PackageLength -
sizeof (EFI_HII_PACKAGE_HEADER)
2571 PackageList->PackageListHdr.PackageLength += PackageLength;
2595 IN EFI_HII_HANDLE
Handle,
2598 IN UINTN BufferSize,
2600 IN OUT UINTN *ResultSize
2605 EFI_HII_PACKAGE_HEADER
Header;
2607 if ((Private == NULL) || (PackageList == NULL) || (ResultSize == NULL)) {
2608 return EFI_INVALID_PARAMETER;
2611 if ((BufferSize > 0) && (
Buffer == NULL)) {
2612 return EFI_INVALID_PARAMETER;
2615 Package = PackageList->DevicePathPkg;
2617 if (Package == NULL) {
2621 CopyMem (&
Header, Package,
sizeof (EFI_HII_PACKAGE_HEADER));
2623 if (
Header.Length + *ResultSize + UsedSize <= BufferSize) {
2629 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
2631 EFI_HII_PACKAGE_DEVICE_PATH,
2634 ASSERT_EFI_ERROR (Status);
2642 *ResultSize +=
Header.Length;
2662 IN EFI_HII_HANDLE
Handle,
2668 EFI_HII_PACKAGE_HEADER
Header;
2670 Package = PackageList->DevicePathPkg;
2675 if (Package == NULL) {
2681 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
2683 EFI_HII_PACKAGE_DEVICE_PATH,
2686 if (EFI_ERROR (Status)) {
2690 CopyMem (&
Header, Package,
sizeof (EFI_HII_PACKAGE_HEADER));
2691 PackageList->PackageListHdr.PackageLength -=
Header.Length;
2695 PackageList->DevicePathPkg = NULL;
2721 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
2722 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
2728 if (DevicePath == NULL) {
2732 ASSERT (Private != NULL);
2733 ASSERT (DatabaseRecord != NULL);
2741 DatabaseRecord->PackageList
2743 if (EFI_ERROR (Status)) {
2750 (VOID *)DatabaseRecord->PackageList->DevicePathPkg,
2751 EFI_HII_PACKAGE_DEVICE_PATH,
2752 DatabaseRecord->Handle
2775 IN VOID *PackageHdr,
2776 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
2782 EFI_HII_PACKAGE_HEADER PackageHeader;
2785 if ((PackageHdr == NULL) || (PackageList == NULL)) {
2786 return EFI_INVALID_PARAMETER;
2789 CopyMem (&PackageHeader, PackageHdr,
sizeof (EFI_HII_PACKAGE_HEADER));
2795 if (KeyboardLayoutPackage == NULL) {
2796 Status = EFI_OUT_OF_RESOURCES;
2802 KeyboardLayoutPackage->
KeyboardPkg = (UINT8 *)AllocateZeroPool (PackageHeader.Length);
2804 Status = EFI_OUT_OF_RESOURCES;
2809 InsertTailList (&PackageList->KeyboardLayoutHdr, &KeyboardLayoutPackage->
KeyboardEntry);
2811 *Package = KeyboardLayoutPackage;
2813 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
2814 PackageList->PackageListHdr.PackageLength += PackageHeader.Length;
2821 if (KeyboardLayoutPackage != NULL) {
2826 FreePool (KeyboardLayoutPackage);
2853 IN EFI_HII_HANDLE
Handle,
2856 IN UINTN BufferSize,
2858 IN OUT UINTN *ResultSize
2862 UINTN PackageLength;
2865 EFI_HII_PACKAGE_HEADER PackageHeader;
2867 if ((Private == NULL) || (PackageList == NULL) || (ResultSize == NULL)) {
2868 return EFI_INVALID_PARAMETER;
2871 if ((BufferSize > 0) && (
Buffer == NULL)) {
2872 return EFI_INVALID_PARAMETER;
2876 Status = EFI_SUCCESS;
2878 for (Link = PackageList->KeyboardLayoutHdr.ForwardLink; Link != &PackageList->KeyboardLayoutHdr; Link = Link->ForwardLink) {
2881 PackageLength += PackageHeader.Length;
2882 if (PackageLength + *ResultSize + UsedSize <= BufferSize) {
2888 EFI_HII_DATABASE_NOTIFY_EXPORT_PACK,
2889 (EFI_HII_PACKAGE_HEADER *)Package,
2890 EFI_HII_PACKAGE_KEYBOARD_LAYOUT,
2893 ASSERT_EFI_ERROR (Status);
2898 CopyMem (
Buffer, Package->KeyboardPkg, PackageHeader.Length);
2903 *ResultSize += PackageLength;
2925 IN EFI_HII_HANDLE
Handle,
2929 LIST_ENTRY *ListHead;
2931 EFI_HII_PACKAGE_HEADER PackageHeader;
2934 ListHead = &PackageList->KeyboardLayoutHdr;
2936 while (!IsListEmpty (ListHead)) {
2938 ListHead->ForwardLink,
2945 EFI_HII_DATABASE_NOTIFY_REMOVE_PACK,
2947 EFI_HII_PACKAGE_KEYBOARD_LAYOUT,
2950 if (EFI_ERROR (Status)) {
2954 RemoveEntryList (&Package->KeyboardEntry);
2955 CopyMem (&PackageHeader, Package->KeyboardPkg, sizeof (EFI_HII_PACKAGE_HEADER));
2956 PackageList->PackageListHdr.PackageLength -= PackageHeader.Length;
2957 FreePool (Package->KeyboardPkg);
2987 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
2988 IN CONST EFI_HII_PACKAGE_LIST_HEADER *PackageList,
3000 EFI_HII_PACKAGE_HEADER *PackageHdrPtr;
3001 EFI_HII_PACKAGE_HEADER PackageHeader;
3002 UINT32 OldPackageListLen;
3003 BOOLEAN StringPkgIsAdd;
3008 StringPkgIsAdd = FALSE;
3010 StringPackage = NULL;
3013 ImagePackage = NULL;
3014 SimpleFontPackage = NULL;
3015 KeyboardLayoutPackage = NULL;
3020 OldPackageListLen = DatabaseRecord->PackageList->PackageListHdr.PackageLength;
3022 &DatabaseRecord->PackageList->PackageListHdr,
3023 (VOID *)PackageList,
3024 sizeof (EFI_HII_PACKAGE_LIST_HEADER)
3026 if (NotifyType == EFI_HII_DATABASE_NOTIFY_ADD_PACK) {
3027 DatabaseRecord->PackageList->PackageListHdr.PackageLength = OldPackageListLen;
3030 PackageHdrPtr = (EFI_HII_PACKAGE_HEADER *)((UINT8 *)PackageList +
sizeof (EFI_HII_PACKAGE_LIST_HEADER));
3031 CopyMem (&PackageHeader, PackageHdrPtr,
sizeof (EFI_HII_PACKAGE_HEADER));
3033 Status = EFI_SUCCESS;
3035 while (PackageHeader.Type != EFI_HII_PACKAGE_END) {
3036 switch (PackageHeader.Type) {
3037 case EFI_HII_PACKAGE_TYPE_GUID:
3041 DatabaseRecord->PackageList,
3044 if (EFI_ERROR (Status)) {
3051 (VOID *)GuidPackage,
3052 (UINT8)(PackageHeader.Type),
3053 DatabaseRecord->Handle
3056 case EFI_HII_PACKAGE_FORMS:
3060 DatabaseRecord->PackageList,
3063 if (EFI_ERROR (Status)) {
3070 (VOID *)FormPackage,
3071 (UINT8)(PackageHeader.Type),
3072 DatabaseRecord->Handle
3086 case EFI_HII_PACKAGE_KEYBOARD_LAYOUT:
3090 DatabaseRecord->PackageList,
3091 &KeyboardLayoutPackage
3093 if (EFI_ERROR (Status)) {
3100 (VOID *)KeyboardLayoutPackage,
3101 (UINT8)(PackageHeader.Type),
3102 DatabaseRecord->Handle
3105 case EFI_HII_PACKAGE_STRINGS:
3110 DatabaseRecord->PackageList,
3113 if (EFI_ERROR (Status)) {
3117 ASSERT (StringPackage != NULL);
3121 (VOID *)StringPackage,
3122 (UINT8)(PackageHeader.Type),
3123 DatabaseRecord->Handle
3125 StringPkgIsAdd = TRUE;
3127 case EFI_HII_PACKAGE_FONTS:
3132 DatabaseRecord->PackageList,
3135 if (EFI_ERROR (Status)) {
3142 (VOID *)FontPackage,
3143 (UINT8)(PackageHeader.Type),
3144 DatabaseRecord->Handle
3147 case EFI_HII_PACKAGE_IMAGES:
3151 DatabaseRecord->PackageList,
3154 if (EFI_ERROR (Status)) {
3161 (VOID *)ImagePackage,
3162 (UINT8)(PackageHeader.Type),
3163 DatabaseRecord->Handle
3166 case EFI_HII_PACKAGE_SIMPLE_FONTS:
3170 DatabaseRecord->PackageList,
3173 if (EFI_ERROR (Status)) {
3180 (VOID *)SimpleFontPackage,
3181 (UINT8)(PackageHeader.Type),
3182 DatabaseRecord->Handle
3185 case EFI_HII_PACKAGE_DEVICE_PATH:
3189 (EFI_DEVICE_PATH_PROTOCOL *)((UINT8 *)PackageHdrPtr +
sizeof (EFI_HII_PACKAGE_HEADER)),
3197 if (EFI_ERROR (Status)) {
3204 PackageHdrPtr = (EFI_HII_PACKAGE_HEADER *)((UINT8 *)PackageHdrPtr + PackageHeader.Length);
3205 CopyMem (&PackageHeader, PackageHdrPtr,
sizeof (EFI_HII_PACKAGE_HEADER));
3211 if (!EFI_ERROR (Status) && StringPkgIsAdd) {
3240 IN EFI_HII_HANDLE
Handle,
3242 IN OUT UINTN *UsedSize,
3243 IN UINTN BufferSize,
3244 OUT EFI_HII_PACKAGE_LIST_HEADER *
Buffer
3249 EFI_HII_PACKAGE_HEADER EndofPackageList;
3251 ASSERT (Private != NULL && PackageList != NULL && UsedSize != NULL);
3255 if ((BufferSize > 0) && (
Buffer == NULL)) {
3256 return EFI_INVALID_PARAMETER;
3263 ResultSize =
sizeof (EFI_HII_PACKAGE_LIST_HEADER);
3264 if (ResultSize + *UsedSize <= BufferSize) {
3277 (VOID *)((UINT8 *)
Buffer + ResultSize),
3280 if (EFI_ERROR (Status)) {
3290 (VOID *)((UINT8 *)
Buffer + ResultSize),
3293 if (EFI_ERROR (Status)) {
3303 (VOID *)((UINT8 *)
Buffer + ResultSize),
3306 if (EFI_ERROR (Status)) {
3316 (VOID *)((UINT8 *)
Buffer + ResultSize),
3319 if (EFI_ERROR (Status)) {
3329 (VOID *)((UINT8 *)
Buffer + ResultSize),
3332 if (EFI_ERROR (Status)) {
3342 (VOID *)((UINT8 *)
Buffer + ResultSize),
3345 if (EFI_ERROR (Status)) {
3355 (VOID *)((UINT8 *)
Buffer + ResultSize),
3358 if (EFI_ERROR (Status)) {
3368 (VOID *)((UINT8 *)
Buffer + ResultSize),
3371 if (EFI_ERROR (Status)) {
3378 EndofPackageList.Length =
sizeof (EFI_HII_PACKAGE_HEADER);
3379 EndofPackageList.Type = EFI_HII_PACKAGE_END;
3380 if (ResultSize + *UsedSize +
sizeof (EFI_HII_PACKAGE_HEADER) <= BufferSize) {
3382 (VOID *)((UINT8 *)
Buffer + ResultSize),
3383 (VOID *)&EndofPackageList,
3384 sizeof (EFI_HII_PACKAGE_HEADER)
3388 *UsedSize += ResultSize +
sizeof (EFI_HII_PACKAGE_HEADER);
3404 IN CONST EFI_HII_DATABASE_PROTOCOL *This
3409 EFI_STRING ConfigAltResp;
3412 ConfigAltResp = NULL;
3422 if (!EFI_ERROR (Status)) {
3423 ConfigSize = StrSize (ConfigAltResp);
3432 DEBUG ((DEBUG_WARN,
"[HiiDatabase]: Memory allocation is required after ReadyToBoot, which may change memory map and cause S4 resume issue.\n"));
3437 FreePool (ConfigAltResp);
3438 DEBUG ((DEBUG_ERROR,
"[HiiDatabase]: No enough memory resource to store the ConfigResp string.\n"));
3442 gBS->InstallConfigurationTable (&gEfiHiiConfigRoutingProtocolGuid, NULL);
3443 return EFI_OUT_OF_RESOURCES;
3451 FreePool (ConfigAltResp);
3468 IN CONST EFI_HII_DATABASE_PROTOCOL *This
3472 EFI_HII_PACKAGE_LIST_HEADER *DatabaseInfo;
3473 UINTN DatabaseInfoSize;
3475 DatabaseInfo = NULL;
3476 DatabaseInfoSize = 0;
3483 ASSERT (Status == EFI_BUFFER_TOO_SMALL);
3493 DEBUG ((DEBUG_WARN,
"[HiiDatabase]: Memory allocation is required after ReadyToBoot, which may change memory map and cause S4 resume issue.\n"));
3498 DEBUG ((DEBUG_ERROR,
"[HiiDatabase]: No enough memory resource to store the HiiDatabase info.\n"));
3502 gBS->InstallConfigurationTable (&gEfiHiiDatabaseProtocolGuid, NULL);
3503 return EFI_OUT_OF_RESOURCES;
3510 ASSERT_EFI_ERROR (Status);
3541 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
3542 IN CONST EFI_HII_PACKAGE_LIST_HEADER *PackageList,
3543 IN CONST EFI_HANDLE DriverHandle, OPTIONAL
3544 OUT EFI_HII_HANDLE *
Handle
3550 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
3552 EFI_GUID PackageListGuid;
3554 if ((This == NULL) || (PackageList == NULL) || (
Handle == NULL)) {
3555 return EFI_INVALID_PARAMETER;
3559 CopyMem (&PackageListGuid, (VOID *)PackageList,
sizeof (EFI_GUID));
3572 return EFI_INVALID_PARAMETER;
3582 if (EFI_ERROR (Status)) {
3591 Status =
AddPackages (Private, EFI_HII_DATABASE_NOTIFY_NEW_PACK, PackageList, DatabaseRecord);
3592 if (EFI_ERROR (Status)) {
3602 Status =
gBS->HandleProtocol (
3605 (VOID **)&DevicePath
3607 if (!EFI_ERROR (Status)) {
3608 Status =
AddDevicePathPackage (Private, EFI_HII_DATABASE_NOTIFY_NEW_PACK, DevicePath, DatabaseRecord);
3609 ASSERT_EFI_ERROR (Status);
3662 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
3674 return EFI_INVALID_PARAMETER;
3678 return EFI_NOT_FOUND;
3692 ASSERT (PackageList != NULL);
3699 if (EFI_ERROR (Status)) {
3705 if (EFI_ERROR (Status)) {
3711 if (EFI_ERROR (Status)) {
3717 if (EFI_ERROR (Status)) {
3723 if (EFI_ERROR (Status)) {
3729 if (EFI_ERROR (Status)) {
3735 if (EFI_ERROR (Status)) {
3741 if (EFI_ERROR (Status)) {
3752 RemoveEntryList (&HiiHandle->
Handle);
3757 FreePool (HiiHandle);
3793 return EFI_NOT_FOUND;
3817 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
3818 IN EFI_HII_HANDLE
Handle,
3819 IN CONST EFI_HII_PACKAGE_LIST_HEADER *PackageList
3826 EFI_HII_PACKAGE_HEADER *PackageHdrPtr;
3828 EFI_HII_PACKAGE_HEADER PackageHeader;
3830 if ((This == NULL) || (PackageList == NULL)) {
3831 return EFI_INVALID_PARAMETER;
3835 return EFI_NOT_FOUND;
3840 PackageHdrPtr = (EFI_HII_PACKAGE_HEADER *)((UINT8 *)PackageList +
sizeof (EFI_HII_PACKAGE_LIST_HEADER));
3842 Status = EFI_SUCCESS;
3856 CopyMem (&PackageHeader, PackageHdrPtr,
sizeof (EFI_HII_PACKAGE_HEADER));
3857 while (PackageHeader.Type != EFI_HII_PACKAGE_END) {
3858 switch (PackageHeader.Type) {
3859 case EFI_HII_PACKAGE_TYPE_GUID:
3862 case EFI_HII_PACKAGE_FORMS:
3865 case EFI_HII_PACKAGE_KEYBOARD_LAYOUT:
3868 case EFI_HII_PACKAGE_STRINGS:
3871 case EFI_HII_PACKAGE_FONTS:
3874 case EFI_HII_PACKAGE_IMAGES:
3877 case EFI_HII_PACKAGE_SIMPLE_FONTS:
3880 case EFI_HII_PACKAGE_DEVICE_PATH:
3885 if (EFI_ERROR (Status)) {
3890 PackageHdrPtr = (EFI_HII_PACKAGE_HEADER *)((UINT8 *)PackageHdrPtr + PackageHeader.Length);
3891 CopyMem (&PackageHeader, PackageHdrPtr,
sizeof (EFI_HII_PACKAGE_HEADER));
3897 Status =
AddPackages (Private, EFI_HII_DATABASE_NOTIFY_ADD_PACK, PackageList, Node);
3931 return EFI_NOT_FOUND;
3971 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
3972 IN UINT8 PackageType,
3973 IN CONST EFI_GUID *PackageGuid,
3974 IN OUT UINTN *HandleBufferLength,
3975 OUT EFI_HII_HANDLE *
Handle
3991 if ((This == NULL) || (HandleBufferLength == NULL)) {
3992 return EFI_INVALID_PARAMETER;
3995 if ((*HandleBufferLength > 0) && (
Handle == NULL)) {
3996 return EFI_INVALID_PARAMETER;
3999 if (((PackageType == EFI_HII_PACKAGE_TYPE_GUID) && (PackageGuid == NULL)) ||
4000 ((PackageType != EFI_HII_PACKAGE_TYPE_GUID) && (PackageGuid != NULL)))
4002 return EFI_INVALID_PARAMETER;
4013 switch (PackageType) {
4014 case EFI_HII_PACKAGE_TYPE_GUID:
4015 for (Link1 = PackageList->
GuidPkgHdr.ForwardLink; Link1 != &PackageList->
GuidPkgHdr; Link1 = Link1->ForwardLink) {
4018 (EFI_GUID *)PackageGuid,
4019 (EFI_GUID *)(GuidPackage->
GuidPkg + sizeof (EFI_HII_PACKAGE_HEADER))
4028 case EFI_HII_PACKAGE_FORMS:
4029 if (!IsListEmpty (&PackageList->
FormPkgHdr)) {
4034 case EFI_HII_PACKAGE_KEYBOARD_LAYOUT:
4040 case EFI_HII_PACKAGE_STRINGS:
4046 case EFI_HII_PACKAGE_FONTS:
4047 if (!IsListEmpty (&PackageList->
FontPkgHdr)) {
4052 case EFI_HII_PACKAGE_IMAGES:
4053 if (PackageList->
ImagePkg != NULL) {
4058 case EFI_HII_PACKAGE_SIMPLE_FONTS:
4064 case EFI_HII_PACKAGE_DEVICE_PATH:
4074 case EFI_HII_PACKAGE_TYPE_ALL:
4085 ResultSize +=
sizeof (EFI_HII_HANDLE);
4086 if (ResultSize <= *HandleBufferLength) {
4087 *Result++ = Node->
Handle;
4094 if (ResultSize == 0) {
4095 return EFI_NOT_FOUND;
4098 if (*HandleBufferLength < ResultSize) {
4099 *HandleBufferLength = ResultSize;
4100 return EFI_BUFFER_TOO_SMALL;
4103 *HandleBufferLength = ResultSize;
4138 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
4139 IN EFI_HII_HANDLE
Handle,
4140 IN OUT UINTN *BufferSize,
4141 OUT EFI_HII_PACKAGE_LIST_HEADER *
Buffer
4150 if ((This == NULL) || (BufferSize == NULL)) {
4151 return EFI_INVALID_PARAMETER;
4154 if ((*BufferSize > 0) && (
Buffer == NULL)) {
4155 return EFI_INVALID_PARAMETER;
4159 return EFI_NOT_FOUND;
4177 (EFI_HII_PACKAGE_LIST_HEADER *)((UINT8 *)
Buffer + UsedSize)
4179 ASSERT_EFI_ERROR (Status);
4189 ASSERT_EFI_ERROR (Status);
4190 if (*BufferSize < UsedSize) {
4191 *BufferSize = UsedSize;
4192 return EFI_BUFFER_TOO_SMALL;
4199 if ((
Handle == NULL) && (UsedSize != 0)) {
4200 if (*BufferSize < UsedSize) {
4201 *BufferSize = UsedSize;
4202 return EFI_BUFFER_TOO_SMALL;
4208 return EFI_NOT_FOUND;
4250 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
4251 IN UINT8 PackageType,
4252 IN CONST EFI_GUID *PackageGuid,
4253 IN CONST EFI_HII_DATABASE_NOTIFY PackageNotifyFn,
4254 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType,
4255 OUT EFI_HANDLE *NotifyHandle
4262 if ((This == NULL) || (NotifyHandle == NULL)) {
4263 return EFI_INVALID_PARAMETER;
4266 if (((PackageType == EFI_HII_PACKAGE_TYPE_GUID) && (PackageGuid == NULL)) ||
4267 ((PackageType != EFI_HII_PACKAGE_TYPE_GUID) && (PackageGuid != NULL)))
4269 return EFI_INVALID_PARAMETER;
4278 if (Notify == NULL) {
4279 return EFI_OUT_OF_RESOURCES;
4285 Status =
gBS->InstallMultipleProtocolInterfaces (
4291 ASSERT_EFI_ERROR (Status);
4325 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
4326 IN EFI_HANDLE NotificationHandle
4335 return EFI_INVALID_PARAMETER;
4338 if (NotificationHandle == NULL) {
4339 return EFI_NOT_FOUND;
4342 Status =
gBS->OpenProtocol (
4348 EFI_OPEN_PROTOCOL_TEST_PROTOCOL
4350 if (EFI_ERROR (Status)) {
4351 return EFI_NOT_FOUND;
4363 Status =
gBS->UninstallMultipleProtocolInterfaces (
4369 ASSERT_EFI_ERROR (Status);
4376 return EFI_NOT_FOUND;
4406 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
4407 IN OUT UINT16 *KeyGuidBufferLength,
4408 OUT EFI_GUID *KeyGuidBuffer
4419 UINT16 LayoutLength;
4423 if ((This == NULL) || (KeyGuidBufferLength == NULL)) {
4424 return EFI_INVALID_PARAMETER;
4427 if ((*KeyGuidBufferLength > 0) && (KeyGuidBuffer == NULL)) {
4428 return EFI_INVALID_PARAMETER;
4442 Link1 = Link1->ForwardLink
4454 Layout = (UINT8 *)Package->
KeyboardPkg + sizeof (EFI_HII_PACKAGE_HEADER) +
sizeof (UINT16);
4457 (UINT8 *)Package->
KeyboardPkg + sizeof (EFI_HII_PACKAGE_HEADER),
4460 for (Index = 0; Index < LayoutCount; Index++) {
4461 ResultSize +=
sizeof (EFI_GUID);
4462 if (ResultSize <= *KeyGuidBufferLength) {
4463 CopyMem (KeyGuidBuffer + (ResultSize /
sizeof (EFI_GUID) - 1), Layout +
sizeof (UINT16),
sizeof (EFI_GUID));
4464 CopyMem (&LayoutLength, Layout,
sizeof (UINT16));
4465 Layout = Layout + LayoutLength;
4471 if (ResultSize == 0) {
4472 return EFI_NOT_FOUND;
4475 if (*KeyGuidBufferLength < ResultSize) {
4476 *KeyGuidBufferLength = ResultSize;
4477 return EFI_BUFFER_TOO_SMALL;
4480 *KeyGuidBufferLength = ResultSize;
4513 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
4514 IN CONST EFI_GUID *KeyGuid,
4515 IN OUT UINT16 *KeyboardLayoutLength,
4516 OUT EFI_HII_KEYBOARD_LAYOUT *KeyboardLayout
4527 UINT16 LayoutLength;
4530 if ((This == NULL) || (KeyboardLayoutLength == NULL)) {
4531 return EFI_INVALID_PARAMETER;
4534 if ((*KeyboardLayoutLength > 0) && (KeyboardLayout == NULL)) {
4535 return EFI_INVALID_PARAMETER;
4542 if (KeyGuid == NULL) {
4544 return EFI_NOT_FOUND;
4548 if (*KeyboardLayoutLength < LayoutLength) {
4549 *KeyboardLayoutLength = LayoutLength;
4550 return EFI_BUFFER_TOO_SMALL;
4562 Link1 = Link1->ForwardLink
4573 sizeof (EFI_HII_PACKAGE_HEADER) +
sizeof (UINT16);
4574 CopyMem (&LayoutCount, Layout -
sizeof (UINT16),
sizeof (UINT16));
4575 for (Index = 0; Index < LayoutCount; Index++) {
4576 CopyMem (&LayoutLength, Layout,
sizeof (UINT16));
4577 if (
CompareMem (Layout +
sizeof (UINT16), KeyGuid,
sizeof (EFI_GUID)) == 0) {
4578 if (LayoutLength <= *KeyboardLayoutLength) {
4579 CopyMem (KeyboardLayout, Layout, LayoutLength);
4582 *KeyboardLayoutLength = LayoutLength;
4583 return EFI_BUFFER_TOO_SMALL;
4587 Layout = Layout + LayoutLength;
4592 return EFI_NOT_FOUND;
4615 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
4616 IN CONST EFI_GUID *KeyGuid
4620 EFI_HII_KEYBOARD_LAYOUT *KeyboardLayout;
4621 UINT16 KeyboardLayoutLength;
4624 if ((This == NULL) || (KeyGuid == NULL)) {
4625 return EFI_INVALID_PARAMETER;
4641 KeyboardLayoutLength = 0;
4642 KeyboardLayout = NULL;
4644 if (Status != EFI_BUFFER_TOO_SMALL) {
4648 KeyboardLayout = (EFI_HII_KEYBOARD_LAYOUT *)AllocateZeroPool (KeyboardLayoutLength);
4649 ASSERT (KeyboardLayout != NULL);
4651 ASSERT_EFI_ERROR (Status);
4669 ASSERT_EFI_ERROR (Status);
4696 IN CONST EFI_HII_DATABASE_PROTOCOL *This,
4697 IN EFI_HII_HANDLE PackageListHandle,
4698 OUT EFI_HANDLE *DriverHandle
4705 if ((This == NULL) || (DriverHandle == NULL)) {
4706 return EFI_INVALID_PARAMETER;
4710 return EFI_INVALID_PARAMETER;
4717 if (Node->
Handle == PackageListHandle) {
4723 return EFI_NOT_FOUND;
VENDOR_DEVICE_PATH Header
EFI_STATUS EFIAPI HiiConfigRoutingExportConfig(IN CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This, OUT EFI_STRING *Results)
EFI_STATUS InsertSimpleFontPackage(IN VOID *PackageHdr, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, OUT HII_SIMPLE_FONT_PACKAGE_INSTANCE **Package)
EFI_STATUS ExportSimpleFontPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
EFI_STATUS AddPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN CONST EFI_HII_PACKAGE_LIST_HEADER *PackageList, IN OUT HII_DATABASE_RECORD *DatabaseRecord)
EFI_STATUS HiiGetConfigRespInfo(IN CONST EFI_HII_DATABASE_PROTOCOL *This)
EFI_STATUS InsertGuidPackage(IN VOID *PackageHdr, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, OUT HII_GUID_PACKAGE_INSTANCE **Package)
EFI_STATUS RemoveKeyboardLayoutPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_STATUS ExportFontPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
EFI_STATUS GenerateHiiDatabaseRecord(IN HII_DATABASE_PRIVATE_DATA *Private, OUT HII_DATABASE_RECORD **DatabaseNode)
EFI_STATUS ExportPackageList(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN OUT UINTN *UsedSize, IN UINTN BufferSize, OUT EFI_HII_PACKAGE_LIST_HEADER *Buffer)
EFI_STRING gRTConfigRespBuffer
EFI_STATUS InsertFormPackage(IN VOID *PackageHdr, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, OUT HII_IFR_PACKAGE_INSTANCE **Package)
EFI_STATUS InsertKeyboardLayoutPackage(IN VOID *PackageHdr, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, OUT HII_KEYBOARD_LAYOUT_PACKAGE_INSTANCE **Package)
EFI_STATUS EFIAPI HiiRegisterPackageNotify(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN UINT8 PackageType, IN CONST EFI_GUID *PackageGuid, IN CONST EFI_HII_DATABASE_NOTIFY PackageNotifyFn, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, OUT EFI_HANDLE *NotifyHandle)
EFI_STATUS AdjustStringPackage(IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_STATUS EFIAPI HiiGetPackageListHandle(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN EFI_HII_HANDLE PackageListHandle, OUT EFI_HANDLE *DriverHandle)
EFI_STATUS ExportFormPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
EFI_STATUS InsertImagePackage(IN VOID *PackageHdr, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, OUT HII_IMAGE_PACKAGE_INSTANCE **Package)
EFI_STATUS HiiGetDatabaseInfo(IN CONST EFI_HII_DATABASE_PROTOCOL *This)
EFI_STATUS RemoveFormPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_STATUS AddDevicePathPackage(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN OUT HII_DATABASE_RECORD *DatabaseRecord)
VARIABLE_HEADER * FindVariableData(IN VARIABLE_STORE_HEADER *VariableStorage, IN EFI_GUID *VarGuid, IN UINT32 VarAttribute, IN CHAR16 *VarName)
EFI_STATUS ExportImagePackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
EFI_STATUS ExportDevicePathPackage(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
BOOLEAN IsHiiHandleValid(EFI_HII_HANDLE Handle)
EFI_STATUS RemoveFontPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_STATUS EFIAPI HiiGetKeyboardLayout(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN CONST EFI_GUID *KeyGuid, IN OUT UINT16 *KeyboardLayoutLength, OUT EFI_HII_KEYBOARD_LAYOUT *KeyboardLayout)
EFI_STATUS EFIAPI HiiFindKeyboardLayouts(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN OUT UINT16 *KeyGuidBufferLength, OUT EFI_GUID *KeyGuidBuffer)
EFI_STATUS EFIAPI HiiExportPackageLists(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN EFI_HII_HANDLE Handle, IN OUT UINTN *BufferSize, OUT EFI_HII_PACKAGE_LIST_HEADER *Buffer)
EFI_STATUS EFIAPI HiiSetKeyboardLayout(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN CONST EFI_GUID *KeyGuid)
EFI_STATUS EFIAPI HiiUpdatePackageList(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN EFI_HII_HANDLE Handle, IN CONST EFI_HII_PACKAGE_LIST_HEADER *PackageList)
EFI_STATUS RemoveStringPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_STATUS EFIAPI HiiNewPackageList(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN CONST EFI_HII_PACKAGE_LIST_HEADER *PackageList, IN CONST EFI_HANDLE DriverHandle, OPTIONAL OUT EFI_HII_HANDLE *Handle)
EFI_STATUS InsertDevicePathPackage(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_STATUS RemoveImagePackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
LIST_ENTRY gVarStorageList
EFI_STATUS InvokeRegisteredFunction(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN VOID *PackageInstance, IN UINT8 PackageType, IN EFI_HII_HANDLE Handle)
EFI_STATUS EFIAPI HiiListPackageLists(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN UINT8 PackageType, IN CONST EFI_GUID *PackageGuid, IN OUT UINTN *HandleBufferLength, OUT EFI_HII_HANDLE *Handle)
EFI_STATUS InsertFontPackage(IN HII_DATABASE_PRIVATE_DATA *Private, IN VOID *PackageHdr, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, OUT HII_FONT_PACKAGE_INSTANCE **Package)
EFI_STATUS ExportKeyboardLayoutPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
EFI_STATUS FindQuestionDefaultSetting(IN UINT16 DefaultId, IN EFI_IFR_VARSTORE_EFI *EfiVarStore, IN EFI_IFR_QUESTION_HEADER *IfrQuestionHdr, OUT VOID *ValueBuffer, IN UINTN Width, IN BOOLEAN BitFieldQuestion)
UINTN gNvDefaultStoreSize
EFI_STATUS ExportGuidPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
EFI_STATUS RemoveSimpleFontPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
BOOLEAN gExportConfigResp
EFI_STATUS RemoveDevicePathPackage(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_HII_PACKAGE_LIST_HEADER * gRTDatabaseInfoBuffer
EFI_STATUS ExportStringPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, IN UINTN UsedSize, IN UINTN BufferSize, IN OUT VOID *Buffer, IN OUT UINTN *ResultSize)
UINTN IsEfiVarStoreQuestion(EFI_IFR_QUESTION_HEADER *IfrQuestionHdr, EFI_IFR_VARSTORE_EFI **EfiVarStoreList, UINTN EfiVarStoreNumber)
EFI_STATUS RemoveGuidPackages(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_HII_HANDLE Handle, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList)
EFI_STATUS InsertStringPackage(IN HII_DATABASE_PRIVATE_DATA *Private, IN VOID *PackageHdr, IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType, IN OUT HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList, OUT HII_STRING_PACKAGE_INSTANCE **Package)
EFI_STATUS EFIAPI HiiRemovePackageList(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN EFI_HII_HANDLE Handle)
EFI_LOCK mHiiDatabaseLock
VOID UpdateDefaultSettingInFormPackage(HII_IFR_PACKAGE_INSTANCE *FormPackage)
EFI_STATUS EFIAPI HiiUnregisterPackageNotify(IN CONST EFI_HII_DATABASE_PROTOCOL *This, IN EFI_HANDLE NotificationHandle)
void Error(char *FileName, uint32_t LineNumber, uint32_t ErrorCode, char *OffendingText, char *MsgFmt,...)
BOOLEAN IsFontInfoExisted(IN HII_DATABASE_PRIVATE_DATA *Private, IN EFI_FONT_INFO *FontInfo, IN EFI_FONT_INFO_MASK *FontInfoMask, OPTIONAL IN EFI_FONT_HANDLE FontHandle, OPTIONAL OUT HII_GLOBAL_FONT_INFO **GlobalFontInfo OPTIONAL)
EFI_STATUS FindGlyphBlock(IN HII_FONT_PACKAGE_INSTANCE *FontPackage, IN CHAR16 CharValue, OUT UINT8 **GlyphBuffer, OPTIONAL OUT EFI_HII_GLYPH_INFO *Cell, OPTIONAL OUT UINTN *GlyphBufferLen OPTIONAL)
#define HII_GUID_PACKAGE_SIGNATURE
BOOLEAN gExportAfterReadyToBoot
#define HII_DATABASE_RECORD_SIGNATURE
#define HII_GLOBAL_FONT_INFO_SIGNATURE
#define HII_FONT_PACKAGE_SIGNATURE
#define HII_HANDLE_SIGNATURE
EFI_STATUS FindStringBlock(IN HII_DATABASE_PRIVATE_DATA *Private, IN HII_STRING_PACKAGE_INSTANCE *StringPackage, IN EFI_STRING_ID StringId, OUT UINT8 *BlockType, OPTIONAL OUT UINT8 **StringBlockAddr, OPTIONAL OUT UINTN *StringTextOffset, OPTIONAL OUT EFI_STRING_ID *LastStringId, OPTIONAL OUT EFI_STRING_ID *StartStringId OPTIONAL)
#define HII_GLYPH_INFO_SIGNATURE
#define HII_S_FONT_PACKAGE_SIGNATURE
#define HII_DATABASE_NOTIFY_SIGNATURE
#define HII_IFR_PACKAGE_SIGNATURE
#define HII_DATABASE_PRIVATE_DATA_SIGNATURE
EFI_EVENT gHiiKeyboardLayoutChanged
BOOLEAN HiiCompareLanguage(IN CHAR8 *Language1, IN CHAR8 *Language2)
#define HII_STRING_PACKAGE_SIGNATURE
#define HII_KB_LAYOUT_PACKAGE_SIGNATURE
#define HII_DATABASE_DATABASE_PRIVATE_DATA_FROM_THIS(a)
#define HII_FONT_INFO_SIGNATURE
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
APPLE_EVENT_HANDLE Handle
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_GUID gEfiDevicePathProtocolGuid
EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
LIST_ENTRY DatabaseNotifyEntry
EFI_HII_DATABASE_NOTIFY PackageNotifyFn
HII_IMAGE_PACKAGE_INSTANCE * ImagePkg
EFI_HII_PACKAGE_LIST_HEADER PackageListHdr
LIST_ENTRY KeyboardLayoutHdr
LIST_ENTRY SimpleFontPkgHdr
EFI_HII_KEYBOARD_LAYOUT * CurrentLayout
LIST_ENTRY DatabaseNotifyList
EFI_HII_CONFIG_ROUTING_PROTOCOL ConfigRouting
EFI_GUID CurrentLayoutGuid
HII_DATABASE_PACKAGE_LIST_INSTANCE * PackageList
EFI_HII_FONT_PACKAGE_HDR * FontPkgHdr
HII_FONT_PACKAGE_INSTANCE * FontPackage
EFI_HII_PACKAGE_HEADER FormPkgHdr
EFI_HII_IMAGE_PACKAGE_HDR ImagePkgHdr
EFI_HII_IMAGE_BLOCK * ImageBlock
EFI_HII_SIMPLE_FONT_PACKAGE_HDR * SimpleFontPkgHdr
LIST_ENTRY SimpleFontEntry
EFI_STRING_ID MaxStringId
EFI_HII_STRING_PACKAGE_HDR * StringPkgHdr
VARIABLE_STORE_HEADER * VariableStorage