summaryrefslogtreecommitdiff
path: root/Core/EM/TCG2/Common/Tpm20Includes/TrEEProtocol.h
blob: c94df744f5434b8b35dc35ac73aac0a341a9bf3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2013, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************

#ifndef TREE_PROTOCOL_H

#define TREE_PROTOCOL_H

#define EFI_TREE_SERVICE_BINDING_PROTOCOL_GUID \
{0x4cf01d0a, 0xc48c, 0x4271, 0xa2, 0x2a, 0xad, 0x8e, 0x55, 0x97,\
 0x81, 0x88}

#define EFI_TREE_PROTOCOL_GUID \
{0x607f766c, 0x7455, 0x42be, 0x93, 0x0b, 0xe4, 0xd7, 0x6d, 0xb2,\
 0x72, 0x0f}

typedef struct _EFI_TREE_PROTOCOL EFI_TREE_PROTOCOL;

//#pragma pack(push,1) // Byte align structures

typedef struct _TREE_VERSION {
	UINT8 Major;
	UINT8 Minor;
} TREE_VERSION;

typedef UINT32 TREE_EVENT_LOG_BITMAP;
typedef UINT32 TREE_EVENT_LOG_FORMAT;
#define TREE_EVENT_LOG_FORMAT_TCG_1_2 0x00000001

#define TREE_STRUCTURE_VERSION_MAJOR  (1)
#define TREE_STRUCTURE_VERSION_MINOR  (0)

#define TREE_PROTOCOL_VERSION_MAJOR (1)
#define TREE_PROTOCOL_VERSION_MINOR (0)

typedef struct _TREE_BOOT_SERVICE_CAPABILITY {
	UINT8                   Size;
	TREE_VERSION            StructureVersion;
	TREE_VERSION            ProtocolVersion;
	UINT32                  HashAlgorithmBitmap;
	TREE_EVENT_LOG_BITMAP   SupportedEventLogs;
	BOOLEAN                 TrEEPresentFlag;
	UINT16                  MaxCommandSize;
	UINT16                  MaxResponseSize;
	UINT32                  ManufacturerID;
} TREE_BOOT_SERVICE_CAPABILITY;

#define TREE_BOOT_HASH_ALG_SHA1   0x00000001
#define TREE_BOOT_HASH_ALG_SHA256 0x00000002
#define TREE_BOOT_HASH_ALG_SHA384 0x00000004
#define TREE_BOOT_HASH_ALG_SHA512 0x00000008

#define TREE_EXTEND_ONLY	0x0000000000000001
#define PE_COFF_IMAGE		  0x0000000000000010

//#define EV_EFI_VARIABLE_DRIVER_CONFIG 0x80000001
//#define EV_EFI_VARIABLE_AUTHORITY 0x800000E0
typedef UINT32                     TCG_EVENTTYPE;
typedef UINT32                     TCG_PCRINDEX;

#pragma pack(push, 1) // Byte align structures

typedef UINT32 TrEE_PCRINDEX;
typedef UINT32 TrEE_EVENTTYPE;
typedef UINT32 TREE_EVENTLOGTYPE;

typedef struct _TrEE_EVENT_HEADER {
	UINT32          HeaderSize;
	UINT16          HeaderVersion;
	TrEE_PCRINDEX   PCRIndex;
	TrEE_EVENTTYPE  EventType;
} TrEE_EVENT_HEADER;

typedef struct _TrEE_EVENT {
	UINT32            Size;
	TrEE_EVENT_HEADER Header;
	UINT8             Event[1];
} TrEE_EVENT;

#pragma pack(pop) // Byte align structures

#define SIZE_OF_TrEE_EVENT OFFSET_OF (TrEE_EVENT, Event)

typedef
EFI_STATUS
(EFIAPI *EFI_TREE_GET_CAPABILITY) (
	IN EFI_TREE_PROTOCOL *This,
	IN OUT TREE_BOOT_SERVICE_CAPABILITY *ProtocolCapability
);

typedef
EFI_STATUS
(EFIAPI *EFI_TREE_GET_EVENT_LOG) (
	IN EFI_TREE_PROTOCOL *This,
	IN TREE_EVENTLOGTYPE EventLogFormat,
	OUT EFI_PHYSICAL_ADDRESS *EventLogLocation,
	OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry,
	OUT BOOLEAN *EventLogTruncated
);

typedef
EFI_STATUS
(EFIAPI * EFI_TREE_HASH_LOG_EXTEND_EVENT) (
	IN EFI_TREE_PROTOCOL *This,
	IN UINT64 Flags,
	IN EFI_PHYSICAL_ADDRESS DataToHash,
	IN UINT64 DataToHashLen,
	IN TrEE_EVENT *Event
);

typedef
EFI_STATUS
(EFIAPI *EFI_TREE_SUBMIT_COMMAND) (
	IN EFI_TREE_PROTOCOL *This,
	IN UINT32 InputParameterBlockSize,
	IN UINT8 *InputParameterBlock,
	IN UINT32 OutputParameterBlockSize,
	IN UINT8 *OutputParameterBlock
);

struct _EFI_TREE_PROTOCOL {
	EFI_TREE_GET_CAPABILITY         GetCapability;
	EFI_TREE_GET_EVENT_LOG          GetEventLog;
	EFI_TREE_HASH_LOG_EXTEND_EVENT  HashLogExtendEvent;
	EFI_TREE_SUBMIT_COMMAND         SubmitCommand;
};

#endif //TREE_PROTOCOL_H

//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2013, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************