From ed8717c58fc299acfb7dbc112e69e968de2f81e3 Mon Sep 17 00:00:00 2001 From: vprabhal Date: Thu, 11 Oct 2007 23:51:46 +0000 Subject: [PATCH] moved the PeiPalCallLib from ItaniumFamilyCpuPkg to MdePkg git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4102 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/PeiPalCallLib/PalCallLib.c | 101 ++++++++++++++++++ .../Library/PeiPalCallLib/PeiPalCallLib.inf | 52 +++++++++ .../Library/PeiPalCallLib/PeiPalCallLib.msa | 56 ++++++++++ 3 files changed, 209 insertions(+) create mode 100644 MdePkg/Library/PeiPalCallLib/PalCallLib.c create mode 100644 MdePkg/Library/PeiPalCallLib/PeiPalCallLib.inf create mode 100644 MdePkg/Library/PeiPalCallLib/PeiPalCallLib.msa diff --git a/MdePkg/Library/PeiPalCallLib/PalCallLib.c b/MdePkg/Library/PeiPalCallLib/PalCallLib.c new file mode 100644 index 0000000000..4d52fc36cf --- /dev/null +++ b/MdePkg/Library/PeiPalCallLib/PalCallLib.c @@ -0,0 +1,101 @@ +/** @file + PAL Call Services Function. + + Copyright (c) 2006 - 2007 Intel Corporation. All rights reserved + This software and associated documentation (if any) is furnished + under a license and may only be used or copied in accordance + with the terms of the license. Except as permitted by such + license, no part of this software or documentation may be + reproduced, stored in a retrieval system, or transmitted in any + form or by any means without the express written consent of + Intel Corporation. + + Module Name: PalCallLib.c + +**/ + + +#include +#include + +#include + +#include +#include +#include +#include +#include + +/** + + Makes a PAL procedure call. + This is a wrapper function to make a PAL procedure call. Based on the Index value, + this API will make static or stacked PAL call. Architected procedures may be designated + as required or optional. If a PAL procedure is specified as optional, a unique return + code of 0xFFFFFFFFFFFFFFFF is returned in the Status field of the PAL_CALL_RETURN structure. + This indicates that the procedure is not present in this PAL implementation. It is the + caller¡¯s responsibility to check for this return code after calling any optional PAL + procedure. No parameter checking is performed on the 4 input parameters, but there are + some common rules that the caller should follow when making a PAL call. Any address + passed to PAL as buffers for return parameters must be 8-byte aligned. Unaligned addresses + may cause undefined results. For those parameters defined as reserved or some fields + defined as reserved must be zero filled or the invalid argument return value may be + returned or undefined result may occur during the execution of the procedure. + This function is only available on IPF. + + @param Index - The PAL procedure Index number. + @param Arg2 - The 2nd parameter for PAL procedure calls. + @param Arg3 - The 3rd parameter for PAL procedure calls. + @param Arg4 - The 4th parameter for PAL procedure calls. + + @return structure returned from the PAL Call procedure, including the status and return value. + +**/ +PAL_CALL_RETURN +EFIAPI +PalCall ( + IN UINT64 Index, + IN UINT64 Arg2, + IN UINT64 Arg3, + IN UINT64 Arg4 + ) +{ + UINT64 PalCallAddress; + PAL_CALL_RETURN ReturnVal; + + EFI_PEI_SERVICES **PeiServices; + EFI_STATUS Status; + EFI_SEC_PLATFORM_INFORMATION_PPI *SecPlatformPpi; + IPF_HANDOFF_STATUS IpfStatus; + UINT64 RecordSize; + + // + // Get Pei Service Table Pointer + // + PeiServices = GetPeiServicesTablePointer (); + + // + // Locate SEC Ppi + // + + Status = PeiServicesLocatePpi ( + &gEfiSecPlatformInformationPpiGuid, + 0, + NULL, + (VOID **)&SecPlatformPpi + ); + ASSERT_EFI_ERROR (Status); + + RecordSize = sizeof (IpfStatus); + SecPlatformPpi->PlatformInformation ( + PeiServices, + &RecordSize, + (EFI_SEC_PLATFORM_INFORMATION_RECORD *) &IpfStatus + ); + PalCallAddress = IpfStatus.PalCallAddress; + + ReturnVal = AsmPalCall (PalCallAddress, Index, Arg2, Arg3, Arg4); + + return ReturnVal; +} + diff --git a/MdePkg/Library/PeiPalCallLib/PeiPalCallLib.inf b/MdePkg/Library/PeiPalCallLib/PeiPalCallLib.inf new file mode 100644 index 0000000000..046e80cda2 --- /dev/null +++ b/MdePkg/Library/PeiPalCallLib/PeiPalCallLib.inf @@ -0,0 +1,52 @@ +#/** @file +# Component description file for Pei PAL call Library +# +# PAL Call Library implementation to wrap the PAL call in PEI. +# Copyright (c) 2006, Intel Corporation +# +# All rights reserved. +# This software and associated documentation (if any) is furnished +# under a license and may only be used or copied in accordance +# with the terms of the license. Except as permitted by such +# license, no part of this software or documentation may be +# reproduced, stored in a retrieval system, or transmitted in any +# form or by any means without the express written consent of +# Intel Corporation. +# +# +#**/ + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = PeiPalCallLib + FILE_GUID = B53DC524-6B98-4584-940B-8F1363DEF09E + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + LIBRARY_CLASS = PalCallLib + EDK_RELEASE_VERSION = 0x00020000 + EFI_SPECIFICATION_VERSION = 0x00020000 + + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IPF +# + +[Sources.common] + PalCallLib.c + + +[Packages] + MdePkg/MdePkg.dec + + +[LibraryClasses] + BaseLib + PeiServicesLib + PeiServicesTablePointerLib + + +[Ppis] + gEfiSecPlatformInformationPpiGuid # PPI ALWAYS_CONSUMED + diff --git a/MdePkg/Library/PeiPalCallLib/PeiPalCallLib.msa b/MdePkg/Library/PeiPalCallLib/PeiPalCallLib.msa new file mode 100644 index 0000000000..456019fa1a --- /dev/null +++ b/MdePkg/Library/PeiPalCallLib/PeiPalCallLib.msa @@ -0,0 +1,56 @@ + + + + PeiPalCallLib + PEIM + B53DC524-6B98-4584-940B-8F1363DEF09E + 1.0 + Component description file for Pei PAL call Library + PAL Call Library implementation to wrap the PAL call in PEI. + Copyright (c) 2006, Intel Corporation + All rights reserved. + This software and associated documentation (if any) is furnished + under a license and may only be used or copied in accordance + with the terms of the license. Except as permitted by such + license, no part of this software or documentation may be + reproduced, stored in a retrieval system, or transmitted in any + form or by any means without the express written consent of + Intel Corporation. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IPF + false + PeiPalCallLib + + + + PalCallLib + + + PeiServicesTablePointerLib + + + PeiServicesLib + + + BaseLib + + + + PalCallLib.c + + + + + + + + gEfiSecPlatformInformationPpiGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + \ No newline at end of file