/** @file STM Resource Descriptor Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR> This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php. THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. @par Specification Reference: SMI Transfer Monitor (STM) User Guide Revision 1.00 **/ #ifndef _STM_RESOURCE_DESCRIPTOR_H_ #define _STM_RESOURCE_DESCRIPTOR_H_ #pragma pack (1) /** STM Resource Descriptor Header **/ typedef struct { UINT32 RscType; UINT16 Length; UINT16 ReturnStatus:1; UINT16 Reserved:14; UINT16 IgnoreResource:1; } STM_RSC_DESC_HEADER; /** Define values for the RscType field of #STM_RSC_DESC_HEADER @{ **/ #define END_OF_RESOURCES 0 #define MEM_RANGE 1 #define IO_RANGE 2 #define MMIO_RANGE 3 #define MACHINE_SPECIFIC_REG 4 #define PCI_CFG_RANGE 5 #define TRAPPED_IO_RANGE 6 #define ALL_RESOURCES 7 #define REGISTER_VIOLATION 8 #define MAX_DESC_TYPE 8 /// @} /** STM Resource End Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT64 ResourceListContinuation; } STM_RSC_END; /** STM Resource Memory Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT64 Base; UINT64 Length; UINT32 RWXAttributes:3; UINT32 Reserved:29; UINT32 Reserved_2; } STM_RSC_MEM_DESC; /** Define values for the RWXAttributes field of #STM_RSC_MEM_DESC @{ **/ #define STM_RSC_MEM_R 0x1 #define STM_RSC_MEM_W 0x2 #define STM_RSC_MEM_X 0x4 /// @} /** STM Resource I/O Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT16 Base; UINT16 Length; UINT32 Reserved; } STM_RSC_IO_DESC; /** STM Resource MMIO Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT64 Base; UINT64 Length; UINT32 RWXAttributes:3; UINT32 Reserved:29; UINT32 Reserved_2; } STM_RSC_MMIO_DESC; /** Define values for the RWXAttributes field of #STM_RSC_MMIO_DESC @{ **/ #define STM_RSC_MMIO_R 0x1 #define STM_RSC_MMIO_W 0x2 #define STM_RSC_MMIO_X 0x4 /// @} /** STM Resource MSR Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT32 MsrIndex; UINT32 KernelModeProcessing:1; UINT32 Reserved:31; UINT64 ReadMask; UINT64 WriteMask; } STM_RSC_MSR_DESC; /** STM PCI Device Path node used for the PciDevicePath field of #STM_RSC_PCI_CFG_DESC **/ typedef struct { /// /// Must be 1, indicating Hardware Device Path /// UINT8 Type; /// /// Must be 1, indicating PCI /// UINT8 Subtype; /// /// sizeof(STM_PCI_DEVICE_PATH_NODE) which is 6 /// UINT16 Length; UINT8 PciFunction; UINT8 PciDevice; } STM_PCI_DEVICE_PATH_NODE; /** STM Resource PCI Configuration Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT16 RWAttributes:2; UINT16 Reserved:14; UINT16 Base; UINT16 Length; UINT8 OriginatingBusNumber; UINT8 LastNodeIndex; STM_PCI_DEVICE_PATH_NODE PciDevicePath[1]; //STM_PCI_DEVICE_PATH_NODE PciDevicePath[LastNodeIndex + 1]; } STM_RSC_PCI_CFG_DESC; /** Define values for the RWAttributes field of #STM_RSC_PCI_CFG_DESC @{ **/ #define STM_RSC_PCI_CFG_R 0x1 #define STM_RSC_PCI_CFG_W 0x2 /// @} /** STM Resource Trapped I/O Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT16 Base; UINT16 Length; UINT16 In:1; UINT16 Out:1; UINT16 Api:1; UINT16 Reserved1:13; UINT16 Reserved2; } STM_RSC_TRAPPED_IO_DESC; /** STM Resource All Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; } STM_RSC_ALL_RESOURCES_DESC; /** STM Register Volation Descriptor **/ typedef struct { STM_RSC_DESC_HEADER Hdr; UINT32 RegisterType; UINT32 Reserved; UINT64 ReadMask; UINT64 WriteMask; } STM_REGISTER_VIOLATION_DESC; /** Enum values for the RWAttributes field of #STM_REGISTER_VIOLATION_DESC **/ typedef enum { StmRegisterCr0, StmRegisterCr2, StmRegisterCr3, StmRegisterCr4, StmRegisterCr8, StmRegisterMax, } STM_REGISTER_VIOLATION_TYPE; /** Union of all STM resource types **/ typedef union { STM_RSC_DESC_HEADER Header; STM_RSC_END End; STM_RSC_MEM_DESC Mem; STM_RSC_IO_DESC Io; STM_RSC_MMIO_DESC Mmio; STM_RSC_MSR_DESC Msr; STM_RSC_PCI_CFG_DESC PciCfg; STM_RSC_TRAPPED_IO_DESC TrappedIo; STM_RSC_ALL_RESOURCES_DESC All; STM_REGISTER_VIOLATION_DESC RegisterViolation; } STM_RSC; #pragma pack () #endif