]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/Utility.c
Add in supports for platform Setup module which is programmed using Framework HII...
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / Utility.c
1 /**@file
2
3 This file contains the keyboard processing code to the HII database.
4
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
10
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.
13
14 **/
15
16
17 #include "HiiDatabase.h"
18
19 EFI_GUID *
20 GetGuidOfFirstFormset (
21 CONST EFI_HII_FORM_PACKAGE * FormPackage
22 )
23 {
24 UINT8 *StartOfNextPackage;
25 EFI_IFR_OP_HEADER *OpCodeData;
26
27 StartOfNextPackage = (UINT8 *) FormPackage + FormPackage->Header.Length;
28 OpCodeData = (EFI_IFR_OP_HEADER *) (FormPackage + 1);
29
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));
33 }
34 OpCodeData = (EFI_IFR_OP_HEADER *) ((UINT8 *) OpCodeData + OpCodeData->Length);
35 }
36
37 ASSERT (FALSE);
38
39 return NULL;
40 }
41
42 EFI_HII_HANDLE
43 FrameworkHiiHandleToUefiHiiHandle (
44 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private,
45 IN FRAMEWORK_EFI_HII_HANDLE FrameworkHiiHandle
46 )
47 {
48 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;
49
50 ASSERT (FrameworkHiiHandle != (FRAMEWORK_EFI_HII_HANDLE) 0);
51 ASSERT (Private != NULL);
52
53 HandleMapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, FrameworkHiiHandle);
54
55 if (HandleMapEntry != NULL) {
56 return HandleMapEntry->UefiHiiHandle;
57 }
58
59 return (EFI_HII_HANDLE) NULL;
60 }
61
62
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
67 )
68 {
69 LIST_ENTRY *ListEntry;
70 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;
71
72 for (ListEntry = Private->HiiThunkHandleMappingDBListHead.ForwardLink;
73 ListEntry != &Private->HiiThunkHandleMappingDBListHead;
74 ListEntry = ListEntry->ForwardLink
75 ) {
76 HandleMapEntry = HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry);
77
78 if (FrameworkHiiHandle == HandleMapEntry->FrameworkHiiHandle) {
79 return HandleMapEntry;
80 }
81 }
82
83 return (HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *) NULL;
84 }
85
86 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *
87 UefiHiiHandleToMapDatabaseEntry (
88 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private,
89 IN EFI_HII_HANDLE UefiHiiHandle
90 )
91 {
92 LIST_ENTRY *ListEntry;
93 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;
94
95 for (ListEntry = Private->HiiThunkHandleMappingDBListHead.ForwardLink;
96 ListEntry != &Private->HiiThunkHandleMappingDBListHead;
97 ListEntry = ListEntry->ForwardLink
98 ) {
99 HandleMapEntry = HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry);
100
101 if (UefiHiiHandle == HandleMapEntry->UefiHiiHandle) {
102 return HandleMapEntry;
103 }
104 }
105
106 return (HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *) NULL;
107 }
108
109 EFI_HII_HANDLE *
110 TagGuidToUefiIfrHiiHandle (
111 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private,
112 IN CONST EFI_GUID *Guid
113 )
114 {
115 LIST_ENTRY *ListEntry;
116 HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMapEntry;
117
118 for (ListEntry = Private->HiiThunkHandleMappingDBListHead.ForwardLink;
119 ListEntry != &Private->HiiThunkHandleMappingDBListHead;
120 ListEntry = ListEntry->ForwardLink
121 ) {
122 HandleMapEntry = HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY (ListEntry);
123
124 if (CompareGuid (Guid, &HandleMapEntry->TagGuid) && HandleMapEntry->DoesPackageListImportStringPackages) {
125 return HandleMapEntry->UefiHiiHandle;
126 }
127 }
128
129 return (EFI_HII_HANDLE *) NULL;
130
131 }
132
133 BOOLEAN
134 IsFrameworkHiiDatabaseHandleDepleted (
135 IN CONST EFI_HII_THUNK_PRIVATE_DATA *Private
136 )
137 {
138 return (BOOLEAN) (Private->StaticHiiHandle == (UINTN) Private->StaticPureUefiHiiHandle);
139 }
140
141 EFI_STATUS
142
143 AssignHiiHandle (
144 IN OUT EFI_HII_THUNK_PRIVATE_DATA *Private,
145 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
146 )
147 {
148 ASSERT (Handle != NULL);
149
150 *Handle = Private->StaticHiiHandle;
151 Private->StaticHiiHandle += 1;
152
153 if (IsFrameworkHiiDatabaseHandleDepleted (Private)) {
154 return EFI_OUT_OF_RESOURCES;
155 }
156
157 return EFI_SUCCESS;
158 }
159
160 EFI_STATUS
161 AssignPureUefiHiiHandle (
162 IN OUT EFI_HII_THUNK_PRIVATE_DATA *Private,
163 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
164 )
165 {
166 ASSERT (Handle != NULL);
167
168 *Handle = Private->StaticPureUefiHiiHandle;
169 Private->StaticPureUefiHiiHandle -= 1;
170
171 if (IsFrameworkHiiDatabaseHandleDepleted (Private)) {
172 return EFI_OUT_OF_RESOURCES;
173 }
174
175 return EFI_SUCCESS;
176 }
177