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