]> git.proxmox.com Git - mirror_edk2.git/blame - IntelFrameworkPkg/Library/FrameworkIfrSupportLib/IfrOnTheFly.c
remove unnecessary comments introduced by tools.
[mirror_edk2.git] / IntelFrameworkPkg / Library / FrameworkIfrSupportLib / IfrOnTheFly.c
CommitLineData
cf7e50f8 1/** @file\r
2ec4d269 2 Library Routines to create IFR on-the-fly\r
3 \r
5d01b0f7 4Copyright (c) 2006, Intel Corporation \r
5All rights reserved. This program and the accompanying materials \r
6are licensed and made available under the terms and conditions of the BSD License \r
7which accompanies this distribution. The full text of the license may be found at \r
8http://opensource.org/licenses/bsd-license.php \r
9 \r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
12\r
cf7e50f8 13**/\r
5d01b0f7 14\r
82096802 15#include "IfrSupportLibInternal.h"\r
5d01b0f7 16\r
2ec4d269 17/**\r
18 Create a formset\r
19 \r
20 The form package is a collection of forms that are intended to describe the pages that will be\r
21 displayed to the user.\r
22 \r
23 @param FormSetTitle Title of formset\r
24 @param Guid Guid of formset\r
25 @param Class Class of formset\r
26 @param SubClass Sub class of formset\r
27 @param FormBuffer Pointer of the formset created\r
28 @param StringBuffer Pointer of FormSetTitile string created\r
29 \r
30 @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate\r
31 @retval EFI_SUCCESS Formset successfully created \r
32**/\r
5d01b0f7 33EFI_STATUS\r
34CreateFormSet (\r
35 IN CHAR16 *FormSetTitle,\r
36 IN EFI_GUID *Guid,\r
37 IN UINT8 Class,\r
38 IN UINT8 SubClass,\r
39 IN OUT VOID **FormBuffer,\r
40 IN OUT VOID **StringBuffer\r
41 )\r
5d01b0f7 42{\r
43 EFI_STATUS Status;\r
44 EFI_HII_IFR_PACK IfrPack;\r
dc7b4a5c 45 FRAMEWORK_EFI_IFR_FORM_SET FormSet;\r
46 FRAMEWORK_EFI_IFR_END_FORM_SET EndFormSet;\r
5d01b0f7 47 UINT8 *Destination;\r
48 CHAR16 CurrentLanguage[4];\r
49 STRING_REF StringToken;\r
50\r
51 //\r
52 // Pre-allocate a buffer sufficient for us to work from.\r
53 //\r
54 FormBuffer = AllocateZeroPool (DEFAULT_FORM_BUFFER_SIZE);\r
55 if (FormBuffer == NULL) {\r
56 return EFI_OUT_OF_RESOURCES;\r
57 }\r
58\r
59 //\r
60 // Pre-allocate a buffer sufficient for us to work from.\r
61 //\r
62 StringBuffer = AllocateZeroPool (DEFAULT_STRING_BUFFER_SIZE);\r
63 if (StringBuffer == NULL) {\r
64 gBS->FreePool (FormBuffer);\r
65 return EFI_OUT_OF_RESOURCES;\r
66 }\r
67\r
68 //\r
69 // Obtain current language value\r
70 //\r
71 GetCurrentLanguage (CurrentLanguage);\r
72\r
73 //\r
74 // Add the FormSetTitle to the string buffer and get the StringToken\r
75 //\r
76 Status = AddString (*StringBuffer, CurrentLanguage, FormSetTitle, &StringToken);\r
77\r
78 if (EFI_ERROR (Status)) {\r
79 return Status;\r
80 }\r
81\r
82 //\r
83 // Initialize the Ifr Package header data\r
84 //\r
dc7b4a5c 85 IfrPack.Header.Length = sizeof (EFI_HII_PACK_HEADER) + sizeof (FRAMEWORK_EFI_IFR_FORM_SET) + sizeof (FRAMEWORK_EFI_IFR_END_FORM_SET);\r
5d01b0f7 86 IfrPack.Header.Type = EFI_HII_IFR;\r
87\r
88 //\r
89 // Initialize FormSet with the appropriate information\r
90 //\r
dc7b4a5c 91 FormSet.Header.OpCode = FRAMEWORK_EFI_IFR_FORM_SET_OP;\r
92 FormSet.Header.Length = sizeof (FRAMEWORK_EFI_IFR_FORM_SET);\r
5d01b0f7 93 FormSet.FormSetTitle = StringToken;\r
94 FormSet.Class = Class;\r
95 FormSet.SubClass = SubClass;\r
96 CopyMem (&FormSet.Guid, Guid, sizeof (EFI_GUID));\r
97\r
98 //\r
99 // Initialize the end formset data\r
100 //\r
dc7b4a5c 101 EndFormSet.Header.Length = sizeof (FRAMEWORK_EFI_IFR_END_FORM_SET);\r
102 EndFormSet.Header.OpCode = FRAMEWORK_EFI_IFR_END_FORM_SET_OP;\r
5d01b0f7 103\r
104 Destination = (UINT8 *) *FormBuffer;\r
105\r
106 //\r
107 // Copy the formset/endformset data to the form buffer\r
108 //\r
109 CopyMem (Destination, &IfrPack, sizeof (EFI_HII_PACK_HEADER));\r
110\r
111 Destination = Destination + sizeof (EFI_HII_PACK_HEADER);\r
112\r
dc7b4a5c 113 CopyMem (Destination, &FormSet, sizeof (FRAMEWORK_EFI_IFR_FORM_SET));\r
5d01b0f7 114\r
dc7b4a5c 115 Destination = Destination + sizeof (FRAMEWORK_EFI_IFR_FORM_SET);\r
5d01b0f7 116\r
dc7b4a5c 117 CopyMem (Destination, &EndFormSet, sizeof (FRAMEWORK_EFI_IFR_END_FORM_SET));\r
5d01b0f7 118 return EFI_SUCCESS;\r
119}\r
120\r
2ec4d269 121/**\r
122 Create a form\r
123 A form is the encapsulation of what amounts to a browser page. The header defines a FormId,\r
124 which is referenced by the form package, among others. It also defines a FormTitle, which is a\r
125 string to be used as the title for the form\r
126 \r
127 @param FormTitle Title of the form\r
128 @param FormId Id of the form\r
129 @param FormBuffer Pointer of the form created\r
130 @param StringBuffer Pointer of FormTitil string created\r
131 \r
132 @retval EFI_SUCCESS Form successfully created\r
133**/\r
5d01b0f7 134EFI_STATUS\r
135CreateForm (\r
136 IN CHAR16 *FormTitle,\r
137 IN UINT16 FormId,\r
138 IN OUT VOID *FormBuffer,\r
139 IN OUT VOID *StringBuffer\r
140 )\r
5d01b0f7 141{\r
142 EFI_STATUS Status;\r
dc7b4a5c 143 FRAMEWORK_EFI_IFR_FORM Form;\r
144 FRAMEWORK_EFI_IFR_END_FORM EndForm;\r
5d01b0f7 145 CHAR16 CurrentLanguage[4];\r
146 STRING_REF StringToken;\r
147\r
148 //\r
149 // Obtain current language value\r
150 //\r
151 GetCurrentLanguage (CurrentLanguage);\r
152\r
153 Status = AddString (StringBuffer, CurrentLanguage, FormTitle, &StringToken);\r
154\r
155 if (EFI_ERROR (Status)) {\r
156 return Status;\r
157 }\r
158\r
dc7b4a5c 159 Form.Header.OpCode = FRAMEWORK_EFI_IFR_FORM_OP;\r
160 Form.Header.Length = sizeof (FRAMEWORK_EFI_IFR_FORM);\r
5d01b0f7 161 Form.FormId = FormId;\r
162 Form.FormTitle = StringToken;\r
163\r
164 Status = AddOpCode (FormBuffer, &Form);\r
165\r
166 if (EFI_ERROR (Status)) {\r
167 return Status;\r
168 }\r
169\r
dc7b4a5c 170 EndForm.Header.OpCode = FRAMEWORK_EFI_IFR_END_FORM_OP;\r
171 EndForm.Header.Length = sizeof (FRAMEWORK_EFI_IFR_END_FORM);\r
5d01b0f7 172\r
173 Status = AddOpCode (FormBuffer, &EndForm);\r
174\r
2ec4d269 175 return Status;\r
5d01b0f7 176}\r
177\r
2ec4d269 178/**\r
179 Create a SubTitle\r
180 \r
181 Subtitle strings are intended to be used by authors to separate sections of questions into semantic\r
182 groups.\r
183 \r
184 @param SubTitle Sub title to be created\r
185 @param FormBuffer Where this subtitle to add to\r
186 @param StringBuffer String buffer created for subtitle\r
187 \r
188 @retval EFI_SUCCESS Subtitle successfully created\r
189**/\r
5d01b0f7 190EFI_STATUS\r
191CreateSubTitle (\r
192 IN CHAR16 *SubTitle,\r
193 IN OUT VOID *FormBuffer,\r
194 IN OUT VOID *StringBuffer\r
195 )\r
5d01b0f7 196{\r
197 EFI_STATUS Status;\r
dc7b4a5c 198 FRAMEWORK_EFI_IFR_SUBTITLE Subtitle;\r
5d01b0f7 199 CHAR16 CurrentLanguage[4];\r
200 STRING_REF StringToken;\r
201\r
202 //\r
203 // Obtain current language value\r
204 //\r
205 GetCurrentLanguage (CurrentLanguage);\r
206\r
207 Status = AddString (StringBuffer, CurrentLanguage, SubTitle, &StringToken);\r
208\r
209 if (EFI_ERROR (Status)) {\r
210 return Status;\r
211 }\r
212\r
dc7b4a5c 213 Subtitle.Header.OpCode = FRAMEWORK_EFI_IFR_SUBTITLE_OP;\r
214 Subtitle.Header.Length = sizeof (FRAMEWORK_EFI_IFR_SUBTITLE);\r
5d01b0f7 215 Subtitle.SubTitle = StringToken;\r
216\r
217 Status = AddOpCode (FormBuffer, &Subtitle);\r
218\r
2ec4d269 219 return Status;\r
5d01b0f7 220}\r
221\r
2ec4d269 222/**\r
223 Create a line of text\r
224 Unlike HTML, text is simply another tag. \r
225 This tag type enables IFR to be more easily localized.\r
226 \r
227 @param String - First string of the text\r
228 @param String2 - Second string of the text\r
229 @param String3 - Help string of the text\r
230 @param Flags - Flag of the text\r
231 @param Key - Key of the text\r
232 @param FormBuffer - The form where this text adds to\r
233 @param StringBuffer - String buffer created for String, String2 and String3\r
234 \r
235 @retval EFI_SUCCESS - Text successfully created\r
236**/\r
5d01b0f7 237EFI_STATUS\r
238CreateText (\r
239 IN CHAR16 *String,\r
240 IN CHAR16 *String2,\r
241 IN CHAR16 *String3,\r
242 IN UINT8 Flags,\r
243 IN UINT16 Key,\r
244 IN OUT VOID *FormBuffer,\r
245 IN OUT VOID *StringBuffer\r
246 )\r
5d01b0f7 247{\r
248 EFI_STATUS Status;\r
dc7b4a5c 249 FRAMEWORK_EFI_IFR_TEXT Text;\r
5d01b0f7 250 CHAR16 CurrentLanguage[4];\r
251 STRING_REF StringToken;\r
252\r
253 //\r
254 // Obtain current language value\r
255 //\r
256 GetCurrentLanguage (CurrentLanguage);\r
257\r
258 //\r
259 // Add first string, get first string's token\r
260 //\r
261 Status = AddString (StringBuffer, CurrentLanguage, String, &StringToken);\r
262\r
263 if (EFI_ERROR (Status)) {\r
264 return Status;\r
265 }\r
266\r
dc7b4a5c 267 Text.Header.OpCode = FRAMEWORK_EFI_IFR_TEXT_OP;\r
268 Text.Header.Length = sizeof (FRAMEWORK_EFI_IFR_TEXT);\r
5d01b0f7 269 Text.Text = StringToken;\r
270\r
271 //\r
272 // Add second string, get first string's token\r
273 //\r
274 Status = AddString (StringBuffer, CurrentLanguage, String2, &StringToken);\r
275\r
276 if (EFI_ERROR (Status)) {\r
277 return Status;\r
278 }\r
279\r
280 Text.TextTwo = StringToken;\r
281\r
dc7b4a5c 282 Text.Flags = (UINT8) (Flags | FRAMEWORK_EFI_IFR_FLAG_CREATED);\r
5d01b0f7 283 Text.Key = Key;\r
284\r
285 //\r
286 // Add second string, get first string's token\r
287 //\r
288 Status = AddString (StringBuffer, CurrentLanguage, String3, &StringToken);\r
289\r
290 if (EFI_ERROR (Status)) {\r
291 return Status;\r
292 }\r
293\r
294 Text.Help = StringToken;\r
295\r
296 Status = AddOpCode (FormBuffer, &Text);\r
297\r
2ec4d269 298 return Status;\r
5d01b0f7 299}\r
300\r
2ec4d269 301/**\r
302 Create a hyperlink\r
303 \r
304 @param FormId Form ID of the hyperlink\r
305 @param Prompt Prompt of the hyperlink\r
306 @param FormBuffer The form where this hyperlink adds to\r
307 @param StringBuffer String buffer created for Prompt\r
308 \r
309 @retval EFI_SUCCESS Hyperlink successfully created \r
310**/\r
5d01b0f7 311EFI_STATUS\r
312CreateGoto (\r
313 IN UINT16 FormId,\r
314 IN CHAR16 *Prompt,\r
315 IN OUT VOID *FormBuffer,\r
316 IN OUT VOID *StringBuffer\r
317 )\r
5d01b0f7 318{\r
319 EFI_STATUS Status;\r
dc7b4a5c 320 FRAMEWORK_EFI_IFR_REF Hyperlink;\r
5d01b0f7 321 CHAR16 CurrentLanguage[4];\r
322 STRING_REF StringToken;\r
323\r
324 //\r
325 // Obtain current language value\r
326 //\r
327 GetCurrentLanguage (CurrentLanguage);\r
328\r
329 Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);\r
330\r
331 if (EFI_ERROR (Status)) {\r
332 return Status;\r
333 }\r
334\r
dc7b4a5c 335 Hyperlink.Header.OpCode = FRAMEWORK_EFI_IFR_REF_OP;\r
336 Hyperlink.Header.Length = sizeof (FRAMEWORK_EFI_IFR_REF);\r
5d01b0f7 337 Hyperlink.FormId = FormId;\r
338 Hyperlink.Prompt = StringToken;\r
339\r
340 Status = AddOpCode (FormBuffer, &Hyperlink);\r
341\r
2ec4d269 342 return Status;\r
5d01b0f7 343}\r
344\r
2ec4d269 345/**\r
346 Create a one-of question with a set of options to choose from. The\r
347 OptionsList is a pointer to a null-terminated list of option descriptions.\r
5d01b0f7 348\r
2ec4d269 349 @param QuestionId - Question ID of the one-of box\r
350 @param DataWidth - DataWidth of the one-of box\r
351 @param Prompt - Prompt of the one-of box\r
352 @param Help - Help of the one-of box\r
353 @param OptionsList - Each string in it is an option of the one-of box\r
354 @param OptionCount - Option string count\r
355 @param FormBuffer - The form where this one-of box adds to\r
356 @param StringBuffer - String buffer created for Prompt, Help and Option strings\r
357 \r
358 @retval EFI_DEVICE_ERROR - DataWidth > 2\r
359 @retval EFI_SUCCESS - One-Of box successfully created.\r
360**/\r
5d01b0f7 361EFI_STATUS\r
362CreateOneOf (\r
363 IN UINT16 QuestionId,\r
364 IN UINT8 DataWidth,\r
365 IN CHAR16 *Prompt,\r
366 IN CHAR16 *Help,\r
367 IN IFR_OPTION *OptionsList,\r
368 IN UINTN OptionCount,\r
369 IN OUT VOID *FormBuffer,\r
370 IN OUT VOID *StringBuffer\r
371 )\r
5d01b0f7 372{\r
373 EFI_STATUS Status;\r
374 UINTN Index;\r
dc7b4a5c 375 FRAMEWORK_EFI_IFR_ONE_OF OneOf;\r
376 FRAMEWORK_EFI_IFR_ONE_OF_OPTION OneOfOption;\r
377 FRAMEWORK_EFI_IFR_END_ONE_OF EndOneOf;\r
5d01b0f7 378 CHAR16 CurrentLanguage[4];\r
379 STRING_REF StringToken;\r
380\r
381 //\r
382 // We do not create op-code storage widths for one-of in excess of 16 bits for now\r
383 //\r
384 if (DataWidth > 2) {\r
385 return EFI_DEVICE_ERROR;\r
386 }\r
387\r
388 //\r
389 // Obtain current language value\r
390 //\r
391 GetCurrentLanguage (CurrentLanguage);\r
392\r
393 //\r
394 // Add first string, get first string's token\r
395 //\r
396 Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);\r
397\r
398 if (EFI_ERROR (Status)) {\r
399 return Status;\r
400 }\r
401\r
dc7b4a5c 402 OneOf.Header.OpCode = FRAMEWORK_EFI_IFR_ONE_OF_OP;\r
403 OneOf.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ONE_OF);\r
5d01b0f7 404 OneOf.QuestionId = QuestionId;\r
405 OneOf.Width = DataWidth;\r
406 OneOf.Prompt = StringToken;\r
407\r
408 //\r
409 // Add second string, get first string's token\r
410 //\r
411 Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);\r
412\r
413 if (EFI_ERROR (Status)) {\r
414 return Status;\r
415 }\r
416\r
417 OneOf.Help = StringToken;\r
418\r
419 Status = AddOpCode (FormBuffer, &OneOf);\r
420\r
421 if (EFI_ERROR (Status)) {\r
422 return Status;\r
423 }\r
424\r
425 for (Index = 0; Index < OptionCount; Index++) {\r
dc7b4a5c 426 OneOfOption.Header.OpCode = FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP;\r
427 OneOfOption.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION);\r
5d01b0f7 428\r
429 //\r
430 // Add string and get token back\r
431 //\r
432 Status = AddString (StringBuffer, CurrentLanguage, OptionsList[Index].OptionString, &StringToken);\r
433\r
434 OneOfOption.Option = StringToken;\r
435 OneOfOption.Value = OptionsList[Index].Value;\r
dc7b4a5c 436 OneOfOption.Flags = (UINT8) (OptionsList[Index].Flags | FRAMEWORK_EFI_IFR_FLAG_CREATED);\r
5d01b0f7 437 OneOfOption.Key = OptionsList[Index].Key;\r
438\r
439 Status = AddOpCode (FormBuffer, &OneOfOption);\r
440\r
441 if (EFI_ERROR (Status)) {\r
442 return Status;\r
443 }\r
444 }\r
445\r
dc7b4a5c 446 EndOneOf.Header.Length = sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF);\r
447 EndOneOf.Header.OpCode = FRAMEWORK_EFI_IFR_END_ONE_OF_OP;\r
5d01b0f7 448\r
449 Status = AddOpCode (FormBuffer, &EndOneOf);\r
450\r
451 if (EFI_ERROR (Status)) {\r
452 return Status;\r
453 }\r
454\r
455 return EFI_SUCCESS;\r
456}\r
457\r
2ec4d269 458/**\r
459 Create a one-of question with a set of options to choose from. The\r
460 OptionsList is a pointer to a null-terminated list of option descriptions.\r
461 \r
462 @param QuestionId - Question ID of the ordered list\r
463 @param MaxEntries - MaxEntries of the ordered list\r
464 @param Prompt - Prompt of the ordered list\r
465 @param Help - Help of the ordered list\r
466 @param OptionsList - Each string in it is an option of the ordered list\r
467 @param OptionCount - Option string count\r
468 @param FormBuffer - The form where this ordered list adds to\r
469 @param StringBuffer - String buffer created for Prompt, Help and Option strings\r
470 \r
471 @retval EFI_SUCCESS - Ordered list successfully created.\r
472**/\r
5d01b0f7 473EFI_STATUS\r
474CreateOrderedList (\r
475 IN UINT16 QuestionId,\r
476 IN UINT8 MaxEntries,\r
477 IN CHAR16 *Prompt,\r
478 IN CHAR16 *Help,\r
479 IN IFR_OPTION *OptionsList,\r
480 IN UINTN OptionCount,\r
481 IN OUT VOID *FormBuffer,\r
482 IN OUT VOID *StringBuffer\r
483 )\r
5d01b0f7 484{\r
485 EFI_STATUS Status;\r
486 UINTN Index;\r
dc7b4a5c 487 FRAMEWORK_EFI_IFR_ORDERED_LIST OrderedList;\r
488 FRAMEWORK_EFI_IFR_ONE_OF_OPTION OrderedListOption;\r
489 FRAMEWORK_EFI_IFR_END_ONE_OF EndOrderedList;\r
5d01b0f7 490 CHAR16 CurrentLanguage[4];\r
491 STRING_REF StringToken;\r
492\r
493 //\r
494 // Obtain current language value\r
495 //\r
496 GetCurrentLanguage (CurrentLanguage);\r
497\r
498 //\r
499 // Add first string, get first string's token\r
500 //\r
501 Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);\r
502\r
503 if (EFI_ERROR (Status)) {\r
504 return Status;\r
505 }\r
506\r
dc7b4a5c 507 OrderedList.Header.OpCode = FRAMEWORK_EFI_IFR_ORDERED_LIST_OP;\r
508 OrderedList.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ORDERED_LIST);\r
5d01b0f7 509 OrderedList.QuestionId = QuestionId;\r
510 OrderedList.MaxEntries = MaxEntries;\r
511 OrderedList.Prompt = StringToken;\r
512\r
513 //\r
514 // Add second string, get first string's token\r
515 //\r
516 Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);\r
517\r
518 if (EFI_ERROR (Status)) {\r
519 return Status;\r
520 }\r
521\r
522 OrderedList.Help = StringToken;\r
523\r
524 Status = AddOpCode (FormBuffer, &OrderedList);\r
525\r
526 if (EFI_ERROR (Status)) {\r
527 return Status;\r
528 }\r
529\r
530 for (Index = 0; Index < OptionCount; Index++) {\r
dc7b4a5c 531 OrderedListOption.Header.OpCode = FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP;\r
532 OrderedListOption.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION);\r
5d01b0f7 533\r
534 //\r
535 // Add string and get token back\r
536 //\r
537 Status = AddString (StringBuffer, CurrentLanguage, OptionsList[Index].OptionString, &StringToken);\r
538\r
539 OrderedListOption.Option = StringToken;\r
540 OrderedListOption.Value = OptionsList[Index].Value;\r
dc7b4a5c 541 OrderedListOption.Flags = (UINT8) (OptionsList[Index].Flags | FRAMEWORK_EFI_IFR_FLAG_CREATED);\r
5d01b0f7 542 OrderedListOption.Key = OptionsList[Index].Key;\r
543\r
544 Status = AddOpCode (FormBuffer, &OrderedListOption);\r
545\r
546 if (EFI_ERROR (Status)) {\r
547 return Status;\r
548 }\r
549 }\r
550\r
dc7b4a5c 551 EndOrderedList.Header.Length = sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF);\r
552 EndOrderedList.Header.OpCode = FRAMEWORK_EFI_IFR_END_ONE_OF_OP;\r
5d01b0f7 553\r
554 Status = AddOpCode (FormBuffer, &EndOrderedList);\r
555\r
2ec4d269 556 return Status;\r
5d01b0f7 557}\r
558\r
2ec4d269 559/**\r
560 Create a checkbox\r
561 \r
562 @param QuestionId Question ID of the check box\r
563 @param DataWidth DataWidth of the check box\r
564 @param Prompt Prompt of the check box\r
565 @param Help Help of the check box \r
566 @param Flags Flags of the check box\r
567 @param FormBuffer The form where this check box adds to\r
568 @param StringBuffer String buffer created for Prompt and Help.\r
569 \r
570 @retval EFI_DEVICE_ERROR DataWidth > 1\r
571 @retval EFI_SUCCESS Check box successfully created\r
572**/\r
5d01b0f7 573EFI_STATUS\r
574CreateCheckBox (\r
575 IN UINT16 QuestionId,\r
576 IN UINT8 DataWidth,\r
577 IN CHAR16 *Prompt,\r
578 IN CHAR16 *Help,\r
579 IN UINT8 Flags,\r
580 IN OUT VOID *FormBuffer,\r
581 IN OUT VOID *StringBuffer\r
582 )\r
5d01b0f7 583{\r
584 EFI_STATUS Status;\r
dc7b4a5c 585 FRAMEWORK_EFI_IFR_CHECKBOX CheckBox;\r
5d01b0f7 586 CHAR16 CurrentLanguage[4];\r
587 STRING_REF StringToken;\r
588\r
589 //\r
590 // We do not create op-code storage widths for checkbox in excess of 8 bits for now\r
591 //\r
592 if (DataWidth > 1) {\r
593 return EFI_DEVICE_ERROR;\r
594 }\r
595\r
596 //\r
597 // Obtain current language value\r
598 //\r
599 GetCurrentLanguage (CurrentLanguage);\r
600\r
601 //\r
602 // Add first string, get first string's token\r
603 //\r
604 Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);\r
605\r
606 if (EFI_ERROR (Status)) {\r
607 return Status;\r
608 }\r
609\r
dc7b4a5c 610 CheckBox.Header.OpCode = FRAMEWORK_EFI_IFR_CHECKBOX_OP;\r
611 CheckBox.Header.Length = sizeof (FRAMEWORK_EFI_IFR_CHECKBOX);\r
5d01b0f7 612 CheckBox.QuestionId = QuestionId;\r
613 CheckBox.Width = DataWidth;\r
614 CheckBox.Prompt = StringToken;\r
615\r
616 //\r
617 // Add second string, get first string's token\r
618 //\r
619 Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);\r
620\r
621 if (EFI_ERROR (Status)) {\r
622 return Status;\r
623 }\r
624\r
625 CheckBox.Help = StringToken;\r
dc7b4a5c 626 CheckBox.Flags = (UINT8) (Flags | FRAMEWORK_EFI_IFR_FLAG_CREATED);\r
5d01b0f7 627\r
628 Status = AddOpCode (FormBuffer, &CheckBox);\r
2ec4d269 629 \r
630 return Status;\r
5d01b0f7 631}\r
632\r
2ec4d269 633/**\r
634 Create a numeric\r
635 \r
636 @param QuestionId Question ID of the numeric\r
637 @param DataWidth DataWidth of the numeric\r
638 @param Prompt Prompt of the numeric\r
639 @param Help Help of the numeric\r
640 @param Minimum Minumun boundary of the numeric\r
641 @param Maximum Maximum boundary of the numeric\r
642 @param Step Step of the numeric\r
643 @param Default Default value\r
644 @param Flags Flags of the numeric\r
645 @param Key Key of the numeric\r
646 @param FormBuffer The form where this numeric adds to\r
647 @param StringBuffer String buffer created for Prompt and Help.\r
648\r
649 @retval EFI_DEVICE_ERROR DataWidth > 2\r
650 @retval EFI_SUCCESS Numeric is successfully created \r
651**/\r
5d01b0f7 652EFI_STATUS\r
653CreateNumeric (\r
654 IN UINT16 QuestionId,\r
655 IN UINT8 DataWidth,\r
656 IN CHAR16 *Prompt,\r
657 IN CHAR16 *Help,\r
658 IN UINT16 Minimum,\r
659 IN UINT16 Maximum,\r
660 IN UINT16 Step,\r
661 IN UINT16 Default,\r
662 IN UINT8 Flags,\r
663 IN UINT16 Key,\r
664 IN OUT VOID *FormBuffer,\r
665 IN OUT VOID *StringBuffer\r
666 )\r
5d01b0f7 667{\r
668 EFI_STATUS Status;\r
dc7b4a5c 669 FRAMEWORK_EFI_IFR_NUMERIC Numeric;\r
5d01b0f7 670 CHAR16 CurrentLanguage[4];\r
671 STRING_REF StringToken;\r
672\r
673 //\r
674 // We do not create op-code storage widths for numerics in excess of 16 bits for now\r
675 //\r
676 if (DataWidth > 2) {\r
677 return EFI_DEVICE_ERROR;\r
678 }\r
679\r
680 //\r
681 // Obtain current language value\r
682 //\r
683 GetCurrentLanguage (CurrentLanguage);\r
684\r
685 //\r
686 // Add first string, get first string's token\r
687 //\r
688 Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);\r
689\r
690 if (EFI_ERROR (Status)) {\r
691 return Status;\r
692 }\r
693\r
dc7b4a5c 694 Numeric.Header.OpCode = FRAMEWORK_EFI_IFR_NUMERIC_OP;\r
695 Numeric.Header.Length = sizeof (FRAMEWORK_EFI_IFR_NUMERIC);\r
5d01b0f7 696 Numeric.QuestionId = QuestionId;\r
697 Numeric.Width = DataWidth;\r
698 Numeric.Prompt = StringToken;\r
699\r
700 //\r
701 // Add second string, get first string's token\r
702 //\r
703 Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);\r
704\r
705 if (EFI_ERROR (Status)) {\r
706 return Status;\r
707 }\r
708\r
709 Numeric.Help = StringToken;\r
710 Numeric.Minimum = Minimum;\r
711 Numeric.Maximum = Maximum;\r
712 Numeric.Step = Step;\r
713 Numeric.Default = Default;\r
dc7b4a5c 714 Numeric.Flags = (UINT8) (Flags | FRAMEWORK_EFI_IFR_FLAG_CREATED);\r
5d01b0f7 715 Numeric.Key = Key;\r
716\r
717 Status = AddOpCode (FormBuffer, &Numeric);\r
718\r
2ec4d269 719 return Status;\r
5d01b0f7 720}\r
721\r
2ec4d269 722/**\r
723 Create a string\r
724 \r
725 @param QuestionId - Question ID of the string\r
726 @param DataWidth - DataWidth of the string\r
727 @param Prompt - Prompt of the string\r
728 @param Help - Help of the string\r
729 @param MinSize - Min size boundary of the string\r
730 @param MaxSize - Max size boundary of the string\r
731 @param Flags - Flags of the string\r
732 @param Key - Key of the string\r
733 @param FormBuffer - The form where this string adds to\r
734 @param StringBuffer - String buffer created for Prompt and Help.\r
735 @retval EFI_SUCCESS - String successfully created. \r
736**/\r
5d01b0f7 737EFI_STATUS\r
738CreateString (\r
739 IN UINT16 QuestionId,\r
740 IN UINT8 DataWidth,\r
741 IN CHAR16 *Prompt,\r
742 IN CHAR16 *Help,\r
743 IN UINT8 MinSize,\r
744 IN UINT8 MaxSize,\r
745 IN UINT8 Flags,\r
746 IN UINT16 Key,\r
747 IN OUT VOID *FormBuffer,\r
748 IN OUT VOID *StringBuffer\r
749 )\r
5d01b0f7 750{\r
751 EFI_STATUS Status;\r
dc7b4a5c 752 FRAMEWORK_EFI_IFR_STRING String;\r
5d01b0f7 753 CHAR16 CurrentLanguage[4];\r
754 STRING_REF StringToken;\r
755\r
756 //\r
757 // Obtain current language value\r
758 //\r
759 GetCurrentLanguage (CurrentLanguage);\r
760\r
761 //\r
762 // Add first string, get first string's token\r
763 //\r
764 Status = AddString (StringBuffer, CurrentLanguage, Prompt, &StringToken);\r
765\r
766 if (EFI_ERROR (Status)) {\r
767 return Status;\r
768 }\r
769\r
dc7b4a5c 770 String.Header.OpCode = FRAMEWORK_EFI_IFR_STRING_OP;\r
771 String.Header.Length = sizeof (FRAMEWORK_EFI_IFR_STRING);\r
5d01b0f7 772 String.QuestionId = QuestionId;\r
773 String.Width = DataWidth;\r
774 String.Prompt = StringToken;\r
775\r
776 //\r
777 // Add second string, get first string's token\r
778 //\r
779 Status = AddString (StringBuffer, CurrentLanguage, Help, &StringToken);\r
780\r
781 if (EFI_ERROR (Status)) {\r
782 return Status;\r
783 }\r
784\r
785 String.Help = StringToken;\r
786 String.MinSize = MinSize;\r
787 String.MaxSize = MaxSize;\r
dc7b4a5c 788 String.Flags = (UINT8) (Flags | FRAMEWORK_EFI_IFR_FLAG_CREATED);\r
5d01b0f7 789 String.Key = Key;\r
790\r
791 Status = AddOpCode (FormBuffer, &String);\r
792\r
2ec4d269 793 return Status;\r
5d01b0f7 794}\r
2ec4d269 795\r