1 /** @file 2 STM Resource Descriptor 3 4 Copyright (c) 2015 - 2016, 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 @par Specification Reference: 14 SMI Transfer Monitor (STM) User Guide Revision 1.00 15 16 **/ 17 18 #ifndef _STM_RESOURCE_DESCRIPTOR_H_ 19 #define _STM_RESOURCE_DESCRIPTOR_H_ 20 21 #pragma pack (1) 22 23 /** 24 STM Resource Descriptor Header 25 **/ 26 typedef struct { 27 UINT32 RscType; 28 UINT16 Length; 29 UINT16 ReturnStatus:1; 30 UINT16 Reserved:14; 31 UINT16 IgnoreResource:1; 32 } STM_RSC_DESC_HEADER; 33 34 /** 35 Define values for the RscType field of #STM_RSC_DESC_HEADER 36 @{ 37 **/ 38 #define END_OF_RESOURCES 0 39 #define MEM_RANGE 1 40 #define IO_RANGE 2 41 #define MMIO_RANGE 3 42 #define MACHINE_SPECIFIC_REG 4 43 #define PCI_CFG_RANGE 5 44 #define TRAPPED_IO_RANGE 6 45 #define ALL_RESOURCES 7 46 #define REGISTER_VIOLATION 8 47 #define MAX_DESC_TYPE 8 48 /// @} 49 50 /** 51 STM Resource End Descriptor 52 **/ 53 typedef struct { 54 STM_RSC_DESC_HEADER Hdr; 55 UINT64 ResourceListContinuation; 56 } STM_RSC_END; 57 58 /** 59 STM Resource Memory Descriptor 60 **/ 61 typedef struct { 62 STM_RSC_DESC_HEADER Hdr; 63 UINT64 Base; 64 UINT64 Length; 65 UINT32 RWXAttributes:3; 66 UINT32 Reserved:29; 67 UINT32 Reserved_2; 68 } STM_RSC_MEM_DESC; 69 70 /** 71 Define values for the RWXAttributes field of #STM_RSC_MEM_DESC 72 @{ 73 **/ 74 #define STM_RSC_MEM_R 0x1 75 #define STM_RSC_MEM_W 0x2 76 #define STM_RSC_MEM_X 0x4 77 /// @} 78 79 /** 80 STM Resource I/O Descriptor 81 **/ 82 typedef struct { 83 STM_RSC_DESC_HEADER Hdr; 84 UINT16 Base; 85 UINT16 Length; 86 UINT32 Reserved; 87 } STM_RSC_IO_DESC; 88 89 /** 90 STM Resource MMIO Descriptor 91 **/ 92 typedef struct { 93 STM_RSC_DESC_HEADER Hdr; 94 UINT64 Base; 95 UINT64 Length; 96 UINT32 RWXAttributes:3; 97 UINT32 Reserved:29; 98 UINT32 Reserved_2; 99 } STM_RSC_MMIO_DESC; 100 101 /** 102 Define values for the RWXAttributes field of #STM_RSC_MMIO_DESC 103 @{ 104 **/ 105 #define STM_RSC_MMIO_R 0x1 106 #define STM_RSC_MMIO_W 0x2 107 #define STM_RSC_MMIO_X 0x4 108 /// @} 109 110 /** 111 STM Resource MSR Descriptor 112 **/ 113 typedef struct { 114 STM_RSC_DESC_HEADER Hdr; 115 UINT32 MsrIndex; 116 UINT32 KernelModeProcessing:1; 117 UINT32 Reserved:31; 118 UINT64 ReadMask; 119 UINT64 WriteMask; 120 } STM_RSC_MSR_DESC; 121 122 /** 123 STM PCI Device Path node used for the PciDevicePath field of 124 #STM_RSC_PCI_CFG_DESC 125 **/ 126 typedef struct { 127 /// 128 /// Must be 1, indicating Hardware Device Path 129 /// 130 UINT8 Type; 131 /// 132 /// Must be 1, indicating PCI 133 /// 134 UINT8 Subtype; 135 /// 136 /// sizeof(STM_PCI_DEVICE_PATH_NODE) which is 6 137 /// 138 UINT16 Length; 139 UINT8 PciFunction; 140 UINT8 PciDevice; 141 } STM_PCI_DEVICE_PATH_NODE; 142 143 /** 144 STM Resource PCI Configuration Descriptor 145 **/ 146 typedef struct { 147 STM_RSC_DESC_HEADER Hdr; 148 UINT16 RWAttributes:2; 149 UINT16 Reserved:14; 150 UINT16 Base; 151 UINT16 Length; 152 UINT8 OriginatingBusNumber; 153 UINT8 LastNodeIndex; 154 STM_PCI_DEVICE_PATH_NODE PciDevicePath[1]; 155 //STM_PCI_DEVICE_PATH_NODE PciDevicePath[LastNodeIndex + 1]; 156 } STM_RSC_PCI_CFG_DESC; 157 158 /** 159 Define values for the RWAttributes field of #STM_RSC_PCI_CFG_DESC 160 @{ 161 **/ 162 #define STM_RSC_PCI_CFG_R 0x1 163 #define STM_RSC_PCI_CFG_W 0x2 164 /// @} 165 166 /** 167 STM Resource Trapped I/O Descriptor 168 **/ 169 typedef struct { 170 STM_RSC_DESC_HEADER Hdr; 171 UINT16 Base; 172 UINT16 Length; 173 UINT16 In:1; 174 UINT16 Out:1; 175 UINT16 Api:1; 176 UINT16 Reserved1:13; 177 UINT16 Reserved2; 178 } STM_RSC_TRAPPED_IO_DESC; 179 180 /** 181 STM Resource All Descriptor 182 **/ 183 typedef struct { 184 STM_RSC_DESC_HEADER Hdr; 185 } STM_RSC_ALL_RESOURCES_DESC; 186 187 /** 188 STM Register Volation Descriptor 189 **/ 190 typedef struct { 191 STM_RSC_DESC_HEADER Hdr; 192 UINT32 RegisterType; 193 UINT32 Reserved; 194 UINT64 ReadMask; 195 UINT64 WriteMask; 196 } STM_REGISTER_VIOLATION_DESC; 197 198 /** 199 Enum values for the RWAttributes field of #STM_REGISTER_VIOLATION_DESC 200 **/ 201 typedef enum { 202 StmRegisterCr0, 203 StmRegisterCr2, 204 StmRegisterCr3, 205 StmRegisterCr4, 206 StmRegisterCr8, 207 StmRegisterMax, 208 } STM_REGISTER_VIOLATION_TYPE; 209 210 /** 211 Union of all STM resource types 212 **/ 213 typedef union { 214 STM_RSC_DESC_HEADER Header; 215 STM_RSC_END End; 216 STM_RSC_MEM_DESC Mem; 217 STM_RSC_IO_DESC Io; 218 STM_RSC_MMIO_DESC Mmio; 219 STM_RSC_MSR_DESC Msr; 220 STM_RSC_PCI_CFG_DESC PciCfg; 221 STM_RSC_TRAPPED_IO_DESC TrappedIo; 222 STM_RSC_ALL_RESOURCES_DESC All; 223 STM_REGISTER_VIOLATION_DESC RegisterViolation; 224 } STM_RSC; 225 226 #pragma pack () 227 228 #endif 229