mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-04 13:35:48 +01:00 
			
		
		
		
	NASM doesn't support EXTERNDEF, so convert this to PUBLIC. This will make it easier to convert this code to NASM using an automated script. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Star Zeng <star.zeng@intel.com>
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
;; @file
 | 
						|
;   This is the assembly code for transferring to control to OS S3 waking vector
 | 
						|
;   for IA32 platform
 | 
						|
;
 | 
						|
; Copyright (c) 2006, 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.
 | 
						|
;
 | 
						|
;;
 | 
						|
    .586P
 | 
						|
    .model  flat,C
 | 
						|
    .code
 | 
						|
 | 
						|
PUBLIC   AsmFixAddress16
 | 
						|
PUBLIC   AsmJmpAddr32
 | 
						|
   
 | 
						|
;-----------------------------------------
 | 
						|
;VOID
 | 
						|
;AsmTransferControl (
 | 
						|
;  IN   UINT32           S3WakingVector,
 | 
						|
;  IN   UINT32           AcpiLowMemoryBase
 | 
						|
;  );
 | 
						|
;-----------------------------------------
 | 
						|
   
 | 
						|
AsmTransferControl  PROC
 | 
						|
    ; S3WakingVector    :DWORD
 | 
						|
    ; AcpiLowMemoryBase :DWORD
 | 
						|
    push  ebp
 | 
						|
    mov   ebp, esp    
 | 
						|
    lea   eax, @F
 | 
						|
    push  28h               ; CS
 | 
						|
    push  eax
 | 
						|
    mov   ecx, [ebp + 8]
 | 
						|
    shrd  ebx, ecx, 20
 | 
						|
    and   ecx, 0fh          
 | 
						|
    mov   bx, cx          
 | 
						|
    mov   [@jmp_addr], ebx
 | 
						|
    retf
 | 
						|
@@:
 | 
						|
    DB    0b8h, 30h, 0      ; mov ax, 30h as selector
 | 
						|
    mov   ds, ax
 | 
						|
    mov   es, ax
 | 
						|
    mov   fs, ax
 | 
						|
    mov   gs, ax
 | 
						|
    mov   ss, ax
 | 
						|
    mov   eax, cr0          ; Get control register 0  
 | 
						|
    DB    66h
 | 
						|
    DB    83h, 0e0h, 0feh   ; and    eax, 0fffffffeh  ; Clear PE bit (bit #0)
 | 
						|
    DB    0fh, 22h, 0c0h    ; mov    cr0, eax         ; Activate real mode
 | 
						|
    DB    0eah              ; jmp far @jmp_addr
 | 
						|
@jmp_addr DD  ?
 | 
						|
 | 
						|
AsmTransferControl  ENDP
 | 
						|
 | 
						|
AsmTransferControl32  PROC
 | 
						|
  jmp AsmTransferControl
 | 
						|
AsmTransferControl32  ENDP
 | 
						|
 | 
						|
; dummy
 | 
						|
AsmTransferControl16  PROC
 | 
						|
AsmFixAddress16  DD ?
 | 
						|
AsmJmpAddr32 DD  ?
 | 
						|
AsmTransferControl16  ENDP
 | 
						|
 | 
						|
    END |