]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/Utility.c
refine code.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / Utility.c
CommitLineData
4259256b 1/**@file\r
2\r
3 This file contains the keyboard processing code to the HII database.\r
4\r
5Copyright (c) 2006 - 2008, Intel Corporation\r
6All rights reserved. This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16\r
17#include "HiiDatabase.h"\r
18\r
19EFI_GUID *\r
20GetGuidOfFirstFormset (\r
21 CONST EFI_HII_FORM_PACKAGE * FormPackage\r
22) \r
23{\r
24 UINT8 *StartOfNextPackage;\r
25 EFI_IFR_OP_HEADER *OpCodeData;\r
26\r
27 StartOfNextPackage = (UINT8 *) FormPackage + FormPackage->Header.Length;\r
28 OpCodeData = (EFI_IFR_OP_HEADER *) (FormPackage + 1);\r
29\r
30 while ((UINT8 *) OpCodeData < StartOfNextPackage) {\r
31 if (OpCodeData->OpCode == EFI_IFR_FORM_SET_OP) {\r
3711f8f8 32 return AllocateCopyPool (sizeof(EFI_GUID), &(((EFI_IFR_FORM_SET *) OpCodeData)->Guid));\r
4259256b 33 }\r
34 OpCodeData = (EFI_IFR_OP_HEADER *) ((UINT8 *) OpCodeData + OpCodeData->Length);\r
35 }\r
36\r
37 ASSERT (FALSE);\r
38\r
39 return NULL;\r
40}\r
41\r
ee3428bb 42EFI_HII_HANDLE\r
43FrameworkHiiHandleToUefiHiiHandle (\r
44 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private,\r
45 IN FRAMEWORK_EFI_HII_HANDLE FrameworkHiiHandle\r
46 )\r
47{\r
ee3428bb 48 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;\r
49\r
50 ASSERT (FrameworkHiiHandle != (FRAMEWORK_EFI_HII_HANDLE) 0);\r
51 ASSERT (Private != NULL);\r
52\r
99a83b4c 53 HandleMapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, FrameworkHiiHandle);\r
ee3428bb 54\r
99a83b4c 55 if (HandleMapEntry != NULL) {\r
56 return HandleMapEntry->UefiHiiHandle;\r
ee3428bb 57 }\r
58 \r
59 return (EFI_HII_HANDLE) NULL;\r
60}\r
61\r
ebbd2793 62\r
63HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *\r
64FrameworkHiiHandleToMapDatabaseEntry (\r
65 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private,\r
66 IN FRAMEWORK_EFI_HII_HANDLE FrameworkHiiHandle\r
67 )\r
68{\r
69 LIST_ENTRY *ListEntry;\r
70 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;\r
71\r
72 for (ListEntry = Private->HiiThunkHandleMappingDBListHead.ForwardLink;\r
73 ListEntry != &Private->HiiThunkHandleMappingDBListHead;\r
74 ListEntry = ListEntry->ForwardLink\r
75 ) {\r
76 HandleMapEntry = HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry);\r
77\r
78 if (FrameworkHiiHandle == HandleMapEntry->FrameworkHiiHandle) {\r
79 return HandleMapEntry;\r
80 }\r
81 }\r
82\r
83 return (HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *) NULL;\r
84}\r
85\r
ea58467b 86HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *\r
87UefiHiiHandleToMapDatabaseEntry (\r
88 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private,\r
89 IN EFI_HII_HANDLE UefiHiiHandle\r
90 )\r
91{\r
92 LIST_ENTRY *ListEntry;\r
93 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;\r
94\r
95 for (ListEntry = Private->HiiThunkHandleMappingDBListHead.ForwardLink;\r
96 ListEntry != &Private->HiiThunkHandleMappingDBListHead;\r
97 ListEntry = ListEntry->ForwardLink\r
98 ) {\r
99 HandleMapEntry = HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry);\r
100\r
101 if (UefiHiiHandle == HandleMapEntry->UefiHiiHandle) {\r
102 return HandleMapEntry;\r
103 }\r
104 }\r
105\r
106 return (HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *) NULL;\r
107}\r
99a83b4c 108\r
109EFI_HII_HANDLE *\r
110TagGuidToUefiIfrHiiHandle (\r
111 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private,\r
112 IN CONST EFI_GUID *Guid\r
113 )\r
114{\r
115 LIST_ENTRY *ListEntry;\r
116 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;\r
117\r
118 for (ListEntry = Private->HiiThunkHandleMappingDBListHead.ForwardLink;\r
119 ListEntry != &Private->HiiThunkHandleMappingDBListHead;\r
120 ListEntry = ListEntry->ForwardLink\r
121 ) {\r
122 HandleMapEntry = HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry);\r
123\r
124 if (CompareGuid (Guid, &HandleMapEntry->TagGuid) && HandleMapEntry->DoesPackageListImportStringPackages) {\r
125 return HandleMapEntry->UefiHiiHandle;\r
126 }\r
127 }\r
128\r
129 return (EFI_HII_HANDLE *) NULL;\r
130 \r
131}\r
132\r
ea58467b 133BOOLEAN\r
134IsFrameworkHiiDatabaseHandleDepleted (\r
135 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private\r
136 )\r
137{\r
138 return (BOOLEAN) (Private->StaticHiiHandle == (UINTN) Private->StaticPureUefiHiiHandle);\r
139}\r
140\r
141EFI_STATUS\r
142\r
143AssignHiiHandle (\r
144 IN OUT EFI_HII_THUNK_PRIVATE_DATA *Private,\r
145 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
146 )\r
147{\r
148 ASSERT (Handle != NULL);\r
149\r
150 *Handle = Private->StaticHiiHandle;\r
151 Private->StaticHiiHandle += 1;\r
152\r
153 if (IsFrameworkHiiDatabaseHandleDepleted (Private)) {\r
154 return EFI_OUT_OF_RESOURCES;\r
155 }\r
156\r
157 return EFI_SUCCESS;\r
158}\r
159\r
160EFI_STATUS\r
161AssignPureUefiHiiHandle (\r
162 IN OUT EFI_HII_THUNK_PRIVATE_DATA *Private,\r
163 OUT FRAMEWORK_EFI_HII_HANDLE *Handle\r
164 )\r
165{\r
166 ASSERT (Handle != NULL);\r
99a83b4c 167\r
ea58467b 168 *Handle = Private->StaticPureUefiHiiHandle;\r
169 Private->StaticPureUefiHiiHandle -= 1;\r
99a83b4c 170\r
ea58467b 171 if (IsFrameworkHiiDatabaseHandleDepleted (Private)) {\r
172 return EFI_OUT_OF_RESOURCES;\r
173 }\r
99a83b4c 174\r
ea58467b 175 return EFI_SUCCESS;\r
176}\r
99a83b4c 177\r