From f6c6c020286e230a4d72e4f91ab433e5619e83af Mon Sep 17 00:00:00 2001 From: jljusten Date: Fri, 2 Nov 2012 18:26:48 +0000 Subject: [PATCH] OvmfPkg: Add LoadLinuxLib library interface Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen Reviewed-by: Laszlo Ersek git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13921 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/Include/Library/LoadLinuxLib.h | 191 +++++++++++++++++++++++++ OvmfPkg/OvmfPkg.dec | 4 + 2 files changed, 195 insertions(+) create mode 100644 OvmfPkg/Include/Library/LoadLinuxLib.h diff --git a/OvmfPkg/Include/Library/LoadLinuxLib.h b/OvmfPkg/Include/Library/LoadLinuxLib.h new file mode 100644 index 0000000000..d1064d239a --- /dev/null +++ b/OvmfPkg/Include/Library/LoadLinuxLib.h @@ -0,0 +1,191 @@ +/** @file + Load/boot UEFI Linux. + + Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.
+ 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. + +**/ + +#ifndef __LOAD_LINUX_LIB__ +#define __LOAD_LINUX_LIB__ + + +/** + Verifies that the kernel setup image is valid and supported. + The kernel setup image should be checked before using other library + routines which take the kernel setup as an input. + + @param[in] KernelSetup - The kernel setup image + @param[in] KernelSetupSize - The kernel setup size + + @retval EFI_SUCCESS - The Linux kernel setup is valid and supported + @retval EFI_INVALID_PARAMETER - KernelSetup was NULL + @retval EFI_UNSUPPORTED - The Linux kernel is not supported + +**/ +EFI_STATUS +EFIAPI +LoadLinuxCheckKernelSetup ( + IN VOID *KernelSetup, + IN UINTN KernelSetupSize + ); + + +/** + Gets the initial runtime size of the Linux kernel image by examining + the kernel setup image. + + @param[in] KernelSetup - The kernel setup image + @param[in] KernelSize - The kernel size on disk. + + @retval 0 An error occured + @retval !0 The initial size required by the kernel to + begin execution. + +**/ +UINTN +EFIAPI +LoadLinuxGetKernelSize ( + IN VOID *KernelSetup, + IN UINTN KernelSize + ); + + +/** + Loads and boots UEFI Linux. + + Note: If successful, then this routine will not return + + @param[in] Kernel - The main kernel image + @param[in,out] KernelSetup - The kernel setup image + + @retval EFI_NOT_FOUND - The Linux kernel was not found + @retval EFI_INVALID_PARAMETER - Kernel or KernelSetup was NULL + @retval EFI_UNSUPPORTED - The Linux kernel version is not supported + +**/ +EFI_STATUS +EFIAPI +LoadLinux ( + IN VOID *Kernel, + IN OUT VOID *KernelSetup + ); + + +/** + Allocates pages for the kernel setup image. + + @param[in] Pages - The number of pages + + @retval NULL - Unable to allocate pages + @retval !NULL - The address of the pages allocated + +**/ +VOID* +EFIAPI +LoadLinuxAllocateKernelSetupPages ( + IN UINTN Pages + ); + + +/** + Allocates pages for the kernel. + + @param[in] KernelSetup - The kernel setup image + @param[in] Pages - The number of pages. (It is recommended to use the + size returned from LoadLinuxGetKernelSize.) + + @retval NULL - Unable to allocate pages + @retval !NULL - The address of the pages allocated + +**/ +VOID* +EFIAPI +LoadLinuxAllocateKernelPages ( + IN VOID *KernelSetup, + IN UINTN Pages + ); + + +/** + Allocates pages for the kernel command line. + + @param[in] Pages - The number of pages. + + @retval NULL - Unable to allocate pages + @retval !NULL - The address of the pages allocated + +**/ +VOID* +EFIAPI +LoadLinuxAllocateCommandLinePages ( + IN UINTN Pages + ); + + +/** + Allocates pages for the initrd image. + + @param[in,out] KernelSetup - The kernel setup image + @param[in] Pages - The number of pages. + + @retval NULL - Unable to allocate pages + @retval !NULL - The address of the pages allocated + +**/ +VOID* +EFIAPI +LoadLinuxAllocateInitrdPages ( + IN VOID *KernelSetup, + IN UINTN Pages + ); + + +/** + Sets the kernel command line parameter within the setup image. + + @param[in,out] KernelSetup - The kernel setup image + @param[in] CommandLine - The kernel command line + + @retval EFI_SUCCESS - The Linux kernel setup is valid and supported + @retval EFI_INVALID_PARAMETER - KernelSetup was NULL + @retval EFI_UNSUPPORTED - The Linux kernel is not supported + +**/ +EFI_STATUS +EFIAPI +LoadLinuxSetCommandLine ( + IN OUT VOID *KernelSetup, + IN CHAR8 *CommandLine + ); + + +/** + Sets the kernel initial ram disk pointer within the setup image. + + @param[in,out] KernelSetup - The kernel setup image + @param[in] Initrd - Pointer to the initial ram disk + @param[in] InitrdSize - The initial ram disk image size + + @retval EFI_SUCCESS - The Linux kernel setup is valid and supported + @retval EFI_INVALID_PARAMETER - KernelSetup was NULL + @retval EFI_UNSUPPORTED - The Linux kernel is not supported + +**/ +EFI_STATUS +EFIAPI +LoadLinuxSetInitrd ( + IN OUT VOID *KernelSetup, + IN VOID *Initrd, + IN UINTN InitrdSize + ); + + +#endif + diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 73db6af772..d874f0c44f 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -23,6 +23,10 @@ Include [LibraryClasses] + ## @libraryclass Loads and boots a Linux kernel image + # + LoadLinuxLib|Include/Library/LoadLinuxLib.h + ## @libraryclass Save and restore variables using a file # NvVarsFileLib|Include/Library/NvVarsFileLib.h -- 2.39.2