]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/HiiDatabase.h
Bug fixes for FrameworkHiiToUefiHiiThunk;
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / HiiDatabase.h
1 /**@file
2
3 This file contains global defines and prototype definitions
4 for the HII database.
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 #pragma pack (push, 1)
55 typedef struct {
56 UINT32 BinaryLength;
57 EFI_HII_PACKAGE_HEADER PackageHeader;
58 } TIANO_AUTOGEN_PACKAGES_HEADER;
59 #pragma pack (pop)
60
61 #define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)
62 #define HII_THUNK_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('H', 'i', 'I', 'T')
63 typedef struct {
64 UINTN Signature;
65 EFI_HANDLE Handle;
66 EFI_HII_PROTOCOL Hii;
67 FRAMEWORK_EFI_HII_HANDLE StaticHiiHandle;
68 FRAMEWORK_EFI_HII_HANDLE StaticPureUefiHiiHandle;
69
70 //
71 // The head of link list for all HII_THUNK_CONTEXT.
72 //
73 LIST_ENTRY ThunkContextListHead;
74
75 EFI_HANDLE RemovePackNotifyHandle;
76 EFI_HANDLE AddPackNotifyHandle;
77 } HII_THUNK_PRIVATE_DATA;
78
79
80
81 #define ONE_OF_OPTION_MAP_ENTRY_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP_ENTRY, Link, ONE_OF_OPTION_MAP_ENTRY_SIGNATURE)
82 #define ONE_OF_OPTION_MAP_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('O', 'O', 'M', 'E')
83 typedef struct {
84 UINT32 Signature;
85 LIST_ENTRY Link;
86
87 UINT16 FwKey;
88 EFI_IFR_TYPE_VALUE Value;
89
90 } ONE_OF_OPTION_MAP_ENTRY;
91
92
93
94 #define ONE_OF_OPTION_MAP_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP, Link, ONE_OF_OPTION_MAP_SIGNATURE)
95 #define ONE_OF_OPTION_MAP_SIGNATURE EFI_SIGNATURE_32 ('O', 'O', 'O', 'M')
96 typedef struct {
97 UINT32 Signature;
98 LIST_ENTRY Link;
99
100 UINT8 ValueType; //EFI_IFR_TYPE_NUM_*
101
102 EFI_QUESTION_ID QuestionId;
103
104 LIST_ENTRY OneOfOptionMapEntryListHead; //ONE_OF_OPTION_MAP_ENTRY
105 } ONE_OF_OPTION_MAP;
106
107
108
109 #define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)
110 #define QUESTION_ID_MAP_ENTRY_SIGNATURE EFI_SIGNATURE_32 ('Q', 'I', 'M', 'E')
111 typedef struct {
112 UINT32 Signature;
113 LIST_ENTRY Link;
114 UINT16 FwQId;
115 EFI_QUESTION_ID UefiQid;
116 } QUESTION_ID_MAP_ENTRY;
117
118
119
120 #define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)
121 #define QUESTION_ID_MAP_SIGNATURE EFI_SIGNATURE_32 ('Q', 'I', 'M', 'P')
122 typedef struct {
123 UINT32 Signature;
124 LIST_ENTRY Link;
125 UINT16 VarStoreId;
126 UINTN VarSize;
127 LIST_ENTRY MapEntryListHead;
128 } QUESTION_ID_MAP;
129
130
131
132 #define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)
133 #define HII_THUNK_CONTEXT_SIGNATURE EFI_SIGNATURE_32 ('H', 'T', 'H', 'M')
134 typedef struct {
135 LIST_ENTRY Link;
136 UINT32 Signature;
137 FRAMEWORK_EFI_HII_HANDLE FwHiiHandle;
138 EFI_HII_HANDLE UefiHiiHandle;
139 EFI_HANDLE UefiHiiDriverHandle;
140
141 UINTN IfrPackageCount;
142 UINTN StringPackageCount;
143
144 //
145 // The field below is only valid if IsPackageListWithOnlyStringPack is TRUE.
146 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption
147 // in both HII Database implementation and all modules that registering packages:
148 // If a Package List has only IFR package and no String Package, the IFR package will reference
149 // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.
150 // TagGuid is the used to record this GuidId.
151 EFI_GUID TagGuid;
152
153 LIST_ENTRY QuestionIdMapListHead; //QUESTION_ID_MAP
154
155 LIST_ENTRY OneOfOptionMapListHead; //ONE_OF_OPTION_MAP
156
157 UINT8 *NvMapOverride;
158
159 UINT16 FormSetClass;
160 UINT16 FormSetSubClass;
161 STRING_REF FormSetTitle;
162 STRING_REF FormSetHelp;
163
164 } HII_THUNK_CONTEXT;
165
166
167
168 #define BUFFER_STORAGE_ENTRY_SIGNATURE EFI_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 EFI_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 LIST_ENTRY BufferStorageListHead;
192
193 HII_THUNK_CONTEXT *ThunkContext;
194 } CONFIG_ACCESS_PRIVATE;
195
196
197
198 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE EFI_SIGNATURE_32 ('F', 'B', 'T', 'd')
199 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)
200 typedef struct {
201 UINTN Signature;
202 EFI_HANDLE Handle;
203 HII_THUNK_PRIVATE_DATA *ThunkPrivate;
204 EFI_FORM_BROWSER_PROTOCOL FormBrowser;
205 } EFI_FORMBROWSER_THUNK_PRIVATE_DATA;
206
207
208 //
209 // Extern Variables
210 //
211 extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
212 extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;
213 extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;
214 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;
215 extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;
216
217 extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;
218
219 extern BOOLEAN mInFrameworkUpdatePakcage;
220
221
222 //
223 // Prototypes
224 //
225
226 //
227 // Public Interface Prototypes
228 //
229 EFI_STATUS
230 EFIAPI
231 InitializeHiiDatabase (
232 IN EFI_HANDLE ImageHandle,
233 IN EFI_SYSTEM_TABLE *SystemTable
234 )
235 ;
236
237 EFI_STATUS
238 EFIAPI
239 HiiNewPack (
240 IN EFI_HII_PROTOCOL *This,
241 IN EFI_HII_PACKAGES *PackageList,
242 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
243 )
244 ;
245
246 EFI_STATUS
247 EFIAPI
248 HiiRemovePack (
249 IN EFI_HII_PROTOCOL *This,
250 IN FRAMEWORK_EFI_HII_HANDLE Handle
251 )
252 ;
253
254 EFI_STATUS
255 EFIAPI
256 HiiFindHandles (
257 IN EFI_HII_PROTOCOL *This,
258 IN OUT UINT16 *HandleBufferLength,
259 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
260 )
261 ;
262
263 EFI_STATUS
264 EFIAPI
265 HiiExportDatabase (
266 IN EFI_HII_PROTOCOL *This,
267 IN FRAMEWORK_EFI_HII_HANDLE Handle,
268 IN OUT UINTN *BufferSize,
269 OUT VOID *Buffer
270 )
271 ;
272
273 EFI_STATUS
274 EFIAPI
275 HiiGetGlyph (
276 IN EFI_HII_PROTOCOL *This,
277 IN CHAR16 *Source,
278 IN OUT UINT16 *Index,
279 OUT UINT8 **GlyphBuffer,
280 OUT UINT16 *BitWidth,
281 IN OUT UINT32 *InternalStatus
282 )
283 ;
284
285 EFI_STATUS
286 EFIAPI
287 HiiGlyphToBlt (
288 IN EFI_HII_PROTOCOL *This,
289 IN UINT8 *GlyphBuffer,
290 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
291 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
292 IN UINTN Count,
293 IN UINTN Width,
294 IN UINTN Height,
295 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
296 )
297 ;
298
299 EFI_STATUS
300 EFIAPI
301 HiiNewString (
302 IN EFI_HII_PROTOCOL *This,
303 IN CHAR16 *Language,
304 IN FRAMEWORK_EFI_HII_HANDLE Handle,
305 IN OUT STRING_REF *Reference,
306 IN CHAR16 *NewString
307 )
308 ;
309
310 EFI_STATUS
311 EFIAPI
312 HiiGetString (
313 IN EFI_HII_PROTOCOL *This,
314 IN FRAMEWORK_EFI_HII_HANDLE Handle,
315 IN STRING_REF Token,
316 IN BOOLEAN Raw,
317 IN CHAR16 *LanguageString,
318 IN OUT UINTN *BufferLength,
319 OUT EFI_STRING StringBuffer
320 )
321 ;
322
323 EFI_STATUS
324 EFIAPI
325 HiiResetStrings (
326 IN EFI_HII_PROTOCOL *This,
327 IN FRAMEWORK_EFI_HII_HANDLE Handle
328 )
329 ;
330
331 EFI_STATUS
332 EFIAPI
333 HiiTestString (
334 IN EFI_HII_PROTOCOL *This,
335 IN CHAR16 *StringToTest,
336 IN OUT UINT32 *FirstMissing,
337 OUT UINT32 *GlyphBufferSize
338 )
339 ;
340
341 EFI_STATUS
342 EFIAPI
343 HiiGetPrimaryLanguages (
344 IN EFI_HII_PROTOCOL *This,
345 IN FRAMEWORK_EFI_HII_HANDLE Handle,
346 OUT EFI_STRING *LanguageString
347 )
348 ;
349
350 EFI_STATUS
351 EFIAPI
352 HiiGetSecondaryLanguages (
353 IN EFI_HII_PROTOCOL *This,
354 IN FRAMEWORK_EFI_HII_HANDLE Handle,
355 IN CHAR16 *PrimaryLanguage,
356 OUT EFI_STRING *LanguageString
357 )
358 ;
359
360 EFI_STATUS
361 EFIAPI
362 HiiGetLine (
363 IN EFI_HII_PROTOCOL *This,
364 IN FRAMEWORK_EFI_HII_HANDLE Handle,
365 IN STRING_REF Token,
366 IN OUT UINT16 *Index,
367 IN UINT16 LineWidth,
368 IN CHAR16 *LanguageString,
369 IN OUT UINT16 *BufferLength,
370 OUT EFI_STRING StringBuffer
371 )
372 ;
373
374 EFI_STATUS
375 EFIAPI
376 HiiGetForms (
377 IN EFI_HII_PROTOCOL *This,
378 IN FRAMEWORK_EFI_HII_HANDLE Handle,
379 IN EFI_FORM_ID FormId,
380 IN OUT UINTN *BufferLength,
381 OUT UINT8 *Buffer
382 )
383 ;
384
385 EFI_STATUS
386 EFIAPI
387 HiiGetDefaultImage (
388 IN EFI_HII_PROTOCOL *This,
389 IN FRAMEWORK_EFI_HII_HANDLE Handle,
390 IN UINTN DefaultMask,
391 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList
392 )
393 ;
394
395 EFI_STATUS
396 EFIAPI
397 HiiUpdateForm (
398 IN EFI_HII_PROTOCOL *This,
399 IN FRAMEWORK_EFI_HII_HANDLE Handle,
400 IN EFI_FORM_LABEL Label,
401 IN BOOLEAN AddData,
402 IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data
403 )
404 ;
405
406 EFI_STATUS
407 EFIAPI
408 HiiGetKeyboardLayout (
409 IN EFI_HII_PROTOCOL *This,
410 OUT UINT16 *DescriptorCount,
411 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor
412 )
413 ;
414
415 EFI_STATUS
416 HiiCompareLanguage (
417 IN CHAR16 *LanguageStringLocation,
418 IN CHAR16 *Language
419 )
420 ;
421
422
423
424 EFI_STATUS
425 EFIAPI
426 ThunkSendForm (
427 IN EFI_FORM_BROWSER_PROTOCOL *This,
428 IN BOOLEAN UseDatabase,
429 IN FRAMEWORK_EFI_HII_HANDLE *Handle,
430 IN UINTN HandleCount,
431 IN FRAMEWORK_EFI_IFR_PACKET *Packet, OPTIONAL
432 IN EFI_HANDLE CallbackHandle, OPTIONAL
433 IN UINT8 *NvMapOverride, OPTIONAL
434 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL
435 OUT BOOLEAN *ResetRequired OPTIONAL
436 );
437
438 EFI_STATUS
439 EFIAPI
440 ThunkCreatePopUp (
441 IN UINTN NumberOfLines,
442 IN BOOLEAN HotKey,
443 IN UINTN MaximumStringSize,
444 OUT CHAR16 *StringBuffer,
445 OUT EFI_INPUT_KEY *KeyValue,
446 IN CHAR16 *String,
447 ...
448 );
449
450 EFI_STATUS
451 EFIAPI
452 RemovePackNotify (
453 IN UINT8 PackageType,
454 IN CONST EFI_GUID *PackageGuid,
455 IN CONST EFI_HII_PACKAGE_HEADER *Package,
456 IN EFI_HII_HANDLE Handle,
457 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
458 )
459 ;
460
461 EFI_STATUS
462 EFIAPI
463 NewOrAddPackNotify (
464 IN UINT8 PackageType,
465 IN CONST EFI_GUID *PackageGuid,
466 IN CONST EFI_HII_PACKAGE_HEADER *Package,
467 IN EFI_HII_HANDLE Handle,
468 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
469 )
470 ;
471
472 #include "Utility.h"
473 #include "ConfigAccess.h"
474
475 #endif