Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,079 changes: 1,079 additions & 0 deletions Platform/Qemu/RiscvVirt/Library/PlatformBootManagerLib/PlatformBm.c

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/** @file
Head file for BDS Platform specific code

Copyright (C) 2015-2016, Red Hat, Inc.
Copyright (c) 2004 - 2008, Intel Corporation. All rights reserved.<BR>

SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _PLATFORM_BM_H_
#define _PLATFORM_BM_H_

#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/DevicePathLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>

/**
Download the kernel, the initial ramdisk, and the kernel command line from
QEMU's fw_cfg. Construct a minimal SimpleFileSystem that contains the two
image files, and load and start the kernel from it.

The kernel will be instructed via its command line to load the initrd from
the same Simple FileSystem.

@retval EFI_NOT_FOUND Kernel image was not found.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
@retval EFI_PROTOCOL_ERROR Unterminated kernel command line.

@return Error codes from any of the underlying
functions. On success, the function doesn't
return.
**/
EFI_STATUS
EFIAPI
TryRunningQemuKernel (
VOID
);

#endif // _PLATFORM_BM_H_
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
## @file
# Implementation for PlatformBootManagerLib library class interfaces.
#
# Copyright (C) 2015-2016, Red Hat, Inc.
# Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
# Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
INF_VERSION = 0x00010005
BASE_NAME = PlatformBootManagerLib
FILE_GUID = 469184E8-FADA-41E4-8823-012CA19B40D4
MODULE_TYPE = DXE_DRIVER
VERSION_STRING = 1.0
LIBRARY_CLASS = PlatformBootManagerLib|DXE_DRIVER

#
# The following information is for reference only and not required by the build tools.
#
# VALID_ARCHITECTURES = ARM AARCH64
#

[Sources]
PlatformBm.c
PlatformBm.h
QemuKernel.c

[Packages]
ArmVirtPkg/ArmVirtPkg.dec
MdeModulePkg/MdeModulePkg.dec
MdePkg/MdePkg.dec
OvmfPkg/OvmfPkg.dec
SecurityPkg/SecurityPkg.dec
ShellPkg/ShellPkg.dec

[LibraryClasses]
BaseLib
BaseMemoryLib
BootLogoLib
DebugLib
DevicePathLib
MemoryAllocationLib
PcdLib
PlatformBmPrintScLib
QemuBootOrderLib
QemuLoadImageLib
ReportStatusCodeLib
TpmPlatformHierarchyLib
UefiBootManagerLib
UefiBootServicesTableLib
UefiLib
UefiRuntimeServicesTableLib

[FixedPcd]
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits

[Pcd]
gArmVirtTokenSpaceGuid.PcdTerminalTypeGuidBuffer
gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString

[Guids]
gEfiEndOfDxeEventGroupGuid
gEfiGlobalVariableGuid
gRootBridgesConnectedEventGroupGuid
gUefiShellFileGuid

[Protocols]
gEfiFirmwareVolume2ProtocolGuid
gEfiGraphicsOutputProtocolGuid
gEfiPciRootBridgeIoProtocolGuid
gVirtioDeviceProtocolGuid
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/** @file
Try to load an EFI-stubbed ARM Linux kernel from QEMU's fw_cfg.

This implementation differs from OvmfPkg/Library/LoadLinuxLib. An EFI
stub in the subject kernel is a hard requirement here.

Copyright (C) 2014-2016, Red Hat, Inc.

SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#include <Library/QemuLoadImageLib.h>
#include <Library/ReportStatusCodeLib.h>

#include "PlatformBm.h"

//
// The entry point of the feature.
//

/**
Download the kernel, the initial ramdisk, and the kernel command line from
QEMU's fw_cfg. Construct a minimal SimpleFileSystem that contains the two
image files, and load and start the kernel from it.

The kernel will be instructed via its command line to load the initrd from
the same Simple FileSystem.

@retval EFI_NOT_FOUND Kernel image was not found.
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
@retval EFI_PROTOCOL_ERROR Unterminated kernel command line.

@return Error codes from any of the underlying
functions. On success, the function doesn't
return.
**/
EFI_STATUS
EFIAPI
TryRunningQemuKernel (
VOID
)
{
EFI_STATUS Status;
EFI_HANDLE KernelImageHandle;

Status = QemuLoadKernelImage (&KernelImageHandle);
if (EFI_ERROR (Status)) {
return Status;
}

//
// Signal the EFI_EVENT_GROUP_READY_TO_BOOT event.
//
EfiSignalEventReadyToBoot ();

REPORT_STATUS_CODE (
EFI_PROGRESS_CODE,
(EFI_SOFTWARE_DXE_BS_DRIVER | EFI_SW_DXE_BS_PC_READY_TO_BOOT_EVENT)
);

//
// Start the image.
//
Status = QemuStartKernelImage (&KernelImageHandle);
if (EFI_ERROR (Status)) {
DEBUG ((
DEBUG_ERROR,
"%a: QemuStartKernelImage(): %r\n",
__FUNCTION__,
Status
));
}

QemuUnloadKernelImage (KernelImageHandle);

return Status;
}
25 changes: 25 additions & 0 deletions Platform/Qemu/RiscvVirt/RiscvVirt.dec
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
## @file RISC-V RiscvVirt RISC-V platformm
# This Package provides RiscvVirt modules and libraries.
#
# Copyright (c) 2021, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##

[Defines]
DEC_SPECIFICATION = 0x0001001b
PACKAGE_NAME = RiscvVirt
PACKAGE_UNI_FILE = RiscvVirt.uni
PACKAGE_GUID = 389803d8-8c14-4839-8d7d-fc5b553aa3de
PACKAGE_VERSION = 1.0

[Includes]

[LibraryClasses]

[Guids]
gUefiRiscVPlatformRiscvVirtPkgTokenSpaceGuid = {0x27A81261, 0x6D02, 0x4471, { 0x99, 0xA8, 0x84, 0x7F, 0x62, 0x11, 0x16, 0x4A }}

[UserExtensions.TianoCore."ExtraFiles"]
RiscvVirtPkgExtra.uni
Loading