mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 11:13:53 +01:00 
			
		
		
		
	V3: (1) Reset QuestionStoredInBitField to FALSE at end opcode(EFI_IFR_END_OP) (2) Fix typo and format issues(line alignment for debug print message and value assignment...) V2: (1)Remove the VarOffsetBitLevel/StorageWidthBitLevel to reduce the final VarCheckBinSize and update the implementation accordingly. (2)Update the VAR_CHECK_HII_REVISION (3)Refine the Debug message and function comments,like update oneof", "checkbox", "numeric" to "OneOf", "CheckBox", "Numeric". VarCheckHiiLib check the value set to storage based on the possible value listed in the vfr file. Since we have enhanced vfr to support Question value stored in bit field, so now enhance VarCheckHiiLib to support bit field check. Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Internal structure for Var Check Hii.
 | |
| 
 | |
| Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
 | |
| This program and the accompanying materials
 | |
| are licensed and made available under the terms and conditions of the BSD License
 | |
| which accompanies this distribution.  The full text of the license may be found at
 | |
| http://opensource.org/licenses/bsd-license.php
 | |
| 
 | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _VAR_CHECK_STRUCTURE_H_
 | |
| #define _VAR_CHECK_STRUCTURE_H_
 | |
| 
 | |
| //
 | |
| // Alignment for Hii Variable and Question header.
 | |
| //
 | |
| #define HEADER_ALIGNMENT  4
 | |
| #define HEADER_ALIGN(Header)  (((UINTN) (Header) + HEADER_ALIGNMENT - 1) & (~(HEADER_ALIGNMENT - 1)))
 | |
| 
 | |
| #pragma pack (1)
 | |
| 
 | |
| #define VAR_CHECK_HII_REVISION  0x0002
 | |
| 
 | |
| typedef struct {
 | |
|   UINT16            Revision;
 | |
|   UINT16            HeaderLength;
 | |
|   UINT32            Length; // Length include this header
 | |
|   UINT8             OpCode;
 | |
|   UINT8             Reserved;
 | |
|   UINT16            Size;
 | |
|   UINT32            Attributes;
 | |
|   EFI_GUID          Guid;
 | |
| //CHAR16              Name[];
 | |
| } VAR_CHECK_HII_VARIABLE_HEADER;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8             OpCode;
 | |
|   UINT8             Length; // Length include this header
 | |
|   UINT16            VarOffset;
 | |
|   UINT8             StorageWidth;
 | |
|   BOOLEAN           BitFieldStore; // Whether the Question is stored in bit field, if TRUE, the VarOffset/StorageWidth will be saved as bit level, otherwise in byte level.
 | |
| } VAR_CHECK_HII_QUESTION_HEADER;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8             OpCode;
 | |
|   UINT8             Length; // Length include this header
 | |
|   UINT16            VarOffset;
 | |
|   UINT8             StorageWidth;
 | |
|   BOOLEAN           BitFieldStore; // Whether the Question is stored in bit field, if TRUE, the VarOffset/StorageWidth will be saved as bit level, otherwise in byte level.
 | |
| //UINTx               Data[]; // x = UINT8/UINT16/UINT32/UINT64;
 | |
| } VAR_CHECK_HII_QUESTION_ONEOF;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8             OpCode;
 | |
|   UINT8             Length; // Length include this header
 | |
|   UINT16            VarOffset;
 | |
|   UINT8             StorageWidth;
 | |
|   BOOLEAN           BitFieldStore; // Whether the Question is stored in bit field, if TRUE, the VarOffset/StorageWidth will be saved as bit level, otherwise in byte level.
 | |
| } VAR_CHECK_HII_QUESTION_CHECKBOX;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8             OpCode;
 | |
|   UINT8             Length; // Length include this header
 | |
|   UINT16            VarOffset;
 | |
|   UINT8             StorageWidth;
 | |
|   BOOLEAN           BitFieldStore; // Whether the Question is stored in bit field, if TRUE, the VarOffset/StorageWidth will be saved as bit level, otherwise in byte level.
 | |
| //UINTx               Minimum; // x = UINT8/UINT16/UINT32/UINT64;
 | |
| //UINTx               Maximum; // x = UINT8/UINT16/UINT32/UINT64;
 | |
| } VAR_CHECK_HII_QUESTION_NUMERIC;
 | |
| 
 | |
| typedef struct {
 | |
|   UINT8             OpCode;
 | |
|   UINT8             Length; // Length include this header
 | |
|   UINT16            VarOffset;
 | |
|   UINT8             StorageWidth;
 | |
|   BOOLEAN           BitFieldStore; // Whether the Question is stored in bit field, if TRUE, the VarOffset/StorageWidth will be saved as bit level, otherwise in byte level.
 | |
|   UINT8             MaxContainers;
 | |
| //UINTx               Data[]; // x = UINT8/UINT16/UINT32/UINT64;
 | |
| } VAR_CHECK_HII_QUESTION_ORDEREDLIST;
 | |
| 
 | |
| #pragma pack ()
 | |
| 
 | |
| #endif
 |