1 /** @file
2   SMM STM support
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 **/
14 
15 #ifndef _SMM_STM_H_
16 #define _SMM_STM_H_
17 
18 #include <Protocol/SmMonitorInit.h>
19 
20 /**
21 
22   Create 4G page table for STM.
23   2M PAE page table in X64 version.
24 
25   @param PageTableBase        The page table base in MSEG
26 
27 **/
28 VOID
29 StmGen4GPageTable (
30   IN UINTN              PageTableBase
31   );
32 
33 /**
34   This is SMM exception handle.
35   Consumed by STM when exception happen.
36 
37   @param Context  STM protection exception stack frame
38 
39   @return the EBX value for STM reference.
40           EBX = 0: resume SMM guest using register state found on exception stack.
41           EBX = 1 to 0x0F: EBX contains a BIOS error code which the STM must record in the
42                            TXT.ERRORCODE register and subsequently reset the system via
43                            TXT.CMD.SYS_RESET. The value of the TXT.ERRORCODE register is calculated as
44                            follows: TXT.ERRORCODE = (EBX & 0x0F) | STM_CRASH_BIOS_PANIC
45           EBX = 0x10 to 0xFFFFFFFF - reserved, do not use.
46 
47 **/
48 UINT32
49 EFIAPI
50 SmmStmExceptionHandler (
51   IN OUT STM_PROTECTION_EXCEPTION_STACK_FRAME Context
52   );
53 
54 
55 /**
56 
57   Get STM state.
58 
59   @return STM state
60 
61 **/
62 EFI_SM_MONITOR_STATE
63 EFIAPI
64 GetMonitorState (
65   VOID
66   );
67 
68 /**
69 
70   Load STM image to MSEG.
71 
72   @param StmImage      STM image
73   @param StmImageSize  STM image size
74 
75   @retval EFI_SUCCESS            Load STM to MSEG successfully
76   @retval EFI_BUFFER_TOO_SMALL   MSEG is smaller than minimal requirement of STM image
77 
78 **/
79 EFI_STATUS
80 EFIAPI
81 LoadMonitor (
82   IN EFI_PHYSICAL_ADDRESS StmImage,
83   IN UINTN                StmImageSize
84   );
85 
86 /**
87 
88   Add resources in list to database. Allocate new memory areas as needed.
89 
90   @param ResourceList  A pointer to resource list to be added
91   @param NumEntries    Optional number of entries.
92                        If 0, list must be terminated by END_OF_RESOURCES.
93 
94   @retval EFI_SUCCESS            If resources are added
95   @retval EFI_INVALID_PARAMETER  If nested procedure detected resource failer
96   @retval EFI_OUT_OF_RESOURCES   If nested procedure returned it and we cannot allocate more areas.
97 
98 **/
99 EFI_STATUS
100 EFIAPI
101 AddPiResource (
102   IN  STM_RSC  *ResourceList,
103   IN  UINT32    NumEntries OPTIONAL
104   );
105 
106 /**
107 
108   Delete resources in list to database.
109 
110   @param ResourceList  A pointer to resource list to be deleted
111                        NULL means delete all resources.
112   @param NumEntries    Optional number of entries.
113                        If 0, list must be terminated by END_OF_RESOURCES.
114 
115   @retval EFI_SUCCESS            If resources are deleted
116   @retval EFI_INVALID_PARAMETER  If nested procedure detected resource failer
117 
118 **/
119 EFI_STATUS
120 EFIAPI
121 DeletePiResource (
122   IN  STM_RSC    *ResourceList,
123   IN  UINT32      NumEntries OPTIONAL
124   );
125 
126 /**
127 
128   Get BIOS resources.
129 
130   @param ResourceList  A pointer to resource list to be filled
131   @param ResourceSize  On input it means size of resource list input.
132                        On output it means size of resource list filled,
133                        or the size of resource list to be filled if size of too small.
134 
135   @retval EFI_SUCCESS            If resources are returned.
136   @retval EFI_BUFFER_TOO_SMALL   If resource list buffer is too small to hold the whole resources.
137 
138 **/
139 EFI_STATUS
140 EFIAPI
141 GetPiResource (
142   OUT    STM_RSC *ResourceList,
143   IN OUT UINT32  *ResourceSize
144   );
145 
146 /**
147   This functin initialize STM configuration table.
148 **/
149 VOID
150 StmSmmConfigurationTableInit (
151   VOID
152   );
153 
154 /**
155   This function notify STM resource change.
156 
157   @param StmResource BIOS STM resource
158 
159 **/
160 VOID
161 NotifyStmResourceChange (
162   IN VOID *StmResource
163   );
164 
165 /**
166   This function return BIOS STM resource.
167 
168   @return BIOS STM resource
169 
170 **/
171 VOID *
172 GetStmResource (
173   VOID
174   );
175 
176 #endif
177