summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>2006-11-22 00:41:04 +0000
committermdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524>2006-11-22 00:41:04 +0000
commit9e95f418ccb435a9b11fef1c994dc90d7d08e712 (patch)
tree22fe1f98b942864e19d2ad318d6e640860dc9f6f
parent9cbd688b1ea9269bca0be76dce4c793075bbeab8 (diff)
downloadedk2-9e95f418ccb435a9b11fef1c994dc90d7d08e712.tar.gz
edk2-9e95f418ccb435a9b11fef1c994dc90d7d08e712.tar.bz2
edk2-9e95f418ccb435a9b11fef1c994dc90d7d08e712.zip
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
-rw-r--r--MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/ReadKr1.s47
-rw-r--r--MdePkg/Library/PeiServicesTablePointerLibKr1/Ipf/WriteKr1.s48
-rw-r--r--MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointer.c91
-rw-r--r--MdePkg/Library/PeiServicesTablePointerLibKr1/PeiServicesTablePointerLibKr1.msa51
4 files changed, 237 insertions, 0 deletions
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
+ <MsaHeader>
+ <ModuleName>PeiServicesTablePointerLibKr1</ModuleName>
+ <ModuleType>PEIM</ModuleType>
+ <GuidValue>C5F16B67-888F-44ba-ABDB-C2354FB63C49</GuidValue>
+ <Version>1.0</Version>
+ <Abstract>Component description file for IPF KR1 Pei Services Table Pointer Library</Abstract>
+ <Description>PEI Services Table Library implementation that retrieves a pointer to the PEI
+ Services Table from the KR1 register on IPF.</Description>
+ <Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
+ <License>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.</License>
+ <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
+ </MsaHeader>
+ <ModuleDefinitions>
+ <SupportedArchitectures>IPF</SupportedArchitectures>
+ <BinaryModule>false</BinaryModule>
+ <OutputFileBasename>PeiServicesTablePointerLibKr1</OutputFileBasename>
+ </ModuleDefinitions>
+ <LibraryClassDefinitions>
+ <LibraryClass Usage="ALWAYS_PRODUCED">
+ <Keyword>PeiServicesTablePointerLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>BaseLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>DebugLib</Keyword>
+ </LibraryClass>
+ </LibraryClassDefinitions>
+ <SourceFiles>
+ <Filename>PeiServicesTablePointer.c</Filename>
+ <Filename SupArchList="IPF">Ipf/ReadKr1.s</Filename>
+ <Filename SupArchList="IPF">Ipf/WriteKr1.s</Filename>
+ </SourceFiles>
+ <PackageDependencies>
+ <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
+ </PackageDependencies>
+ <Externs>
+ <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
+ <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
+ <Extern>
+ <Constructor>PeiServicesTablePointerLibConstructor</Constructor>
+ </Extern>
+ </Externs>
+</ModuleSurfaceArea> \ No newline at end of file