X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=OldMdePkg%2FLibrary%2FBaseLib%2FIpf%2FAsmPalCall.s;fp=OldMdePkg%2FLibrary%2FBaseLib%2FIpf%2FAsmPalCall.s;h=0000000000000000000000000000000000000000;hp=9e70a787291b35c706c993783731fad8063a46e3;hb=808def96aa4589fba9c2d0ea55837754a3b7a4f7;hpb=9216450d1143056a50a5f916984a2d7faf590488 diff --git a/OldMdePkg/Library/BaseLib/Ipf/AsmPalCall.s b/OldMdePkg/Library/BaseLib/Ipf/AsmPalCall.s deleted file mode 100644 index 9e70a78729..0000000000 --- a/OldMdePkg/Library/BaseLib/Ipf/AsmPalCall.s +++ /dev/null @@ -1,158 +0,0 @@ -/// @file -/// Contains an implementation of CallPalProcStacked on Itanium-based -/// architecture. -/// -/// 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. -/// -/// Module Name: AsmPalCall.s -/// -/// - - -//----------------------------------------------------------------------------- -//++ -// AsmPalCall -// -// Makes a PAL procedure call. -// This is function to make a PAL procedure call. Based on the Index -// value this API will make static or stacked PAL call. The following table -// describes the usage of PAL Procedure Index Assignment. 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 5 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. If the PalEntryPoint does not point to a valid -// PAL entry point then the system behavior is undefined. This function is only -// available on IPF. -// -// On Entry : -// in0: PAL_PROC entrypoint -// in1-in4 : PAL_PROC arguments -// -// Return Value: -// -// As per stacked calling conventions. -// -//-- -//--------------------------------------------------------------------------- - -// -// PAL function calls -// -#define PAL_MC_CLEAR_LOG 0x0015 -#define PAL_MC_DYNAMIC_STATE 0x0018 -#define PAL_MC_ERROR_INFO 0x0019 -#define PAL_MC_RESUME 0x001a - - -.text -.proc AsmPalCall -.type AsmPalCall, @function - -AsmPalCall:: - alloc loc1 = ar.pfs,5,8,4,0 - mov loc0 = b0 - mov loc3 = b5 - mov loc4 = r2 - mov loc7 = r1 - mov r2 = psr;; - mov r28 = in1 - mov loc5 = r2;; - - movl loc6 = 0x100;; - cmp.ge p6,p7 = r28,loc6;; - -(p6) movl loc6 = 0x1FF;; -(p7) br.dpnt.few PalCallStatic;; // 0 ~ 255 make a static Pal Call -(p6) cmp.le p6,p7 = r28,loc6;; -(p6) br.dpnt.few PalCallStacked;; // 256 ~ 511 make a stacked Pal Call -(p7) movl loc6 = 0x300;; -(p7) cmp.ge p6,p7 = r28,loc6;; -(p7) br.dpnt.few PalCallStatic;; // 512 ~ 767 make a static Pal Call -(p6) movl loc6 = 0x3FF;; -(p6) cmp.le p6,p7 = r28,loc6;; -(p6) br.dpnt.few PalCallStacked;; // 768 ~ 1023 make a stacked Pal Call - -(p7) mov r8 = 0xFFFFFFFFFFFFFFFF;; // > 1024 return invalid -(p7) br.dpnt.few ComeBackFromPALCall;; - -PalCallStatic: - movl loc6 = PAL_MC_CLEAR_LOG;; - cmp.eq p6,p7 = r28,loc6;; - -(p7) movl loc6 = PAL_MC_DYNAMIC_STATE;; -(p7) cmp.eq p6,p7 = r28,loc6;; - -(p7) movl loc6 = PAL_MC_ERROR_INFO;; -(p7) cmp.eq p6,p7 = r28,loc6;; - -(p7) movl loc6 = PAL_MC_RESUME;; -(p7) cmp.eq p6,p7 = r28,loc6 ;; - - mov loc6 = 0x1;; -(p7) dep r2 = loc6,r2,13,1;; // psr.ic = 1 - -// p6 will be true, if it is one of the MCHK calls. There has been lots of debate -// on psr.ic for these values. For now, do not do any thing to psr.ic - - dep r2 = r0,r2,14,1;; // psr.i = 0 - - mov psr.l = r2 - srlz.d // Needs data serailization. - srlz.i // Needs instruction serailization. - -StaticGetPALLocalIP: - mov loc2 = ip;; - add loc2 = ComeBackFromPALCall - StaticGetPALLocalIP,loc2;; - mov b0 = loc2 // return address after Pal call - - mov r29 = in2 - mov r30 = in3 - mov r31 = in4 - mov b5 = in0;; // get the PalProcEntrypt from input - br.sptk b5;; // Take the plunge. - -PalCallStacked: - dep r2 = r0,r2,14,1;; // psr.i = 0 - mov psr.l = r2;; - srlz.d // Needs data serailization. - srlz.i // Needs instruction serailization. - -StackedGetPALLocalIP: - mov out0 = in1 - mov out1 = in2 - mov out2 = in3 - mov out3 = in4 - mov b5 = in0 ;; // get the PalProcEntrypt from input - br.call.dpnt b0 = b5 ;; // Take the plunge. - -ComeBackFromPALCall: - mov psr.l = loc5 ;; - srlz.d // Needs data serailization. - srlz.i // Needs instruction serailization. - - mov b5 = loc3 - mov r2 = loc4 - mov r1 = loc7 - - mov b0 = loc0 - mov ar.pfs = loc1;; - br.ret.dpnt b0;; - -.endp AsmPalCall -