From 9e95f418ccb435a9b11fef1c994dc90d7d08e712 Mon Sep 17 00:00:00 2001 From: mdkinney Date: Wed, 22 Nov 2006 00:41:04 +0000 Subject: [PATCH] Add PeiServiceTablePointerLib that uses KR1 to save/restore the PEI Services Table Pointer This library is only valid for Ipf git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1993 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Ipf/ReadKr1.s | 47 ++++++++++ .../Ipf/WriteKr1.s | 48 ++++++++++ .../PeiServicesTablePointer.c | 91 +++++++++++++++++++ .../PeiServicesTablePointerLibKr1.msa | 51 +++++++++++ 4 files changed, 237 insertions(+) create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/ReadKr1.s create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/WriteKr1.s create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointer.c create mode 100644 MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointerLibKr1.msa diff --git a/MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/ReadKr1.s b/MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/ReadKr1.s new file mode 100644 index 0000000000..6f3155c8a7 --- /dev/null +++ b/MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/ReadKr1.s @@ -0,0 +1,47 @@ +//++ +// +// 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. +// +// +// Module Name: +// +// ReadKr1.s +// +// Abstract: +// +// Contains assembly code for read Kr1. +// +//-- + + .file "ReadKr1.s" + +#include "IpfMacro.i" + +//--------------------------------------------------------------------------------- +//++ +// AsmReadKr1 +// +// This routine is used to get KR1. KR1 is used to store Pei Service Table +// Pointer in archeture. +// +// Arguments : +// +// On Entry : None. +// +// Return Value: Pei Services Table. +// +//-- +//---------------------------------------------------------------------------------- +PROCEDURE_ENTRY (AsmReadKr1) + + mov r8 = ar.k1;; // Pei Services Table Pointer + br.ret.dpnt b0;; + +PROCEDURE_EXIT (AsmReadKr1) diff --git a/MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/WriteKr1.s b/MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/WriteKr1.s new file mode 100644 index 0000000000..48d276c95a --- /dev/null +++ b/MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/WriteKr1.s @@ -0,0 +1,48 @@ +//++ +// +// 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. +// +// +// Module Name: +// +// WriteKr1.s +// +// Abstract: +// +// Contains assembly code for write Kr1. +// +//-- + + .file "WriteKr1.s" + +#include "IpfMacro.i" + +//--------------------------------------------------------------------------------- +//++ +// AsmWriteKr1 +// +// This routine is used to Write KR1. KR1 is used to store Pei Service Table +// Pointer in archeture. +// +// Arguments : r32 Pei Services Table Pointer +// +// On Entry : None. +// +// Return Value: None. +// +//-- +//---------------------------------------------------------------------------------- +PROCEDURE_ENTRY (AsmWriteKr1) + + mov ar.k1 = r32;; // Pei Services Table Pointer + br.ret.dpnt b0;; + +PROCEDURE_EXIT (AsmWriteKr1) + \ No newline at end of file diff --git a/MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointer.c b/MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointer.c new file mode 100644 index 0000000000..474748d332 --- /dev/null +++ b/MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointer.c @@ -0,0 +1,91 @@ +/*++ + +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. + + +Module Name: + + PeiServicesTablePointer.c + +Abstract: + + PEI Services Table Pointer Library. + +--*/ + + +/** + Reads the current value of Kr1. + + @return The current value of Kr1. + +**/ +UINT64 +EFIAPI +AsmReadKr1 ( + VOID + ); + +/** + Writes the current value of Kr1. + + @param Value The 64-bit value to write to Kr1. + +**/ +VOID +EFIAPI +AsmWriteKr1 ( + IN UINT64 Value + ); + +/** + The function returns the pointer to PeiServices. + + The function returns the pointer to PeiServices. + It will ASSERT() if the pointer to PeiServices is NULL. + + @retval The pointer to PeiServices. + +**/ +EFI_PEI_SERVICES ** +EFIAPI +GetPeiServicesTablePointer ( + VOID + ) +{ + EFI_PEI_SERVICES **PeiServices; + + PeiServices = (EFI_PEI_SERVICES **)(UINTN)AsmReadKr1 (); + ASSERT (PeiServices != NULL); + return PeiServices; +} + +/** + The constructor function caches the pointer to PEI services. + + The constructor function caches the pointer to PEI services. + It will always return EFI_SUCCESS. + + @param FfsHeader Pointer to FFS header the loaded driver. + @param PeiServices Pointer to the PEI services. + + @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS. + +**/ +EFI_STATUS +EFIAPI +PeiServicesTablePointerLibConstructor ( + IN EFI_FFS_FILE_HEADER *FfsHeader, + IN EFI_PEI_SERVICES **PeiServices + ) +{ + AsmWriteKr1 ((UINT64)(UINTN)PeiServices); + return EFI_SUCCESS; +} diff --git a/MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointerLibKr1.msa b/MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointerLibKr1.msa new file mode 100644 index 0000000000..2b39ae952f --- /dev/null +++ b/MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointerLibKr1.msa @@ -0,0 +1,51 @@ + + + + PeiServicesTablePointerLibKr1 + PEIM + C5F16B67-888F-44ba-ABDB-C2354FB63C49 + 1.0 + Component description file for IPF KR1 Pei Services Table Pointer Library + PEI Services Table Library implementation that retrieves a pointer to the PEI + Services Table from the KR1 register on IPF. + Copyright (c) 2006, Intel Corporation. + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IPF + false + PeiServicesTablePointerLibKr1 + + + + PeiServicesTablePointerLib + + + BaseLib + + + DebugLib + + + + PeiServicesTablePointer.c + Ipf/ReadKr1.s + Ipf/WriteKr1.s + + + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + PeiServicesTablePointerLibConstructor + + + \ No newline at end of file -- 2.39.2