3 Copyright (c) 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 UefiIfrOpCodeCreation.c
18 Library Routines to create IFR independent of string data - assume tokens already exist
19 Primarily to be used for exporting op-codes at a label in pre-defined forms.
25 #include "UefiIfrLibrary.h"
27 EFI_GUID mIfrVendorGuid
= EFI_IFR_TIANO_GUID
;
31 IsValidQuestionFlags (
35 return (BOOLEAN
)((Flags
& (~QUESTION_FLAGS
)) ? FALSE
: TRUE
);
44 return (BOOLEAN
)((Type
<= EFI_IFR_TYPE_OTHER
) ? TRUE
: FALSE
);
53 if (Flags
& ~(EFI_IFR_NUMERIC_SIZE
| EFI_IFR_DISPLAY
)) {
57 if ((Flags
& EFI_IFR_DISPLAY
) > EFI_IFR_DISPLAY_UINT_HEX
) {
66 IsValidCheckboxFlags (
70 return (BOOLEAN
)((Flags
<= EFI_IFR_CHECKBOX_DEFAULT_MFG
) ? TRUE
: FALSE
);
75 IN OUT EFI_HII_UPDATE_DATA
*Data
81 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
83 if (Data
->Offset
+ sizeof (EFI_IFR_END
) > Data
->BufferSize
) {
84 return EFI_BUFFER_TOO_SMALL
;
87 End
.Header
.Length
= sizeof (EFI_IFR_END
);
88 End
.Header
.OpCode
= EFI_IFR_END_OP
;
91 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
92 EfiCopyMem (LocalBuffer
, &End
, sizeof (EFI_IFR_END
));
93 Data
->Offset
+= sizeof (EFI_IFR_END
);
100 IN EFI_IFR_TYPE_VALUE
*Value
,
102 IN OUT EFI_HII_UPDATE_DATA
*Data
105 EFI_IFR_DEFAULT Default
;
108 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
110 if ((Value
== NULL
) || !IsValidValueType (Type
)) {
111 return EFI_INVALID_PARAMETER
;
114 if (Data
->Offset
+ sizeof (EFI_IFR_DEFAULT
) > Data
->BufferSize
) {
115 return EFI_BUFFER_TOO_SMALL
;
118 Default
.Header
.OpCode
= EFI_IFR_DEFAULT_OP
;
119 Default
.Header
.Length
= sizeof (EFI_IFR_DEFAULT
);
120 Default
.Header
.Scope
= 0;
122 Default
.DefaultId
= EFI_HII_DEFAULT_CLASS_STANDARD
;
123 EfiCopyMem (&Default
.Value
, Value
, sizeof(EFI_IFR_TYPE_VALUE
));
125 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
126 EfiCopyMem (LocalBuffer
, &Default
, sizeof (EFI_IFR_DEFAULT
));
127 Data
->Offset
+= sizeof (EFI_IFR_DEFAULT
);
134 IN EFI_QUESTION_ID QuestionId
,
135 IN EFI_STRING_ID Prompt
,
136 IN EFI_STRING_ID Help
,
137 IN UINT8 QuestionFlags
,
138 IN EFI_STRING_ID QuestionConfig
,
139 IN OUT EFI_HII_UPDATE_DATA
*Data
142 EFI_IFR_ACTION Action
;
145 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
147 if (!IsValidQuestionFlags (QuestionFlags
)) {
148 return EFI_INVALID_PARAMETER
;
151 if (Data
->Offset
+ sizeof (EFI_IFR_ACTION
) > Data
->BufferSize
) {
152 return EFI_BUFFER_TOO_SMALL
;
155 Action
.Header
.OpCode
= EFI_IFR_ACTION_OP
;
156 Action
.Header
.Length
= sizeof (EFI_IFR_ACTION
);
157 Action
.Header
.Scope
= 0;
158 Action
.Question
.QuestionId
= QuestionId
;
159 Action
.Question
.Header
.Prompt
= Prompt
;
160 Action
.Question
.Header
.Help
= Help
;
161 Action
.Question
.VarStoreId
= INVALID_VARSTORE_ID
;
162 Action
.Question
.Flags
= QuestionFlags
;
163 Action
.QuestionConfig
= QuestionConfig
;
165 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
166 EfiCopyMem (LocalBuffer
, &Action
, sizeof (EFI_IFR_ACTION
));
167 Data
->Offset
+= sizeof (EFI_IFR_ACTION
);
173 CreateSubTitleOpCode (
174 IN EFI_STRING_ID Prompt
,
175 IN EFI_STRING_ID Help
,
178 IN OUT EFI_HII_UPDATE_DATA
*Data
181 EFI_IFR_SUBTITLE Subtitle
;
184 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
186 if (Data
->Offset
+ sizeof (EFI_IFR_SUBTITLE
) > Data
->BufferSize
) {
187 return EFI_BUFFER_TOO_SMALL
;
190 Subtitle
.Header
.OpCode
= EFI_IFR_SUBTITLE_OP
;
191 Subtitle
.Header
.Length
= sizeof (EFI_IFR_SUBTITLE
);
192 Subtitle
.Header
.Scope
= Scope
;
193 Subtitle
.Statement
.Prompt
= Prompt
;
194 Subtitle
.Statement
.Help
= Help
;
195 Subtitle
.Flags
= Flags
;
197 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
198 EfiCopyMem (LocalBuffer
, &Subtitle
, sizeof (EFI_IFR_SUBTITLE
));
199 Data
->Offset
+= sizeof (EFI_IFR_SUBTITLE
);
207 IN EFI_STRING_ID Prompt
,
208 IN EFI_STRING_ID Help
,
209 IN EFI_STRING_ID TextTwo
,
210 IN OUT EFI_HII_UPDATE_DATA
*Data
216 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
218 if (Data
->Offset
+ sizeof (EFI_IFR_TEXT
) > Data
->BufferSize
) {
219 return EFI_BUFFER_TOO_SMALL
;
222 Text
.Header
.OpCode
= EFI_IFR_TEXT_OP
;
223 Text
.Header
.Length
= sizeof (EFI_IFR_TEXT
);
224 Text
.Header
.Scope
= 0;
225 Text
.Statement
.Prompt
= Prompt
;
226 Text
.Statement
.Help
= Help
;
227 Text
.TextTwo
= TextTwo
;
229 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
230 EfiCopyMem (LocalBuffer
, &Text
, sizeof (EFI_IFR_TEXT
));
231 Data
->Offset
+= sizeof (EFI_IFR_TEXT
);
238 IN EFI_FORM_ID FormId
,
239 IN EFI_STRING_ID Prompt
,
240 IN EFI_STRING_ID Help
,
241 IN UINT8 QuestionFlags
,
242 IN EFI_QUESTION_ID QuestionId
,
243 IN OUT EFI_HII_UPDATE_DATA
*Data
249 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
251 if (!IsValidQuestionFlags (QuestionFlags
)) {
252 return EFI_INVALID_PARAMETER
;
255 if (Data
->Offset
+ sizeof (EFI_IFR_REF
) > Data
->BufferSize
) {
256 return EFI_BUFFER_TOO_SMALL
;
259 Goto
.Header
.OpCode
= EFI_IFR_REF_OP
;
260 Goto
.Header
.Length
= sizeof (EFI_IFR_REF
);
261 Goto
.Header
.Scope
= 0;
262 Goto
.Question
.Header
.Prompt
= Prompt
;
263 Goto
.Question
.Header
.Help
= Help
;
264 Goto
.Question
.VarStoreId
= INVALID_VARSTORE_ID
;
265 Goto
.Question
.QuestionId
= QuestionId
;
266 Goto
.Question
.Flags
= QuestionFlags
;
267 Goto
.FormId
= FormId
;
269 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
270 EfiCopyMem (LocalBuffer
, &Goto
, sizeof (EFI_IFR_REF
));
271 Data
->Offset
+= sizeof (EFI_IFR_REF
);
277 CreateOneOfOptionOpCode (
278 IN UINTN OptionCount
,
279 IN IFR_OPTION
*OptionsList
,
281 IN OUT EFI_HII_UPDATE_DATA
*Data
286 EFI_IFR_ONE_OF_OPTION OneOfOption
;
288 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
290 if ((OptionCount
!= 0) && (OptionsList
== NULL
)) {
291 return EFI_INVALID_PARAMETER
;
294 if (Data
->Offset
+ OptionCount
* sizeof (EFI_IFR_ONE_OF_OPTION
) > Data
->BufferSize
) {
295 return EFI_BUFFER_TOO_SMALL
;
298 for (Index
= 0; Index
< OptionCount
; Index
++) {
299 OneOfOption
.Header
.OpCode
= EFI_IFR_ONE_OF_OPTION_OP
;
300 OneOfOption
.Header
.Length
= sizeof (EFI_IFR_ONE_OF_OPTION
);
301 OneOfOption
.Header
.Scope
= 0;
303 OneOfOption
.Option
= OptionsList
[Index
].StringToken
;
304 OneOfOption
.Value
= OptionsList
[Index
].Value
;
305 OneOfOption
.Flags
= (UINT8
)(OptionsList
[Index
].Flags
& (EFI_IFR_OPTION_DEFAULT
| EFI_IFR_OPTION_DEFAULT_MFG
));
306 OneOfOption
.Type
= Type
;
308 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
309 EfiCopyMem (LocalBuffer
, &OneOfOption
, sizeof (EFI_IFR_ONE_OF_OPTION
));
310 Data
->Offset
+= sizeof (EFI_IFR_ONE_OF_OPTION
);
318 IN EFI_QUESTION_ID QuestionId
,
319 IN EFI_VARSTORE_ID VarStoreId
,
321 IN EFI_STRING_ID Prompt
,
322 IN EFI_STRING_ID Help
,
323 IN UINT8 QuestionFlags
,
325 IN IFR_OPTION
*OptionsList
,
326 IN UINTN OptionCount
,
327 IN OUT EFI_HII_UPDATE_DATA
*Data
331 EFI_IFR_ONE_OF OneOf
;
334 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
336 if (!IsValidNumricFlags (OneOfFlags
) ||
337 !IsValidQuestionFlags (QuestionFlags
) ||
338 ((OptionCount
!= 0) && (OptionsList
== NULL
))) {
339 return EFI_INVALID_PARAMETER
;
342 Length
= sizeof (EFI_IFR_ONE_OF
) + OptionCount
* sizeof (EFI_IFR_ONE_OF_OPTION
) + sizeof (EFI_IFR_END
);
343 if (Data
->Offset
+ Length
> Data
->BufferSize
) {
344 return EFI_BUFFER_TOO_SMALL
;
347 OneOf
.Header
.OpCode
= EFI_IFR_ONE_OF_OP
;
348 OneOf
.Header
.Length
= sizeof (EFI_IFR_ONE_OF
);
349 OneOf
.Header
.Scope
= 1;
350 OneOf
.Question
.Header
.Prompt
= Prompt
;
351 OneOf
.Question
.Header
.Help
= Help
;
352 OneOf
.Question
.QuestionId
= QuestionId
;
353 OneOf
.Question
.VarStoreId
= VarStoreId
;
354 OneOf
.Question
.VarStoreInfo
.VarOffset
= VarOffset
;
355 OneOf
.Question
.Flags
= QuestionFlags
;
356 OneOf
.Flags
= OneOfFlags
;
357 EfiZeroMem ((VOID
*) &OneOf
.data
, sizeof (MINMAXSTEP_DATA
));
359 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
360 EfiCopyMem (LocalBuffer
, &OneOf
, sizeof (EFI_IFR_ONE_OF
));
361 Data
->Offset
+= sizeof (EFI_IFR_ONE_OF
);
363 CreateOneOfOptionOpCode (OptionCount
, OptionsList
, (UINT8
)(OneOfFlags
& EFI_IFR_NUMERIC_SIZE
), Data
);
365 CreateEndOpCode (Data
);
371 CreateOrderedListOpCode (
372 IN EFI_QUESTION_ID QuestionId
,
373 IN EFI_VARSTORE_ID VarStoreId
,
375 IN EFI_STRING_ID Prompt
,
376 IN EFI_STRING_ID Help
,
377 IN UINT8 QuestionFlags
,
378 IN UINT8 OrderedListFlags
,
380 IN UINT8 MaxContainers
,
381 IN IFR_OPTION
*OptionsList
,
382 IN UINTN OptionCount
,
383 IN OUT EFI_HII_UPDATE_DATA
*Data
387 EFI_IFR_ORDERED_LIST OrderedList
;
390 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
392 if (!IsValidQuestionFlags (QuestionFlags
) ||
393 ((OptionCount
!= 0) && (OptionsList
== NULL
))) {
394 return EFI_INVALID_PARAMETER
;
397 if ((OrderedListFlags
!= 0) &&
398 (OrderedListFlags
!= EFI_IFR_UNIQUE_SET
) &&
399 (OrderedListFlags
!= EFI_IFR_NO_EMPTY_SET
)) {
400 return EFI_INVALID_PARAMETER
;
403 Length
= sizeof (EFI_IFR_ORDERED_LIST
) + OptionCount
* sizeof (EFI_IFR_ONE_OF_OPTION
) + sizeof (EFI_IFR_END
);
404 if (Data
->Offset
+ Length
> Data
->BufferSize
) {
405 return EFI_BUFFER_TOO_SMALL
;
408 OrderedList
.Header
.OpCode
= EFI_IFR_ORDERED_LIST_OP
;
409 OrderedList
.Header
.Length
= sizeof (EFI_IFR_ORDERED_LIST
);
410 OrderedList
.Header
.Scope
= 1;
411 OrderedList
.Question
.Header
.Prompt
= Prompt
;
412 OrderedList
.Question
.Header
.Help
= Help
;
413 OrderedList
.Question
.QuestionId
= QuestionId
;
414 OrderedList
.Question
.VarStoreId
= VarStoreId
;
415 OrderedList
.Question
.VarStoreInfo
.VarOffset
= VarOffset
;
416 OrderedList
.Question
.Flags
= QuestionFlags
;
417 OrderedList
.MaxContainers
= MaxContainers
;
418 OrderedList
.Flags
= OrderedListFlags
;
420 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
421 EfiCopyMem (LocalBuffer
, &OrderedList
, sizeof (EFI_IFR_ORDERED_LIST
));
422 Data
->Offset
+= sizeof (EFI_IFR_ORDERED_LIST
);
424 CreateOneOfOptionOpCode (OptionCount
, OptionsList
, DataType
, Data
);
426 CreateEndOpCode (Data
);
432 CreateCheckBoxOpCode (
433 IN EFI_QUESTION_ID QuestionId
,
434 IN EFI_VARSTORE_ID VarStoreId
,
436 IN EFI_STRING_ID Prompt
,
437 IN EFI_STRING_ID Help
,
438 IN UINT8 QuestionFlags
,
439 IN UINT8 CheckBoxFlags
,
440 IN OUT EFI_HII_UPDATE_DATA
*Data
443 EFI_IFR_CHECKBOX CheckBox
;
446 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
448 if (!IsValidQuestionFlags (QuestionFlags
) || !IsValidCheckboxFlags (CheckBoxFlags
)) {
449 return EFI_INVALID_PARAMETER
;
452 if (Data
->Offset
+ sizeof (EFI_IFR_CHECKBOX
) > Data
->BufferSize
) {
453 return EFI_BUFFER_TOO_SMALL
;
456 CheckBox
.Header
.OpCode
= EFI_IFR_CHECKBOX_OP
;
457 CheckBox
.Header
.Length
= sizeof (EFI_IFR_CHECKBOX
);
458 CheckBox
.Header
.Scope
= 0;
459 CheckBox
.Question
.QuestionId
= QuestionId
;
460 CheckBox
.Question
.VarStoreId
= VarStoreId
;
461 CheckBox
.Question
.VarStoreInfo
.VarOffset
= VarOffset
;
462 CheckBox
.Question
.Header
.Prompt
= Prompt
;
463 CheckBox
.Question
.Header
.Help
= Help
;
464 CheckBox
.Question
.Flags
= QuestionFlags
;
465 CheckBox
.Flags
= CheckBoxFlags
;
467 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
468 EfiCopyMem (LocalBuffer
, &CheckBox
, sizeof (EFI_IFR_CHECKBOX
));
469 Data
->Offset
+= sizeof (EFI_IFR_CHECKBOX
);
475 CreateNumericOpCode (
476 IN EFI_QUESTION_ID QuestionId
,
477 IN EFI_VARSTORE_ID VarStoreId
,
479 IN EFI_STRING_ID Prompt
,
480 IN EFI_STRING_ID Help
,
481 IN UINT8 QuestionFlags
,
482 IN UINT8 NumericFlags
,
487 IN OUT EFI_HII_UPDATE_DATA
*Data
492 EFI_IFR_NUMERIC Numeric
;
493 MINMAXSTEP_DATA MinMaxStep
;
494 EFI_IFR_TYPE_VALUE DefaultValue
;
497 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
499 if (!IsValidQuestionFlags (QuestionFlags
) || !IsValidNumricFlags (NumericFlags
)) {
500 return EFI_INVALID_PARAMETER
;
503 Length
= sizeof (EFI_IFR_NUMERIC
) + sizeof (EFI_IFR_DEFAULT
) + sizeof (EFI_IFR_END
);
504 if (Data
->Offset
+ sizeof (EFI_IFR_CHECKBOX
) > Data
->BufferSize
) {
505 return EFI_BUFFER_TOO_SMALL
;
508 Numeric
.Header
.OpCode
= EFI_IFR_NUMERIC_OP
;
509 Numeric
.Header
.Length
= sizeof (EFI_IFR_NUMERIC
);
510 Numeric
.Header
.Scope
= 1;
511 Numeric
.Question
.QuestionId
= QuestionId
;
512 Numeric
.Question
.VarStoreId
= VarStoreId
;
513 Numeric
.Question
.VarStoreInfo
.VarOffset
= VarOffset
;
514 Numeric
.Question
.Header
.Prompt
= Prompt
;
515 Numeric
.Question
.Header
.Help
= Help
;
516 Numeric
.Question
.Flags
= QuestionFlags
;
517 Numeric
.Flags
= NumericFlags
;
519 switch (NumericFlags
& EFI_IFR_NUMERIC_SIZE
) {
520 case EFI_IFR_NUMERIC_SIZE_1
:
521 MinMaxStep
.u8
.MinValue
= (UINT8
) Minimum
;
522 MinMaxStep
.u8
.MaxValue
= (UINT8
) Maximum
;
523 MinMaxStep
.u8
.Step
= (UINT8
) Step
;
526 case EFI_IFR_NUMERIC_SIZE_2
:
527 MinMaxStep
.u16
.MinValue
= (UINT16
) Minimum
;
528 MinMaxStep
.u16
.MaxValue
= (UINT16
) Maximum
;
529 MinMaxStep
.u16
.Step
= (UINT16
) Step
;
532 case EFI_IFR_NUMERIC_SIZE_4
:
533 MinMaxStep
.u32
.MinValue
= (UINT32
) Minimum
;
534 MinMaxStep
.u32
.MaxValue
= (UINT32
) Maximum
;
535 MinMaxStep
.u32
.Step
= (UINT32
) Step
;
538 case EFI_IFR_NUMERIC_SIZE_8
:
539 MinMaxStep
.u64
.MinValue
= Minimum
;
540 MinMaxStep
.u64
.MaxValue
= Maximum
;
541 MinMaxStep
.u64
.Step
= Step
;
545 EfiCopyMem (&Numeric
.data
, &MinMaxStep
, sizeof (MINMAXSTEP_DATA
));
547 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
548 EfiCopyMem (LocalBuffer
, &Numeric
, sizeof (EFI_IFR_NUMERIC
));
549 Data
->Offset
+= sizeof (EFI_IFR_NUMERIC
);
551 DefaultValue
.u64
= Default
;
552 Status
= CreateDefaultOpCode (&DefaultValue
, (UINT8
)(NumericFlags
& EFI_IFR_NUMERIC_SIZE
), Data
);
553 if (EFI_ERROR(Status
)) {
557 CreateEndOpCode (Data
);
564 IN EFI_QUESTION_ID QuestionId
,
565 IN EFI_VARSTORE_ID VarStoreId
,
567 IN EFI_STRING_ID Prompt
,
568 IN EFI_STRING_ID Help
,
569 IN UINT8 QuestionFlags
,
570 IN UINT8 StringFlags
,
573 IN OUT EFI_HII_UPDATE_DATA
*Data
576 EFI_IFR_STRING String
;
579 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
581 if (!IsValidQuestionFlags (QuestionFlags
) || (StringFlags
& (~EFI_IFR_STRING_MULTI_LINE
))) {
582 return EFI_INVALID_PARAMETER
;
585 if (Data
->Offset
+ sizeof (EFI_IFR_STRING
) > Data
->BufferSize
) {
586 return EFI_BUFFER_TOO_SMALL
;
589 String
.Header
.OpCode
= EFI_IFR_STRING_OP
;
590 String
.Header
.Length
= sizeof (EFI_IFR_STRING
);
591 String
.Header
.Scope
= 0;
592 String
.Question
.Header
.Prompt
= Prompt
;
593 String
.Question
.Header
.Help
= Help
;
594 String
.Question
.QuestionId
= QuestionId
;
595 String
.Question
.VarStoreId
= VarStoreId
;
596 String
.Question
.VarStoreInfo
.VarOffset
= VarOffset
;
597 String
.Question
.Flags
= QuestionFlags
;
598 String
.MinSize
= MinSize
;
599 String
.MaxSize
= MaxSize
;
600 String
.Flags
= StringFlags
;
602 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
603 EfiCopyMem (LocalBuffer
, &String
, sizeof (EFI_IFR_STRING
));
604 Data
->Offset
+= sizeof (EFI_IFR_STRING
);
611 IN EFI_STRING_ID Title
,
612 IN UINT16 LineNumber
,
614 IN OUT EFI_HII_UPDATE_DATA
*Data
617 EFI_IFR_GUID_BANNER Banner
;
620 ASSERT (Data
!= NULL
&& Data
->Data
!= NULL
);
622 if (Data
->Offset
+ sizeof (EFI_IFR_GUID_BANNER
) > Data
->BufferSize
) {
623 return EFI_BUFFER_TOO_SMALL
;
626 Banner
.Header
.OpCode
= EFI_IFR_GUID_OP
;
627 Banner
.Header
.Length
= sizeof (EFI_IFR_GUID_BANNER
);
628 Banner
.Header
.Scope
= 0;
629 EfiCopyMem (&Banner
.Guid
, &mIfrVendorGuid
, sizeof (EFI_IFR_GUID
));
630 Banner
.ExtendOpCode
= EFI_IFR_EXTEND_OP_BANNER
;
631 Banner
.Title
= Title
;
632 Banner
.LineNumber
= LineNumber
;
633 Banner
.Alignment
= Alignment
;
635 LocalBuffer
= (UINT8
*) Data
->Data
+ Data
->Offset
;
636 EfiCopyMem (LocalBuffer
, &Banner
, sizeof (EFI_IFR_GUID_BANNER
));
637 Data
->Offset
+= sizeof (EFI_IFR_GUID_BANNER
);