]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/HiiDatabase.h
9ed45daea21bc7430edc96ce77fb6c85ef13ecb7
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / HiiDatabase.h
1 /**@file
2
3 This file contains global defines and prototype definitions
4 for the Framework HII to Uefi HII Thunk Module.
5
6 Copyright (c) 2006 - 2008, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #ifndef _HIIDATABASE_H
18 #define _HIIDATABASE_H
19
20
21 #include <FrameworkDxe.h>
22
23 #include <Guid/GlobalVariable.h>
24 #include <Protocol/FrameworkFormCallback.h>
25 #include <Protocol/FrameworkHii.h>
26 #include <Protocol/FrameworkFormBrowser.h>
27
28 //
29 // UEFI HII Protocols
30 //
31 #include <Protocol/HiiFont.h>
32 #include <Protocol/HiiImage.h>
33 #include <Protocol/HiiString.h>
34 #include <Protocol/HiiDatabase.h>
35 #include <Protocol/HiiConfigRouting.h>
36 #include <Protocol/HiiConfigAccess.h>
37
38
39 #include <Library/BaseLib.h>
40 #include <Library/DebugLib.h>
41 #include <Library/UefiDriverEntryPoint.h>
42 #include <Library/MemoryAllocationLib.h>
43 #include <Library/BaseMemoryLib.h>
44 #include <Library/UefiBootServicesTableLib.h>
45 #include <Library/UefiRuntimeServicesTableLib.h>
46 #include <Library/HiiLib.h>
47 #include <Library/ExtendedHiiLib.h>
48
49 #include <Library/IfrSupportLib.h>
50 #include <Library/ExtendedIfrSupportLib.h>
51
52 #include <MdeModuleHii.h>
53
54 #include "UefiIfrParser.h"
55
56
57 //
58 // VARSTORE ID of 0 for Buffer Storage Type Storage is defined as invalid in UEFI 2.1 HII. VARSTORE ID
59 // 0 is the default VarStore ID for storage without explicit declaration in Framework HII 0.92. EDK II UEFI VFR compiler
60 // in compatible mode will assign 0x0001 as UEFI VARSTORE ID to this default storage id in Framework VFR without
61 // VARSTORE declaration.
62 //
63 // In addition, the Name of Default VarStore is assumed to be L"Setup" for those storage without explicit VARSTORE declaration in the formset
64 // by Framework HII. EDK II UEFI VFR compiler in compatible mode hard-coded L"Setup" as VARSTORE name.
65 //
66 #define FRAMEWORK_RESERVED_VARSTORE_ID 0x0001
67 #define FRAMEWORK_RESERVED_VARSTORE_NAME L"Setup"
68
69
70 #pragma pack (1)
71 typedef struct {
72 EFI_HII_PACK_HEADER FrameworkPackageHeader;
73 EFI_HII_PACKAGE_HEADER PackageHeader;
74 } TIANO_AUTOGEN_PACKAGES_HEADER;
75 #pragma pack ()
76
77 #define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)
78 #define HII_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'i', 'I', 'T')
79 typedef struct {
80 UINTN Signature;
81 EFI_HANDLE Handle;
82 EFI_HII_PROTOCOL Hii;
83
84 //
85 // The head of link list for all HII_THUNK_CONTEXT.
86 //
87 LIST_ENTRY ThunkContextListHead;
88
89 EFI_HANDLE RemovePackNotifyHandle;
90 EFI_HANDLE AddPackNotifyHandle;
91 } HII_THUNK_PRIVATE_DATA;
92
93
94
95
96
97 #define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)
98 #define QUESTION_ID_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'E')
99 typedef struct {
100 UINT32 Signature;
101 LIST_ENTRY Link;
102 UINT16 FwQId;
103 EFI_QUESTION_ID UefiQid;
104 } QUESTION_ID_MAP_ENTRY;
105
106
107
108 #define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)
109 #define QUESTION_ID_MAP_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'P')
110 typedef struct {
111 UINT32 Signature;
112 LIST_ENTRY Link;
113 UINT16 VarStoreId;
114 UINTN VarSize;
115 LIST_ENTRY MapEntryListHead;
116 } QUESTION_ID_MAP;
117
118
119
120 #define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)
121 #define HII_THUNK_CONTEXT_SIGNATURE SIGNATURE_32 ('H', 'T', 'H', 'M')
122 typedef struct {
123 LIST_ENTRY Link;
124 UINT32 Signature;
125 FRAMEWORK_EFI_HII_HANDLE FwHiiHandle;
126 EFI_HII_HANDLE UefiHiiHandle;
127 EFI_HANDLE UefiHiiDriverHandle;
128
129 UINTN IfrPackageCount;
130 UINTN StringPackageCount;
131
132 BOOLEAN ByFrameworkHiiNewPack;
133
134 //
135 // HII Thunk will use TagGuid to associate the String Package and Form Package togehter.
136 // See description for TagGuid. This field is to record if either one of the following condition
137 // is TRUE:
138 // 1) if ((SharingStringPack == TRUE) && (StringPackageCount != 0 && IfrPackageCount == 0)), then this Package List only
139 /// has String Packages and provides Strings to other IFR package.
140 // 2) if ((SharingStringPack == TRUE) && (StringPackageCount == 0 && IfrPackageCount != 1)), then this Form Package
141 // copied String Packages from other Package List.
142 // 3) if ((SharingStringPack == FALSE)), this Package does not provide String Package or copy String Packages from other
143 // Package List.
144 //
145 //
146 // When a Hii->NewString() is called for this FwHiiHandle and SharingStringPack is TRUE, then all Package List that sharing
147 // the same TagGuid will update or create String in there respective String Packages. If SharingStringPack is FALSE, then
148 // only the String from String Packages in this Package List will be updated or created.
149 //
150 BOOLEAN SharingStringPack;
151
152 //
153 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption
154 // in both HII Database implementation and all modules that registering packages:
155 // If a Package List has only IFR package and no String Package, the IFR package will reference
156 // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.
157 // TagGuid is the used to record this GuidId.
158 EFI_GUID TagGuid;
159
160 UINT8 *NvMapOverride;
161
162 FORM_BROWSER_FORMSET *FormSet;
163
164 } HII_THUNK_CONTEXT;
165
166
167
168 #define BUFFER_STORAGE_ENTRY_SIGNATURE SIGNATURE_32 ('H', 'T', 's', 'k')
169 #define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)
170 typedef struct {
171 LIST_ENTRY Link;
172 UINT32 Signature;
173 EFI_GUID Guid;
174 CHAR16 *Name;
175 UINTN Size;
176 UINT16 VarStoreId;
177 } BUFFER_STORAGE_ENTRY;
178
179
180
181 #define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')
182 #define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)
183 typedef struct {
184 UINT32 Signature;
185 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;
186 //
187 // Framework's callback
188 //
189 EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;
190
191 HII_THUNK_CONTEXT *ThunkContext;
192 } CONFIG_ACCESS_PRIVATE;
193
194
195
196 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')
197 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)
198 typedef struct {
199 UINTN Signature;
200 EFI_HANDLE Handle;
201 HII_THUNK_PRIVATE_DATA *ThunkPrivate;
202 EFI_FORM_BROWSER_PROTOCOL FormBrowser;
203 } EFI_FORMBROWSER_THUNK_PRIVATE_DATA;
204
205
206 //
207 // Extern Variables
208 //
209 extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
210 extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;
211 extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;
212 extern CONST EFI_HII_FONT_PROTOCOL *mHiiFontProtocol;
213 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;
214 extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;
215
216 extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;
217
218 extern BOOLEAN mInFrameworkUpdatePakcage;
219
220
221 EFI_STATUS
222 EFIAPI
223 HiiNewPack (
224 IN EFI_HII_PROTOCOL *This,
225 IN EFI_HII_PACKAGES *PackageList,
226 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
227 );
228
229 EFI_STATUS
230 EFIAPI
231 HiiRemovePack (
232 IN EFI_HII_PROTOCOL *This,
233 IN FRAMEWORK_EFI_HII_HANDLE Handle
234 );
235
236 EFI_STATUS
237 EFIAPI
238 HiiFindHandles (
239 IN EFI_HII_PROTOCOL *This,
240 IN OUT UINT16 *HandleBufferLength,
241 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
242 );
243
244 EFI_STATUS
245 EFIAPI
246 HiiExportDatabase (
247 IN EFI_HII_PROTOCOL *This,
248 IN FRAMEWORK_EFI_HII_HANDLE Handle,
249 IN OUT UINTN *BufferSize,
250 OUT VOID *Buffer
251 );
252
253 EFI_STATUS
254 EFIAPI
255 HiiGetGlyph (
256 IN EFI_HII_PROTOCOL *This,
257 IN CHAR16 *Source,
258 IN OUT UINT16 *Index,
259 OUT UINT8 **GlyphBuffer,
260 OUT UINT16 *BitWidth,
261 IN OUT UINT32 *InternalStatus
262 );
263
264 EFI_STATUS
265 EFIAPI
266 HiiGlyphToBlt (
267 IN EFI_HII_PROTOCOL *This,
268 IN UINT8 *GlyphBuffer,
269 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
270 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
271 IN UINTN Count,
272 IN UINTN Width,
273 IN UINTN Height,
274 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
275 );
276
277 EFI_STATUS
278 EFIAPI
279 HiiNewString (
280 IN EFI_HII_PROTOCOL *This,
281 IN CHAR16 *Language,
282 IN FRAMEWORK_EFI_HII_HANDLE Handle,
283 IN OUT STRING_REF *Reference,
284 IN CHAR16 *NewString
285 );
286
287 EFI_STATUS
288 EFIAPI
289 HiiGetString (
290 IN EFI_HII_PROTOCOL *This,
291 IN FRAMEWORK_EFI_HII_HANDLE Handle,
292 IN STRING_REF Token,
293 IN BOOLEAN Raw,
294 IN CHAR16 *LanguageString,
295 IN OUT UINTN *BufferLength,
296 OUT EFI_STRING StringBuffer
297 );
298
299 EFI_STATUS
300 EFIAPI
301 HiiResetStrings (
302 IN EFI_HII_PROTOCOL *This,
303 IN FRAMEWORK_EFI_HII_HANDLE Handle
304 );
305
306 EFI_STATUS
307 EFIAPI
308 HiiTestString (
309 IN EFI_HII_PROTOCOL *This,
310 IN CHAR16 *StringToTest,
311 IN OUT UINT32 *FirstMissing,
312 OUT UINT32 *GlyphBufferSize
313 );
314
315 EFI_STATUS
316 EFIAPI
317 HiiGetPrimaryLanguages (
318 IN EFI_HII_PROTOCOL *This,
319 IN FRAMEWORK_EFI_HII_HANDLE Handle,
320 OUT EFI_STRING *LanguageString
321 );
322
323 EFI_STATUS
324 EFIAPI
325 HiiGetSecondaryLanguages (
326 IN EFI_HII_PROTOCOL *This,
327 IN FRAMEWORK_EFI_HII_HANDLE Handle,
328 IN CHAR16 *PrimaryLanguage,
329 OUT EFI_STRING *LanguageString
330 );
331
332 EFI_STATUS
333 EFIAPI
334 HiiGetLine (
335 IN EFI_HII_PROTOCOL *This,
336 IN FRAMEWORK_EFI_HII_HANDLE Handle,
337 IN STRING_REF Token,
338 IN OUT UINT16 *Index,
339 IN UINT16 LineWidth,
340 IN CHAR16 *LanguageString,
341 IN OUT UINT16 *BufferLength,
342 OUT EFI_STRING StringBuffer
343 );
344
345 EFI_STATUS
346 EFIAPI
347 HiiGetForms (
348 IN EFI_HII_PROTOCOL *This,
349 IN FRAMEWORK_EFI_HII_HANDLE Handle,
350 IN EFI_FORM_ID FormId,
351 IN OUT UINTN *BufferLength,
352 OUT UINT8 *Buffer
353 );
354
355 EFI_STATUS
356 EFIAPI
357 HiiGetDefaultImage (
358 IN EFI_HII_PROTOCOL *This,
359 IN FRAMEWORK_EFI_HII_HANDLE Handle,
360 IN UINTN DefaultMask,
361 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList
362 );
363
364 EFI_STATUS
365 EFIAPI
366 HiiUpdateForm (
367 IN EFI_HII_PROTOCOL *This,
368 IN FRAMEWORK_EFI_HII_HANDLE Handle,
369 IN EFI_FORM_LABEL Label,
370 IN BOOLEAN AddData,
371 IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data
372 );
373
374 EFI_STATUS
375 EFIAPI
376 HiiGetKeyboardLayout (
377 IN EFI_HII_PROTOCOL *This,
378 OUT UINT16 *DescriptorCount,
379 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor
380 );
381
382 EFI_STATUS
383 EFIAPI
384 ThunkSendForm (
385 IN EFI_FORM_BROWSER_PROTOCOL *This,
386 IN BOOLEAN UseDatabase,
387 IN FRAMEWORK_EFI_HII_HANDLE *Handle,
388 IN UINTN HandleCount,
389 IN FRAMEWORK_EFI_IFR_PACKET *Packet, OPTIONAL
390 IN EFI_HANDLE CallbackHandle, OPTIONAL
391 IN UINT8 *NvMapOverride, OPTIONAL
392 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL
393 OUT BOOLEAN *ResetRequired OPTIONAL
394 );
395
396 EFI_STATUS
397 EFIAPI
398 ThunkCreatePopUp (
399 IN UINTN NumberOfLines,
400 IN BOOLEAN HotKey,
401 IN UINTN MaximumStringSize,
402 OUT CHAR16 *StringBuffer,
403 OUT EFI_INPUT_KEY *KeyValue,
404 IN CHAR16 *String,
405 ...
406 );
407
408 EFI_STATUS
409 EFIAPI
410 RemovePackNotify (
411 IN UINT8 PackageType,
412 IN CONST EFI_GUID *PackageGuid,
413 IN CONST EFI_HII_PACKAGE_HEADER *Package,
414 IN EFI_HII_HANDLE Handle,
415 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
416 );
417
418 EFI_STATUS
419 EFIAPI
420 NewOrAddPackNotify (
421 IN UINT8 PackageType,
422 IN CONST EFI_GUID *PackageGuid,
423 IN CONST EFI_HII_PACKAGE_HEADER *Package,
424 IN EFI_HII_HANDLE Handle,
425 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
426 );
427
428 /**
429 Create a EFI_HII_UPDATE_DATA structure used to call IfrLibUpdateForm.
430
431 @param ThunkContext The HII Thunk Context.
432 @param FwUpdateData The Framework Update Data.
433 @param UefiUpdateData The UEFI Update Data.
434
435 @retval EFI_SUCCESS The UEFI Update Data is created successfully.
436 @retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.
437 @retval EFI_OUT_OF_RESOURCES There is not enough resource.
438 **/
439 EFI_STATUS
440 FwUpdateDataToUefiUpdateData (
441 IN HII_THUNK_CONTEXT *ThunkContext,
442 IN CONST FRAMEWORK_EFI_HII_UPDATE_DATA *FwUpdateData,
443 OUT EFI_HII_UPDATE_DATA **UefiUpdateData
444 )
445 ;
446
447 #include "Utility.h"
448 #include "ConfigAccess.h"
449
450 #endif