/** @file Load/boot UEFI Linux. Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #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 occurred @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 ); /** Clears the uninitialised space before and after the struct setup_header in the kernel setup image. The kernel requires that these be zeroed unless explicitly initialised, so this function should be called after the setup_header has been copied in from a bzImage, before setting up anything else. @param[in] KernelSetup - The kernel setup image @retval EFI_SUCCESS - The Linux kernel setup was successfully initialized @retval EFI_INVALID_PARAMETER - KernelSetup was NULL @retval EFI_UNSUPPORTED - The Linux kernel is not supported **/ EFI_STATUS EFIAPI LoadLinuxInitializeKernelSetup ( IN VOID *KernelSetup ); /** 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