Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: rsun3 Reviewed-by: jyao1 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12225 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| ## @file
 | |
| #
 | |
| # Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
 | |
| #
 | |
| # 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.
 | |
| #
 | |
| ##
 | |
| 
 | |
| #-----------------------------------------
 | |
| #VOID
 | |
| #AsmTransferControl (
 | |
| #  IN   UINT32           S3WakingVector,
 | |
| #  IN   UINT32           AcpiLowMemoryBase
 | |
| #  );
 | |
| #-----------------------------------------
 | |
| 
 | |
| ASM_GLOBAL ASM_PFX(AsmTransferControl)
 | |
| ASM_PFX(AsmTransferControl):
 | |
|     # S3WakingVector    :DWORD
 | |
|     # AcpiLowMemoryBase :DWORD
 | |
|     pushl %ebp
 | |
|     movl  %esp,%ebp
 | |
|     leal  LABLE, %eax
 | |
|     pushl $0x28             # CS
 | |
|     pushl %eax
 | |
|     movl  8(%ebp),%ecx
 | |
|     shrdl $20,%ecx,%ebx
 | |
|     andl  $0xf,%ecx
 | |
|     movw  %cx,%bx
 | |
|     movl  %ebx, jmp_addr
 | |
|     lret
 | |
| LABLE: 
 | |
|     .byte 0xb8,0x30,0       # mov ax, 30h as selector
 | |
|     movw  %ax,%ds
 | |
|     movw  %ax,%es
 | |
|     movw  %ax,%fs
 | |
|     movw  %ax,%gs
 | |
|     movw  %ax,%ss
 | |
|     movl  %cr0, %eax        # Get control register 0  
 | |
|     .byte 0x66
 | |
|     .byte 0x83,0xe0,0xfe    # and    eax, 0fffffffeh  ; Clear PE bit (bit #0)
 | |
|     .byte 0xf,0x22,0xc0     # mov    cr0, eax         ; Activate real mode
 | |
|     .byte 0xea              # jmp far @jmp_addr
 | |
| jmp_addr: 
 | |
|     .long    0
 | |
| 
 | |
| ASM_GLOBAL ASM_PFX(AsmTransferControl32)
 | |
| ASM_PFX(AsmTransferControl32):
 | |
|     jmp ASM_PFX(AsmTransferControl)
 | |
| 
 | |
| # dummy
 | |
| ASM_GLOBAL ASM_PFX(AsmTransferControl16)
 | |
| ASM_PFX(AsmTransferControl16):
 | |
| ASM_GLOBAL ASM_PFX(AsmFixAddress16)
 | |
| ASM_PFX(AsmFixAddress16):
 | |
|     .long    0
 | |
| ASM_GLOBAL ASM_PFX(AsmJmpAddr32)
 | |
| ASM_PFX(AsmJmpAddr32):
 | |
|     .long    0
 | |
| 
 |