2012-11-02 19:26:48 +01:00
|
|
|
/** @file
|
|
|
|
Load/boot UEFI Linux.
|
|
|
|
|
2013-01-16 07:49:45 +01:00
|
|
|
Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR>
|
2012-11-02 19:26:48 +01:00
|
|
|
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
|
|
|
|
);
|
|
|
|
|
|
|
|
|
2013-01-16 07:49:45 +01:00
|
|
|
/**
|
|
|
|
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
|
|
|
|
);
|
|
|
|
|
2012-11-02 19:26:48 +01:00
|
|
|
/**
|
|
|
|
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
|
|
|
|
|