]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/DriverSampleDxe/NVDataStruc.h
MdeModulePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdeModulePkg / Universal / DriverSampleDxe / NVDataStruc.h
1 /** @file
2
3 Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
4 SPDX-License-Identifier: BSD-2-Clause-Patent
5
6 Module Name:
7
8 NVDataStruc.h
9
10 Abstract:
11
12 NVData structure used by the sample driver
13
14 Revision History:
15
16
17 **/
18
19 #ifndef _NVDATASTRUC_H_
20 #define _NVDATASTRUC_H_
21
22 #include <Guid/HiiPlatformSetupFormset.h>
23 #include <Guid/HiiFormMapMethodGuid.h>
24 #include <Guid/DriverSampleHii.h>
25 #include <Guid/ZeroGuid.h>
26
27 #define CONFIGURATION_VARSTORE_ID 0x1234
28 #define BITS_VARSTORE_ID 0x2345
29
30 #pragma pack(1)
31
32 //
33 // !!! 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.
34 // In the C code use sizeof() to get the size the strucure, the results may vary form the compiler(VS,GCC...).
35 // But the size of the storage calculated by VfrCompiler is fixed (calculate with alignment).
36 // 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:
37 // 1. Add bit field (with/without name) with remianing with for padding.
38 // 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.
39 //
40 typedef struct {
41 UINT16 NestByteField;
42 UINT8 : 1; // unamed field can be used for padding
43 UINT8 NestBitCheckbox : 1;
44 UINT8 NestBitOneof : 2;
45 UINT8 : 0; // Special width 0 can be used to force alignment at the next word boundary
46 UINT8 NestBitNumeric : 4;
47 } MY_BITS_DATA;
48
49 typedef union {
50 UINT8 UnionNumeric;
51 UINT8 UnionNumericAlias;
52 } MY_EFI_UNION_DATA;
53
54 typedef struct {
55 UINT16 MyStringData[40];
56 UINT16 SomethingHiddenForHtml;
57 UINT8 HowOldAreYouInYearsManual;
58 UINT16 HowTallAreYouManual;
59 UINT8 HowOldAreYouInYears;
60 UINT16 HowTallAreYou;
61 UINT8 MyFavoriteNumber;
62 UINT8 TestLateCheck;
63 UINT8 TestLateCheck2;
64 UINT8 QuestionAboutTreeHugging;
65 UINT8 ChooseToActivateNuclearWeaponry;
66 UINT8 SuppressGrayOutSomething;
67 UINT8 OrderedList[8];
68 UINT16 BootOrder[8];
69 UINT8 BootOrderLarge;
70 UINT8 DynamicRefresh;
71 UINT8 DynamicOneof;
72 UINT8 DynamicOrderedList[5];
73 UINT8 Reserved;
74 EFI_HII_REF RefData;
75 UINT8 NameValueVar0;
76 UINT16 NameValueVar1;
77 UINT16 NameValueVar2[20];
78 UINT8 SerialPortNo;
79 UINT8 SerialPortStatus;
80 UINT16 SerialPortIo;
81 UINT8 SerialPortIrq;
82 UINT8 GetDefaultValueFromCallBack;
83 UINT8 GetDefaultValueFromAccess;
84 EFI_HII_TIME Time;
85 UINT8 RefreshGuidCount;
86 UINT8 Match2;
87 UINT8 GetDefaultValueFromCallBackForOrderedList[3];
88 UINT8 BitCheckbox : 1;
89 UINT8 ReservedBits: 7; // Reserved bit fields for padding.
90 UINT16 BitOneof : 6;
91 UINT16 : 0; // Width 0 used to force alignment.
92 UINT16 BitNumeric : 12;
93 MY_BITS_DATA MyBitData;
94 MY_EFI_UNION_DATA MyUnionData;
95 } DRIVER_SAMPLE_CONFIGURATION;
96
97 //
98 // 2nd NV data structure definition
99 //
100 typedef struct {
101 UINT8 Field8;
102 UINT16 Field16;
103 UINT8 OrderedList[3];
104 UINT16 SubmittedCallback;
105 } MY_EFI_VARSTORE_DATA;
106
107 //
108 // 3rd NV data structure definition
109 //
110 typedef struct {
111 MY_BITS_DATA BitsData;
112 UINT32 EfiBitGrayoutTest : 5;
113 UINT32 EfiBitNumeric : 4;
114 UINT32 EfiBitOneof : 10;
115 UINT32 EfiBitCheckbox : 1;
116 UINT32 : 0; // Width 0 used to force alignment.
117 } MY_EFI_BITS_VARSTORE_DATA;
118
119 //
120 // Labels definition
121 //
122 #define LABEL_UPDATE1 0x1234
123 #define LABEL_UPDATE2 0x2234
124 #define LABEL_UPDATE3 0x3234
125 #define LABEL_END 0x2223
126
127 #pragma pack()
128
129 #endif