Created
April 12, 2024 08:39
-
-
Save KunYi/e23b7c59ad33990cc48433f1c0c94d5b to your computer and use it in GitHub Desktop.
UEFI Hello world for allocate runtime service data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** @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