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
|
/** @file
The definition for VTD Log Data Hob.
Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _VTD_LOG_DATA_HOB_H_
#define _VTD_LOG_DATA_HOB_H_
#include <IndustryStandard/Vtd.h>
#define VTDLOG_LOG_TYPE(_id_) ((UINT64) 1 << (_id_))
typedef enum {
VTDLOG_PEI_BASIC = 0, // Start ID for PEI basic log
VTDLOG_PEI_PRE_MEM_DMA_PROTECT = 1, // PRE-MEM phase
VTDLOG_PEI_PMR_LOW_MEMORY_RANGE = 2,
VTDLOG_PEI_PMR_HIGH_MEMORY_RANGE = 3,
VTDLOG_PEI_PROTECT_MEMORY_RANGE = 4,
VTDLOG_PEI_POST_MEM_ENABLE_DMA_PROTECT = 5,
VTDLOG_PEI_POST_MEM_DISABLE_DMA_PROTECT = 6,
VTDLOG_PEI_QUEUED_INVALIDATION = 7,
VTDLOG_PEI_REGISTER = 8,
VTDLOG_PEI_VTD_ERROR = 9,
VTDLOG_PEI_ADVANCED = 16, // Start ID for PEI advanced log
VTDLOG_PEI_PPI_ALLOC_BUFFER = 17,
VTDLOG_PEI_PPI_MAP = 18,
VTDLOG_DXE_BASIC = 24, // Start ID for DXE basic log
VTDLOG_DXE_DMAR_TABLE = 25,
VTDLOG_DXE_SETUP_VTD = 26,
VTDLOG_DXE_PCI_DEVICE = 27,
VTDLOG_DXE_REGISTER = 28,
VTDLOG_DXE_ENABLE_DMAR = 29,
VTDLOG_DXE_DISABLE_DMAR = 30,
VTDLOG_DXE_DISABLE_PMR = 31,
VTDLOG_DXE_INSTALL_IOMMU_PROTOCOL = 32,
VTDLOG_DXE_QUEUED_INVALIDATION = 33,
VTDLOG_DXE_ADVANCED = 44, // Start ID for DXE advanced log
VTDLOG_DXE_IOMMU_ALLOC_BUFFER = 45,
VTDLOG_DXE_IOMMU_FREE_BUFFER = 46,
VTDLOG_DXE_IOMMU_MAP = 47,
VTDLOG_DXE_IOMMU_UNMAP = 48,
VTDLOG_DXE_IOMMU_SET_ATTRIBUTE = 49,
VTDLOG_DXE_ROOT_TABLE = 50,
} VTDLOG_EVENT_TYPE;
#define VTD_LOG_PEI_PRE_MEM_BAR_MAX 64
//
// Code of VTDLOG_PEI_BASIC / VTDLOG_DXE_BASIC
//
#define VTD_LOG_ERROR_BUFFER_FULL (1<<0)
//
// Code of VTDLOG_PEI_PRE_MEM_DMA_PROTECT_MODE
//
#define VTD_LOG_PEI_PRE_MEM_NOT_USED 0
#define VTD_LOG_PEI_PRE_MEM_DISABLE 1
#define VTD_LOG_PEI_PRE_MEM_ADM 2
#define VTD_LOG_PEI_PRE_MEM_TE 3
#define VTD_LOG_PEI_PRE_MEM_PMR 4
//
// Code of VTDLOG_PEI_QUEUED_INVALIDATION
//
#define VTD_LOG_QI_DISABLE 0
#define VTD_LOG_QI_ENABLE 1
#define VTD_LOG_QI_ERROR_OUT_OF_RESOURCES 2
//
// Code of VTDLOG_PEI_VTD_ERROR
//
#define VTD_LOG_PEI_VTD_ERROR_PPI_ALLOC 1
#define VTD_LOG_PEI_VTD_ERROR_PPI_MAP 2
// Code of VTDLOG_PEI_REGISTER / VTDLOG_DXE_REGISTER
#define VTDLOG_REGISTER_ALL 0
#define VTDLOG_REGISTER_THIN 1
#define VTDLOG_REGISTER_QI 2
#pragma pack(1)
//
// Item head
//
typedef struct {
UINT32 DataSize;
UINT64 LogType;
UINT64 Timestamp;
}VTDLOG_EVENT_HEADER;
//
// Struct for type = VTDLOG_PEI_REGISTER
// VTDLOG_DXE_REGISTER
// VTDLOG_DXE_DMAR_TABLE
// VTDLOG_DXE_IOMMU_SET_ATTRIBUTE
// VTDLOG_DXE_PCI_DEVICE
// VTDLOG_DXE_ROOT_TABLE
//
typedef struct {
VTDLOG_EVENT_HEADER Header;
UINT64 Param;
UINT8 Data[1];
} VTDLOG_EVENT_CONTEXT;
//
// Struct for rest of the types
//
typedef struct {
VTDLOG_EVENT_HEADER Header;
UINT64 Data1;
UINT64 Data2;
}VTDLOG_EVENT_2PARAM;
//
// Struct for VTd log event
//
typedef union{
VTDLOG_EVENT_HEADER EventHeader;
VTDLOG_EVENT_2PARAM CommenEvent;
VTDLOG_EVENT_CONTEXT ContextEvent;
} VTDLOG_EVENT;
//
// Information for PEI pre-memory phase
//
typedef struct {
UINT8 Mode;
UINT8 Status;
UINT32 BarAddress;
} VTDLOG_PEI_PRE_MEM_INFO;
//
// Buffer struct for PEI phase
//
typedef struct {
UINT8 VtdLogPeiError;
VTDLOG_PEI_PRE_MEM_INFO PreMemInfo[VTD_LOG_PEI_PRE_MEM_BAR_MAX];
UINT32 PostMemBufferUsed;
UINT64 PostMemBuffer;
} VTDLOG_PEI_BUFFER_HOB;
#pragma pack()
#endif // _VTD_LOG_DATA_HOB_H_
|