205 lines
4.9 KiB
C
205 lines
4.9 KiB
C
/** @file
|
|
Load/boot UEFI Linux.
|
|
|
|
Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
|
|
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
|
|
|