]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - IntelFrameworkPkg/Library/FrameworkIfrSupportLib/IfrOpCodeCreation.c
Fix coding style issue.
[mirror_edk2.git] / IntelFrameworkPkg / Library / FrameworkIfrSupportLib / IfrOpCodeCreation.c
... / ...
CommitLineData
1/** @file\r
2 Library Routines to create IFR independent of string data - assume tokens already exist\r
3 Primarily to be used for exporting op-codes at a label in pre-defined forms.\r
4\r
5Copyright (c) 2006, Intel Corporation \r
6All rights reserved. This program and the accompanying materials \r
7are licensed and made available under the terms and conditions of the BSD License \r
8which accompanies this distribution. The full text of the license may be found at \r
9http://opensource.org/licenses/bsd-license.php \r
10 \r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
13\r
14\r
15**/\r
16\r
17//\r
18// Include common header file for this module.\r
19//\r
20#include "IfrSupportLibInternal.h"\r
21\r
22/**\r
23 Create a SubTitle opcode independent of string creation\r
24 This is used primarily by users who need to create just one particular valid op-code and the string\r
25 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
26 location to pre-defined forms in HII)\r
27 \r
28 @param StringToken StringToken of the subtitle\r
29 @param FormBuffer Output of subtitle as a form\r
30 \r
31 @retval EFI_SUCCESS Subtitle created to be a form\r
32**/\r
33EFI_STATUS\r
34CreateSubTitleOpCode (\r
35 IN STRING_REF StringToken,\r
36 IN OUT VOID *FormBuffer\r
37 )\r
38{\r
39 FRAMEWORK_EFI_IFR_SUBTITLE Subtitle;\r
40\r
41 Subtitle.Header.OpCode = FRAMEWORK_EFI_IFR_SUBTITLE_OP;\r
42 Subtitle.Header.Length = sizeof (FRAMEWORK_EFI_IFR_SUBTITLE);\r
43 Subtitle.SubTitle = StringToken;\r
44\r
45 CopyMem (FormBuffer, &Subtitle, sizeof (FRAMEWORK_EFI_IFR_SUBTITLE));\r
46 return EFI_SUCCESS;\r
47}\r
48\r
49/**\r
50 Create a Text opcode independent of string creation\r
51 This is used primarily by users who need to create just one particular valid op-code and the string\r
52 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
53 location to pre-defined forms in HII)\r
54\r
55 @param StringToken - First string token of the text\r
56 @param StringTokenTwo - Second string token of the text\r
57 @param StringTokenThree - Help string token of the text\r
58 @param Flags - Flag of the text\r
59 @param Key - Key of the text\r
60 @param FormBuffer - Output of text as a form\r
61\r
62 @retval EFI_SUCCESS - Text created to be a form\r
63**/\r
64EFI_STATUS\r
65CreateTextOpCode (\r
66 IN STRING_REF StringToken,\r
67 IN STRING_REF StringTokenTwo,\r
68 IN STRING_REF StringTokenThree,\r
69 IN UINT8 Flags,\r
70 IN UINT16 Key,\r
71 IN OUT VOID *FormBuffer\r
72 )\r
73{\r
74 FRAMEWORK_EFI_IFR_TEXT Text;\r
75\r
76 Text.Header.OpCode = FRAMEWORK_EFI_IFR_TEXT_OP;\r
77 Text.Header.Length = sizeof (FRAMEWORK_EFI_IFR_TEXT);\r
78 Text.Text = StringToken;\r
79\r
80 Text.TextTwo = StringTokenTwo;\r
81 Text.Help = StringTokenThree;\r
82 Text.Flags = Flags;\r
83 Text.Key = Key;\r
84\r
85 CopyMem (FormBuffer, &Text, sizeof (FRAMEWORK_EFI_IFR_TEXT));\r
86\r
87 return EFI_SUCCESS;\r
88}\r
89\r
90/**\r
91 Create a hyperlink opcode independent of string creation\r
92 This is used primarily by users who need to create just one particular valid op-code and the string\r
93 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
94 location to pre-defined forms in HII)\r
95 \r
96\r
97 @param FormId - Form ID of the hyperlink\r
98 @param StringToken - Prompt string token of the hyperlink\r
99 @param StringTokenTwo - Help string token of the hyperlink\r
100 @param Flags - Flags of the hyperlink\r
101 @param Key - Key of the hyperlink\r
102 @param FormBuffer - Output of hyperlink as a form\r
103 @retval EFI_SUCCESS - Hyperlink created to be a form\r
104--*/\r
105EFI_STATUS\r
106CreateGotoOpCode (\r
107 IN UINT16 FormId,\r
108 IN STRING_REF StringToken,\r
109 IN STRING_REF StringTokenTwo,\r
110 IN UINT8 Flags,\r
111 IN UINT16 Key,\r
112 IN OUT VOID *FormBuffer\r
113 )\r
114\r
115{\r
116 FRAMEWORK_EFI_IFR_REF Hyperlink;\r
117\r
118 Hyperlink.Header.OpCode = FRAMEWORK_EFI_IFR_REF_OP;\r
119 Hyperlink.Header.Length = sizeof (FRAMEWORK_EFI_IFR_REF);\r
120 Hyperlink.FormId = FormId;\r
121 Hyperlink.Prompt = StringToken;\r
122 Hyperlink.Help = StringTokenTwo;\r
123 Hyperlink.Key = Key;\r
124 Hyperlink.Flags = Flags;\r
125\r
126 CopyMem (FormBuffer, &Hyperlink, sizeof (FRAMEWORK_EFI_IFR_REF));\r
127\r
128 return EFI_SUCCESS;\r
129}\r
130\r
131/**\r
132 Create a one-of opcode with a set of option op-codes to choose from independent of string creation.\r
133 This is used primarily by users who need to create just one particular valid op-code and the string\r
134 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
135 location to pre-defined forms in HII)\r
136\r
137 OptionsList is a pointer to a null-terminated list of option descriptions. Ensure that OptionsList[x].StringToken\r
138 has been filled in since this routine will not generate StringToken values.\r
139 \r
140 @param QuestionId - Question ID of the one-of box\r
141 @param DataWidth - DataWidth of the one-of box\r
142 @param PromptToken - Prompt string token of the one-of box\r
143 @param HelpToken - Help string token of the one-of box\r
144 @param OptionsList - Each string in it is an option of the one-of box\r
145 @param OptionCount - Option string count\r
146 @param FormBuffer - Output of One-Of box as a form\r
147 \r
148\r
149 @retval EFI_SUCCESS - One-Of box created to be a form\r
150 @retval EFI_DEVICE_ERROR - DataWidth > 2\r
151**/\r
152EFI_STATUS\r
153CreateOneOfOpCode (\r
154 IN UINT16 QuestionId,\r
155 IN UINT8 DataWidth,\r
156 IN STRING_REF PromptToken,\r
157 IN STRING_REF HelpToken,\r
158 IN IFR_OPTION *OptionsList,\r
159 IN UINTN OptionCount,\r
160 IN OUT VOID *FormBuffer\r
161 )\r
162{\r
163 UINTN Index;\r
164 FRAMEWORK_EFI_IFR_ONE_OF OneOf;\r
165 FRAMEWORK_EFI_IFR_ONE_OF_OPTION OneOfOption;\r
166 FRAMEWORK_EFI_IFR_END_ONE_OF EndOneOf;\r
167 UINT8 *LocalBuffer;\r
168\r
169 //\r
170 // We do not create op-code storage widths for one-of in excess of 16 bits for now\r
171 //\r
172 if (DataWidth > 2) {\r
173 return EFI_DEVICE_ERROR;\r
174 }\r
175\r
176 OneOf.Header.OpCode = FRAMEWORK_EFI_IFR_ONE_OF_OP;\r
177 OneOf.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ONE_OF);\r
178 OneOf.QuestionId = QuestionId;\r
179 OneOf.Width = DataWidth;\r
180 OneOf.Prompt = PromptToken;\r
181\r
182 OneOf.Help = HelpToken;\r
183\r
184 LocalBuffer = (UINT8 *) FormBuffer;\r
185\r
186 CopyMem (LocalBuffer, &OneOf, sizeof (FRAMEWORK_EFI_IFR_ONE_OF));\r
187\r
188 LocalBuffer = (UINT8 *) (LocalBuffer + sizeof (FRAMEWORK_EFI_IFR_ONE_OF));\r
189\r
190 for (Index = 0; Index < OptionCount; Index++) {\r
191 OneOfOption.Header.OpCode = FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP;\r
192 OneOfOption.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION);\r
193\r
194 OneOfOption.Option = OptionsList[Index].StringToken;\r
195 OneOfOption.Value = OptionsList[Index].Value;\r
196 OneOfOption.Flags = OptionsList[Index].Flags;\r
197 OneOfOption.Key = OptionsList[Index].Key;\r
198\r
199 CopyMem (LocalBuffer, &OneOfOption, sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION));\r
200\r
201 LocalBuffer = (UINT8 *) (LocalBuffer + sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION));\r
202 }\r
203\r
204 EndOneOf.Header.Length = sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF);\r
205 EndOneOf.Header.OpCode = FRAMEWORK_EFI_IFR_END_ONE_OF_OP;\r
206\r
207 CopyMem (LocalBuffer, &EndOneOf, sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF));\r
208\r
209 LocalBuffer = (UINT8 *) (LocalBuffer + sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF));\r
210\r
211 return EFI_SUCCESS;\r
212}\r
213\r
214/**\r
215 Create a ordered list opcode with a set of option op-codes to choose from independent of string creation.\r
216 This is used primarily by users who need to create just one particular valid op-code and the string\r
217 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
218 location to pre-defined forms in HII)\r
219\r
220 OptionsList is a pointer to a null-terminated list of option descriptions. Ensure that OptionsList[x].StringToken\r
221 has been filled in since this routine will not generate StringToken values.\r
222 \r
223 @param QuestionId - Question ID of the ordered list\r
224 @param MaxEntries - MaxEntries of the ordered list\r
225 @param PromptToken - Prompt string token of the ordered list\r
226 @param HelpToken - Help string token of the ordered list\r
227 @param OptionsList - Each string in it is an option of the ordered list\r
228 @param OptionCount - Option string count\r
229 @param FormBuffer - Output of ordered list as a form\r
230 \r
231 @retval EFI_SUCCESS - Ordered list created to be a form\r
232**/\r
233EFI_STATUS\r
234CreateOrderedListOpCode (\r
235 IN UINT16 QuestionId,\r
236 IN UINT8 MaxEntries,\r
237 IN STRING_REF PromptToken,\r
238 IN STRING_REF HelpToken,\r
239 IN IFR_OPTION *OptionsList,\r
240 IN UINTN OptionCount,\r
241 IN OUT VOID *FormBuffer\r
242 )\r
243{\r
244 UINTN Index;\r
245 FRAMEWORK_EFI_IFR_ORDERED_LIST OrderedList;\r
246 FRAMEWORK_EFI_IFR_ONE_OF_OPTION OrderedListOption;\r
247 FRAMEWORK_EFI_IFR_END_ONE_OF EndOrderedList;\r
248 UINT8 *LocalBuffer;\r
249\r
250 OrderedList.Header.OpCode = FRAMEWORK_EFI_IFR_ORDERED_LIST_OP;\r
251 OrderedList.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ORDERED_LIST);\r
252 OrderedList.QuestionId = QuestionId;\r
253 OrderedList.MaxEntries = MaxEntries;\r
254 OrderedList.Prompt = PromptToken;\r
255\r
256 OrderedList.Help = HelpToken;\r
257\r
258 LocalBuffer = (UINT8 *) FormBuffer;\r
259\r
260 CopyMem (LocalBuffer, &OrderedList, sizeof (FRAMEWORK_EFI_IFR_ORDERED_LIST));\r
261\r
262 LocalBuffer = (UINT8 *) (LocalBuffer + sizeof (FRAMEWORK_EFI_IFR_ORDERED_LIST));\r
263\r
264 for (Index = 0; Index < OptionCount; Index++) {\r
265 OrderedListOption.Header.OpCode = FRAMEWORK_EFI_IFR_ONE_OF_OPTION_OP;\r
266 OrderedListOption.Header.Length = sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION);\r
267\r
268 OrderedListOption.Option = OptionsList[Index].StringToken;\r
269 OrderedListOption.Value = OptionsList[Index].Value;\r
270 OrderedListOption.Flags = OptionsList[Index].Flags;\r
271 OrderedListOption.Key = OptionsList[Index].Key;\r
272\r
273 CopyMem (LocalBuffer, &OrderedListOption, sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION));\r
274\r
275 LocalBuffer = (UINT8 *) (LocalBuffer + sizeof (FRAMEWORK_EFI_IFR_ONE_OF_OPTION));\r
276 }\r
277\r
278 EndOrderedList.Header.Length = sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF);\r
279 EndOrderedList.Header.OpCode = FRAMEWORK_EFI_IFR_END_ONE_OF_OP;\r
280\r
281 CopyMem (LocalBuffer, &EndOrderedList, sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF));\r
282\r
283 LocalBuffer = (UINT8 *) (LocalBuffer + sizeof (FRAMEWORK_EFI_IFR_END_ONE_OF));\r
284\r
285 return EFI_SUCCESS;\r
286}\r
287\r
288/**\r
289 Create a checkbox opcode independent of string creation\r
290 This is used primarily by users who need to create just one particular valid op-code and the string\r
291 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
292 location to pre-defined forms in HII)\r
293\r
294 @param QuestionId - Question ID of the check box\r
295 @param DataWidth - DataWidth of the check box\r
296 @param PromptToken - Prompt string token of the check box\r
297 @param HelpToken - Help string token of the check box\r
298 @param Flags - Flags of the check box\r
299 @param Key - Key of the check box\r
300 @param FormBuffer - Output of the check box as a form\r
301\r
302 @retval EFI_SUCCESS - Checkbox created to be a form\r
303 @retval EFI_DEVICE_ERROR - DataWidth > 1\r
304**/\r
305EFI_STATUS\r
306CreateCheckBoxOpCode (\r
307 IN UINT16 QuestionId,\r
308 IN UINT8 DataWidth,\r
309 IN STRING_REF PromptToken,\r
310 IN STRING_REF HelpToken,\r
311 IN UINT8 Flags,\r
312 IN UINT16 Key,\r
313 IN OUT VOID *FormBuffer\r
314 )\r
315\r
316{\r
317 FRAMEWORK_EFI_IFR_CHECKBOX CheckBox;\r
318\r
319 //\r
320 // We do not create op-code storage widths for checkbox in excess of 8 bits for now\r
321 //\r
322 if (DataWidth > 1) {\r
323 return EFI_DEVICE_ERROR;\r
324 }\r
325\r
326 CheckBox.Header.OpCode = FRAMEWORK_EFI_IFR_CHECKBOX_OP;\r
327 CheckBox.Header.Length = sizeof (FRAMEWORK_EFI_IFR_CHECKBOX);\r
328 CheckBox.QuestionId = QuestionId;\r
329 CheckBox.Width = DataWidth;\r
330 CheckBox.Prompt = PromptToken;\r
331\r
332 CheckBox.Help = HelpToken;\r
333 CheckBox.Flags = Flags;\r
334 CheckBox.Key = Key;\r
335\r
336 CopyMem (FormBuffer, &CheckBox, sizeof (FRAMEWORK_EFI_IFR_CHECKBOX));\r
337\r
338 return EFI_SUCCESS;\r
339}\r
340\r
341/**\r
342 Create a numeric opcode independent of string creation\r
343 This is used primarily by users who need to create just one particular valid op-code and the string\r
344 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
345 location to pre-defined forms in HII)\r
346 \r
347 @param QuestionId - Question ID of the numeric\r
348 @param DataWidth - DataWidth of the numeric\r
349 @param PromptToken - Prompt string token of the numeric\r
350 @param HelpToken - Help string token of the numeric\r
351 @param Minimum - Minumun boundary of the numeric\r
352 @param Maximum - Maximum boundary of the numeric\r
353 @param Step - Step of the numeric\r
354 @param Default - Default value of the numeric\r
355 @param Flags - Flags of the numeric\r
356 @param Key - Key of the numeric\r
357 @param FormBuffer - Output of the numeric as a form\r
358 \r
359\r
360 @retval EFI_SUCCESS - The numeric created to be a form.\r
361 @retval EFI_DEVICE_ERROR - DataWidth > 2\r
362**/\r
363EFI_STATUS\r
364CreateNumericOpCode (\r
365 IN UINT16 QuestionId,\r
366 IN UINT8 DataWidth,\r
367 IN STRING_REF PromptToken,\r
368 IN STRING_REF HelpToken,\r
369 IN UINT16 Minimum,\r
370 IN UINT16 Maximum,\r
371 IN UINT16 Step,\r
372 IN UINT16 Default,\r
373 IN UINT8 Flags,\r
374 IN UINT16 Key,\r
375 IN OUT VOID *FormBuffer\r
376 )\r
377\r
378{\r
379 FRAMEWORK_EFI_IFR_NUMERIC Numeric;\r
380\r
381 //\r
382 // We do not create op-code storage widths for numerics 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 Numeric.Header.OpCode = FRAMEWORK_EFI_IFR_NUMERIC_OP;\r
389 Numeric.Header.Length = sizeof (FRAMEWORK_EFI_IFR_NUMERIC);\r
390 Numeric.QuestionId = QuestionId;\r
391 Numeric.Width = DataWidth;\r
392 Numeric.Prompt = PromptToken;\r
393\r
394 Numeric.Help = HelpToken;\r
395 Numeric.Minimum = Minimum;\r
396 Numeric.Maximum = Maximum;\r
397 Numeric.Step = Step;\r
398 Numeric.Default = Default;\r
399 Numeric.Flags = Flags;\r
400 Numeric.Key = Key;\r
401\r
402 CopyMem (FormBuffer, &Numeric, sizeof (FRAMEWORK_EFI_IFR_NUMERIC));\r
403\r
404 return EFI_SUCCESS;\r
405}\r
406\r
407/**\r
408 Create a numeric opcode independent of string creation\r
409 This is used primarily by users who need to create just one particular valid op-code and the string\r
410 data will be assumed to exist in the HiiDatabase already. (Useful when exporting op-codes at a label\r
411 location to pre-defined forms in HII)\r
412 \r
413 @param QuestionId Question ID of the string\r
414 @param DataWidth DataWidth of the string\r
415 @param PromptToken Prompt token of the string\r
416 @param HelpToken Help token of the string\r
417 @param MinSize Min size boundary of the string\r
418 @param MaxSize Max size boundary of the string\r
419 @param Flags Flags of the string\r
420 @param Key Key of the string\r
421 @param FormBuffer Output of the string as a form\r
422 \r
423 @retval EFI_SUCCESS String created to be a form.\r
424**/\r
425EFI_STATUS\r
426CreateStringOpCode (\r
427 IN UINT16 QuestionId,\r
428 IN UINT8 DataWidth,\r
429 IN STRING_REF PromptToken,\r
430 IN STRING_REF HelpToken,\r
431 IN UINT8 MinSize,\r
432 IN UINT8 MaxSize,\r
433 IN UINT8 Flags,\r
434 IN UINT16 Key,\r
435 IN OUT VOID *FormBuffer\r
436 )\r
437\r
438{\r
439 FRAMEWORK_EFI_IFR_STRING String;\r
440\r
441 String.Header.OpCode = FRAMEWORK_EFI_IFR_STRING_OP;\r
442 String.Header.Length = sizeof (FRAMEWORK_EFI_IFR_STRING);\r
443 String.QuestionId = QuestionId;\r
444 String.Width = DataWidth;\r
445 String.Prompt = PromptToken;\r
446\r
447 String.Help = HelpToken;\r
448 String.MinSize = MinSize;\r
449 String.MaxSize = MaxSize;\r
450 String.Flags = Flags;\r
451 String.Key = Key;\r
452\r
453 CopyMem (FormBuffer, &String, sizeof (FRAMEWORK_EFI_IFR_STRING));\r
454\r
455 return EFI_SUCCESS;\r
456}\r
457\r
458/**\r
459 Create a banner opcode. This is primarily used by the FrontPage implementation from BDS.\r
460 \r
461 @param Title - Title of the banner\r
462 @param LineNumber - LineNumber of the banner\r
463 @param Alignment - Alignment of the banner\r
464 @param FormBuffer - Output of banner as a form\r
465\r
466 @retval EFI_SUCCESS - Banner created to be a form.\r
467**/\r
468EFI_STATUS\r
469CreateBannerOpCode (\r
470 IN UINT16 Title,\r
471 IN UINT16 LineNumber,\r
472 IN UINT8 Alignment,\r
473 IN OUT VOID *FormBuffer\r
474 )\r
475\r
476{\r
477 FRAMEWORK_EFI_IFR_BANNER Banner;\r
478\r
479 Banner.Header.OpCode = FRAMEWORK_EFI_IFR_BANNER_OP;\r
480 Banner.Header.Length = sizeof (FRAMEWORK_EFI_IFR_BANNER);\r
481 CopyMem (&Banner.Title, &Title, sizeof (UINT16));\r
482 CopyMem (&Banner.LineNumber, &LineNumber, sizeof (UINT16));\r
483 Banner.Alignment = Alignment;\r
484\r
485 CopyMem (FormBuffer, &Banner, sizeof (FRAMEWORK_EFI_IFR_BANNER));\r
486\r
487 return EFI_SUCCESS;\r
488}\r
489\r
490\r