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