TianoCore EDK2 master
Loading...
Searching...
No Matches
StmApi.h
Go to the documentation of this file.
1
12#ifndef _INTEL_STM_API_H_
13#define _INTEL_STM_API_H_
14
18
19#pragma pack (1)
20
21#define STM_SMM_REV_ID 0x80010100
22
27typedef struct {
28 UINT32 Intel64ModeSupported : 1;
29 UINT32 EptSupported : 1;
30 UINT32 Reserved : 30;
31} STM_FEAT;
32
33#define STM_SPEC_VERSION_MAJOR 1
34#define STM_SPEC_VERSION_MINOR 0
35
36typedef struct {
37 UINT8 StmSpecVerMajor;
38 UINT8 StmSpecVerMinor;
42 UINT16 Reserved;
43 UINT32 StaticImageSize;
44 UINT32 PerProcDynamicMemorySize;
45 UINT32 AdditionalDynamicMemorySize;
46 STM_FEAT StmFeatures;
47 UINT32 NumberOfRevIDs;
48 UINT32 StmSmmRevID[1];
53
54typedef struct {
55 MSEG_HEADER HwStmHdr;
56 SOFTWARE_STM_HEADER SwStmHdr;
58
97#define STM_API_MAP_ADDRESS_RANGE 0x00000001
98
102typedef struct {
103 UINT64 PhysicalAddress;
104 UINT64 VirtualAddress;
105 UINT32 PageCount;
106 UINT32 PatCacheType;
108
113#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_ST_UC 0x00
114#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WC 0x01
115#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WT 0x04
116#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WP 0x05
117#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_WB 0x06
118#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_UC 0x07
119#define STM_MAP_ADDRESS_RANGE_PAT_CACHE_TYPE_FOLLOW_MTRR 0xFFFFFFFF
121
149#define STM_API_UNMAP_ADDRESS_RANGE 0x00000002
150
154typedef struct {
155 UINT64 VirtualAddress;
156 UINT32 Length;
158
221#define STM_API_ADDRESS_LOOKUP 0x00000003
222
226typedef struct {
227 UINT64 InterruptedGuestVirtualAddress;
228 UINT32 Length;
229 UINT64 InterruptedCr3;
230 UINT64 InterruptedEptp;
231 UINT32 MapToSmmGuest : 2;
232 UINT32 InterruptedCr4Pae : 1;
233 UINT32 InterruptedCr4Pse : 1;
234 UINT32 InterruptedIa32eMode : 1;
235 UINT32 Reserved1 : 27;
236 UINT32 Reserved2;
237 UINT64 PhysicalAddress;
238 UINT64 SmmGuestVirtualAddress;
240
245#define STM_ADDRESS_LOOKUP_DESCRIPTOR_DO_NOT_MAP 0
246#define STM_ADDRESS_LOOKUP_DESCRIPTOR_ONE_TO_ONE 1
247#define STM_ADDRESS_LOOKUP_DESCRIPTOR_VIRTUAL_ADDRESS_SPECIFIED 3
249
281#define STM_API_RETURN_FROM_PROTECTION_EXCEPTION 0x00000004
282
337#define STM_API_START (BIT16 | 1)
338
343#define STM_CONFIG_SMI_UNBLOCKING_BY_VMX_OFF BIT0
345
367#define STM_API_STOP (BIT16 | 2)
368
418#define STM_API_PROTECT_RESOURCE (BIT16 | 3)
419
455#define STM_API_UNPROTECT_RESOURCE (BIT16 | 4)
456
490#define STM_API_GET_BIOS_RESOURCES (BIT16 | 5)
491
523#define STM_API_MANAGE_VMCS_DATABASE (BIT16 | 6)
524
528typedef struct {
533 UINT32 DomainType : 4;
534 UINT32 XStatePolicy : 2;
535 UINT32 DegradationPolicy : 4;
539 UINT32 Reserved1 : 22;
540 UINT32 AddOrRemove;
542
547#define DOMAIN_UNPROTECTED 0
548#define DOMAIN_DISALLOWED_IO_OUT BIT0
549#define DOMAIN_DISALLOWED_IO_IN BIT1
550#define DOMAIN_INTEGRITY BIT2
551#define DOMAIN_CONFIDENTIALITY BIT3
552#define DOMAIN_INTEGRITY_PROT_OUT_IN (DOMAIN_INTEGRITY)
553#define DOMAIN_FULLY_PROT_OUT_IN (DOMAIN_CONFIDENTIALITY | DOMAIN_INTEGRITY)
554#define DOMAIN_FULLY_PROT (DOMAIN_FULLY_PROT_OUT_IN | DOMAIN_DISALLOWED_IO_IN | DOMAIN_DISALLOWED_IO_OUT)
556
561#define XSTATE_READWRITE 0x00
562#define XSTATE_READONLY 0x01
563#define XSTATE_SCRUB 0x03
565
570#define STM_VMCS_DATABASE_REQUEST_ADD 1
571#define STM_VMCS_DATABASE_REQUEST_REMOVE 0
573
608#define STM_API_INITIALIZE_PROTECTION (BIT16 | 7)
609
614#define STM_RSC_BGI BIT1
615#define STM_RSC_BGM BIT2
616#define STM_RSC_MSR BIT3
618
640#define STM_API_MANAGE_EVENT_LOG (BIT16 | 8)
641
645typedef struct {
646 UINT32 SubFunctionIndex;
647 union {
648 struct {
649 UINT32 PageCount;
650 //
651 // number of elements is PageCount
652 //
653 UINT64 Pages[];
654 } LogBuffer;
655 //
656 // bitmap of EVENT_TYPE
657 //
658 UINT32 EventEnableBitmap;
659 } Data;
661
667#define STM_EVENT_LOG_MANAGEMENT_REQUEST_NEW_LOG 1
668#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CONFIGURE_LOG 2
669#define STM_EVENT_LOG_MANAGEMENT_REQUEST_START_LOG 3
670#define STM_EVENT_LOG_MANAGEMENT_REQUEST_STOP_LOG 4
671#define STM_EVENT_LOG_MANAGEMENT_REQUEST_CLEAR_LOG 5
672#define STM_EVENT_LOG_MANAGEMENT_REQUEST_DELETE_LOG 6
674
678typedef struct {
679 UINT32 EventSerialNumber;
680 UINT16 Type;
681 UINT16 Lock : 1;
682 UINT16 Valid : 1;
683 UINT16 ReadByMle : 1;
684 UINT16 Wrapped : 1;
685 UINT16 Reserved : 12;
687
691typedef enum {
692 EvtLogStarted,
693 EvtLogStopped,
694 EvtLogInvalidParameterDetected,
695 EvtHandledProtectionException,
700 EvtMleResourceProtectionGranted,
701 EvtMleResourceProtectionDenied,
702 EvtMleResourceUnprotect,
703 EvtMleResourceUnprotectError,
704 EvtMleDomainTypeDegraded,
712 EvtInvalid = 0xFFFFFFFF,
713} EVENT_TYPE;
714
715typedef struct {
716 UINT32 Reserved;
718
719typedef struct {
720 UINT32 Reserved;
722
723typedef struct {
724 UINT32 VmcallApiNumber;
726
727typedef struct {
728 STM_RSC Resource;
730
731typedef struct {
732 STM_RSC Resource;
734
735typedef struct {
736 STM_RSC Resource;
738
739typedef struct {
740 STM_RSC Resource;
742
743typedef struct {
744 STM_RSC Resource;
746
747typedef struct {
748 STM_RSC Resource;
750
751typedef struct {
752 UINT64 VmcsPhysPointer;
753 UINT8 ExpectedDomainType;
754 UINT8 DegradedDomainType;
756
757typedef union {
758 ENTRY_EVT_LOG_STARTED Started;
759 ENTRY_EVT_LOG_STOPPED Stopped;
760 ENTRY_EVT_LOG_INVALID_PARAM InvalidParam;
761 ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION HandledProtectionException;
763 ENTRY_EVT_MLE_RSC_PROT_GRANTED MleRscProtGranted;
764 ENTRY_EVT_MLE_RSC_PROT_DENIED MleRscProtDenied;
765 ENTRY_EVT_MLE_RSC_UNPROT MleRscUnprot;
766 ENTRY_EVT_MLE_RSC_UNPROT_ERROR MleRscUnprotError;
767 ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED MleDomainTypeDegraded;
769
770typedef struct {
772 LOG_ENTRY_DATA Data;
774
778#define STM_LOG_ENTRY_SIZE 256
779
784typedef struct {
785 UINT32 Rdi;
786 UINT32 Rsi;
787 UINT32 Rbp;
788 UINT32 Rdx;
789 UINT32 Rcx;
790 UINT32 Rbx;
791 UINT32 Rax;
792 UINT32 Cr3;
793 UINT32 Cr2;
794 UINT32 Cr0;
795 UINT32 VmcsExitInstructionInfo;
796 UINT32 VmcsExitInstructionLength;
797 UINT64 VmcsExitQualification;
801 UINT32 ErrorCode;
802 UINT32 Rip;
803 UINT32 Cs;
804 UINT32 Rflags;
805 UINT32 Rsp;
806 UINT32 Ss;
808
809typedef struct {
810 UINT64 R15;
811 UINT64 R14;
812 UINT64 R13;
813 UINT64 R12;
814 UINT64 R11;
815 UINT64 R10;
816 UINT64 R9;
817 UINT64 R8;
818 UINT64 Rdi;
819 UINT64 Rsi;
820 UINT64 Rbp;
821 UINT64 Rdx;
822 UINT64 Rcx;
823 UINT64 Rbx;
824 UINT64 Rax;
825 UINT64 Cr8;
826 UINT64 Cr3;
827 UINT64 Cr2;
828 UINT64 Cr0;
829 UINT64 VmcsExitInstructionInfo;
830 UINT64 VmcsExitInstructionLength;
831 UINT64 VmcsExitQualification;
835 UINT64 ErrorCode;
836 UINT64 Rip;
837 UINT64 Cs;
838 UINT64 Rflags;
839 UINT64 Rsp;
840 UINT64 Ss;
842
843typedef union {
847
853typedef enum {
854 TxtSmmPageViolation = 1,
855 TxtSmmMsrViolation,
856 TxtSmmRegisterViolation,
857 TxtSmmIoViolation,
858 TxtSmmPciViolation
860
865typedef struct {
866 UINT64 SpeRip;
867 UINT64 SpeRsp;
868 UINT16 SpeSs;
869 UINT16 PageViolationException : 1;
870 UINT16 MsrViolationException : 1;
871 UINT16 RegisterViolationException : 1;
872 UINT16 IoViolationException : 1;
873 UINT16 PciViolationException : 1;
874 UINT16 Reserved1 : 11;
875 UINT32 Reserved2;
877
878typedef struct {
879 UINT8 ExecutionDisableOutsideSmrr : 1;
880 UINT8 Intel64Mode : 1;
881 UINT8 Cr4Pae : 1;
882 UINT8 Cr4Pse : 1;
883 UINT8 Reserved1 : 4;
885
886typedef struct {
887 UINT8 SmramToVmcsRestoreRequired : 1;
889 UINT8 Reserved2 : 6;
891
892typedef struct {
893 UINT8 DomainType : 4;
894 UINT8 XStatePolicy : 2;
895 UINT8 EptEnabled : 1;
896 UINT8 Reserved3 : 1;
898
899#define TXT_SMM_PSD_OFFSET 0xfb00
900#define TXT_PROCESSOR_SMM_DESCRIPTOR_SIGNATURE SIGNATURE_64('T', 'X', 'T', 'P', 'S', 'S', 'I', 'G')
901#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MAJOR 1
902#define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MINOR 0
903
904typedef struct {
905 UINT64 Signature;
906 UINT16 Size;
907 UINT8 SmmDescriptorVerMajor;
908 UINT8 SmmDescriptorVerMinor;
909 UINT32 LocalApicId;
910 STM_SMM_ENTRY_STATE SmmEntryState;
911 STM_SMM_RESUME_STATE SmmResumeState;
912 STM_SMM_STATE StmSmmState;
913 UINT8 Reserved4;
914 UINT16 SmmCs;
915 UINT16 SmmDs;
916 UINT16 SmmSs;
917 UINT16 SmmOtherSegment;
918 UINT16 SmmTr;
919 UINT16 Reserved5;
920 UINT64 SmmCr3;
921 UINT64 SmmStmSetupRip;
922 UINT64 SmmStmTeardownRip;
923 UINT64 SmmSmiHandlerRip;
924 UINT64 SmmSmiHandlerRsp;
925 UINT64 SmmGdtPtr;
926 UINT32 SmmGdtSize;
927 UINT32 RequiredStmSmmRevId;
928 STM_PROTECTION_EXCEPTION_HANDLER StmProtectionExceptionHandler;
929 UINT64 Reserved6;
930 UINT64 BiosHwResourceRequirementsPtr;
931 // extend area
932 UINT64 AcpiRsdp;
933 UINT8 PhysicalAddressBits;
935
936#pragma pack ()
937
938#endif
EVENT_TYPE
Definition: StmApi.h:691
@ EvtInvalid
Definition: StmApi.h:712
@ EvtBiosAccessToUnclaimedResource
Definition: StmApi.h:699
@ EvtMleMax
Definition: StmApi.h:708
TXT_SMM_PROTECTION_EXCEPTION_TYPE
Definition: StmApi.h:853
EFI_STATUS EFIAPI Lock(IN EFI_SMM_ACCESS2_PROTOCOL *This)
Definition: SmmAccessDxe.c:133
UINT16 Reserved
Definition: StmApi.h:42
UINT32 EptSupported
‍bitfield
Definition: StmApi.h:29
UINT32 Reserved
‍bitfield
Definition: StmApi.h:30
UINT8 ReinitializeVmcsRequired
‍BIOS restore hint
Definition: StmApi.h:888
UINT8 Reserved2
‍BIOS request
Definition: StmApi.h:889
UINT8 XStatePolicy
‍STM input to BIOS on each SMI
Definition: StmApi.h:894
UINT8 EptEnabled
‍STM input to BIOS on each SMI
Definition: StmApi.h:895