From 677472aae4923fedd82249021e872219389542f5 Mon Sep 17 00:00:00 2001 From: xli24 Date: Sat, 25 Oct 2008 16:03:02 +0000 Subject: 1. Rename following library instances according to MDE Library Spec: 1) SerialPortLibNull => BaseSerialPortLibNull 2) DxeMemoryLib => UefiMemoryLib 3) DxeMemoryAllocationLib => UefiMemoryAllocationLib 4) CpuLib => BaseCpuLib 5) HiiLib => UefiHiiLib 6) IfrSupportLib => UefiIfrSupportLib 7) PeiPalCallLib => PeiPalLib 2. Add library instances to MDE package 1) DxePalLib 2) FvbServiceLib 3) GraphicsLib git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6221 6f19259b-4bc3-4df7-8a09-765794883524 --- MdePkg/Library/PeiPalLib/PeiPalLib.c | 101 +++++++++++++++++++++++++++++++++ MdePkg/Library/PeiPalLib/PeiPalLib.inf | 52 +++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 MdePkg/Library/PeiPalLib/PeiPalLib.c create mode 100644 MdePkg/Library/PeiPalLib/PeiPalLib.inf (limited to 'MdePkg/Library/PeiPalLib') diff --git a/MdePkg/Library/PeiPalLib/PeiPalLib.c b/MdePkg/Library/PeiPalLib/PeiPalLib.c new file mode 100644 index 0000000000..07f9f38ad0 --- /dev/null +++ b/MdePkg/Library/PeiPalLib/PeiPalLib.c @@ -0,0 +1,101 @@ +/** @file + PAL Call Services Function. + + Copyright (c) 2006 - 2008 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 + +/** + 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; + CONST 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 Platform Information PPI + // + Status = PeiServicesLocatePpi ( + &gEfiSecPlatformInformationPpiGuid, + 0, + NULL, + (VOID **)&SecPlatformPpi + ); + ASSERT_EFI_ERROR (Status); + + // + // Retrieve PAL call address from platform information reported by the PPI + // + 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/PeiPalLib/PeiPalLib.inf b/MdePkg/Library/PeiPalLib/PeiPalLib.inf new file mode 100644 index 0000000000..08f164cbd4 --- /dev/null +++ b/MdePkg/Library/PeiPalLib/PeiPalLib.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 - 2008, 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 = PeiPalLib + FILE_GUID = B53DC524-6B98-4584-940B-8F1363DEF09E + MODULE_TYPE = PEIM + VERSION_STRING = 1.0 + LIBRARY_CLASS = PalCallLib|PEI_CORE PEIM SEC + 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] + PeiPalLib.c + + +[Packages] + MdePkg/MdePkg.dec + + +[LibraryClasses] + BaseLib + PeiServicesLib + PeiServicesTablePointerLib + + +[Ppis] + gEfiSecPlatformInformationPpiGuid # PPI ALWAYS_CONSUMED + -- cgit v1.2.3