]>
Commit | Line | Data |
---|---|---|
1 | /*++\r | |
2 | \r | |
3 | Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r | |
4 | This program and the accompanying materials\r | |
5 | are licensed and made available under the terms and conditions of the BSD License\r | |
6 | which accompanies this distribution. The full text of the license may be found at\r | |
7 | http://opensource.org/licenses/bsd-license.php\r | |
8 | \r | |
9 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
10 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r | |
11 | \r | |
12 | Module Name:\r | |
13 | \r | |
14 | IfrParse.c \r | |
15 | \r | |
16 | Abstract:\r | |
17 | \r | |
18 | Routines for parsing and managing HII IFR packs.\r | |
19 | \r | |
20 | --*/\r | |
21 | \r | |
22 | #include <stdio.h>\r | |
23 | #include <string.h>\r | |
24 | #include <stdlib.h>\r | |
25 | \r | |
26 | #include "Tiano.h"\r | |
27 | #include "EfiUtilityMsgs.h"\r | |
28 | #include "EfiInternalFormRepresentation.h"\r | |
29 | #include "Hii.h"\r | |
30 | #include "IfrParse.h"\r | |
31 | #include "HiiPack.h"\r | |
32 | \r | |
33 | typedef struct _VARIABLE_STORE_ENTRY {\r | |
34 | struct _VARIABLE_STORE_ENTRY *Next;\r | |
35 | CHAR8 VarName[MAX_VARIABLE_NAME];\r | |
36 | char *VarBuffer;\r | |
37 | int VarBufferSize;\r | |
38 | EFI_HII_VARIABLE_PACK *VarPack;\r | |
39 | int VarPackSize;\r | |
40 | } VARIABLE_STORE_ENTRY;\r | |
41 | \r | |
42 | typedef STATUS (*IFR_PARSE_FUNCTION) (IFR_PARSE_CONTEXT * Context);\r | |
43 | \r | |
44 | typedef struct {\r | |
45 | INT8 *Name;\r | |
46 | INT32 Size;\r | |
47 | IFR_PARSE_FUNCTION Parse;\r | |
48 | } IFR_PARSE_TABLE_ENTRY;\r | |
49 | \r | |
50 | static\r | |
51 | STATUS\r | |
52 | IfrParse01 (\r | |
53 | IFR_PARSE_CONTEXT *Context\r | |
54 | );\r | |
55 | static\r | |
56 | STATUS\r | |
57 | IfrParse02 (\r | |
58 | IFR_PARSE_CONTEXT *Context\r | |
59 | );\r | |
60 | static\r | |
61 | STATUS\r | |
62 | IfrParse03 (\r | |
63 | IFR_PARSE_CONTEXT *Context\r | |
64 | );\r | |
65 | static\r | |
66 | STATUS\r | |
67 | IfrParse05 (\r | |
68 | IFR_PARSE_CONTEXT *Context\r | |
69 | );\r | |
70 | static\r | |
71 | STATUS\r | |
72 | IfrParse06 (\r | |
73 | IFR_PARSE_CONTEXT *Context\r | |
74 | );\r | |
75 | static\r | |
76 | STATUS\r | |
77 | IfrParse07 (\r | |
78 | IFR_PARSE_CONTEXT *Context\r | |
79 | );\r | |
80 | static\r | |
81 | STATUS\r | |
82 | IfrParse08 (\r | |
83 | IFR_PARSE_CONTEXT *Context\r | |
84 | );\r | |
85 | static\r | |
86 | STATUS\r | |
87 | IfrParse09 (\r | |
88 | IFR_PARSE_CONTEXT *Context\r | |
89 | );\r | |
90 | static\r | |
91 | STATUS\r | |
92 | IfrParse0A (\r | |
93 | IFR_PARSE_CONTEXT *Context\r | |
94 | );\r | |
95 | static\r | |
96 | STATUS\r | |
97 | IfrParse0B (\r | |
98 | IFR_PARSE_CONTEXT *Context\r | |
99 | );\r | |
100 | static\r | |
101 | STATUS\r | |
102 | IfrParse0C (\r | |
103 | IFR_PARSE_CONTEXT *Context\r | |
104 | );\r | |
105 | static\r | |
106 | STATUS\r | |
107 | IfrParse0D (\r | |
108 | IFR_PARSE_CONTEXT *Context\r | |
109 | );\r | |
110 | static\r | |
111 | STATUS\r | |
112 | IfrParse0E (\r | |
113 | IFR_PARSE_CONTEXT *Context\r | |
114 | );\r | |
115 | static\r | |
116 | STATUS\r | |
117 | IfrParse0F (\r | |
118 | IFR_PARSE_CONTEXT *Context\r | |
119 | );\r | |
120 | static\r | |
121 | STATUS\r | |
122 | IfrParse10 (\r | |
123 | IFR_PARSE_CONTEXT *Context\r | |
124 | );\r | |
125 | static\r | |
126 | STATUS\r | |
127 | IfrParse11 (\r | |
128 | IFR_PARSE_CONTEXT *Context\r | |
129 | );\r | |
130 | static\r | |
131 | STATUS\r | |
132 | IfrParse12 (\r | |
133 | IFR_PARSE_CONTEXT *Context\r | |
134 | );\r | |
135 | static\r | |
136 | STATUS\r | |
137 | IfrParse13 (\r | |
138 | IFR_PARSE_CONTEXT *Context\r | |
139 | );\r | |
140 | static\r | |
141 | STATUS\r | |
142 | IfrParse14 (\r | |
143 | IFR_PARSE_CONTEXT *Context\r | |
144 | );\r | |
145 | static\r | |
146 | STATUS\r | |
147 | IfrParse15 (\r | |
148 | IFR_PARSE_CONTEXT *Context\r | |
149 | );\r | |
150 | static\r | |
151 | STATUS\r | |
152 | IfrParse16 (\r | |
153 | IFR_PARSE_CONTEXT *Context\r | |
154 | );\r | |
155 | static\r | |
156 | STATUS\r | |
157 | IfrParse17 (\r | |
158 | IFR_PARSE_CONTEXT *Context\r | |
159 | );\r | |
160 | static\r | |
161 | STATUS\r | |
162 | IfrParse18 (\r | |
163 | IFR_PARSE_CONTEXT *Context\r | |
164 | );\r | |
165 | static\r | |
166 | STATUS\r | |
167 | IfrParse19 (\r | |
168 | IFR_PARSE_CONTEXT *Context\r | |
169 | );\r | |
170 | static\r | |
171 | STATUS\r | |
172 | IfrParse1A (\r | |
173 | IFR_PARSE_CONTEXT *Context\r | |
174 | );\r | |
175 | static\r | |
176 | STATUS\r | |
177 | IfrParse1B (\r | |
178 | IFR_PARSE_CONTEXT *Context\r | |
179 | );\r | |
180 | static\r | |
181 | STATUS\r | |
182 | IfrParse1C (\r | |
183 | IFR_PARSE_CONTEXT *Context\r | |
184 | );\r | |
185 | static\r | |
186 | STATUS\r | |
187 | IfrParse1D (\r | |
188 | IFR_PARSE_CONTEXT *Context\r | |
189 | );\r | |
190 | static\r | |
191 | STATUS\r | |
192 | IfrParse1E (\r | |
193 | IFR_PARSE_CONTEXT *Context\r | |
194 | );\r | |
195 | static\r | |
196 | STATUS\r | |
197 | IfrParse1F (\r | |
198 | IFR_PARSE_CONTEXT *Context\r | |
199 | );\r | |
200 | static\r | |
201 | STATUS\r | |
202 | IfrParse20 (\r | |
203 | IFR_PARSE_CONTEXT *Context\r | |
204 | );\r | |
205 | static\r | |
206 | STATUS\r | |
207 | IfrParse21 (\r | |
208 | IFR_PARSE_CONTEXT *Context\r | |
209 | );\r | |
210 | static\r | |
211 | STATUS\r | |
212 | IfrParse22 (\r | |
213 | IFR_PARSE_CONTEXT *Context\r | |
214 | );\r | |
215 | static\r | |
216 | STATUS\r | |
217 | IfrParse23 (\r | |
218 | IFR_PARSE_CONTEXT *Context\r | |
219 | );\r | |
220 | static\r | |
221 | STATUS\r | |
222 | IfrParse24 (\r | |
223 | IFR_PARSE_CONTEXT *Context\r | |
224 | );\r | |
225 | static\r | |
226 | STATUS\r | |
227 | IfrParse25 (\r | |
228 | IFR_PARSE_CONTEXT *Context\r | |
229 | );\r | |
230 | static\r | |
231 | STATUS\r | |
232 | IfrParse26 (\r | |
233 | IFR_PARSE_CONTEXT *Context\r | |
234 | );\r | |
235 | static\r | |
236 | STATUS\r | |
237 | IfrParse27 (\r | |
238 | IFR_PARSE_CONTEXT *Context\r | |
239 | );\r | |
240 | static\r | |
241 | STATUS\r | |
242 | IfrParse28 (\r | |
243 | IFR_PARSE_CONTEXT *Context\r | |
244 | );\r | |
245 | static\r | |
246 | STATUS\r | |
247 | IfrParse29 (\r | |
248 | IFR_PARSE_CONTEXT *Context\r | |
249 | );\r | |
250 | static\r | |
251 | STATUS\r | |
252 | IfrParse2A (\r | |
253 | IFR_PARSE_CONTEXT *Context\r | |
254 | );\r | |
255 | \r | |
256 | static const IFR_PARSE_TABLE_ENTRY mIfrParseTable[] = {\r | |
257 | {\r | |
258 | 0,\r | |
259 | 0,\r | |
260 | NULL\r | |
261 | }, // invalid\r | |
262 | {\r | |
263 | "EFI_IFR_FORM",\r | |
264 | sizeof (EFI_IFR_FORM),\r | |
265 | IfrParse01\r | |
266 | },\r | |
267 | {\r | |
268 | "EFI_IFR_SUBTITLE",\r | |
269 | sizeof (EFI_IFR_SUBTITLE),\r | |
270 | IfrParse02\r | |
271 | },\r | |
272 | {\r | |
273 | "EFI_IFR_TEXT",\r | |
274 | -6,\r | |
275 | IfrParse03\r | |
276 | }, // sizeof (EFI_IFR_TEXT) },\r | |
277 | {\r | |
278 | "unused 0x04 opcode",\r | |
279 | 0,\r | |
280 | NULL\r | |
281 | }, // EFI_IFR_GRAPHIC_OP\r | |
282 | {\r | |
283 | "EFI_IFR_ONE_OF",\r | |
284 | sizeof (EFI_IFR_ONE_OF),\r | |
285 | IfrParse05\r | |
286 | },\r | |
287 | {\r | |
288 | "EFI_IFR_CHECK_BOX",\r | |
289 | sizeof (EFI_IFR_CHECK_BOX),\r | |
290 | IfrParse06\r | |
291 | },\r | |
292 | {\r | |
293 | "EFI_IFR_NUMERIC",\r | |
294 | sizeof (EFI_IFR_NUMERIC),\r | |
295 | IfrParse07\r | |
296 | },\r | |
297 | {\r | |
298 | "EFI_IFR_PASSWORD",\r | |
299 | sizeof (EFI_IFR_PASSWORD),\r | |
300 | IfrParse08\r | |
301 | },\r | |
302 | {\r | |
303 | "EFI_IFR_ONE_OF_OPTION",\r | |
304 | sizeof (EFI_IFR_ONE_OF_OPTION),\r | |
305 | IfrParse09\r | |
306 | },\r | |
307 | {\r | |
308 | "EFI_IFR_SUPPRESS",\r | |
309 | sizeof (EFI_IFR_SUPPRESS),\r | |
310 | IfrParse0A\r | |
311 | },\r | |
312 | {\r | |
313 | "EFI_IFR_END_FORM",\r | |
314 | sizeof (EFI_IFR_END_FORM),\r | |
315 | IfrParse0B\r | |
316 | },\r | |
317 | {\r | |
318 | "EFI_IFR_HIDDEN",\r | |
319 | sizeof (EFI_IFR_HIDDEN),\r | |
320 | IfrParse0C\r | |
321 | },\r | |
322 | {\r | |
323 | "EFI_IFR_END_FORM_SET",\r | |
324 | sizeof (EFI_IFR_END_FORM_SET),\r | |
325 | IfrParse0D\r | |
326 | },\r | |
327 | {\r | |
328 | "EFI_IFR_FORM_SET",\r | |
329 | sizeof (EFI_IFR_FORM_SET),\r | |
330 | IfrParse0E\r | |
331 | },\r | |
332 | {\r | |
333 | "EFI_IFR_REF",\r | |
334 | sizeof (EFI_IFR_REF),\r | |
335 | IfrParse0F\r | |
336 | },\r | |
337 | {\r | |
338 | "EFI_IFR_END_ONE_OF",\r | |
339 | sizeof (EFI_IFR_END_ONE_OF),\r | |
340 | IfrParse10\r | |
341 | },\r | |
342 | {\r | |
343 | "EFI_IFR_INCONSISTENT",\r | |
344 | sizeof (EFI_IFR_INCONSISTENT),\r | |
345 | IfrParse11\r | |
346 | },\r | |
347 | {\r | |
348 | "EFI_IFR_EQ_ID_VAL",\r | |
349 | sizeof (EFI_IFR_EQ_ID_VAL),\r | |
350 | IfrParse12\r | |
351 | },\r | |
352 | {\r | |
353 | "EFI_IFR_EQ_ID_ID",\r | |
354 | sizeof (EFI_IFR_EQ_ID_ID),\r | |
355 | IfrParse13\r | |
356 | },\r | |
357 | {\r | |
358 | "EFI_IFR_EQ_ID_LIST",\r | |
359 | -(int) (sizeof (EFI_IFR_EQ_ID_LIST)),\r | |
360 | IfrParse14\r | |
361 | },\r | |
362 | {\r | |
363 | "EFI_IFR_AND",\r | |
364 | sizeof (EFI_IFR_AND),\r | |
365 | IfrParse15\r | |
366 | },\r | |
367 | {\r | |
368 | "EFI_IFR_OR",\r | |
369 | sizeof (EFI_IFR_OR),\r | |
370 | IfrParse16\r | |
371 | },\r | |
372 | {\r | |
373 | "EFI_IFR_NOT",\r | |
374 | sizeof (EFI_IFR_NOT),\r | |
375 | IfrParse17\r | |
376 | },\r | |
377 | {\r | |
378 | "EFI_IFR_END_IF",\r | |
379 | sizeof (EFI_IFR_END_IF),\r | |
380 | IfrParse18\r | |
381 | },\r | |
382 | {\r | |
383 | "EFI_IFR_GRAYOUT",\r | |
384 | sizeof (EFI_IFR_GRAYOUT),\r | |
385 | IfrParse19\r | |
386 | },\r | |
387 | {\r | |
388 | "EFI_IFR_DATE",\r | |
389 | sizeof (EFI_IFR_DATE) / 3,\r | |
390 | IfrParse1A\r | |
391 | },\r | |
392 | {\r | |
393 | "EFI_IFR_TIME",\r | |
394 | sizeof (EFI_IFR_TIME) / 3,\r | |
395 | IfrParse1B\r | |
396 | },\r | |
397 | {\r | |
398 | "EFI_IFR_STRING",\r | |
399 | sizeof (EFI_IFR_STRING),\r | |
400 | IfrParse1C\r | |
401 | },\r | |
402 | {\r | |
403 | "EFI_IFR_LABEL",\r | |
404 | sizeof (EFI_IFR_LABEL),\r | |
405 | IfrParse1D\r | |
406 | },\r | |
407 | {\r | |
408 | "EFI_IFR_SAVE_DEFAULTS",\r | |
409 | sizeof (EFI_IFR_SAVE_DEFAULTS),\r | |
410 | IfrParse1E\r | |
411 | },\r | |
412 | {\r | |
413 | "EFI_IFR_RESTORE_DEFAULTS",\r | |
414 | sizeof (EFI_IFR_RESTORE_DEFAULTS),\r | |
415 | IfrParse1F\r | |
416 | },\r | |
417 | {\r | |
418 | "EFI_IFR_BANNER",\r | |
419 | sizeof (EFI_IFR_BANNER),\r | |
420 | IfrParse20\r | |
421 | },\r | |
422 | {\r | |
423 | "EFI_IFR_INVENTORY",\r | |
424 | sizeof (EFI_IFR_INVENTORY),\r | |
425 | IfrParse21\r | |
426 | },\r | |
427 | {\r | |
428 | "EFI_IFR_EQ_VAR_VAL_OP",\r | |
429 | sizeof (EFI_IFR_EQ_VAR_VAL),\r | |
430 | IfrParse22\r | |
431 | },\r | |
432 | {\r | |
433 | "EFI_IFR_ORDERED_LIST_OP",\r | |
434 | sizeof (EFI_IFR_ORDERED_LIST),\r | |
435 | IfrParse23\r | |
436 | },\r | |
437 | {\r | |
438 | "EFI_IFR_VARSTORE_OP",\r | |
439 | -(int) (sizeof (EFI_IFR_VARSTORE)),\r | |
440 | IfrParse24\r | |
441 | },\r | |
442 | {\r | |
443 | "EFI_IFR_VARSTORE_SELECT_OP",\r | |
444 | sizeof (EFI_IFR_VARSTORE_SELECT),\r | |
445 | IfrParse25\r | |
446 | },\r | |
447 | {\r | |
448 | "EFI_IFR_VARSTORE_SELECT_PAIR_OP",\r | |
449 | sizeof (EFI_IFR_VARSTORE_SELECT_PAIR),\r | |
450 | IfrParse26\r | |
451 | },\r | |
452 | {\r | |
453 | "EFI_IFR_TRUE",\r | |
454 | sizeof (EFI_IFR_TRUE),\r | |
455 | IfrParse27\r | |
456 | },\r | |
457 | {\r | |
458 | "EFI_IFR_FALSE",\r | |
459 | sizeof (EFI_IFR_FALSE),\r | |
460 | IfrParse28\r | |
461 | },\r | |
462 | {\r | |
463 | "EFI_IFR_GT",\r | |
464 | sizeof (EFI_IFR_GT),\r | |
465 | IfrParse29\r | |
466 | },\r | |
467 | {\r | |
468 | "EFI_IFR_GE",\r | |
469 | sizeof (EFI_IFR_GE),\r | |
470 | IfrParse2A\r | |
471 | },\r | |
472 | };\r | |
473 | #define PARSE_TABLE_ENTRIES (ARRAY_SIZE (mIfrParseTable))\r | |
474 | \r | |
475 | static\r | |
476 | STATUS\r | |
477 | GetVarStoreInfo (\r | |
478 | IFR_PARSE_CONTEXT *Context,\r | |
479 | UINT16 VarId,\r | |
480 | EFI_GUID **VarStoreGuid,\r | |
481 | char **VarStoreName\r | |
482 | );\r | |
483 | \r | |
484 | static\r | |
485 | void\r | |
486 | FreeVarStores (\r | |
487 | VOID\r | |
488 | );\r | |
489 | \r | |
490 | static\r | |
491 | STATUS\r | |
492 | CreateVarStore (\r | |
493 | EFI_GUID *VarGuid,\r | |
494 | CHAR8 *VarName,\r | |
495 | int VarStoreSize\r | |
496 | );\r | |
497 | \r | |
498 | static\r | |
499 | STATUS\r | |
500 | SetDefaults (\r | |
501 | IFR_PARSE_CONTEXT *Context,\r | |
502 | UINT32 MfgDefaults\r | |
503 | );\r | |
504 | \r | |
505 | //\r | |
506 | // Globals\r | |
507 | //\r | |
508 | static IFR_PARSE_CONTEXT *mParseContext = NULL;\r | |
509 | static VARIABLE_STORE_ENTRY *mVariableStores = NULL;\r | |
510 | static int BreakOnOpcodeTag = 0;\r | |
511 | static int OpcodeTag = 1;\r | |
512 | \r | |
513 | /*****************************************************************************/\r | |
514 | STATUS\r | |
515 | IfrParseCheck (\r | |
516 | char *Buffer,\r | |
517 | long BufferSize\r | |
518 | )\r | |
519 | /*++\r | |
520 | \r | |
521 | Routine Description:\r | |
522 | \r | |
523 | Check a buffer to ensure that is is parseable IFR\r | |
524 | \r | |
525 | Arguments:\r | |
526 | \r | |
527 | Buffer - pointer to raw IFR bytes\r | |
528 | BufferSize - size of IFR pointed to by Buffer\r | |
529 | \r | |
530 | Returns:\r | |
531 | \r | |
532 | STATUS_SUCCESS if successful\r | |
533 | STATUS_ERROR otherwise\r | |
534 | \r | |
535 | --*/\r | |
536 | {\r | |
537 | char *Start;\r | |
538 | \r | |
539 | char *End;\r | |
540 | \r | |
541 | char *Pos;\r | |
542 | EFI_IFR_OP_HEADER *OpHeader;\r | |
543 | char *FileName;\r | |
544 | FileName = "";\r | |
545 | //\r | |
546 | // Walk the list of IFR statements in the IFR pack\r | |
547 | //\r | |
548 | Start = Buffer;\r | |
549 | Pos = Buffer;\r | |
550 | End = Start + BufferSize;\r | |
551 | while ((Pos >= Start) && (Pos < End)) {\r | |
552 | OpHeader = (EFI_IFR_OP_HEADER *) Pos;\r | |
553 | //\r | |
554 | // Check range on size\r | |
555 | //\r | |
556 | if (Pos + OpHeader->Length > End) {\r | |
557 | Error (NULL, 0, 0, FileName, "invalid IFR opcode size at offset 0x%X", (int) Pos - (int) Start);\r | |
558 | return STATUS_ERROR;\r | |
559 | }\r | |
560 | \r | |
561 | if (OpHeader->Length == 0) {\r | |
562 | Error (NULL, 0, 0, FileName, "IFR opcode size=0 at offset 0x%X", (int) Pos - (int) Start);\r | |
563 | return STATUS_ERROR;\r | |
564 | }\r | |
565 | //\r | |
566 | // See if it's the END_FORMSET opcode\r | |
567 | //\r | |
568 | if (OpHeader->OpCode == EFI_IFR_END_FORM_SET_OP) {\r | |
569 | break;\r | |
570 | }\r | |
571 | //\r | |
572 | // Advance to next IFR statement/opcode\r | |
573 | //\r | |
574 | Pos += OpHeader->Length;\r | |
575 | }\r | |
576 | \r | |
577 | return STATUS_SUCCESS;\r | |
578 | }\r | |
579 | \r | |
580 | STATUS\r | |
581 | IfrParseInit (\r | |
582 | VOID\r | |
583 | )\r | |
584 | /*++\r | |
585 | \r | |
586 | Routine Description:\r | |
587 | \r | |
588 | Initialize this module for IFR pack parsing\r | |
589 | \r | |
590 | Arguments:\r | |
591 | \r | |
592 | Returns:\r | |
593 | \r | |
594 | STATUS_SUCCESS always\r | |
595 | \r | |
596 | --*/\r | |
597 | {\r | |
598 | return STATUS_SUCCESS;\r | |
599 | }\r | |
600 | \r | |
601 | STATUS\r | |
602 | IfrParseEnd (\r | |
603 | VOID\r | |
604 | )\r | |
605 | /*++\r | |
606 | \r | |
607 | Routine Description:\r | |
608 | \r | |
609 | Free up memory allocated during IFR pack parsing done by this module\r | |
610 | \r | |
611 | Arguments:\r | |
612 | None\r | |
613 | \r | |
614 | Returns:\r | |
615 | \r | |
616 | STATUS_SUCCESS always\r | |
617 | \r | |
618 | --*/\r | |
619 | {\r | |
620 | IFR_PARSE_CONTEXT *NextContext;\r | |
621 | IFR_PARSE_ENTRY *NextEntry;\r | |
622 | //\r | |
623 | // Free up the memory from our parse contexts\r | |
624 | //\r | |
625 | while (mParseContext != NULL) {\r | |
626 | while (mParseContext->Ifr != NULL) {\r | |
627 | NextEntry = mParseContext->Ifr->Next;\r | |
628 | //\r | |
629 | // We pointed directly into the user buffer, rather than make\r | |
630 | // a copy, so don't free up the bytes.\r | |
631 | //\r | |
632 | free (mParseContext->Ifr);\r | |
633 | mParseContext->Ifr = NextEntry;\r | |
634 | }\r | |
635 | \r | |
636 | NextContext = mParseContext->Next;\r | |
637 | free (mParseContext->PackHeader);\r | |
638 | free (mParseContext);\r | |
639 | mParseContext = NextContext;\r | |
640 | }\r | |
641 | \r | |
642 | return STATUS_SUCCESS;\r | |
643 | }\r | |
644 | \r | |
645 | static\r | |
646 | void\r | |
647 | FreeVarStores (\r | |
648 | VOID\r | |
649 | )\r | |
650 | /*++\r | |
651 | \r | |
652 | Routine Description:\r | |
653 | \r | |
654 | GC_TODO: Add function description\r | |
655 | \r | |
656 | Arguments:\r | |
657 | \r | |
658 | None\r | |
659 | \r | |
660 | Returns:\r | |
661 | \r | |
662 | GC_TODO: add return values\r | |
663 | \r | |
664 | --*/\r | |
665 | {\r | |
666 | VARIABLE_STORE_ENTRY *NextVarStore;\r | |
667 | //\r | |
668 | // Free up memory from our variable stores\r | |
669 | //\r | |
670 | while (mVariableStores != NULL) {\r | |
671 | if (mVariableStores->VarPack != NULL) {\r | |
672 | free (mVariableStores->VarPack);\r | |
673 | }\r | |
674 | \r | |
675 | NextVarStore = mVariableStores->Next;\r | |
676 | free (mVariableStores);\r | |
677 | mVariableStores = NextVarStore;\r | |
678 | }\r | |
679 | }\r | |
680 | \r | |
681 | /******************************************************************************\r | |
682 | FUNCTION: IfrParsePack() \r | |
683 | \r | |
684 | DESCRIPTION: Given a pointer to an IFR pack, parse it to create a linked\r | |
685 | list of opcodes and relevant data required for later dumping.\r | |
686 | \r | |
687 | \r | |
688 | *******************************************************************************/\r | |
689 | STATUS\r | |
690 | IfrParsePack (\r | |
691 | int Handle,\r | |
692 | EFI_HII_IFR_PACK *PackHeader,\r | |
693 | EFI_GUID *PackageGuid\r | |
694 | )\r | |
695 | /*++\r | |
696 | \r | |
697 | Routine Description:\r | |
698 | \r | |
699 | Given a pointer to an IFR pack, parse it to create a linked\r | |
700 | list of opcodes and relevant data required for later dumping.\r | |
701 | \r | |
702 | Arguments:\r | |
703 | \r | |
704 | Handle - the handle number associated with this IFR pack. It\r | |
705 | can be used later to retrieve more info on the particular\r | |
706 | pack\r | |
707 | PackHeader - pointer to IFR pack to parse\r | |
708 | PackageGuid - on input, it comes from the HII data table entry for this pack. \r | |
709 | On output, we'll return the IFR formset GUID.\r | |
710 | \r | |
711 | Returns:\r | |
712 | \r | |
713 | STATUS_SUCCESS always\r | |
714 | \r | |
715 | --*/\r | |
716 | {\r | |
717 | EFI_IFR_OP_HEADER *OpHeader;\r | |
718 | IFR_PARSE_CONTEXT *Context;\r | |
719 | IFR_PARSE_CONTEXT *TempContext;\r | |
720 | IFR_PARSE_ENTRY *IfrEntry;\r | |
721 | //\r | |
722 | // Initialize our context\r | |
723 | //\r | |
724 | Context = (IFR_PARSE_CONTEXT *) malloc (sizeof (IFR_PARSE_CONTEXT));\r | |
725 | if (Context == NULL) {\r | |
726 | Error (NULL, 0, 0, "memory allocation failure", NULL);\r | |
727 | return STATUS_ERROR;\r | |
728 | }\r | |
729 | \r | |
730 | memset ((void *) Context, 0, sizeof (IFR_PARSE_CONTEXT));\r | |
731 | //\r | |
732 | // Cache a copy of the input pack so the caller can free their copy\r | |
733 | //\r | |
734 | Context->PackHeader = (EFI_HII_IFR_PACK *) malloc (PackHeader->Header.Length);\r | |
735 | if (Context->PackHeader == NULL) {\r | |
736 | Error (NULL, 0, 0, "memory allocation failure", NULL);\r | |
737 | free (Context);\r | |
738 | return STATUS_ERROR;\r | |
739 | }\r | |
740 | \r | |
741 | memcpy (Context->PackHeader, PackHeader, PackHeader->Header.Length);\r | |
742 | Context->IfrBufferStart = (char *) (Context->PackHeader + 1);\r | |
743 | Context->CurrentPos = Context->IfrBufferStart;\r | |
744 | Context->IfrBufferLen = PackHeader->Header.Length - sizeof (EFI_HII_IFR_PACK);\r | |
745 | Context->Handle = Handle;\r | |
746 | Context->FormsetGuid = &Context->NullGuid;\r | |
747 | Context->PackageGuid = *PackageGuid;\r | |
748 | //\r | |
749 | // Add it to the end of our list\r | |
750 | //\r | |
751 | if (mParseContext == NULL) {\r | |
752 | mParseContext = Context;\r | |
753 | } else {\r | |
754 | TempContext = mParseContext;\r | |
755 | while (TempContext->Next != NULL) {\r | |
756 | TempContext = TempContext->Next;\r | |
757 | }\r | |
758 | \r | |
759 | TempContext->Next = Context;\r | |
760 | }\r | |
761 | //\r | |
762 | // Walk the opcodes in the pack\r | |
763 | //\r | |
764 | while\r | |
765 | (\r | |
766 | (Context->CurrentPos >= Context->IfrBufferStart) &&\r | |
767 | (Context->CurrentPos < Context->IfrBufferStart + Context->IfrBufferLen)\r | |
768 | ) {\r | |
769 | OpHeader = (EFI_IFR_OP_HEADER *) Context->CurrentPos;\r | |
770 | //\r | |
771 | // Allocate a new IFR entry to put in our linked list, then\r | |
772 | // point directly to the caller's raw data.\r | |
773 | //\r | |
774 | IfrEntry = (IFR_PARSE_ENTRY *) malloc (sizeof (IFR_PARSE_ENTRY));\r | |
775 | if (IfrEntry == NULL) {\r | |
776 | Error (NULL, 0, 0, "memory allocation failure", NULL);\r | |
777 | free (Context->PackHeader);\r | |
778 | free (Context);\r | |
779 | return STATUS_ERROR;\r | |
780 | }\r | |
781 | \r | |
782 | memset ((void *) IfrEntry, 0, sizeof (IFR_PARSE_ENTRY));\r | |
783 | IfrEntry->Tag = ++OpcodeTag;\r | |
784 | if (OpcodeTag == BreakOnOpcodeTag) {\r | |
785 | EFI_BREAKPOINT ();\r | |
786 | }\r | |
787 | \r | |
788 | IfrEntry->RawIfrHeader = (EFI_IFR_OP_HEADER *) (Context->CurrentPos);\r | |
789 | //\r | |
790 | // Add this entry to our linked list. If it's not the first, then\r | |
791 | // forward the variable store settings from the previous entry.\r | |
792 | //\r | |
793 | if (Context->LastIfr != NULL) {\r | |
794 | IfrEntry->VarStoreGuid1 = Context->LastIfr->VarStoreGuid1;\r | |
795 | IfrEntry->VarStoreName1 = Context->LastIfr->VarStoreName1;\r | |
796 | IfrEntry->VarStoreGuid2 = Context->LastIfr->VarStoreGuid2;\r | |
797 | IfrEntry->VarStoreName2 = Context->LastIfr->VarStoreName2;\r | |
798 | Context->LastIfr->Next = IfrEntry;\r | |
799 | } else {\r | |
800 | Context->Ifr = IfrEntry;\r | |
801 | }\r | |
802 | \r | |
803 | Context->LastIfr = IfrEntry;\r | |
804 | //\r | |
805 | // Switch on the opcode to parse it\r | |
806 | //\r | |
807 | if (OpHeader->OpCode < PARSE_TABLE_ENTRIES) {\r | |
808 | if (mIfrParseTable[OpHeader->OpCode].Parse != NULL) {\r | |
809 | mIfrParseTable[OpHeader->OpCode].Parse (Context);\r | |
810 | }\r | |
811 | } else {\r | |
812 | Error (\r | |
813 | NULL,\r | |
814 | 0,\r | |
815 | 0,\r | |
816 | "invalid opcode found in IFR",\r | |
817 | "offset=0x%X opcode=0x%02X",\r | |
818 | (int) OpHeader - (int) Context->PackHeader,\r | |
819 | (int) OpHeader->OpCode\r | |
820 | );\r | |
821 | free (IfrEntry);\r | |
822 | free (Context->PackHeader);\r | |
823 | free (Context);\r | |
824 | return STATUS_ERROR;\r | |
825 | }\r | |
826 | //\r | |
827 | // If it's the END_FORMSET opcode, then we're done\r | |
828 | //\r | |
829 | if (OpHeader->OpCode == EFI_IFR_END_FORM_SET_OP) {\r | |
830 | break;\r | |
831 | }\r | |
832 | //\r | |
833 | // Advance to next IFR statement/opcode\r | |
834 | //\r | |
835 | if (OpHeader->Length == 0) {\r | |
836 | Error (NULL, 0, 0, "0-length IFR opcode encountered", NULL);\r | |
837 | free (IfrEntry);\r | |
838 | free (Context->PackHeader);\r | |
839 | free (Context);\r | |
840 | return STATUS_ERROR;\r | |
841 | }\r | |
842 | \r | |
843 | Context->CurrentPos += OpHeader->Length;\r | |
844 | }\r | |
845 | //\r | |
846 | // Return the form GUID.\r | |
847 | //\r | |
848 | *PackageGuid = *Context->FormsetGuid; \r | |
849 | return STATUS_SUCCESS;\r | |
850 | }\r | |
851 | \r | |
852 | /******************************************************************************\r | |
853 | FUNCTION: GetVarStoreInfo()\r | |
854 | \r | |
855 | DESCRIPTION: IFR contains VARSTORE opcodes to specify where variable data \r | |
856 | for following opcodes is supposed to be stored. One VARSTORE statement\r | |
857 | allows you to specify the variable store GUID and a key, and another\r | |
858 | VARSTORE (select) allows you to specify the key of a VARSTORE statement. \r | |
859 | Given the key from a VARSTORE_SELECT statement, go find the corresponding\r | |
860 | VARSTORE statement with a matching key and return the varstore GUID and \r | |
861 | name. If key == 0, then the variable store is FormsetGuid."Setup"\r | |
862 | *******************************************************************************/\r | |
863 | static\r | |
864 | STATUS\r | |
865 | GetVarStoreInfo (\r | |
866 | IFR_PARSE_CONTEXT *Context,\r | |
867 | UINT16 VarId,\r | |
868 | EFI_GUID **VarStoreGuid,\r | |
869 | char **VarStoreName\r | |
870 | )\r | |
871 | /*++\r | |
872 | \r | |
873 | Routine Description:\r | |
874 | \r | |
875 | Get variable store information from an IFR pack for a given variable store ID.\r | |
876 | \r | |
877 | Arguments:\r | |
878 | \r | |
879 | Context - pointer to IFR parse context\r | |
880 | VarId - variable store ID referenced by IFR being parsed\r | |
881 | VarStoreGuid - outgoing GUID of the variable store corresponding to VarId\r | |
882 | VarStoreName - outgoing variable name of variable store corresponding to VarId\r | |
883 | \r | |
884 | Returns:\r | |
885 | \r | |
886 | STATUS_SUCCESS - variable store with matching VarId found, and outoing GUID/Name are valid\r | |
887 | STATUS_ERROR - otherwise\r | |
888 | \r | |
889 | --*/\r | |
890 | {\r | |
891 | IFR_PARSE_ENTRY *Ptr;\r | |
892 | EFI_IFR_VARSTORE *VarStore;\r | |
893 | if (Context == NULL) {\r | |
894 | return STATUS_ERROR;\r | |
895 | }\r | |
896 | \r | |
897 | //\r | |
898 | // Walk the entire IFR form and find a variable store opcode that\r | |
899 | // has a matching variable store ID.\r | |
900 | //\r | |
901 | for (Ptr = Context->Ifr; Ptr != NULL; Ptr = Ptr->Next) {\r | |
902 | if (Ptr->RawIfrHeader->OpCode == EFI_IFR_FORM_SET_OP) {\r | |
903 | if (VarId == 0) {\r | |
904 | *VarStoreGuid = &((EFI_IFR_FORM_SET *) (Ptr->RawIfrHeader))->Guid;\r | |
905 | *VarStoreName = DEFAULT_VARIABLE_NAME;\r | |
906 | return STATUS_SUCCESS;\r | |
907 | }\r | |
908 | } else if (Ptr->RawIfrHeader->OpCode == EFI_IFR_VARSTORE_OP) {\r | |
909 | //\r | |
910 | // See if it's a variable ID match\r | |
911 | //\r | |
912 | VarStore = (EFI_IFR_VARSTORE *) Ptr->RawIfrHeader;\r | |
913 | if (VarStore->VarId == VarId) {\r | |
914 | *VarStoreGuid = &VarStore->Guid;\r | |
915 | *VarStoreName = (char *) (VarStore + 1);\r | |
916 | return STATUS_SUCCESS;\r | |
917 | }\r | |
918 | }\r | |
919 | }\r | |
920 | \r | |
921 | return STATUS_ERROR;\r | |
922 | }\r | |
923 | \r | |
924 | STATUS\r | |
925 | IfrSetDefaults (\r | |
926 | int MfgDefaults\r | |
927 | )\r | |
928 | /*++\r | |
929 | \r | |
930 | Routine Description:\r | |
931 | \r | |
932 | Go through all the IFR forms we've parsed so far and create and set variable\r | |
933 | defaults.\r | |
934 | \r | |
935 | Arguments:\r | |
936 | \r | |
937 | MfgDefaults - non-zero if manufacturing defaults are desired\r | |
938 | \r | |
939 | Returns:\r | |
940 | \r | |
941 | STATUS_SUCCESS - always\r | |
942 | \r | |
943 | --*/\r | |
944 | {\r | |
945 | IFR_PARSE_CONTEXT *Context;\r | |
946 | //\r | |
947 | // First free up any variable stores we've created so far.\r | |
948 | //\r | |
949 | FreeVarStores ();\r | |
950 | for (Context = mParseContext; Context != NULL; Context = Context->Next) {\r | |
951 | //\r | |
952 | // Call our internal function to handle it\r | |
953 | //\r | |
954 | SetDefaults (Context, MfgDefaults);\r | |
955 | }\r | |
956 | \r | |
957 | return STATUS_SUCCESS;\r | |
958 | \r | |
959 | }\r | |
960 | \r | |
961 | /******************************************************************************/\r | |
962 | STATUS\r | |
963 | IfrGetIfrPack (\r | |
964 | int Handle,\r | |
965 | EFI_HII_IFR_PACK **PackHeader,\r | |
966 | EFI_GUID *FormsetGuid\r | |
967 | )\r | |
968 | /*++\r | |
969 | \r | |
970 | Routine Description:\r | |
971 | \r | |
972 | GC_TODO: Add function description\r | |
973 | \r | |
974 | Arguments:\r | |
975 | \r | |
976 | Handle - GC_TODO: add argument description\r | |
977 | PackHeader - GC_TODO: add argument description\r | |
978 | FormsetGuid - GC_TODO: add argument description\r | |
979 | \r | |
980 | Returns:\r | |
981 | \r | |
982 | GC_TODO: add return values\r | |
983 | \r | |
984 | --*/\r | |
985 | {\r | |
986 | IFR_PARSE_CONTEXT *Context;\r | |
987 | \r | |
988 | for (Context = mParseContext; Context != NULL; Context = Context->Next) {\r | |
989 | if (Context->Handle == Handle) {\r | |
990 | *PackHeader = Context->PackHeader;\r | |
991 | memcpy (FormsetGuid, Context->FormsetGuid, sizeof (EFI_GUID));\r | |
992 | return STATUS_SUCCESS;\r | |
993 | }\r | |
994 | }\r | |
995 | \r | |
996 | return STATUS_ERROR;\r | |
997 | }\r | |
998 | \r | |
999 | STATUS\r | |
1000 | IfrReferencesVarPack (\r | |
1001 | int IfrHandle,\r | |
1002 | EFI_HII_VARIABLE_PACK *VarPack\r | |
1003 | )\r | |
1004 | /*++\r | |
1005 | \r | |
1006 | Routine Description:\r | |
1007 | \r | |
1008 | Given an HII handle number (which corrresponds to a handle number passed \r | |
1009 | in to IfrParsePack()), see if the IFR references the specified variable\r | |
1010 | pack.\r | |
1011 | \r | |
1012 | Arguments:\r | |
1013 | \r | |
1014 | IfrHandle - handle number for the IFR pack to check (passed to IfrParsePack())\r | |
1015 | VarPack - variable pack to check to see if the IFR references\r | |
1016 | \r | |
1017 | Returns:\r | |
1018 | \r | |
1019 | STATUS_SUCCESS if the IFR on the given handle references the variable pack\r | |
1020 | STATUS_WARNING the IFR does not reference the variable pack\r | |
1021 | STATUS_ERROR invalid IFR handle\r | |
1022 | \r | |
1023 | --*/\r | |
1024 | {\r | |
1025 | IFR_PARSE_CONTEXT *Context;\r | |
1026 | char VarName[MAX_VARIABLE_NAME];\r | |
1027 | IFR_PARSE_ENTRY *ParseEntry;\r | |
1028 | \r | |
1029 | for (Context = mParseContext; Context != NULL; Context = Context->Next) {\r | |
1030 | if (Context->Handle == IfrHandle) {\r | |
1031 | //\r | |
1032 | // Create an ASCII version of the variable name, since that's what is\r | |
1033 | // referenced in IFR.\r | |
1034 | //\r | |
1035 | sprintf (VarName, "%S", (CHAR16 *) (VarPack + 1));\r | |
1036 | //\r | |
1037 | // Walk all the opcodes and see if the IFR references this variable pack\r | |
1038 | //\r | |
1039 | for (ParseEntry = Context->Ifr; ParseEntry != NULL; ParseEntry = ParseEntry->Next) {\r | |
1040 | //\r | |
1041 | // Check for Name.Guid match for primary IFR variable store\r | |
1042 | //\r | |
1043 | if ((strcmp (VarName, ParseEntry->VarStoreName1) == 0) &&\r | |
1044 | (memcmp (&VarPack->VariableGuid, ParseEntry->VarStoreGuid1, sizeof (EFI_GUID)) == 0)\r | |
1045 | ) {\r | |
1046 | return STATUS_SUCCESS;\r | |
1047 | }\r | |
1048 | //\r | |
1049 | // Check for Name.Guid match for secondary IFR variable store\r | |
1050 | //\r | |
1051 | if ((ParseEntry->VarStoreName2 != NULL) &&\r | |
1052 | (strcmp (VarName, ParseEntry->VarStoreName2) == 0) &&\r | |
1053 | (memcmp (&VarPack->VariableGuid, ParseEntry->VarStoreGuid2, sizeof (EFI_GUID)) == 0)\r | |
1054 | ) {\r | |
1055 | return STATUS_SUCCESS;\r | |
1056 | }\r | |
1057 | }\r | |
1058 | \r | |
1059 | return STATUS_WARNING;\r | |
1060 | }\r | |
1061 | }\r | |
1062 | \r | |
1063 | return STATUS_ERROR;\r | |
1064 | }\r | |
1065 | \r | |
1066 | STATUS\r | |
1067 | IfrGetVarPack (\r | |
1068 | int VarIndex,\r | |
1069 | EFI_HII_VARIABLE_PACK **VarPack\r | |
1070 | )\r | |
1071 | /*++\r | |
1072 | \r | |
1073 | Routine Description:\r | |
1074 | \r | |
1075 | Get the variable defaults. It is expected that the caller\r | |
1076 | called IfrSetDefaults() previously to walk all the IFR forms we know about\r | |
1077 | and create and initialize default values.\r | |
1078 | \r | |
1079 | Arguments:\r | |
1080 | \r | |
1081 | VarIndex - a 0-based index into all the variable stores we know about\r | |
1082 | VarPack - outgoing pointer to a variable pack\r | |
1083 | \r | |
1084 | Returns:\r | |
1085 | \r | |
1086 | STATUS_ERROR - VarIndex exceeds the number of variable packs we know of\r | |
1087 | STATUS_SUCCESS - otherwise\r | |
1088 | \r | |
1089 | --*/\r | |
1090 | {\r | |
1091 | VARIABLE_STORE_ENTRY *Entry;\r | |
1092 | //\r | |
1093 | // Initialize outgoing parameters\r | |
1094 | //\r | |
1095 | *VarPack = NULL;\r | |
1096 | for (Entry = mVariableStores; Entry != NULL; Entry = Entry->Next) {\r | |
1097 | if (VarIndex == 0) {\r | |
1098 | *VarPack = Entry->VarPack;\r | |
1099 | return STATUS_SUCCESS;\r | |
1100 | }\r | |
1101 | \r | |
1102 | VarIndex--;\r | |
1103 | }\r | |
1104 | \r | |
1105 | return STATUS_ERROR;\r | |
1106 | }\r | |
1107 | \r | |
1108 | static\r | |
1109 | STATUS\r | |
1110 | SetVariableValue (\r | |
1111 | EFI_GUID *VarGuid,\r | |
1112 | char *VarName,\r | |
1113 | int VarOffset,\r | |
1114 | int VarSize,\r | |
1115 | void *VarValue\r | |
1116 | )\r | |
1117 | /*++\r | |
1118 | \r | |
1119 | Routine Description:\r | |
1120 | \r | |
1121 | Given a variable GUID.Name, offset, size, and value, set the bytes in\r | |
1122 | the variable to the provided value.\r | |
1123 | \r | |
1124 | Arguments:\r | |
1125 | VarGuid - GUID of variable to set\r | |
1126 | VarName - name of variable to set\r | |
1127 | VarOffset - byte offset into the variable store \r | |
1128 | VarSize - size of the value in the variable store (in bytes)\r | |
1129 | VarValue - pointer to buffer containing the value to set\r | |
1130 | \r | |
1131 | Returns:\r | |
1132 | \r | |
1133 | \r | |
1134 | --*/\r | |
1135 | {\r | |
1136 | VARIABLE_STORE_ENTRY *Entry;\r | |
1137 | char *Src;\r | |
1138 | char *Dest;\r | |
1139 | //\r | |
1140 | // Go through our list of variable stores to find the match\r | |
1141 | //\r | |
1142 | for (Entry = mVariableStores; Entry != NULL; Entry = Entry->Next) {\r | |
1143 | if (memcmp (VarGuid, &Entry->VarPack->VariableGuid, sizeof (EFI_GUID)) == 0) {\r | |
1144 | if (strcmp (VarName, Entry->VarName) == 0) {\r | |
1145 | //\r | |
1146 | // Found match -- check offset. If it's beyond the size of the variable store\r | |
1147 | // buffer, then return a warning. Note that date-time can be beyond the\r | |
1148 | // end of the varstore, which is ok.\r | |
1149 | //\r | |
1150 | if (VarOffset + VarSize <= Entry->VarBufferSize) {\r | |
1151 | //\r | |
1152 | // Stuff the data\r | |
1153 | //\r | |
1154 | Dest = Entry->VarBuffer + VarOffset;\r | |
1155 | Src = (char *) VarValue;\r | |
1156 | while (VarSize > 0) {\r | |
1157 | *Dest = *Src;\r | |
1158 | Src++;\r | |
1159 | Dest++;\r | |
1160 | VarSize--;\r | |
1161 | }\r | |
1162 | \r | |
1163 | return STATUS_SUCCESS;\r | |
1164 | }\r | |
1165 | \r | |
1166 | return STATUS_WARNING;\r | |
1167 | }\r | |
1168 | }\r | |
1169 | }\r | |
1170 | \r | |
1171 | return STATUS_ERROR;\r | |
1172 | }\r | |
1173 | \r | |
1174 | static\r | |
1175 | STATUS\r | |
1176 | SetDefaults (\r | |
1177 | IFR_PARSE_CONTEXT *Context,\r | |
1178 | UINT32 MfgDefaults\r | |
1179 | )\r | |
1180 | /*++\r | |
1181 | \r | |
1182 | Routine Description:\r | |
1183 | \r | |
1184 | Set variable defaults by walking a single IFR form.\r | |
1185 | \r | |
1186 | Arguments:\r | |
1187 | \r | |
1188 | Context - Pointer to the IFR context.\r | |
1189 | MfgDefaults - Number of Mfg defaults\r | |
1190 | \r | |
1191 | Returns:\r | |
1192 | \r | |
1193 | EFI_INVALID_PARAMETER - arguments to function are invalid\r | |
1194 | STATUS_SUCCESS - function executed successfully\r | |
1195 | \r | |
1196 | --*/\r | |
1197 | {\r | |
1198 | int Size;\r | |
1199 | int CachedVarOffset;\r | |
1200 | int CachedVarSize;\r | |
1201 | int OrderedList;\r | |
1202 | IFR_PARSE_ENTRY *SavedParseEntry;\r | |
1203 | EFI_IFR_CHECK_BOX *IfrCheckBox;\r | |
1204 | EFI_IFR_ONE_OF_OPTION *IfrOneOfOption;\r | |
1205 | EFI_IFR_NUMERIC *IfrNumeric;\r | |
1206 | STATUS Status;\r | |
1207 | char ZeroByte;\r | |
1208 | \r | |
1209 | //\r | |
1210 | // Walk the opcodes to set default values and stuff them into the variable stores\r | |
1211 | //\r | |
1212 | \r | |
1213 | if (Context == NULL) {\r | |
1214 | return EFI_INVALID_PARAMETER;\r | |
1215 | }\r | |
1216 | Status = STATUS_SUCCESS;\r | |
1217 | Context->CurrentIfr = Context->Ifr;\r | |
1218 | SavedParseEntry = NULL;\r | |
1219 | OrderedList = 0;\r | |
1220 | CachedVarOffset = 0;\r | |
1221 | CachedVarSize = 0;\r | |
1222 | ZeroByte = 0;\r | |
1223 | \r | |
1224 | while (Context->CurrentIfr != NULL) {\r | |
1225 | if (Context->CurrentIfr->RawIfrHeader->OpCode == EFI_IFR_FORM_SET_OP) {\r | |
1226 | //\r | |
1227 | // Formset opcode -- create a variable pack\r | |
1228 | //\r | |
1229 | Status = CreateVarStore (\r | |
1230 | &((EFI_IFR_FORM_SET *) (Context->CurrentIfr->RawIfrHeader))->Guid,\r | |
1231 | DEFAULT_VARIABLE_NAME,\r | |
1232 | ((EFI_IFR_FORM_SET *) (Context->CurrentIfr->RawIfrHeader))->NvDataSize\r | |
1233 | );\r | |
1234 | } else if (Context->CurrentIfr->RawIfrHeader->OpCode == EFI_IFR_VARSTORE_OP) {\r | |
1235 | //\r | |
1236 | // Variable store opcode -- create a variable pack\r | |
1237 | //\r | |
1238 | Status = CreateVarStore (\r | |
1239 | &((EFI_IFR_VARSTORE *) (Context->CurrentIfr->RawIfrHeader))->Guid,\r | |
1240 | (char *) Context->CurrentIfr->RawIfrHeader + sizeof (EFI_IFR_VARSTORE),\r | |
1241 | ((EFI_IFR_VARSTORE *) (Context->CurrentIfr->RawIfrHeader))->Size\r | |
1242 | );\r | |
1243 | } else if (Context->CurrentIfr->RawIfrHeader->OpCode == EFI_IFR_ONE_OF_OP) {\r | |
1244 | //\r | |
1245 | // Need this parse context later when we find the default ONE_OF_OPTION.\r | |
1246 | // Clear out the variable store first, so that we're covered if someone\r | |
1247 | // has two one-of opcode that operate on the same data.\r | |
1248 | // So "last one wins" is the behavior.\r | |
1249 | //\r | |
1250 | OrderedList = 0;\r | |
1251 | SavedParseEntry = Context->CurrentIfr;\r | |
1252 | CachedVarOffset = ((EFI_IFR_ONE_OF *) Context->CurrentIfr->RawIfrHeader)->QuestionId;\r | |
1253 | CachedVarSize = ((EFI_IFR_ONE_OF *) Context->CurrentIfr->RawIfrHeader)->Width;\r | |
1254 | } else if (Context->CurrentIfr->RawIfrHeader->OpCode == EFI_IFR_ORDERED_LIST_OP) {\r | |
1255 | //\r | |
1256 | // Need this parse context later as we parse the ONE_OF_OP's in the ordered list\r | |
1257 | //\r | |
1258 | OrderedList = 1;\r | |
1259 | SavedParseEntry = Context->CurrentIfr;\r | |
1260 | CachedVarOffset = ((EFI_IFR_ORDERED_LIST *) Context->CurrentIfr->RawIfrHeader)->QuestionId;\r | |
1261 | CachedVarSize = ((EFI_IFR_ORDERED_LIST *) Context->CurrentIfr->RawIfrHeader)->MaxEntries;\r | |
1262 | \r | |
1263 | while (CachedVarSize > 0) {\r | |
1264 | Status = SetVariableValue (\r | |
1265 | SavedParseEntry->VarStoreGuid1, // GUID of variable store to write\r | |
1266 | SavedParseEntry->VarStoreName1, // name of variable store to write\r | |
1267 | CachedVarOffset, // offset into variable store\r | |
1268 | 1, // variable data size\r | |
1269 | (void *) &ZeroByte\r | |
1270 | );\r | |
1271 | //\r | |
1272 | // variable value\r | |
1273 | //\r | |
1274 | CachedVarSize--;\r | |
1275 | CachedVarOffset++;\r | |
1276 | }\r | |
1277 | \r | |
1278 | CachedVarOffset = ((EFI_IFR_ORDERED_LIST *) Context->CurrentIfr->RawIfrHeader)->QuestionId;\r | |
1279 | CachedVarSize = 1;\r | |
1280 | //\r | |
1281 | // ((EFI_IFR_ORDERED_LIST *)Context->CurrentIfr->RawIfrHeader)->Width;\r | |
1282 | //\r | |
1283 | } else if (Context->CurrentIfr->RawIfrHeader->OpCode == EFI_IFR_ONE_OF_OPTION_OP) {\r | |
1284 | IfrOneOfOption = (EFI_IFR_ONE_OF_OPTION *) Context->CurrentIfr->RawIfrHeader;\r | |
1285 | //\r | |
1286 | // If we're in an ordered list, then copy the value to the data store\r | |
1287 | //\r | |
1288 | if (OrderedList) {\r | |
1289 | Status = SetVariableValue (\r | |
1290 | SavedParseEntry->VarStoreGuid1, // GUID of variable store to write\r | |
1291 | SavedParseEntry->VarStoreName1, // name of variable store to write\r | |
1292 | CachedVarOffset, // offset into variable store\r | |
1293 | 1, // variable data size\r | |
1294 | (void *) &IfrOneOfOption->Value\r | |
1295 | );\r | |
1296 | //\r | |
1297 | // variable value\r | |
1298 | //\r | |
1299 | // Advance the offset for the next ordered list item\r | |
1300 | //\r | |
1301 | CachedVarOffset += CachedVarSize;\r | |
1302 | } else {\r | |
1303 | //\r | |
1304 | // ONE-OF list. See if the default flag is set (provided we're not doing mfg defaults)\r | |
1305 | //\r | |
1306 | if (!MfgDefaults) {\r | |
1307 | if (IfrOneOfOption->Flags & EFI_IFR_FLAG_DEFAULT) {\r | |
1308 | Status = SetVariableValue (\r | |
1309 | SavedParseEntry->VarStoreGuid1, // GUID of variable store to write\r | |
1310 | SavedParseEntry->VarStoreName1, // name of variable store to write\r | |
1311 | CachedVarOffset, // offset into variable store\r | |
1312 | CachedVarSize, // variable data size\r | |
1313 | &IfrOneOfOption->Value\r | |
1314 | );\r | |
1315 | //\r | |
1316 | // variable value\r | |
1317 | //\r | |
1318 | }\r | |
1319 | } else {\r | |
1320 | if (IfrOneOfOption->Flags & EFI_IFR_FLAG_MANUFACTURING) {\r | |
1321 | Status = SetVariableValue (\r | |
1322 | SavedParseEntry->VarStoreGuid1, // GUID of variable store to write\r | |
1323 | SavedParseEntry->VarStoreName1, // name of variable store to write\r | |
1324 | CachedVarOffset, // offset into variable store\r | |
1325 | CachedVarSize, // variable data size\r | |
1326 | &IfrOneOfOption->Value\r | |
1327 | );\r | |
1328 | //\r | |
1329 | // variable value\r | |
1330 | //\r | |
1331 | }\r | |
1332 | }\r | |
1333 | }\r | |
1334 | } else if (Context->CurrentIfr->RawIfrHeader->OpCode == EFI_IFR_CHECKBOX_OP) {\r | |
1335 | //\r | |
1336 | // If we're saving defaults, and the default flag is set, or we're saving\r | |
1337 | // manufacturing defaults and the manufacturing flag is set, then save a 1.\r | |
1338 | // By default the varstore buffer is cleared, so we don't need to save a 0 ever.\r | |
1339 | //\r | |
1340 | IfrCheckBox = (EFI_IFR_CHECK_BOX *) Context->CurrentIfr->RawIfrHeader;\r | |
1341 | if (((MfgDefaults == 0) && (IfrCheckBox->Flags & EFI_IFR_FLAG_DEFAULT)) ||\r | |
1342 | ((MfgDefaults != 0) && (IfrCheckBox->Flags & EFI_IFR_FLAG_MANUFACTURING))\r | |
1343 | ) {\r | |
1344 | Size = 1;\r | |
1345 | Status = SetVariableValue (\r | |
1346 | Context->CurrentIfr->VarStoreGuid1, // GUID of variable store to write\r | |
1347 | Context->CurrentIfr->VarStoreName1, // name of variable store to write\r | |
1348 | IfrCheckBox->QuestionId, // offset into variable store\r | |
1349 | IfrCheckBox->Width, // variable data size\r | |
1350 | (void *) &Size\r | |
1351 | );\r | |
1352 | //\r | |
1353 | // variable value\r | |
1354 | //\r | |
1355 | }\r | |
1356 | } else if (Context->CurrentIfr->RawIfrHeader->OpCode == EFI_IFR_NUMERIC_OP) {\r | |
1357 | IfrNumeric = (EFI_IFR_NUMERIC *) Context->CurrentIfr->RawIfrHeader;\r | |
1358 | Status = SetVariableValue (\r | |
1359 | Context->CurrentIfr->VarStoreGuid1, // GUID of variable store to write\r | |
1360 | Context->CurrentIfr->VarStoreName1, // name of variable store to write\r | |
1361 | IfrNumeric->QuestionId, // offset into variable store\r | |
1362 | IfrNumeric->Width, // variable data size\r | |
1363 | (void *) &IfrNumeric->Default\r | |
1364 | );\r | |
1365 | //\r | |
1366 | // variable value\r | |
1367 | //\r | |
1368 | }\r | |
1369 | \r | |
1370 | Context->CurrentIfr = Context->CurrentIfr->Next;\r | |
1371 | }\r | |
1372 | \r | |
1373 | return STATUS_SUCCESS;\r | |
1374 | }\r | |
1375 | \r | |
1376 | static\r | |
1377 | STATUS\r | |
1378 | CreateVarStore (\r | |
1379 | EFI_GUID *VarGuid,\r | |
1380 | CHAR8 *VarName,\r | |
1381 | int VarStoreSize\r | |
1382 | )\r | |
1383 | /*++\r | |
1384 | \r | |
1385 | Routine Description:\r | |
1386 | \r | |
1387 | Given a variable GUID.Name and the size of the variable store, allocate\r | |
1388 | storage for maintaining the variable value.\r | |
1389 | \r | |
1390 | Arguments:\r | |
1391 | \r | |
1392 | VarGuid - GUID for a variable\r | |
1393 | VarName - Name of the variable\r | |
1394 | VarStoreSize - size of the variable store\r | |
1395 | \r | |
1396 | Returns:\r | |
1397 | \r | |
1398 | STATUS_ERROR - problem with storage allocation \r | |
1399 | STATUS_SUCCESS - function executed successfully\r | |
1400 | \r | |
1401 | --*/\r | |
1402 | {\r | |
1403 | VARIABLE_STORE_ENTRY *Entry;\r | |
1404 | \r | |
1405 | VARIABLE_STORE_ENTRY *TempEntry;\r | |
1406 | int PackSize;\r | |
1407 | int VarNameLen;\r | |
1408 | //\r | |
1409 | // If the variable store size is zero, then do nothing. This could be valid\r | |
1410 | // if variable steering is used in the IFR such that FormsetGUID."Setup" variable\r | |
1411 | // store is never used.\r | |
1412 | //\r | |
1413 | // OPEN: What about a form that only has a time/date question? Then if some other\r | |
1414 | // function called SetDefaults(), attempting to set time/date would result in an\r | |
1415 | // error in the SetVarValue() function.\r | |
1416 | //\r | |
1417 | if (VarStoreSize == 0) {\r | |
1418 | return STATUS_SUCCESS;\r | |
1419 | }\r | |
1420 | //\r | |
1421 | // Go through our list of variable stores and see if we've already created one\r | |
1422 | // for this Guid.Name. If so, check the size and return. Otherwise create\r | |
1423 | // one and add it to the list.\r | |
1424 | //\r | |
1425 | for (Entry = mVariableStores; Entry != NULL; Entry = Entry->Next) {\r | |
1426 | if (memcmp (VarGuid, &Entry->VarPack->VariableGuid, sizeof (EFI_GUID)) == 0) {\r | |
1427 | if (strcmp (VarName, Entry->VarName) == 0) {\r | |
1428 | //\r | |
1429 | // Already have one. Check size.\r | |
1430 | //\r | |
1431 | if (Entry->VarBufferSize != VarStoreSize) {\r | |
1432 | Error (NULL, 0, 0, "mismatched variable store size between two formsets", VarName);\r | |
1433 | return STATUS_ERROR;\r | |
1434 | }\r | |
1435 | \r | |
1436 | return STATUS_SUCCESS;\r | |
1437 | }\r | |
1438 | }\r | |
1439 | }\r | |
1440 | //\r | |
1441 | // Create a new one.\r | |
1442 | //\r | |
1443 | Entry = (VARIABLE_STORE_ENTRY *) malloc (sizeof (VARIABLE_STORE_ENTRY));\r | |
1444 | if (Entry == NULL) {\r | |
1445 | Error (NULL, 0, 0, "memory allocation failure", NULL);\r | |
1446 | return STATUS_ERROR;\r | |
1447 | }\r | |
1448 | \r | |
1449 | memset ((void *) Entry, 0, sizeof (VARIABLE_STORE_ENTRY));\r | |
1450 | //\r | |
1451 | // Compute size of the varpack\r | |
1452 | //\r | |
1453 | VarNameLen = strlen (VarName) + 1;\r | |
1454 | PackSize = sizeof (EFI_HII_VARIABLE_PACK) + VarNameLen * sizeof (CHAR16) + VarStoreSize;\r | |
1455 | Entry->VarPack = (EFI_HII_VARIABLE_PACK *) malloc (PackSize);\r | |
1456 | if (Entry->VarPack == NULL) {\r | |
1457 | Error (NULL, 0, 0, "memory allocation failure", NULL);\r | |
1458 | free (Entry);\r | |
1459 | return STATUS_ERROR;\r | |
1460 | }\r | |
1461 | \r | |
1462 | Entry->VarPack->Header.Length = PackSize;\r | |
1463 | Entry->VarPack->Header.Type = EFI_HII_VARIABLE;\r | |
1464 | Entry->VarPack->VariableNameLength = VarNameLen * sizeof (CHAR16);\r | |
1465 | Entry->VarName[MAX_VARIABLE_NAME - 1] = 0;\r | |
1466 | strncpy (Entry->VarName, VarName, MAX_VARIABLE_NAME - 1);\r | |
1467 | #ifdef USE_VC8\r | |
1468 | swprintf ((CHAR16 *) (Entry->VarPack + 1), (strlen (VarName) + 1) * sizeof (CHAR16), L"%S", VarName);\r | |
1469 | #else\r | |
1470 | swprintf ((CHAR16 *) (Entry->VarPack + 1), L"%S", VarName);\r | |
1471 | #endif\r | |
1472 | memcpy (&Entry->VarPack->VariableGuid, VarGuid, sizeof (EFI_GUID));\r | |
1473 | //\r | |
1474 | // Point VarBuffer into the allocated buffer (for convenience)\r | |
1475 | //\r | |
1476 | Entry->VarBuffer = (char *) Entry->VarPack + sizeof (EFI_HII_VARIABLE_PACK) + VarNameLen * sizeof (CHAR16);\r | |
1477 | memset ((void *) Entry->VarBuffer, 0, VarStoreSize);\r | |
1478 | Entry->VarBufferSize = VarStoreSize;\r | |
1479 | //\r | |
1480 | // Add this new varstore to our list\r | |
1481 | //\r | |
1482 | if (mVariableStores == NULL) {\r | |
1483 | mVariableStores = Entry;\r | |
1484 | } else {\r | |
1485 | for (TempEntry = mVariableStores; TempEntry->Next != NULL; TempEntry = TempEntry->Next)\r | |
1486 | ;\r | |
1487 | TempEntry->Next = Entry;\r | |
1488 | }\r | |
1489 | return STATUS_SUCCESS;\r | |
1490 | }\r | |
1491 | \r | |
1492 | /******************************************************************************/\r | |
1493 | \r | |
1494 | /*++\r | |
1495 | \r | |
1496 | Routine Description:\r | |
1497 | \r | |
1498 | The following IfrParseXX() functions are used to parse an IFR opcode numbered\r | |
1499 | XX via a dispatch table. \r | |
1500 | \r | |
1501 | Arguments:\r | |
1502 | \r | |
1503 | Context - IFR parsing context into which pertinent data for the \r | |
1504 | current opcode can be saved. Context->LastIfr->RawIfrHeader points to \r | |
1505 | the raw IFR bytes currently being parsed.\r | |
1506 | \r | |
1507 | Returns:\r | |
1508 | \r | |
1509 | STATUS_SUCCESS - always\r | |
1510 | \r | |
1511 | --*/\r | |
1512 | \r | |
1513 | /*******************************************************************************/\r | |
1514 | static\r | |
1515 | STATUS\r | |
1516 | IfrParse01 (\r | |
1517 | IFR_PARSE_CONTEXT *Context\r | |
1518 | )\r | |
1519 | /*++\r | |
1520 | \r | |
1521 | Routine Description:\r | |
1522 | \r | |
1523 | GC_TODO: Add function description\r | |
1524 | \r | |
1525 | Arguments:\r | |
1526 | \r | |
1527 | Context - GC_TODO: add argument description\r | |
1528 | \r | |
1529 | Returns:\r | |
1530 | \r | |
1531 | GC_TODO: add return values\r | |
1532 | \r | |
1533 | --*/\r | |
1534 | {\r | |
1535 | return STATUS_SUCCESS;\r | |
1536 | }\r | |
1537 | \r | |
1538 | static\r | |
1539 | STATUS\r | |
1540 | IfrParse02 (\r | |
1541 | IFR_PARSE_CONTEXT *Context\r | |
1542 | )\r | |
1543 | /*++\r | |
1544 | \r | |
1545 | Routine Description:\r | |
1546 | \r | |
1547 | GC_TODO: Add function description\r | |
1548 | \r | |
1549 | Arguments:\r | |
1550 | \r | |
1551 | Context - GC_TODO: add argument description\r | |
1552 | \r | |
1553 | Returns:\r | |
1554 | \r | |
1555 | GC_TODO: add return values\r | |
1556 | \r | |
1557 | --*/\r | |
1558 | {\r | |
1559 | return STATUS_SUCCESS;\r | |
1560 | }\r | |
1561 | \r | |
1562 | static\r | |
1563 | STATUS\r | |
1564 | IfrParse03 (\r | |
1565 | IFR_PARSE_CONTEXT *Context\r | |
1566 | )\r | |
1567 | /*++\r | |
1568 | \r | |
1569 | Routine Description:\r | |
1570 | \r | |
1571 | GC_TODO: Add function description\r | |
1572 | \r | |
1573 | Arguments:\r | |
1574 | \r | |
1575 | Context - GC_TODO: add argument description\r | |
1576 | \r | |
1577 | Returns:\r | |
1578 | \r | |
1579 | GC_TODO: add return values\r | |
1580 | \r | |
1581 | --*/\r | |
1582 | {\r | |
1583 | return STATUS_SUCCESS;\r | |
1584 | }\r | |
1585 | //\r | |
1586 | // Parse the IFR EFI_IFR_ONE_OF opcode.\r | |
1587 | //\r | |
1588 | static\r | |
1589 | STATUS\r | |
1590 | IfrParse05 (\r | |
1591 | IFR_PARSE_CONTEXT *Context\r | |
1592 | )\r | |
1593 | /*++\r | |
1594 | \r | |
1595 | Routine Description:\r | |
1596 | \r | |
1597 | GC_TODO: Add function description\r | |
1598 | \r | |
1599 | Arguments:\r | |
1600 | \r | |
1601 | Context - GC_TODO: add argument description\r | |
1602 | \r | |
1603 | Returns:\r | |
1604 | \r | |
1605 | GC_TODO: add return values\r | |
1606 | \r | |
1607 | --*/\r | |
1608 | {\r | |
1609 | return STATUS_SUCCESS;\r | |
1610 | }\r | |
1611 | \r | |
1612 | static\r | |
1613 | STATUS\r | |
1614 | IfrParse06 (\r | |
1615 | IFR_PARSE_CONTEXT *Context\r | |
1616 | )\r | |
1617 | /*++\r | |
1618 | \r | |
1619 | Routine Description:\r | |
1620 | \r | |
1621 | GC_TODO: Add function description\r | |
1622 | \r | |
1623 | Arguments:\r | |
1624 | \r | |
1625 | Context - GC_TODO: add argument description\r | |
1626 | \r | |
1627 | Returns:\r | |
1628 | \r | |
1629 | GC_TODO: add return values\r | |
1630 | \r | |
1631 | --*/\r | |
1632 | {\r | |
1633 | return STATUS_SUCCESS;\r | |
1634 | }\r | |
1635 | \r | |
1636 | static\r | |
1637 | STATUS\r | |
1638 | IfrParse07 (\r | |
1639 | IFR_PARSE_CONTEXT *Context\r | |
1640 | )\r | |
1641 | /*++\r | |
1642 | \r | |
1643 | Routine Description:\r | |
1644 | \r | |
1645 | GC_TODO: Add function description\r | |
1646 | \r | |
1647 | Arguments:\r | |
1648 | \r | |
1649 | Context - GC_TODO: add argument description\r | |
1650 | \r | |
1651 | Returns:\r | |
1652 | \r | |
1653 | GC_TODO: add return values\r | |
1654 | \r | |
1655 | --*/\r | |
1656 | {\r | |
1657 | return STATUS_SUCCESS;\r | |
1658 | }\r | |
1659 | \r | |
1660 | static\r | |
1661 | STATUS\r | |
1662 | IfrParse08 (\r | |
1663 | IFR_PARSE_CONTEXT *Context\r | |
1664 | )\r | |
1665 | /*++\r | |
1666 | \r | |
1667 | Routine Description:\r | |
1668 | \r | |
1669 | GC_TODO: Add function description\r | |
1670 | \r | |
1671 | Arguments:\r | |
1672 | \r | |
1673 | Context - GC_TODO: add argument description\r | |
1674 | \r | |
1675 | Returns:\r | |
1676 | \r | |
1677 | GC_TODO: add return values\r | |
1678 | \r | |
1679 | --*/\r | |
1680 | {\r | |
1681 | return STATUS_SUCCESS;\r | |
1682 | }\r | |
1683 | \r | |
1684 | static\r | |
1685 | STATUS\r | |
1686 | IfrParse09 (\r | |
1687 | IFR_PARSE_CONTEXT *Context\r | |
1688 | )\r | |
1689 | /*++\r | |
1690 | \r | |
1691 | Routine Description:\r | |
1692 | \r | |
1693 | GC_TODO: Add function description\r | |
1694 | \r | |
1695 | Arguments:\r | |
1696 | \r | |
1697 | Context - GC_TODO: add argument description\r | |
1698 | \r | |
1699 | Returns:\r | |
1700 | \r | |
1701 | GC_TODO: add return values\r | |
1702 | \r | |
1703 | --*/\r | |
1704 | {\r | |
1705 | return STATUS_SUCCESS;\r | |
1706 | }\r | |
1707 | \r | |
1708 | static\r | |
1709 | STATUS\r | |
1710 | IfrParse0A (\r | |
1711 | IFR_PARSE_CONTEXT *Context\r | |
1712 | )\r | |
1713 | /*++\r | |
1714 | \r | |
1715 | Routine Description:\r | |
1716 | \r | |
1717 | GC_TODO: Add function description\r | |
1718 | \r | |
1719 | Arguments:\r | |
1720 | \r | |
1721 | Context - GC_TODO: add argument description\r | |
1722 | \r | |
1723 | Returns:\r | |
1724 | \r | |
1725 | GC_TODO: add return values\r | |
1726 | \r | |
1727 | --*/\r | |
1728 | {\r | |
1729 | return STATUS_SUCCESS;\r | |
1730 | }\r | |
1731 | \r | |
1732 | static\r | |
1733 | STATUS\r | |
1734 | IfrParse0B (\r | |
1735 | IFR_PARSE_CONTEXT *Context\r | |
1736 | )\r | |
1737 | /*++\r | |
1738 | \r | |
1739 | Routine Description:\r | |
1740 | \r | |
1741 | GC_TODO: Add function description\r | |
1742 | \r | |
1743 | Arguments:\r | |
1744 | \r | |
1745 | Context - GC_TODO: add argument description\r | |
1746 | \r | |
1747 | Returns:\r | |
1748 | \r | |
1749 | GC_TODO: add return values\r | |
1750 | \r | |
1751 | --*/\r | |
1752 | {\r | |
1753 | return STATUS_SUCCESS;\r | |
1754 | }\r | |
1755 | \r | |
1756 | static\r | |
1757 | STATUS\r | |
1758 | IfrParse0C (\r | |
1759 | IFR_PARSE_CONTEXT *Context\r | |
1760 | )\r | |
1761 | /*++\r | |
1762 | \r | |
1763 | Routine Description:\r | |
1764 | \r | |
1765 | GC_TODO: Add function description\r | |
1766 | \r | |
1767 | Arguments:\r | |
1768 | \r | |
1769 | Context - GC_TODO: add argument description\r | |
1770 | \r | |
1771 | Returns:\r | |
1772 | \r | |
1773 | GC_TODO: add return values\r | |
1774 | \r | |
1775 | --*/\r | |
1776 | {\r | |
1777 | return STATUS_SUCCESS;\r | |
1778 | }\r | |
1779 | \r | |
1780 | static\r | |
1781 | STATUS\r | |
1782 | IfrParse0D (\r | |
1783 | IFR_PARSE_CONTEXT *Context\r | |
1784 | )\r | |
1785 | /*++\r | |
1786 | \r | |
1787 | Routine Description:\r | |
1788 | \r | |
1789 | GC_TODO: Add function description\r | |
1790 | \r | |
1791 | Arguments:\r | |
1792 | \r | |
1793 | Context - GC_TODO: add argument description\r | |
1794 | \r | |
1795 | Returns:\r | |
1796 | \r | |
1797 | GC_TODO: add return values\r | |
1798 | \r | |
1799 | --*/\r | |
1800 | {\r | |
1801 | return STATUS_SUCCESS;\r | |
1802 | }\r | |
1803 | \r | |
1804 | static\r | |
1805 | STATUS\r | |
1806 | IfrParse0E (\r | |
1807 | IFR_PARSE_CONTEXT *Context\r | |
1808 | )\r | |
1809 | /*++\r | |
1810 | \r | |
1811 | Routine Description:\r | |
1812 | \r | |
1813 | GC_TODO: Add function description\r | |
1814 | \r | |
1815 | Arguments:\r | |
1816 | \r | |
1817 | Context - GC_TODO: add argument description\r | |
1818 | \r | |
1819 | Returns:\r | |
1820 | \r | |
1821 | GC_TODO: add return values\r | |
1822 | \r | |
1823 | --*/\r | |
1824 | {\r | |
1825 | EFI_IFR_FORM_SET *Op;\r | |
1826 | Op = (EFI_IFR_FORM_SET *) Context->LastIfr->RawIfrHeader;\r | |
1827 | Context->LastIfr->VarStoreGuid1 = &Op->Guid;\r | |
1828 | Context->LastIfr->VarStoreName1 = "Setup";\r | |
1829 | Context->FormsetGuid = &Op->Guid;\r | |
1830 | return STATUS_SUCCESS;\r | |
1831 | }\r | |
1832 | \r | |
1833 | static\r | |
1834 | STATUS\r | |
1835 | IfrParse0F (\r | |
1836 | IFR_PARSE_CONTEXT *Context\r | |
1837 | )\r | |
1838 | /*++\r | |
1839 | \r | |
1840 | Routine Description:\r | |
1841 | \r | |
1842 | GC_TODO: Add function description\r | |
1843 | \r | |
1844 | Arguments:\r | |
1845 | \r | |
1846 | Context - GC_TODO: add argument description\r | |
1847 | \r | |
1848 | Returns:\r | |
1849 | \r | |
1850 | GC_TODO: add return values\r | |
1851 | \r | |
1852 | --*/\r | |
1853 | {\r | |
1854 | return STATUS_SUCCESS;\r | |
1855 | }\r | |
1856 | \r | |
1857 | static\r | |
1858 | STATUS\r | |
1859 | IfrParse10 (\r | |
1860 | IFR_PARSE_CONTEXT *Context\r | |
1861 | )\r | |
1862 | /*++\r | |
1863 | \r | |
1864 | Routine Description:\r | |
1865 | \r | |
1866 | GC_TODO: Add function description\r | |
1867 | \r | |
1868 | Arguments:\r | |
1869 | \r | |
1870 | Context - GC_TODO: add argument description\r | |
1871 | \r | |
1872 | Returns:\r | |
1873 | \r | |
1874 | GC_TODO: add return values\r | |
1875 | \r | |
1876 | --*/\r | |
1877 | {\r | |
1878 | return STATUS_SUCCESS;\r | |
1879 | }\r | |
1880 | \r | |
1881 | static\r | |
1882 | STATUS\r | |
1883 | IfrParse11 (\r | |
1884 | IFR_PARSE_CONTEXT *Context\r | |
1885 | )\r | |
1886 | /*++\r | |
1887 | \r | |
1888 | Routine Description:\r | |
1889 | \r | |
1890 | GC_TODO: Add function description\r | |
1891 | \r | |
1892 | Arguments:\r | |
1893 | \r | |
1894 | Context - GC_TODO: add argument description\r | |
1895 | \r | |
1896 | Returns:\r | |
1897 | \r | |
1898 | GC_TODO: add return values\r | |
1899 | \r | |
1900 | --*/\r | |
1901 | {\r | |
1902 | return STATUS_SUCCESS;\r | |
1903 | }\r | |
1904 | \r | |
1905 | static\r | |
1906 | STATUS\r | |
1907 | IfrParse12 (\r | |
1908 | IFR_PARSE_CONTEXT *Context\r | |
1909 | )\r | |
1910 | /*++\r | |
1911 | \r | |
1912 | Routine Description:\r | |
1913 | \r | |
1914 | GC_TODO: Add function description\r | |
1915 | \r | |
1916 | Arguments:\r | |
1917 | \r | |
1918 | Context - GC_TODO: add argument description\r | |
1919 | \r | |
1920 | Returns:\r | |
1921 | \r | |
1922 | GC_TODO: add return values\r | |
1923 | \r | |
1924 | --*/\r | |
1925 | {\r | |
1926 | return STATUS_SUCCESS;\r | |
1927 | }\r | |
1928 | \r | |
1929 | static\r | |
1930 | STATUS\r | |
1931 | IfrParse13 (\r | |
1932 | IFR_PARSE_CONTEXT *Context\r | |
1933 | )\r | |
1934 | /*++\r | |
1935 | \r | |
1936 | Routine Description:\r | |
1937 | \r | |
1938 | GC_TODO: Add function description\r | |
1939 | \r | |
1940 | Arguments:\r | |
1941 | \r | |
1942 | Context - GC_TODO: add argument description\r | |
1943 | \r | |
1944 | Returns:\r | |
1945 | \r | |
1946 | GC_TODO: add return values\r | |
1947 | \r | |
1948 | --*/\r | |
1949 | {\r | |
1950 | return STATUS_SUCCESS;\r | |
1951 | }\r | |
1952 | \r | |
1953 | static\r | |
1954 | STATUS\r | |
1955 | IfrParse14 (\r | |
1956 | IFR_PARSE_CONTEXT *Context\r | |
1957 | )\r | |
1958 | /*++\r | |
1959 | \r | |
1960 | Routine Description:\r | |
1961 | \r | |
1962 | GC_TODO: Add function description\r | |
1963 | \r | |
1964 | Arguments:\r | |
1965 | \r | |
1966 | Context - GC_TODO: add argument description\r | |
1967 | \r | |
1968 | Returns:\r | |
1969 | \r | |
1970 | GC_TODO: add return values\r | |
1971 | \r | |
1972 | --*/\r | |
1973 | {\r | |
1974 | return STATUS_SUCCESS;\r | |
1975 | }\r | |
1976 | \r | |
1977 | static\r | |
1978 | STATUS\r | |
1979 | IfrParse15 (\r | |
1980 | IFR_PARSE_CONTEXT *Context\r | |
1981 | )\r | |
1982 | /*++\r | |
1983 | \r | |
1984 | Routine Description:\r | |
1985 | \r | |
1986 | GC_TODO: Add function description\r | |
1987 | \r | |
1988 | Arguments:\r | |
1989 | \r | |
1990 | Context - GC_TODO: add argument description\r | |
1991 | \r | |
1992 | Returns:\r | |
1993 | \r | |
1994 | GC_TODO: add return values\r | |
1995 | \r | |
1996 | --*/\r | |
1997 | {\r | |
1998 | return STATUS_SUCCESS;\r | |
1999 | }\r | |
2000 | \r | |
2001 | static\r | |
2002 | STATUS\r | |
2003 | IfrParse16 (\r | |
2004 | IFR_PARSE_CONTEXT *Context\r | |
2005 | )\r | |
2006 | /*++\r | |
2007 | \r | |
2008 | Routine Description:\r | |
2009 | \r | |
2010 | GC_TODO: Add function description\r | |
2011 | \r | |
2012 | Arguments:\r | |
2013 | \r | |
2014 | Context - GC_TODO: add argument description\r | |
2015 | \r | |
2016 | Returns:\r | |
2017 | \r | |
2018 | GC_TODO: add return values\r | |
2019 | \r | |
2020 | --*/\r | |
2021 | {\r | |
2022 | return STATUS_SUCCESS;\r | |
2023 | }\r | |
2024 | \r | |
2025 | static\r | |
2026 | STATUS\r | |
2027 | IfrParse17 (\r | |
2028 | IFR_PARSE_CONTEXT *Context\r | |
2029 | )\r | |
2030 | /*++\r | |
2031 | \r | |
2032 | Routine Description:\r | |
2033 | \r | |
2034 | GC_TODO: Add function description\r | |
2035 | \r | |
2036 | Arguments:\r | |
2037 | \r | |
2038 | Context - GC_TODO: add argument description\r | |
2039 | \r | |
2040 | Returns:\r | |
2041 | \r | |
2042 | GC_TODO: add return values\r | |
2043 | \r | |
2044 | --*/\r | |
2045 | {\r | |
2046 | return STATUS_SUCCESS;\r | |
2047 | }\r | |
2048 | \r | |
2049 | static\r | |
2050 | STATUS\r | |
2051 | IfrParse18 (\r | |
2052 | IFR_PARSE_CONTEXT *Context\r | |
2053 | )\r | |
2054 | /*++\r | |
2055 | \r | |
2056 | Routine Description:\r | |
2057 | \r | |
2058 | GC_TODO: Add function description\r | |
2059 | \r | |
2060 | Arguments:\r | |
2061 | \r | |
2062 | Context - GC_TODO: add argument description\r | |
2063 | \r | |
2064 | Returns:\r | |
2065 | \r | |
2066 | GC_TODO: add return values\r | |
2067 | \r | |
2068 | --*/\r | |
2069 | {\r | |
2070 | return STATUS_SUCCESS;\r | |
2071 | }\r | |
2072 | \r | |
2073 | static\r | |
2074 | STATUS\r | |
2075 | IfrParse19 (\r | |
2076 | IFR_PARSE_CONTEXT *Context\r | |
2077 | )\r | |
2078 | /*++\r | |
2079 | \r | |
2080 | Routine Description:\r | |
2081 | \r | |
2082 | GC_TODO: Add function description\r | |
2083 | \r | |
2084 | Arguments:\r | |
2085 | \r | |
2086 | Context - GC_TODO: add argument description\r | |
2087 | \r | |
2088 | Returns:\r | |
2089 | \r | |
2090 | GC_TODO: add return values\r | |
2091 | \r | |
2092 | --*/\r | |
2093 | {\r | |
2094 | return STATUS_SUCCESS;\r | |
2095 | }\r | |
2096 | \r | |
2097 | static\r | |
2098 | STATUS\r | |
2099 | IfrParse1A (\r | |
2100 | IFR_PARSE_CONTEXT *Context\r | |
2101 | )\r | |
2102 | /*++\r | |
2103 | \r | |
2104 | Routine Description:\r | |
2105 | \r | |
2106 | GC_TODO: Add function description\r | |
2107 | \r | |
2108 | Arguments:\r | |
2109 | \r | |
2110 | Context - GC_TODO: add argument description\r | |
2111 | \r | |
2112 | Returns:\r | |
2113 | \r | |
2114 | GC_TODO: add return values\r | |
2115 | \r | |
2116 | --*/\r | |
2117 | {\r | |
2118 | return STATUS_SUCCESS;\r | |
2119 | }\r | |
2120 | \r | |
2121 | static\r | |
2122 | STATUS\r | |
2123 | IfrParse1B (\r | |
2124 | IFR_PARSE_CONTEXT *Context\r | |
2125 | )\r | |
2126 | /*++\r | |
2127 | \r | |
2128 | Routine Description:\r | |
2129 | \r | |
2130 | GC_TODO: Add function description\r | |
2131 | \r | |
2132 | Arguments:\r | |
2133 | \r | |
2134 | Context - GC_TODO: add argument description\r | |
2135 | \r | |
2136 | Returns:\r | |
2137 | \r | |
2138 | GC_TODO: add return values\r | |
2139 | \r | |
2140 | --*/\r | |
2141 | {\r | |
2142 | return STATUS_SUCCESS;\r | |
2143 | }\r | |
2144 | \r | |
2145 | static\r | |
2146 | STATUS\r | |
2147 | IfrParse1C (\r | |
2148 | IFR_PARSE_CONTEXT *Context\r | |
2149 | )\r | |
2150 | /*++\r | |
2151 | \r | |
2152 | Routine Description:\r | |
2153 | \r | |
2154 | GC_TODO: Add function description\r | |
2155 | \r | |
2156 | Arguments:\r | |
2157 | \r | |
2158 | Context - GC_TODO: add argument description\r | |
2159 | \r | |
2160 | Returns:\r | |
2161 | \r | |
2162 | GC_TODO: add return values\r | |
2163 | \r | |
2164 | --*/\r | |
2165 | {\r | |
2166 | return STATUS_SUCCESS;\r | |
2167 | }\r | |
2168 | \r | |
2169 | static\r | |
2170 | STATUS\r | |
2171 | IfrParse1D (\r | |
2172 | IFR_PARSE_CONTEXT *Context\r | |
2173 | )\r | |
2174 | /*++\r | |
2175 | \r | |
2176 | Routine Description:\r | |
2177 | \r | |
2178 | GC_TODO: Add function description\r | |
2179 | \r | |
2180 | Arguments:\r | |
2181 | \r | |
2182 | Context - GC_TODO: add argument description\r | |
2183 | \r | |
2184 | Returns:\r | |
2185 | \r | |
2186 | GC_TODO: add return values\r | |
2187 | \r | |
2188 | --*/\r | |
2189 | {\r | |
2190 | return STATUS_SUCCESS;\r | |
2191 | }\r | |
2192 | \r | |
2193 | static\r | |
2194 | STATUS\r | |
2195 | IfrParse1E (\r | |
2196 | IFR_PARSE_CONTEXT *Context\r | |
2197 | )\r | |
2198 | /*++\r | |
2199 | \r | |
2200 | Routine Description:\r | |
2201 | \r | |
2202 | GC_TODO: Add function description\r | |
2203 | \r | |
2204 | Arguments:\r | |
2205 | \r | |
2206 | Context - GC_TODO: add argument description\r | |
2207 | \r | |
2208 | Returns:\r | |
2209 | \r | |
2210 | GC_TODO: add return values\r | |
2211 | \r | |
2212 | --*/\r | |
2213 | {\r | |
2214 | return STATUS_SUCCESS;\r | |
2215 | }\r | |
2216 | \r | |
2217 | static\r | |
2218 | STATUS\r | |
2219 | IfrParse1F (\r | |
2220 | IFR_PARSE_CONTEXT *Context\r | |
2221 | )\r | |
2222 | /*++\r | |
2223 | \r | |
2224 | Routine Description:\r | |
2225 | \r | |
2226 | GC_TODO: Add function description\r | |
2227 | \r | |
2228 | Arguments:\r | |
2229 | \r | |
2230 | Context - GC_TODO: add argument description\r | |
2231 | \r | |
2232 | Returns:\r | |
2233 | \r | |
2234 | GC_TODO: add return values\r | |
2235 | \r | |
2236 | --*/\r | |
2237 | {\r | |
2238 | return STATUS_SUCCESS;\r | |
2239 | }\r | |
2240 | \r | |
2241 | static\r | |
2242 | STATUS\r | |
2243 | IfrParse20 (\r | |
2244 | IFR_PARSE_CONTEXT *Context\r | |
2245 | )\r | |
2246 | /*++\r | |
2247 | \r | |
2248 | Routine Description:\r | |
2249 | \r | |
2250 | GC_TODO: Add function description\r | |
2251 | \r | |
2252 | Arguments:\r | |
2253 | \r | |
2254 | Context - GC_TODO: add argument description\r | |
2255 | \r | |
2256 | Returns:\r | |
2257 | \r | |
2258 | GC_TODO: add return values\r | |
2259 | \r | |
2260 | --*/\r | |
2261 | {\r | |
2262 | return STATUS_SUCCESS;\r | |
2263 | }\r | |
2264 | \r | |
2265 | static\r | |
2266 | STATUS\r | |
2267 | IfrParse21 (\r | |
2268 | IFR_PARSE_CONTEXT *Context\r | |
2269 | )\r | |
2270 | /*++\r | |
2271 | \r | |
2272 | Routine Description:\r | |
2273 | \r | |
2274 | GC_TODO: Add function description\r | |
2275 | \r | |
2276 | Arguments:\r | |
2277 | \r | |
2278 | Context - GC_TODO: add argument description\r | |
2279 | \r | |
2280 | Returns:\r | |
2281 | \r | |
2282 | GC_TODO: add return values\r | |
2283 | \r | |
2284 | --*/\r | |
2285 | {\r | |
2286 | return STATUS_SUCCESS;\r | |
2287 | }\r | |
2288 | \r | |
2289 | static\r | |
2290 | STATUS\r | |
2291 | IfrParse22 (\r | |
2292 | IFR_PARSE_CONTEXT *Context\r | |
2293 | )\r | |
2294 | /*++\r | |
2295 | \r | |
2296 | Routine Description:\r | |
2297 | \r | |
2298 | GC_TODO: Add function description\r | |
2299 | \r | |
2300 | Arguments:\r | |
2301 | \r | |
2302 | Context - GC_TODO: add argument description\r | |
2303 | \r | |
2304 | Returns:\r | |
2305 | \r | |
2306 | GC_TODO: add return values\r | |
2307 | \r | |
2308 | --*/\r | |
2309 | {\r | |
2310 | return STATUS_SUCCESS;\r | |
2311 | }\r | |
2312 | \r | |
2313 | static\r | |
2314 | STATUS\r | |
2315 | IfrParse23 (\r | |
2316 | IFR_PARSE_CONTEXT *Context\r | |
2317 | )\r | |
2318 | /*++\r | |
2319 | \r | |
2320 | Routine Description:\r | |
2321 | \r | |
2322 | GC_TODO: Add function description\r | |
2323 | \r | |
2324 | Arguments:\r | |
2325 | \r | |
2326 | Context - GC_TODO: add argument description\r | |
2327 | \r | |
2328 | Returns:\r | |
2329 | \r | |
2330 | GC_TODO: add return values\r | |
2331 | \r | |
2332 | --*/\r | |
2333 | {\r | |
2334 | return STATUS_SUCCESS;\r | |
2335 | }\r | |
2336 | //\r | |
2337 | // EFI_IFR_VARSTORE\r | |
2338 | //\r | |
2339 | static\r | |
2340 | STATUS\r | |
2341 | IfrParse24 (\r | |
2342 | IFR_PARSE_CONTEXT *Context\r | |
2343 | )\r | |
2344 | /*++\r | |
2345 | \r | |
2346 | Routine Description:\r | |
2347 | \r | |
2348 | GC_TODO: Add function description\r | |
2349 | \r | |
2350 | Arguments:\r | |
2351 | \r | |
2352 | Context - GC_TODO: add argument description\r | |
2353 | \r | |
2354 | Returns:\r | |
2355 | \r | |
2356 | GC_TODO: add return values\r | |
2357 | \r | |
2358 | --*/\r | |
2359 | {\r | |
2360 | EFI_IFR_VARSTORE *Op;\r | |
2361 | Op = (EFI_IFR_VARSTORE *) Context->LastIfr->RawIfrHeader;\r | |
2362 | return STATUS_SUCCESS;\r | |
2363 | }\r | |
2364 | //\r | |
2365 | // VARSTORE_SELECT\r | |
2366 | //\r | |
2367 | static\r | |
2368 | STATUS\r | |
2369 | IfrParse25 (\r | |
2370 | IFR_PARSE_CONTEXT *Context\r | |
2371 | )\r | |
2372 | /*++\r | |
2373 | \r | |
2374 | Routine Description:\r | |
2375 | \r | |
2376 | GC_TODO: Add function description\r | |
2377 | \r | |
2378 | Arguments:\r | |
2379 | \r | |
2380 | Context - GC_TODO: add argument description\r | |
2381 | \r | |
2382 | Returns:\r | |
2383 | \r | |
2384 | GC_TODO: add return values\r | |
2385 | \r | |
2386 | --*/\r | |
2387 | {\r | |
2388 | STATUS Status;\r | |
2389 | EFI_IFR_VARSTORE_SELECT *Op;\r | |
2390 | Op = (EFI_IFR_VARSTORE_SELECT *) Context->LastIfr->RawIfrHeader;\r | |
2391 | Status = GetVarStoreInfo (Context, Op->VarId, &Context->LastIfr->VarStoreGuid1, &Context->LastIfr->VarStoreName1);\r | |
2392 | //\r | |
2393 | // VARSTORE_SELECT sets both\r | |
2394 | //\r | |
2395 | Context->LastIfr->VarStoreGuid2 = Context->LastIfr->VarStoreGuid1;\r | |
2396 | Context->LastIfr->VarStoreName2 = Context->LastIfr->VarStoreName1;\r | |
2397 | return Status;\r | |
2398 | }\r | |
2399 | //\r | |
2400 | // VARSTORE_SELECT_PAIR\r | |
2401 | //\r | |
2402 | static\r | |
2403 | STATUS\r | |
2404 | IfrParse26 (\r | |
2405 | IFR_PARSE_CONTEXT *Context\r | |
2406 | )\r | |
2407 | /*++\r | |
2408 | \r | |
2409 | Routine Description:\r | |
2410 | \r | |
2411 | GC_TODO: Add function description\r | |
2412 | \r | |
2413 | Arguments:\r | |
2414 | \r | |
2415 | Context - GC_TODO: add argument description\r | |
2416 | \r | |
2417 | Returns:\r | |
2418 | \r | |
2419 | GC_TODO: add return values\r | |
2420 | \r | |
2421 | --*/\r | |
2422 | {\r | |
2423 | STATUS Status;\r | |
2424 | EFI_IFR_VARSTORE_SELECT_PAIR *Op;\r | |
2425 | \r | |
2426 | Op = (EFI_IFR_VARSTORE_SELECT_PAIR *) Context->LastIfr->RawIfrHeader;\r | |
2427 | Status = GetVarStoreInfo (Context, Op->VarId, &Context->LastIfr->VarStoreGuid1, &Context->LastIfr->VarStoreName1);\r | |
2428 | Status = GetVarStoreInfo (\r | |
2429 | Context,\r | |
2430 | Op->SecondaryVarId,\r | |
2431 | &Context->LastIfr->VarStoreGuid2,\r | |
2432 | &Context->LastIfr->VarStoreName2\r | |
2433 | );\r | |
2434 | return Status;\r | |
2435 | }\r | |
2436 | //\r | |
2437 | // TRUE\r | |
2438 | //\r | |
2439 | static\r | |
2440 | STATUS\r | |
2441 | IfrParse27 (\r | |
2442 | IFR_PARSE_CONTEXT *Context\r | |
2443 | )\r | |
2444 | /*++\r | |
2445 | \r | |
2446 | Routine Description:\r | |
2447 | \r | |
2448 | GC_TODO: Add function description\r | |
2449 | \r | |
2450 | Arguments:\r | |
2451 | \r | |
2452 | Context - GC_TODO: add argument description\r | |
2453 | \r | |
2454 | Returns:\r | |
2455 | \r | |
2456 | GC_TODO: add return values\r | |
2457 | \r | |
2458 | --*/\r | |
2459 | {\r | |
2460 | return STATUS_SUCCESS;\r | |
2461 | }\r | |
2462 | //\r | |
2463 | // FALSe\r | |
2464 | //\r | |
2465 | static\r | |
2466 | STATUS\r | |
2467 | IfrParse28 (\r | |
2468 | IFR_PARSE_CONTEXT *Context\r | |
2469 | )\r | |
2470 | /*++\r | |
2471 | \r | |
2472 | Routine Description:\r | |
2473 | \r | |
2474 | GC_TODO: Add function description\r | |
2475 | \r | |
2476 | Arguments:\r | |
2477 | \r | |
2478 | Context - GC_TODO: add argument description\r | |
2479 | \r | |
2480 | Returns:\r | |
2481 | \r | |
2482 | GC_TODO: add return values\r | |
2483 | \r | |
2484 | --*/\r | |
2485 | {\r | |
2486 | return STATUS_SUCCESS;\r | |
2487 | }\r | |
2488 | static\r | |
2489 | STATUS\r | |
2490 | IfrParse29 (\r | |
2491 | IFR_PARSE_CONTEXT *Context\r | |
2492 | )\r | |
2493 | /*++\r | |
2494 | \r | |
2495 | Routine Description:\r | |
2496 | \r | |
2497 | GC_TODO: Add function description\r | |
2498 | \r | |
2499 | Arguments:\r | |
2500 | \r | |
2501 | Context - GC_TODO: add argument description\r | |
2502 | \r | |
2503 | Returns:\r | |
2504 | \r | |
2505 | GC_TODO: add return values\r | |
2506 | \r | |
2507 | --*/\r | |
2508 | {\r | |
2509 | return STATUS_SUCCESS;\r | |
2510 | }\r | |
2511 | static\r | |
2512 | STATUS\r | |
2513 | IfrParse2A (\r | |
2514 | IFR_PARSE_CONTEXT *Context\r | |
2515 | )\r | |
2516 | /*++\r | |
2517 | \r | |
2518 | Routine Description:\r | |
2519 | \r | |
2520 | GC_TODO: Add function description\r | |
2521 | \r | |
2522 | Arguments:\r | |
2523 | \r | |
2524 | Context - GC_TODO: add argument description\r | |
2525 | \r | |
2526 | Returns:\r | |
2527 | \r | |
2528 | GC_TODO: add return values\r | |
2529 | \r | |
2530 | --*/\r | |
2531 | {\r | |
2532 | return STATUS_SUCCESS;\r | |
2533 | }\r |