]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Foundation/Framework/Protocol/Hii/Hii.h
Update Guid Value format.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Protocol / Hii / Hii.h
CommitLineData
3eb9473e 1/*++\r
2\r
3Copyright (c) 2004 - 2006, Intel Corporation \r
4All rights reserved. This program and the accompanying materials \r
5are licensed and made available under the terms and conditions of the BSD License \r
6which accompanies this distribution. The full text of the license may be found at \r
7http://opensource.org/licenses/bsd-license.php \r
8 \r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11\r
12Module Name:\r
13\r
14 Hii.h\r
15\r
16Abstract:\r
17\r
18 This file defines the Human Interface Infrastructure protocol which will \r
19 be used by resources which want to publish IFR/Font/String data and have it \r
20 collected by the Configuration engine.\r
21\r
22--*/\r
23\r
24#ifndef _HII_H_\r
25#define _HII_H_\r
26\r
27#include "EfiInternalFormRepresentation.h"\r
28#include EFI_PROTOCOL_DEFINITION (UgaDraw)\r
29#include EFI_PROTOCOL_DEFINITION (GraphicsOutput)\r
30\r
31#define EFI_HII_PROTOCOL_GUID \\r
32 { \\r
7ccf38a3 33 0xd7ad636e, 0xb997, 0x459b, {0xbf, 0x3f, 0x88, 0x46, 0x89, 0x79, 0x80, 0xe1} \\r
3eb9473e 34 }\r
35\r
36//\r
37// Forward reference for pure ANSI compatability\r
38//\r
3eb9473e 39typedef struct _EFI_HII_PROTOCOL EFI_HII_PROTOCOL;\r
40\r
41//\r
42// Global definition\r
43//\r
44#define NARROW_CHAR 0xFFF0\r
45#define WIDE_CHAR 0xFFF1\r
46#define NON_BREAKING_CHAR 0xFFF2\r
47#define GLYPH_WIDTH 8\r
48#define GLYPH_HEIGHT 19\r
49\r
50#define EFI_HII_FONT 1\r
51#define EFI_HII_STRING 2\r
52#define EFI_HII_IFR 3\r
53#define EFI_HII_KEYBOARD 4\r
54#define EFI_HII_HANDLES 5\r
55#define EFI_HII_VARIABLE 6\r
56#define EFI_HII_DEVICE_PATH 7\r
57\r
58#define HANG(foo) { \\r
59 volatile INT32 __iii; \\r
60 __iii = foo; \\r
61 while (__iii) \\r
62 ; \\r
63 }\r
64//\r
65// #define HANG(foo)\r
66//\r
67// References to string tokens must use this macro to enable scanning for\r
68// token usages.\r
69//\r
70#define STRING_TOKEN(t) t\r
71\r
72//\r
73// The following types are currently defined:\r
74//\r
75typedef UINT16 EFI_FORM_ID;\r
76typedef UINT16 EFI_FORM_LABEL;\r
77typedef UINT16 EFI_HII_HANDLE;\r
78\r
79#pragma pack(1)\r
80\r
81typedef struct {\r
82 UINT32 Length;\r
83 UINT16 Type;\r
84} EFI_HII_PACK_HEADER;\r
85\r
86//\r
87// A form list consists of a large variety of structure\r
88// possibilities so to represent the binary blob of data\r
89// associated with a package of forms, we will assume a\r
90// pointer to a self-describing data buffer.\r
91//\r
92typedef struct {\r
93 EFI_HII_PACK_HEADER Header;\r
94} EFI_HII_IFR_PACK;\r
95\r
96typedef struct {\r
97 EFI_HII_PACK_HEADER Header; // Must be filled in\r
98 EFI_HANDLE ImageHandle; // Must be filled in\r
99 EFI_HANDLE DeviceHandle; // Optional\r
100 EFI_HANDLE ControllerHandle; // Optional\r
101 EFI_HANDLE CallbackHandle; // Optional\r
102 EFI_HANDLE COBExportHandle; // Optional\r
103} EFI_HII_HANDLE_PACK;\r
104\r
105//\r
106// ********************************************************\r
107// EFI_VARIABLE_CONTENTS\r
108// ********************************************************\r
109//\r
110typedef struct {\r
111 EFI_HII_PACK_HEADER Header;\r
112 EFI_GUID VariableGuid;\r
113 UINT32 VariableNameLength;\r
114 UINT16 VariableId;\r
115 //\r
116 // CHAR16 VariableName[]; //Null-terminated\r
117 //\r
118} EFI_HII_VARIABLE_PACK;\r
119\r
120//\r
121// ********************************************************\r
122// EFI_DEVICE_PATH_PACK\r
123// ********************************************************\r
124//\r
125typedef struct {\r
126 EFI_HII_PACK_HEADER Header;\r
127 //\r
128 // EFI_DEVICE_PATH DevicePath[];\r
129 //\r
130} EFI_HII_DEVICE_PATH_PACK;\r
131\r
132//\r
133// ********************************************************\r
134// EFI_HII_DATA_TABLE\r
135// ********************************************************\r
136//\r
137typedef struct {\r
138 EFI_HII_HANDLE HiiHandle;\r
139 EFI_GUID PackageGuid;\r
140 UINT32 DataTableSize;\r
141 UINT32 IfrDataOffset;\r
142 UINT32 StringDataOffset;\r
143 UINT32 VariableDataOffset;\r
144 UINT32 DevicePathOffset;\r
145 UINT32 NumberOfVariableData;\r
146 UINT32 NumberOfLanguages;\r
147 //\r
148 // EFI_HII_DEVICE_PATH_PACK DevicePath[];\r
149 // EFI_HII_VARIABLE_PACK VariableData[];\r
150 // EFI_HII_IFR_PACK IfrData;\r
151 // EFI_HII_STRING_PACK StringData[];\r
152 //\r
153} EFI_HII_DATA_TABLE;\r
154\r
155//\r
156// ********************************************************\r
157// EFI_HII_EXPORT_TABLE\r
158// ********************************************************\r
159//\r
160typedef struct {\r
161 UINT16 NumberOfHiiDataTables;\r
162 EFI_GUID Revision;\r
163 //\r
164 // EFI_HII_DATA_TABLE HiiDataTable[];\r
165 //\r
166} EFI_HII_EXPORT_TABLE;\r
167\r
168typedef struct {\r
169 BOOLEAN FormSetUpdate; // If TRUE, next variable is significant\r
170 EFI_PHYSICAL_ADDRESS FormCallbackHandle; // If not 0, will update Formset with this info\r
171 BOOLEAN FormUpdate; // If TRUE, next variable is significant\r
172 STRING_REF FormTitle; // If not 0, will update Form with this info\r
173 UINT16 DataCount; // The number of Data entries in this structure\r
174 UINT8 *Data; // An array of 1+ op-codes, specified by DataCount\r
175} EFI_HII_UPDATE_DATA;\r
176\r
177//\r
178// String attributes\r
179//\r
180#define LANG_RIGHT_TO_LEFT 0x00000001\r
181\r
182//\r
183// A string package is used to localize strings to a particular\r
184// language. The package is associated with a particular driver\r
185// or set of drivers. Tools are used to associate tokens with\r
186// string references in forms and in programs. These tokens are\r
187// language agnostic. When paired with a language pack (directly\r
188// or indirectly), the string token resolves into an actual\r
189// UNICODE string. The NumStringPointers determines how many\r
190// StringPointers (offset values) there are as well as the total\r
191// number of Strings that are defined.\r
192//\r
193typedef struct {\r
194 EFI_HII_PACK_HEADER Header;\r
195 RELOFST LanguageNameString;\r
196 RELOFST PrintableLanguageName;\r
197 UINT32 NumStringPointers;\r
198 UINT32 Attributes;\r
199 //\r
200 // RELOFST StringPointers[];\r
201 // EFI_STRING Strings[];\r
202 //\r
203} EFI_HII_STRING_PACK;\r
204\r
205//\r
206// We use this one to get the real size of the header\r
207//\r
208typedef struct {\r
209 EFI_HII_PACK_HEADER Header;\r
210 RELOFST LanguageNameString;\r
211 RELOFST PrintableLanguageName;\r
212 UINT32 NumStringPointers;\r
213 UINT32 Attributes;\r
214} EFI_HII_STRING_PACK_HEADER;\r
215\r
216//\r
217// Glyph Attributes\r
218//\r
219#define GLYPH_NON_SPACING 1\r
220#define GLYPH_NON_BREAKING 2\r
221\r
222typedef struct {\r
223 CHAR16 UnicodeWeight;\r
224 UINT8 Attributes;\r
225 UINT8 GlyphCol1[GLYPH_HEIGHT];\r
226} EFI_NARROW_GLYPH;\r
227\r
228typedef struct {\r
229 CHAR16 UnicodeWeight;\r
230 UINT8 Attributes;\r
231 UINT8 GlyphCol1[GLYPH_HEIGHT];\r
232 UINT8 GlyphCol2[GLYPH_HEIGHT];\r
233 UINT8 Pad[3];\r
234} EFI_WIDE_GLYPH;\r
235\r
236//\r
237// A font list consists of a font header followed by a series\r
238// of glyph structures. Note that fonts are not language specific.\r
239//\r
240typedef struct {\r
241 EFI_HII_PACK_HEADER Header;\r
242 UINT16 NumberOfNarrowGlyphs;\r
243 UINT16 NumberOfWideGlyphs;\r
244} EFI_HII_FONT_PACK;\r
245\r
246//\r
247// The IfrData in the EFI_HII_IFR_PACK structure definition\r
248// is variable length, and not really part of the header. To\r
249// simplify from code the size of the header, define an\r
250// identical structure that does not include the IfrData field.\r
251// Then use sizeof() this new structure to determine the\r
252// actual size of the header.\r
253//\r
254typedef struct {\r
255 EFI_HII_PACK_HEADER Header;\r
256} EFI_HII_IFR_PACK_HEADER;\r
257\r
258//\r
259// pedef EFI_HII_PACK_HEADER EFI_HII_IFR_PACK_HEADER;\r
260//\r
261typedef enum {\r
262 EfiKeyLCtrl,\r
263 EfiKeyA0,\r
264 EfiKeyLAlt,\r
265 EfiKeySpaceBar,\r
266 EfiKeyA2,\r
267 EfiKeyA3,\r
268 EfiKeyA4,\r
269 EfiKeyRCtrl,\r
270 EfiKeyLeftArrow,\r
271 EfiKeyDownArrow,\r
272 EfiKeyRightArrow,\r
273 EfiKeyZero,\r
274 EfiKeyPeriod,\r
275 EfiKeyEnter,\r
276 EfiKeyLShift,\r
277 EfiKeyB0,\r
278 EfiKeyB1,\r
279 EfiKeyB2,\r
280 EfiKeyB3,\r
281 EfiKeyB4,\r
282 EfiKeyB5,\r
283 EfiKeyB6,\r
284 EfiKeyB7,\r
285 EfiKeyB8,\r
286 EfiKeyB9,\r
287 EfiKeyB10,\r
288 EfiKeyRshift,\r
289 EfiKeyUpArrow,\r
290 EfiKeyOne,\r
291 EfiKeyTwo,\r
292 EfiKeyThree,\r
293 EfiKeyCapsLock,\r
294 EfiKeyC1,\r
295 EfiKeyC2,\r
296 EfiKeyC3,\r
297 EfiKeyC4,\r
298 EfiKeyC5,\r
299 EfiKeyC6,\r
300 EfiKeyC7,\r
301 EfiKeyC8,\r
302 EfiKeyC9,\r
303 EfiKeyC10,\r
304 EfiKeyC11,\r
305 EfiKeyC12,\r
306 EfiKeyFour,\r
307 EfiKeyFive,\r
308 EfiKeySix,\r
309 EfiKeyPlus,\r
310 EfiKeyTab,\r
311 EfiKeyD1,\r
312 EfiKeyD2,\r
313 EfiKeyD3,\r
314 EfiKeyD4,\r
315 EfiKeyD5,\r
316 EfiKeyD6,\r
317 EfiKeyD7,\r
318 EfiKeyD8,\r
319 EfiKeyD9,\r
320 EfiKeyD10,\r
321 EfiKeyD11,\r
322 EfiKeyD12,\r
323 EfiKeyD13,\r
324 EfiKeyDel,\r
325 EfiKeyEnd,\r
326 EfiKeyPgDn,\r
327 EfiKeySeven,\r
328 EfiKeyEight,\r
329 EfiKeyNine,\r
330 EfiKeyE0,\r
331 EfiKeyE1,\r
332 EfiKeyE2,\r
333 EfiKeyE3,\r
334 EfiKeyE4,\r
335 EfiKeyE5,\r
336 EfiKeyE6,\r
337 EfiKeyE7,\r
338 EfiKeyE8,\r
339 EfiKeyE9,\r
340 EfiKeyE10,\r
341 EfiKeyE11,\r
342 EfiKeyE12,\r
343 EfiKeyBackSpace,\r
344 EfiKeyIns,\r
345 EfiKeyHome,\r
346 EfiKeyPgUp,\r
347 EfiKeyNLck,\r
348 EfiKeySlash,\r
349 EfiKeyAsterisk,\r
350 EfiKeyMinus,\r
351 EfiKeyEsc,\r
352 EfiKeyF1,\r
353 EfiKeyF2,\r
354 EfiKeyF3,\r
355 EfiKeyF4,\r
356 EfiKeyF5,\r
357 EfiKeyF6,\r
358 EfiKeyF7,\r
359 EfiKeyF8,\r
360 EfiKeyF9,\r
361 EfiKeyF10,\r
362 EfiKeyF11,\r
363 EfiKeyF12,\r
364 EfiKeyPrint,\r
365 EfiKeySLck,\r
366 EfiKeyPause\r
367} EFI_KEY;\r
368\r
369typedef struct {\r
370 EFI_KEY Key;\r
371 CHAR16 Unicode;\r
372 CHAR16 ShiftedUnicode;\r
373 CHAR16 AltGrUnicode;\r
374 CHAR16 ShiftedAltGrUnicode;\r
375 UINT16 Modifier;\r
376} EFI_KEY_DESCRIPTOR;\r
377\r
378//\r
379// This structure allows a sparse set of keys to be redefined\r
380// or a complete redefinition of the keyboard layout. Most\r
381// keyboards have a lot of commonality in their layouts, therefore\r
382// only defining those keys that need to change from the default\r
383// minimizes the passed in information.\r
384//\r
385// Additionally, when an update occurs, the active keyboard layout\r
386// will be switched to the newly updated keyboard layout. This\r
387// allows for situations that when a keyboard layout driver is\r
388// loaded as part of system initialization, the system will default\r
389// the keyboard behavior to the new layout.\r
390//\r
391// Each call to update the keyboard mapping should contain the\r
392// complete set of key descriptors to be updated, since every\r
393// call to the HII which contains an EFI_HII_KEYBOARD_PACK will\r
394// wipe the previous set of overrides. A call to\r
395//\r
396typedef struct {\r
397 EFI_HII_PACK_HEADER Header;\r
398 EFI_KEY_DESCRIPTOR *Descriptor;\r
399 UINT8 DescriptorCount;\r
400} EFI_HII_KEYBOARD_PACK;\r
401\r
402//\r
403// The EFI_HII_PACKAGES can contain different types of packages just\r
404// after the structure as inline data.\r
405//\r
406typedef struct {\r
407 UINTN NumberOfPackages;\r
408 EFI_GUID *GuidId;\r
409 //\r
410 // EFI_HII_HANDLE_PACK *HandlePack; // Only one pack.\r
411 // EFI_HII_IFR_PACK *IfrPack; // Only one pack.\r
412 // EFI_HII_FONT_PACK *FontPack[]; // Multiple packs ok\r
413 // EFI_HII_STRING_PACK *StringPack[]; // Multiple packs ok\r
414 // EFI_HII_KEYBOARD_PACK *KeyboardPack[]; // Multiple packs ok\r
415 //\r
416} EFI_HII_PACKAGES;\r
417\r
418typedef struct _EFI_HII_VARIABLE_PACK_LIST {\r
419 struct _EFI_HII_VARIABLE_PACK_LIST *NextVariablePack;\r
420 EFI_HII_VARIABLE_PACK *VariablePack;\r
421} EFI_HII_VARIABLE_PACK_LIST;\r
422\r
423#pragma pack()\r
424\r
425typedef\r
426EFI_STATUS\r
427(EFIAPI *EFI_HII_NEW_PACK) (\r
428 IN EFI_HII_PROTOCOL * This,\r
429 IN EFI_HII_PACKAGES * Packages,\r
430 OUT EFI_HII_HANDLE * Handle\r
431 );\r
432\r
433typedef\r
434EFI_STATUS\r
435(EFIAPI *EFI_HII_REMOVE_PACK) (\r
436 IN EFI_HII_PROTOCOL *This,\r
437 IN EFI_HII_HANDLE Handle\r
438 );\r
439\r
440typedef\r
441EFI_STATUS\r
442(EFIAPI *EFI_HII_FIND_HANDLES) (\r
443 IN EFI_HII_PROTOCOL *This,\r
444 IN OUT UINT16 *HandleBufferLength,\r
445 OUT EFI_HII_HANDLE *Handle\r
446 );\r
447\r
448typedef\r
449EFI_STATUS\r
450(EFIAPI *EFI_HII_EXPORT) (\r
451 IN EFI_HII_PROTOCOL *This,\r
452 IN EFI_HII_HANDLE Handle,\r
453 IN OUT UINTN *BufferSize,\r
454 OUT VOID *Buffer\r
455 );\r
456\r
457typedef\r
458EFI_STATUS\r
459(EFIAPI *EFI_HII_RESET_STRINGS) (\r
460 IN EFI_HII_PROTOCOL *This,\r
461 IN EFI_HII_HANDLE Handle\r
462 );\r
463\r
464typedef\r
465EFI_STATUS\r
466(EFIAPI *EFI_HII_TEST_STRING) (\r
467 IN EFI_HII_PROTOCOL *This,\r
468 IN CHAR16 *StringToTest,\r
469 IN OUT UINT32 *FirstMissing,\r
470 OUT UINT32 *GlyphBufferSize\r
471 );\r
472\r
473typedef\r
474EFI_STATUS\r
475(EFIAPI *EFI_HII_GET_GLYPH) (\r
476 IN EFI_HII_PROTOCOL *This,\r
477 IN CHAR16 *Source,\r
478 IN OUT UINT16 *Index,\r
479 OUT UINT8 **GlyphBuffer,\r
480 OUT UINT16 *BitWidth,\r
481 IN OUT UINT32 *InternalStatus\r
482 );\r
483\r
484typedef\r
485EFI_STATUS\r
486(EFIAPI *EFI_HII_GLYPH_TO_BLT) (\r
487 IN EFI_HII_PROTOCOL *This,\r
488 IN UINT8 *GlyphBuffer,\r
489 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,\r
490 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,\r
491 IN UINTN Count,\r
492 IN UINTN Width,\r
493 IN UINTN Height,\r
494 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer\r
495 );\r
496\r
497typedef\r
498EFI_STATUS\r
499(EFIAPI *EFI_HII_NEW_STRING) (\r
500 IN EFI_HII_PROTOCOL *This,\r
501 IN CHAR16 *Language,\r
502 IN EFI_HII_HANDLE Handle,\r
503 IN OUT STRING_REF *Reference,\r
504 IN CHAR16 *NewString\r
505 );\r
506\r
507typedef\r
508EFI_STATUS\r
509(EFIAPI *EFI_HII_GET_PRI_LANGUAGES) (\r
510 IN EFI_HII_PROTOCOL *This,\r
511 IN EFI_HII_HANDLE Handle,\r
512 OUT EFI_STRING *LanguageString\r
513 );\r
514\r
515typedef\r
516EFI_STATUS\r
517(EFIAPI *EFI_HII_GET_SEC_LANGUAGES) (\r
518 IN EFI_HII_PROTOCOL *This,\r
519 IN EFI_HII_HANDLE Handle,\r
520 IN CHAR16 *PrimaryLanguage,\r
521 OUT EFI_STRING *LanguageString\r
522 );\r
523\r
524typedef\r
525EFI_STATUS\r
526(EFIAPI *EFI_HII_GET_STRING) (\r
527 IN EFI_HII_PROTOCOL *This,\r
528 IN EFI_HII_HANDLE Handle,\r
529 IN STRING_REF Token,\r
530 IN BOOLEAN Raw,\r
531 IN CHAR16 *LanguageString,\r
532 IN OUT UINTN *BufferLength,\r
533 OUT EFI_STRING StringBuffer\r
534 );\r
535\r
536typedef\r
537EFI_STATUS\r
538(EFIAPI *EFI_HII_GET_LINE) (\r
539 IN EFI_HII_PROTOCOL *This,\r
540 IN EFI_HII_HANDLE Handle,\r
541 IN STRING_REF Token,\r
542 IN OUT UINT16 *Index,\r
543 IN UINT16 LineWidth,\r
544 IN CHAR16 *LanguageString,\r
545 IN OUT UINT16 *BufferLength,\r
546 OUT EFI_STRING StringBuffer\r
547 );\r
548\r
549typedef\r
550EFI_STATUS\r
551(EFIAPI *EFI_HII_GET_FORMS) (\r
552 IN EFI_HII_PROTOCOL *This,\r
553 IN EFI_HII_HANDLE Handle,\r
554 IN EFI_FORM_ID FormId,\r
555 IN OUT UINTN *BufferLength,\r
556 OUT UINT8 *Buffer\r
557 );\r
558\r
559typedef\r
560EFI_STATUS\r
561(EFIAPI *EFI_HII_GET_DEFAULT_IMAGE) (\r
562 IN EFI_HII_PROTOCOL *This,\r
563 IN EFI_HII_HANDLE Handle,\r
564 IN UINTN DefaultMask,\r
565 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList\r
566 );\r
567\r
568typedef\r
569EFI_STATUS\r
570(EFIAPI *EFI_HII_UPDATE_FORM) (\r
571 IN EFI_HII_PROTOCOL *This,\r
572 IN EFI_HII_HANDLE Handle,\r
573 IN EFI_FORM_LABEL Label,\r
574 IN BOOLEAN AddData,\r
575 IN EFI_HII_UPDATE_DATA *Data\r
576 );\r
577\r
578typedef\r
579EFI_STATUS\r
580(EFIAPI *EFI_HII_GET_KEYBOARD_LAYOUT) (\r
581 IN EFI_HII_PROTOCOL * This,\r
582 OUT UINT16 *DescriptorCount,\r
583 OUT EFI_KEY_DESCRIPTOR * Descriptor\r
584 );\r
585\r
5d46191d 586struct _EFI_HII_PROTOCOL {\r
3eb9473e 587 EFI_HII_NEW_PACK NewPack;\r
588 EFI_HII_REMOVE_PACK RemovePack;\r
589 EFI_HII_FIND_HANDLES FindHandles;\r
590 EFI_HII_EXPORT ExportDatabase;\r
591\r
592 EFI_HII_TEST_STRING TestString;\r
593 EFI_HII_GET_GLYPH GetGlyph;\r
594 EFI_HII_GLYPH_TO_BLT GlyphToBlt;\r
595\r
596 EFI_HII_NEW_STRING NewString;\r
597 EFI_HII_GET_PRI_LANGUAGES GetPrimaryLanguages;\r
598 EFI_HII_GET_SEC_LANGUAGES GetSecondaryLanguages;\r
599 EFI_HII_GET_STRING GetString;\r
600 EFI_HII_RESET_STRINGS ResetStrings;\r
601 EFI_HII_GET_LINE GetLine;\r
602 EFI_HII_GET_FORMS GetForms;\r
603 EFI_HII_GET_DEFAULT_IMAGE GetDefaultImage;\r
604 EFI_HII_UPDATE_FORM UpdateForm;\r
605\r
606 EFI_HII_GET_KEYBOARD_LAYOUT GetKeyboardLayout;\r
5d46191d 607};\r
3eb9473e 608\r
609extern EFI_GUID gEfiHiiProtocolGuid;\r
610\r
611#endif\r