Add an EdkDxeRuntimeSalLib that provide a SalLib that is safe for runtime use. The EdkDxeSalLib is now a boot service only lib. Move the registration and processing of ExitBootServicesEvents() from the RuntimeLib to the UEFI DriverEntryPointLib in the MdePkg. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2057 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			150 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| //++
 | |
| // 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:
 | |
| //
 | |
| //    EsalLib.s
 | |
| //
 | |
| //  Abstract:
 | |
| //
 | |
| //
 | |
| // Revision History:
 | |
| //
 | |
| //--
 | |
| 
 | |
| .file  "EsalLib.s"
 | |
| 
 | |
| #include  "IpfMacro.i"
 | |
| 
 | |
| //
 | |
| // Exports
 | |
| //
 | |
| .globl GetEsalEntryPoint
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| //++
 | |
| // GetEsalEntryPoint
 | |
| //
 | |
| // Return Esal global and PSR register.
 | |
| //
 | |
| // On Entry :
 | |
| //
 | |
| //
 | |
| // Return Value:
 | |
| //        r8  = EFI_SAL_SUCCESS
 | |
| //        r9  = Physical Plabel
 | |
| //        r10 = Virtual Plabel
 | |
| //        r11 = psr
 | |
| // 
 | |
| // As per static calling conventions. 
 | |
| // 
 | |
| //--
 | |
| //---------------------------------------------------------------------------
 | |
| PROCEDURE_ENTRY (GetEsalEntryPoint)
 | |
| 
 | |
|       NESTED_SETUP (0,8,0,0)
 | |
| 
 | |
| EsalCalcStart:
 | |
|       mov   r8  = ip;;
 | |
|       add   r8  = (EsalEntryPoint - EsalCalcStart), r8;;
 | |
|       mov   r9  = r8;;
 | |
|       add   r10 = 0x10, r8;;
 | |
|       mov   r11 = psr;;
 | |
|       mov   r8  = r0;;
 | |
| 
 | |
|       NESTED_RETURN
 | |
| 
 | |
| PROCEDURE_EXIT (GetEsalEntryPoint)
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| //++
 | |
| // SetEsalPhysicalEntryPoint
 | |
| //
 | |
| // Set the dispatcher entry point
 | |
| //
 | |
| // On Entry:
 | |
| //  in0 = Physical address of Esal Dispatcher
 | |
| //  in1 = Physical GP
 | |
| //
 | |
| // Return Value: 
 | |
| //   r8 = EFI_SAL_SUCCESS
 | |
| // 
 | |
| // As per static calling conventions. 
 | |
| // 
 | |
| //--
 | |
| //---------------------------------------------------------------------------
 | |
| PROCEDURE_ENTRY (SetEsalPhysicalEntryPoint)
 | |
| 
 | |
|       NESTED_SETUP (2,8,0,0)
 | |
| 
 | |
| EsalCalcStart1:
 | |
|       mov   r8   = ip;;
 | |
|       add   r8   = (EsalEntryPoint - EsalCalcStart1), r8;;
 | |
|       st8   [r8] = in0;;
 | |
|       add   r8   = 0x08, r8;;
 | |
|       st8   [r8] = in1;;
 | |
|       mov   r8   = r0;;
 | |
| 
 | |
|       NESTED_RETURN
 | |
| 
 | |
| PROCEDURE_EXIT (SetEsalPhysicalEntryPoint)
 | |
| 
 | |
| 
 | |
| //-----------------------------------------------------------------------------
 | |
| //++
 | |
| // SetEsalVirtualEntryPoint
 | |
| //
 | |
| // Register physical address of Esal globals.
 | |
| //
 | |
| // On Entry :
 | |
| //  in0 = Virtual address of Esal Dispatcher
 | |
| //  in1 = Virtual GP
 | |
| //
 | |
| // Return Value: 
 | |
| //  r8 = EFI_SAL_ERROR
 | |
| // 
 | |
| // As per static calling conventions. 
 | |
| // 
 | |
| //--
 | |
| //---------------------------------------------------------------------------
 | |
| PROCEDURE_ENTRY (SetEsalVirtualEntryPoint)
 | |
| 
 | |
|       NESTED_SETUP (2,8,0,0)
 | |
| 
 | |
| EsalCalcStart2:
 | |
|       mov   r8   = ip;;
 | |
|       add   r8   = (EsalEntryPoint - EsalCalcStart2), r8;;
 | |
|       add   r8   = 0x10, r8;;
 | |
|       st8   [r8] = in0;;
 | |
|       add   r8   = 0x08, r8;;
 | |
|       st8   [r8] = in1;;
 | |
|       mov   r8   = r0;;
 | |
| 
 | |
|       NESTED_RETURN
 | |
| 
 | |
| PROCEDURE_EXIT (SetEsalVirtualEntryPoint)
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| .align 32
 | |
| EsalEntryPoint: 
 | |
|     data8 0   // Physical Entry
 | |
|     data8 0   //         GP
 | |
|     data8 0   // Virtual Entry
 | |
|     data8 0   //         GP
 | |
| 
 | |
| 
 |