OvmfPkg/MemEncryptSevLib: find pages of initial SMRAM save state map
[mirror_edk2.git] / OvmfPkg / Include / Library / LoadLinuxLib.h
1 /** @file
2 Load/boot UEFI Linux.
3
4 Copyright (c) 2011 - 2013, 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 __LOAD_LINUX_LIB__
16 #define __LOAD_LINUX_LIB__
17
18
19 /**
20 Verifies that the kernel setup image is valid and supported.
21 The kernel setup image should be checked before using other library
22 routines which take the kernel setup as an input.
23
24 @param[in] KernelSetup - The kernel setup image
25 @param[in] KernelSetupSize - The kernel setup size
26
27 @retval EFI_SUCCESS - The Linux kernel setup is valid and supported
28 @retval EFI_INVALID_PARAMETER - KernelSetup was NULL
29 @retval EFI_UNSUPPORTED - The Linux kernel is not supported
30
31 **/
32 EFI_STATUS
33 EFIAPI
34 LoadLinuxCheckKernelSetup (
35 IN VOID *KernelSetup,
36 IN UINTN KernelSetupSize
37 );
38
39
40 /**
41 Gets the initial runtime size of the Linux kernel image by examining
42 the kernel setup image.
43
44 @param[in] KernelSetup - The kernel setup image
45 @param[in] KernelSize - The kernel size on disk.
46
47 @retval 0 An error occurred
48 @retval !0 The initial size required by the kernel to
49 begin execution.
50
51 **/
52 UINTN
53 EFIAPI
54 LoadLinuxGetKernelSize (
55 IN VOID *KernelSetup,
56 IN UINTN KernelSize
57 );
58
59
60 /**
61 Loads and boots UEFI Linux.
62
63 Note: If successful, then this routine will not return
64
65 @param[in] Kernel - The main kernel image
66 @param[in,out] KernelSetup - The kernel setup image
67
68 @retval EFI_NOT_FOUND - The Linux kernel was not found
69 @retval EFI_INVALID_PARAMETER - Kernel or KernelSetup was NULL
70 @retval EFI_UNSUPPORTED - The Linux kernel version is not supported
71
72 **/
73 EFI_STATUS
74 EFIAPI
75 LoadLinux (
76 IN VOID *Kernel,
77 IN OUT VOID *KernelSetup
78 );
79
80
81 /**
82 Allocates pages for the kernel setup image.
83
84 @param[in] Pages - The number of pages
85
86 @retval NULL - Unable to allocate pages
87 @retval !NULL - The address of the pages allocated
88
89 **/
90 VOID*
91 EFIAPI
92 LoadLinuxAllocateKernelSetupPages (
93 IN UINTN Pages
94 );
95
96
97 /**
98 Clears the uninitialised space before and after the struct setup_header
99 in the kernel setup image. The kernel requires that these be zeroed
100 unless explicitly initialised, so this function should be called after
101 the setup_header has been copied in from a bzImage, before setting up
102 anything else.
103
104 @param[in] KernelSetup - The kernel setup image
105
106 @retval EFI_SUCCESS - The Linux kernel setup was successfully initialized
107 @retval EFI_INVALID_PARAMETER - KernelSetup was NULL
108 @retval EFI_UNSUPPORTED - The Linux kernel is not supported
109
110 **/
111 EFI_STATUS
112 EFIAPI
113 LoadLinuxInitializeKernelSetup (
114 IN VOID *KernelSetup
115 );
116
117 /**
118 Allocates pages for the kernel.
119
120 @param[in] KernelSetup - The kernel setup image
121 @param[in] Pages - The number of pages. (It is recommended to use the
122 size returned from LoadLinuxGetKernelSize.)
123
124 @retval NULL - Unable to allocate pages
125 @retval !NULL - The address of the pages allocated
126
127 **/
128 VOID*
129 EFIAPI
130 LoadLinuxAllocateKernelPages (
131 IN VOID *KernelSetup,
132 IN UINTN Pages
133 );
134
135
136 /**
137 Allocates pages for the kernel command line.
138
139 @param[in] Pages - The number of pages.
140
141 @retval NULL - Unable to allocate pages
142 @retval !NULL - The address of the pages allocated
143
144 **/
145 VOID*
146 EFIAPI
147 LoadLinuxAllocateCommandLinePages (
148 IN UINTN Pages
149 );
150
151
152 /**
153 Allocates pages for the initrd image.
154
155 @param[in,out] KernelSetup - The kernel setup image
156 @param[in] Pages - The number of pages.
157
158 @retval NULL - Unable to allocate pages
159 @retval !NULL - The address of the pages allocated
160
161 **/
162 VOID*
163 EFIAPI
164 LoadLinuxAllocateInitrdPages (
165 IN VOID *KernelSetup,
166 IN UINTN Pages
167 );
168
169
170 /**
171 Sets the kernel command line parameter within the setup image.
172
173 @param[in,out] KernelSetup - The kernel setup image
174 @param[in] CommandLine - The kernel command line
175
176 @retval EFI_SUCCESS - The Linux kernel setup is valid and supported
177 @retval EFI_INVALID_PARAMETER - KernelSetup was NULL
178 @retval EFI_UNSUPPORTED - The Linux kernel is not supported
179
180 **/
181 EFI_STATUS
182 EFIAPI
183 LoadLinuxSetCommandLine (
184 IN OUT VOID *KernelSetup,
185 IN CHAR8 *CommandLine
186 );
187
188
189 /**
190 Sets the kernel initial ram disk pointer within the setup image.
191
192 @param[in,out] KernelSetup - The kernel setup image
193 @param[in] Initrd - Pointer to the initial ram disk
194 @param[in] InitrdSize - The initial ram disk image size
195
196 @retval EFI_SUCCESS - The Linux kernel setup is valid and supported
197 @retval EFI_INVALID_PARAMETER - KernelSetup was NULL
198 @retval EFI_UNSUPPORTED - The Linux kernel is not supported
199
200 **/
201 EFI_STATUS
202 EFIAPI
203 LoadLinuxSetInitrd (
204 IN OUT VOID *KernelSetup,
205 IN VOID *Initrd,
206 IN UINTN InitrdSize
207 );
208
209
210 #endif
211