1 /** @file
2   Internal structure for Var Check Pcd.
3 
4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution.  The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9 
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef _VAR_CHECK_STRUCTURE_H_
16 #define _VAR_CHECK_STRUCTURE_H_
17 
18 //
19 // Alignment for PCD Variable and check data header.
20 //
21 #define HEADER_ALIGNMENT  4
22 #define HEADER_ALIGN(Header)  (((UINTN) (Header) + HEADER_ALIGNMENT - 1) & (~(HEADER_ALIGNMENT - 1)))
23 
24 #pragma pack (1)
25 
26 #define VAR_CHECK_PCD_REVISION  0x0001
27 
28 typedef enum {
29   VarCheckPcdVariableHeader,
30   VarCheckPcdValidList,
31   VarCheckPcdValidRange,
32   VarCheckPcdCheckTypeMax,
33 } VAR_CHECK_PCD_CHECK_TYPE;
34 
35 typedef struct {
36   UINT16            Revision;
37   UINT16            HeaderLength;
38   UINT32            Length; // Length include this header
39   UINT8             Type;
40   UINT8             Reserved[3];
41   UINT32            Attributes;
42   EFI_GUID          Guid;
43 //CHAR16              Name[];
44 } VAR_CHECK_PCD_VARIABLE_HEADER;
45 
46 typedef struct {
47   UINT8             Type;
48   UINT8             Length; // Length include this header
49   UINT16            VarOffset;
50   UINT8             StorageWidth;
51 } VAR_CHECK_PCD_VALID_DATA_HEADER;
52 
53 typedef struct {
54   UINT8             Type;
55   UINT8             Length; // Length include this header
56   UINT16            VarOffset;
57   UINT8             StorageWidth;
58 //UINTx               Data[]; // x = UINT8/UINT16/UINT32/UINT64;
59 } VAR_CHECK_PCD_VALID_LIST;
60 
61 //typedef struct {
62 //  UINTx             Minimum; // x = UINT8/UINT16/UINT32/UINT64
63 //  UINTx             Maximum; // x = UINT8/UINT16/UINT32/UINT64
64 //} VAR_CHECK_PCD_VALID_RANGE_DATA;
65 
66 typedef struct {
67   UINT8             Type;
68   UINT8             Length; // Length include this header
69   UINT16            VarOffset;
70   UINT8             StorageWidth;
71 //  VAR_CHECK_PCD_VALID_RANGE_DATA    ValidRange[];
72 } VAR_CHECK_PCD_VALID_RANGE;
73 
74 #pragma pack ()
75 
76 #endif