]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/DriverSampleDxe/NVDataStruc.h
MdeModulePkg/DriverSampleDxe: Refine the sample case for UNION type
[mirror_edk2.git] / MdeModulePkg / Universal / DriverSampleDxe / NVDataStruc.h
index 8926ab017789c661fed63248372f868d19a17c9b..208a4c6d915180edbbb95a7c926034f89fec1cfc 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2007 - 2010, 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
@@ -27,28 +27,38 @@ Revision History:
 \r
 #include <Guid/HiiPlatformSetupFormset.h>\r
 #include <Guid/HiiFormMapMethodGuid.h>\r
-\r
-#define FORMSET_GUID \\r
-  { \\r
-    0xA04A27f4, 0xDF00, 0x4D42, {0xB5, 0x52, 0x39, 0x51, 0x13, 0x02, 0x11, 0x3D} \\r
-  }\r
-\r
-#define INVENTORY_GUID \\r
-  { \\r
-    0xb3f56470, 0x6141, 0x4621, {0x8f, 0x19, 0x70, 0x4e, 0x57, 0x7a, 0xa9, 0xe8} \\r
-  }\r
-\r
-#define EFI_USER_INFO_ACCESS_SETUP_ADMIN_GUID \\r
-  { 0x85b75607, 0xf7ce, 0x471e, { 0xb7, 0xe4, 0x2a, 0xea, 0x5f, 0x72, 0x32, 0xee } }\r
+#include <Guid/DriverSampleHii.h>\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
@@ -67,6 +77,7 @@ typedef struct {
   UINT8   DynamicOneof;\r
   UINT8   DynamicOrderedList[5];\r
   UINT8   Reserved;\r
+  EFI_HII_REF RefData;\r
   UINT8   NameValueVar0;\r
   UINT16  NameValueVar1;\r
   UINT16  NameValueVar2[20];\r
@@ -77,6 +88,16 @@ typedef struct {
   UINT8   GetDefaultValueFromCallBack;\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
@@ -86,13 +107,27 @@ typedef struct {
   UINT8         Field8;\r
   UINT16        Field16;\r
   UINT8         OrderedList[3];\r
-} MY_DATA2;\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
 #define LABEL_UPDATE1               0x1234\r
 #define LABEL_UPDATE2               0x2234\r
+#define LABEL_UPDATE3               0x3234\r
 #define LABEL_END                   0x2223\r
 \r
 #pragma pack()\r