/** @file\r
\r
-Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
#include <Guid/ZeroGuid.h>\r
\r
#define CONFIGURATION_VARSTORE_ID 0x1234\r
+#define BITS_VARSTORE_ID 0x2345\r
\r
#pragma pack(1)\r
+\r
+//\r
+// !!! For a structure with a series of bit fields and used as a storage in vfr file, and if the bit fields do not add up to the size of the defined type.\r
+// In the C code use sizeof() to get the size the strucure, the results may vary form the compiler(VS,GCC...).\r
+// But the size of the storage calculated by VfrCompiler is fixed (calculate with alignment).\r
+// To avoid above case, we need to make the total bit width in the structure aligned with the size of the defined type for these bit fields. We can:\r
+// 1. Add bit field (with/without name) with remianing with for padding.\r
+// 2. Add unnamed bit field with 0 for padding, the amount of padding is determined by the alignment characteristics of the members of the structure.\r
+//\r
+typedef struct {\r
+ UINT16 NestByteField;\r
+ UINT8 : 1; // unamed field can be used for padding\r
+ UINT8 NestBitCheckbox : 1;\r
+ UINT8 NestBitOneof : 2;\r
+ UINT8 : 0; // Special width 0 can be used to force alignment at the next word boundary\r
+ UINT8 NestBitNumeric : 4;\r
+} MY_BITS_DATA;\r
+\r
+typedef union {\r
+ UINT8 UnionNumeric;\r
+ UINT8 UnionNumericAlias;\r
+} MY_EFI_UNION_DATA;\r
+\r
typedef struct {\r
- UINT16 WhatIsThePassword[20];\r
- UINT16 WhatIsThePassword2[20];\r
UINT16 MyStringData[40];\r
- UINT16 PasswordClearText[20];\r
UINT16 SomethingHiddenForHtml;\r
UINT8 HowOldAreYouInYearsManual;\r
UINT16 HowTallAreYouManual;\r
UINT8 GetDefaultValueFromAccess;\r
EFI_HII_TIME Time;\r
UINT8 RefreshGuidCount;\r
+ UINT8 Match2;\r
+ UINT8 GetDefaultValueFromCallBackForOrderedList[3];\r
+ UINT8 BitCheckbox : 1;\r
+ UINT8 ReservedBits: 7; // Reserved bit fields for padding.\r
+ UINT16 BitOneof : 6;\r
+ UINT16 : 0; // Width 0 used to force alignment.\r
+ UINT16 BitNumeric : 12;\r
+ MY_BITS_DATA MyBitData;\r
+ MY_EFI_UNION_DATA MyUnionData;\r
} DRIVER_SAMPLE_CONFIGURATION;\r
\r
//\r
UINT8 Field8;\r
UINT16 Field16;\r
UINT8 OrderedList[3];\r
+ UINT16 SubmittedCallback;\r
} MY_EFI_VARSTORE_DATA;\r
\r
+//\r
+// 3rd NV data structure definition\r
+//\r
+typedef struct {\r
+ MY_BITS_DATA BitsData;\r
+ UINT32 EfiBitGrayoutTest : 5;\r
+ UINT32 EfiBitNumeric : 4;\r
+ UINT32 EfiBitOneof : 10;\r
+ UINT32 EfiBitCheckbox : 1;\r
+ UINT32 : 0; // Width 0 used to force alignment.\r
+} MY_EFI_BITS_VARSTORE_DATA;\r
+\r
//\r
// Labels definition\r
//\r