Use the command to load and start a ARM Executable File from mass storage. This is basically just an ELF file. The program is copied to memory and the Entrypoint is called. Control is not expected to return back to the Shell. This has only been tested on AArch64 with a limited set of AXF binaries. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Harry Liebel <Harry.Liebel@arm.com> Reviewed-By: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16247 6f19259b-4bc3-4df7-8a09-765794883524
86 lines
3.0 KiB
C
86 lines
3.0 KiB
C
/** @file
|
|
*
|
|
* Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
|
|
*
|
|
* 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 __ARM_SHELL_CMD_RUNAXF__
|
|
#define __ARM_SHELL_CMD_RUNAXF__
|
|
|
|
#include <ShellBase.h>
|
|
|
|
#include <Protocol/EfiShell.h>
|
|
#include <Protocol/EfiShellDynamicCommand.h>
|
|
|
|
#include <Library/HiiLib.h>
|
|
#include <Library/ShellLib.h>
|
|
#include <Library/UefiBootServicesTableLib.h>
|
|
|
|
extern EFI_GUID gRunAxfHiiGuid;
|
|
extern EFI_HANDLE gRunAxfHiiHandle;
|
|
extern EFI_HANDLE gRunAxfImageHandle;
|
|
|
|
// List of data segments to load to memory from AXF/ELF file.
|
|
typedef struct {
|
|
LIST_ENTRY Link; // This attribute must be the first entry of this
|
|
// structure (to avoid pointer computation)
|
|
UINTN MemOffset; // Where the data should go, Dest
|
|
UINTN FileOffset; // Where the data is from, Src
|
|
BOOLEAN Zeroes; // A section of Zeroes. Like .bss in ELF
|
|
UINTN Length; // Number of bytes.
|
|
} RUNAXF_LOAD_LIST;
|
|
|
|
|
|
/**
|
|
This is the shell command handler function pointer callback type. This
|
|
function handles the command when it is invoked in the shell.
|
|
|
|
@param[in] This The instance of the
|
|
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.
|
|
@param[in] SystemTable The pointer to the system table.
|
|
@param[in] ShellParameters The parameters associated with the command.
|
|
@param[in] Shell The instance of the shell protocol used in the
|
|
context of processing this command.
|
|
|
|
@return EFI_SUCCESS The operation was successful.
|
|
@return other The operation failed.
|
|
**/
|
|
SHELL_STATUS
|
|
EFIAPI
|
|
ShellDynCmdRunAxfHandler (
|
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
|
IN EFI_SYSTEM_TABLE *SystemTable,
|
|
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
|
IN EFI_SHELL_PROTOCOL *Shell
|
|
);
|
|
|
|
|
|
/**
|
|
This is the command help handler function pointer callback type. This
|
|
function is responsible for displaying help information for the associated
|
|
command.
|
|
|
|
@param[in] This The instance of the
|
|
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.
|
|
@param[in] Language The pointer to the language string to use.
|
|
|
|
@return string Pool allocated help string, must be freed by
|
|
caller.
|
|
**/
|
|
CHAR16*
|
|
EFIAPI
|
|
ShellDynCmdRunAxfGetHelp (
|
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
|
IN CONST CHAR8 *Language
|
|
);
|
|
|
|
#endif //__ARM_SHELL_CMD_RUNAXF__
|