/** @file The definition for VTD Log Data Hob. Copyright (c) 2023, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _VTD_LOG_DATA_HOB_H_ #define _VTD_LOG_DATA_HOB_H_ #include #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_