blob: b395493a0669c0a3931e4d08e92ca1c31bd1c0cc [file] [log] [blame]
Patrick Georgi593124d2020-05-10 19:44:08 +02001/* SPDX-License-Identifier: BSD-2-Clause */
Eugene Myersae438be2020-01-21 17:01:47 -05002
3#ifndef _SMM_STM_H_
4#define _SMM_STM_H_
5
Eugene Myersae438be2020-01-21 17:01:47 -05006#include "StmApi.h"
Angel Pons002e5e02020-07-20 23:10:21 +02007#include <stdbool.h>
Eugene Myersae438be2020-01-21 17:01:47 -05008
9/*
10 * Load STM image.
11 *
12 * @retval SUCCESS STM is loaded to MSEG
13 * @retval BUFFER_TOO_SMALL MSEG is too small
14 * @retval UNSUPPORTED MSEG is not enabled
15 */
16int load_stm_image(uintptr_t mseg);
17
18void stm_setup(
Eugene D Myersf213f172020-04-15 19:11:52 -040019 uintptr_t mseg, int cpu, uintptr_t smbase,
Eugene Myersae438be2020-01-21 17:01:47 -050020 uintptr_t smbase_base, uint32_t offset32);
21
22/*
23 * Add resources in list to database. Allocate new memory areas as needed.
24 *
25 * @param resource_list A pointer to resource list to be added
26 * @param num_entries Optional number of entries.
27 * If 0, list must be terminated by END_OF_RESOURCES.
28 *
29 * @retval SUCCESS If resources are added
30 * @retval INVALID_PARAMETER If nested procedure detected resource failure
31 * @retval OUT_OF_RESOURCES If nested procedure returned it and we cannot
32 * allocate more areas.
33 */
34int add_pi_resource(STM_RSC *resource_list, uint32_t num_entries);
35
36/*
37 * Delete resources in list to database.
38 *
39 * @param resource_list A pointer to resource list to be deleted
40 * NULL means delete all resources.
41 * @param num_entries Optional number of entries.
42 * If 0, list must be terminated by END_OF_RESOURCES.
43 *
44 * @retval SUCCESS If resources are deleted
45 * @retval NVALID_PARAMETER If nested procedure detected resource fail
46 */
47int delete_pi_resource(STM_RSC *resource_list, uint32_t num_entries);
48
49/*
50 * Get BIOS resources.
51 *
52 * @param resource_list A pointer to resource list to be filled
53 * @param resource_size On input it means size of resource list input.
54 * On output it means size of resource list filled,
55 * or the size of resource list to be filled if
56 * size is too small.
57 *
58 * @retval SUCCESS If resources are returned.
59 * @retval BUFFER_TOO_SMALL If resource list buffer is too small to
60 * hold the whole resources.
61 */
62int get_pi_resource(STM_RSC *resource_list, uint32_t *resource_size);
63
64/*
65 * This function notifies the STM of a resource change.
66 *
67 * @param stm_resource BIOS STM resource
68 */
69void notify_stm_resource_change(void *stm_resource);
70
71/*
72 * This function returns the pointer to the STM BIOS resource list.
73 *
74 * @return BIOS STM resource
75 */
76void *get_stm_resource(void);
77
78void setup_smm_descriptor(void *smbase, void *base_smbase, int32_t apic_id,
79 int32_t entry32_off);
80
81/*
82 * Check STM image size.
83 *
84 * @param stm_image STM image
85 * @param stm_image_size STM image size
86 *
87 * @retval true check pass
88 * @retval false check fail
89 */
90bool stm_check_stm_image(void *stm_image, uint32_t stm_image_size);
91
92/*
93 * Create 4G page table for STM.
94 * 4M Non-PAE page table in IA32 version.
95 *
96 * @param page_table_base The page table base in MSEG
97 */
98void stm_gen_4g_pagetable_ia32(uint32_t pagetable_base);
99
100/*
101 * Create 4G page table for STM.
102 * 2M PAE page table in X64 version.
103 *
104 * @param pagetable_base The page table base in MSEG
105 */
106void stm_gen_4g_pagetable_x64(uint32_t pagetable_base);
107
108#endif