mirror of https://github.com/acidanthera/audk.git
133 lines
3.9 KiB
C
133 lines
3.9 KiB
C
/** @file
|
|
|
|
Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>*
|
|
(C) Copyright 2020 Hewlett Packard Enterprise Development LP<BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
Module Name:
|
|
|
|
NVDataStruc.h
|
|
|
|
Abstract:
|
|
|
|
NVData structure used by the sample driver
|
|
|
|
Revision History:
|
|
|
|
|
|
**/
|
|
|
|
#ifndef _NVDATASTRUC_H_
|
|
#define _NVDATASTRUC_H_
|
|
|
|
#include <Guid/HiiPlatformSetupFormset.h>
|
|
#include <Guid/HiiFormMapMethodGuid.h>
|
|
#include <Guid/DriverSampleHii.h>
|
|
#include <Guid/ZeroGuid.h>
|
|
|
|
#define CONFIGURATION_VARSTORE_ID 0x1234
|
|
#define BITS_VARSTORE_ID 0x2345
|
|
|
|
#pragma pack(1)
|
|
|
|
//
|
|
// !!! 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.
|
|
// In the C code use sizeof() to get the size the strucure, the results may vary form the compiler(VS,GCC...).
|
|
// But the size of the storage calculated by VfrCompiler is fixed (calculate with alignment).
|
|
// 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:
|
|
// 1. Add bit field (with/without name) with remianing with for padding.
|
|
// 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.
|
|
//
|
|
typedef struct {
|
|
UINT16 NestByteField;
|
|
UINT8 : 1; // unamed field can be used for padding
|
|
UINT8 NestBitCheckbox : 1;
|
|
UINT8 NestBitOneof : 2;
|
|
UINT8 : 0; // Special width 0 can be used to force alignment at the next word boundary
|
|
UINT8 NestBitNumeric : 4;
|
|
} MY_BITS_DATA;
|
|
|
|
typedef union {
|
|
UINT8 UnionNumeric;
|
|
UINT8 UnionNumericAlias;
|
|
} MY_EFI_UNION_DATA;
|
|
|
|
typedef struct {
|
|
UINT16 MyStringData[40];
|
|
UINT16 SomethingHiddenForHtml;
|
|
UINT8 HowOldAreYouInYearsManual;
|
|
UINT16 HowTallAreYouManual;
|
|
UINT8 HowOldAreYouInYears;
|
|
UINT16 HowTallAreYou;
|
|
UINT8 MyFavoriteNumber;
|
|
UINT8 TestLateCheck;
|
|
UINT8 TestLateCheck2;
|
|
UINT8 QuestionAboutTreeHugging;
|
|
UINT8 ChooseToActivateNuclearWeaponry;
|
|
UINT8 SuppressGrayOutSomething;
|
|
UINT8 OrderedList[8];
|
|
UINT16 BootOrder[8];
|
|
UINT8 BootOrderLarge;
|
|
UINT8 DynamicRefresh;
|
|
UINT8 DynamicOneof;
|
|
UINT8 DynamicOrderedList[5];
|
|
UINT8 Reserved;
|
|
EFI_HII_REF RefData;
|
|
UINT8 NameValueVar0;
|
|
UINT16 NameValueVar1;
|
|
UINT16 NameValueVar2[20];
|
|
UINT8 SerialPortNo;
|
|
UINT8 SerialPortStatus;
|
|
UINT16 SerialPortIo;
|
|
UINT8 SerialPortIrq;
|
|
UINT8 GetDefaultValueFromCallBack;
|
|
UINT8 GetDefaultValueFromAccess;
|
|
EFI_HII_TIME Time;
|
|
UINT8 RefreshGuidCount;
|
|
UINT8 Match2;
|
|
UINT8 GetDefaultValueFromCallBackForOrderedList[3];
|
|
UINT8 BitCheckbox : 1;
|
|
UINT8 ReservedBits: 7; // Reserved bit fields for padding.
|
|
UINT16 BitOneof : 6;
|
|
UINT16 : 0; // Width 0 used to force alignment.
|
|
UINT16 BitNumeric : 12;
|
|
MY_BITS_DATA MyBitData;
|
|
MY_EFI_UNION_DATA MyUnionData;
|
|
UINT8 QuestionXUefiKeywordRestStyle;
|
|
UINT8 QuestionNonXUefiKeywordRestStyle;
|
|
} DRIVER_SAMPLE_CONFIGURATION;
|
|
|
|
//
|
|
// 2nd NV data structure definition
|
|
//
|
|
typedef struct {
|
|
UINT8 Field8;
|
|
UINT16 Field16;
|
|
UINT8 OrderedList[3];
|
|
UINT16 SubmittedCallback;
|
|
} MY_EFI_VARSTORE_DATA;
|
|
|
|
//
|
|
// 3rd NV data structure definition
|
|
//
|
|
typedef struct {
|
|
MY_BITS_DATA BitsData;
|
|
UINT32 EfiBitGrayoutTest : 5;
|
|
UINT32 EfiBitNumeric : 4;
|
|
UINT32 EfiBitOneof : 10;
|
|
UINT32 EfiBitCheckbox : 1;
|
|
UINT32 : 0; // Width 0 used to force alignment.
|
|
} MY_EFI_BITS_VARSTORE_DATA;
|
|
|
|
//
|
|
// Labels definition
|
|
//
|
|
#define LABEL_UPDATE1 0x1234
|
|
#define LABEL_UPDATE2 0x2234
|
|
#define LABEL_UPDATE3 0x3234
|
|
#define LABEL_END 0x2223
|
|
|
|
#pragma pack()
|
|
|
|
#endif
|