3 This file contains the keyboard processing code to the HII database.
5 Copyright (c) 2006 - 2008, Intel Corporation
6 All rights reserved. This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17 #include "HiiDatabase.h"
20 GetGuidOfFirstFormset (
21 CONST EFI_HII_FORM_PACKAGE
* FormPackage
24 UINT8
*StartOfNextPackage
;
25 EFI_IFR_OP_HEADER
*OpCodeData
;
27 StartOfNextPackage
= (UINT8
*) FormPackage
+ FormPackage
->Header
.Length
;
28 OpCodeData
= (EFI_IFR_OP_HEADER
*) (FormPackage
+ 1);
30 while ((UINT8
*) OpCodeData
< StartOfNextPackage
) {
31 if (OpCodeData
->OpCode
== EFI_IFR_FORM_SET_OP
) {
32 return AllocateCopyPool (sizeof(EFI_GUID
), &(((EFI_IFR_FORM_SET
*) OpCodeData
)->Guid
));
34 OpCodeData
= (EFI_IFR_OP_HEADER
*) ((UINT8
*) OpCodeData
+ OpCodeData
->Length
);
43 FrameworkHiiHandleToUefiHiiHandle (
44 IN CONST EFI_HII_THUNK_PRIVATE_DATA
*Private
,
45 IN FRAMEWORK_EFI_HII_HANDLE FrameworkHiiHandle
48 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*HandleMapEntry
;
50 ASSERT (FrameworkHiiHandle
!= (FRAMEWORK_EFI_HII_HANDLE
) 0);
51 ASSERT (Private
!= NULL
);
53 HandleMapEntry
= FrameworkHiiHandleToMapDatabaseEntry (Private
, FrameworkHiiHandle
);
55 if (HandleMapEntry
!= NULL
) {
56 return HandleMapEntry
->UefiHiiHandle
;
59 return (EFI_HII_HANDLE
) NULL
;
63 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*
64 FrameworkHiiHandleToMapDatabaseEntry (
65 IN CONST EFI_HII_THUNK_PRIVATE_DATA
*Private
,
66 IN FRAMEWORK_EFI_HII_HANDLE FrameworkHiiHandle
69 LIST_ENTRY
*ListEntry
;
70 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*HandleMapEntry
;
72 for (ListEntry
= Private
->HiiThunkHandleMappingDBListHead
.ForwardLink
;
73 ListEntry
!= &Private
->HiiThunkHandleMappingDBListHead
;
74 ListEntry
= ListEntry
->ForwardLink
76 HandleMapEntry
= HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry
);
78 if (FrameworkHiiHandle
== HandleMapEntry
->FrameworkHiiHandle
) {
79 return HandleMapEntry
;
83 return (HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*) NULL
;
86 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*
87 UefiHiiHandleToMapDatabaseEntry (
88 IN CONST EFI_HII_THUNK_PRIVATE_DATA
*Private
,
89 IN EFI_HII_HANDLE UefiHiiHandle
92 LIST_ENTRY
*ListEntry
;
93 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*HandleMapEntry
;
95 for (ListEntry
= Private
->HiiThunkHandleMappingDBListHead
.ForwardLink
;
96 ListEntry
!= &Private
->HiiThunkHandleMappingDBListHead
;
97 ListEntry
= ListEntry
->ForwardLink
99 HandleMapEntry
= HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry
);
101 if (UefiHiiHandle
== HandleMapEntry
->UefiHiiHandle
) {
102 return HandleMapEntry
;
106 return (HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*) NULL
;
110 TagGuidToUefiIfrHiiHandle (
111 IN CONST EFI_HII_THUNK_PRIVATE_DATA
*Private
,
112 IN CONST EFI_GUID
*Guid
115 LIST_ENTRY
*ListEntry
;
116 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY
*HandleMapEntry
;
118 for (ListEntry
= Private
->HiiThunkHandleMappingDBListHead
.ForwardLink
;
119 ListEntry
!= &Private
->HiiThunkHandleMappingDBListHead
;
120 ListEntry
= ListEntry
->ForwardLink
122 HandleMapEntry
= HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry
);
124 if (CompareGuid (Guid
, &HandleMapEntry
->TagGuid
) && HandleMapEntry
->DoesPackageListImportStringPackages
) {
125 return HandleMapEntry
->UefiHiiHandle
;
129 return (EFI_HII_HANDLE
*) NULL
;
134 IsFrameworkHiiDatabaseHandleDepleted (
135 IN CONST EFI_HII_THUNK_PRIVATE_DATA
*Private
138 return (BOOLEAN
) (Private
->StaticHiiHandle
== (UINTN
) Private
->StaticPureUefiHiiHandle
);
144 IN OUT EFI_HII_THUNK_PRIVATE_DATA
*Private
,
145 OUT FRAMEWORK_EFI_HII_HANDLE
*Handle
148 ASSERT (Handle
!= NULL
);
150 *Handle
= Private
->StaticHiiHandle
;
151 Private
->StaticHiiHandle
+= 1;
153 if (IsFrameworkHiiDatabaseHandleDepleted (Private
)) {
154 return EFI_OUT_OF_RESOURCES
;
161 AssignPureUefiHiiHandle (
162 IN OUT EFI_HII_THUNK_PRIVATE_DATA
*Private
,
163 OUT FRAMEWORK_EFI_HII_HANDLE
*Handle
166 ASSERT (Handle
!= NULL
);
168 *Handle
= Private
->StaticPureUefiHiiHandle
;
169 Private
->StaticPureUefiHiiHandle
-= 1;
171 if (IsFrameworkHiiDatabaseHandleDepleted (Private
)) {
172 return EFI_OUT_OF_RESOURCES
;