Skip to content

Instantly share code, notes, and snippets.

@KunYi
Created April 12, 2024 08:39
Show Gist options
  • Save KunYi/e23b7c59ad33990cc48433f1c0c94d5b to your computer and use it in GitHub Desktop.
Save KunYi/e23b7c59ad33990cc48433f1c0c94d5b to your computer and use it in GitHub Desktop.
UEFI Hello world for allocate runtime service data
/** @file
This sample application bases on HelloWorld PCD setting
to print "UEFI Hello World!" to the UEFI Console.
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Uefi.h>
#include <Library/PcdLib.h>
#include <Library/UefiLib.h>
#include <Library/UefiApplicationEntryPoint.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/DebugLib.h>
EFI_STATUS
EFIAPI
ReserveSharedDataMemory (VOID);
//
// String token ID of help message text.
// Shell supports to find help message in the resource section of an application image if
// .MAN file is not found. This global variable is added to make build tool recognizes
// that the help string is consumed by user and then build tool will add the string into
// the resource section. Thus the application can use '-?' option to show help message in
// Shell.
//
GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_HELLO_WORLD_HELP_INFORMATION);
/**
The user Entry Point for Application. The user code starts with this function
as the real entry point for the application.
@param[in] ImageHandle The firmware allocated handle for the EFI image.
@param[in] SystemTable A pointer to the EFI System Table.
@retval EFI_SUCCESS The entry point is executed successfully.
@retval other Some error occurs when executing this entry point.
**/
EFI_STATUS
EFIAPI
UefiMain (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
UINT32 Index;
Index = 0;
//
// Three PCD type (FeatureFlag, UINT32 and String) are used as the sample.
//
if (FeaturePcdGet (PcdHelloWorldPrintEnable)) {
for (Index = 0; Index < PcdGet32 (PcdHelloWorldPrintTimes); Index++) {
//
// Use UefiLib Print API to print string to UEFI console
//
Print ((CHAR16 *)PcdGetPtr (PcdHelloWorldPrintString));
}
}
ReserveSharedDataMemory();
return EFI_SUCCESS;
}
#define SHARED_DATA_SIZE 0x10000 // 64 KB
#define SHARE_DATA_PAGES (SHARED_DATA_SIZE/EFI_PAGE_SIZE)
EFI_STATUS
EFIAPI
ReserveSharedDataMemory (VOID)
{
EFI_PHYSICAL_ADDRESS phy_addr = { 0 };
EFI_STATUS Status = gBS->AllocatePages(AllocateAnyPages,
EfiRuntimeServicesData, 16,
&phy_addr);
Print (L"\r\nPhysical 0x%016X\r\n", phy_addr);
return Status;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment