Home | History | Annotate | Download | only in IA32
      1 ;; @file
      2 ;   This is the assembly code for transferring to control to OS S3 waking vector
      3 ;   for IA32 platform
      4 ;
      5 ; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
      6 ;
      7 ; This program and the accompanying materials
      8 ; are licensed and made available under the terms and conditions of the BSD License
      9 ; which accompanies this distribution.  The full text of the license may be found at
     10 ; http://opensource.org/licenses/bsd-license.php
     11 ;
     12 ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     13 ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     14 ;
     15 ;;
     16     SECTION .text
     17 
     18 global ASM_PFX(AsmFixAddress16)
     19 global ASM_PFX(AsmJmpAddr32)
     20 
     21 ;-----------------------------------------
     22 ;VOID
     23 ;AsmTransferControl (
     24 ;  IN   UINT32           S3WakingVector,
     25 ;  IN   UINT32           AcpiLowMemoryBase
     26 ;  );
     27 ;-----------------------------------------
     28 
     29 global ASM_PFX(AsmTransferControl)
     30 ASM_PFX(AsmTransferControl):
     31     ; S3WakingVector    :DWORD
     32     ; AcpiLowMemoryBase :DWORD
     33     push  ebp
     34     mov   ebp, esp
     35     lea   eax, [.0]
     36     push  0x28               ; CS
     37     push  eax
     38     mov   ecx, [ebp + 8]
     39     shrd  ebx, ecx, 20
     40     and   ecx, 0xf
     41     mov   bx, cx
     42     mov   [@jmp_addr + 1], ebx
     43     retf
     44 
     45 BITS 16
     46 .0:
     47     mov   ax, 0x30
     48 o32 mov   ds, eax
     49 o32 mov   es, eax
     50 o32 mov   fs, eax
     51 o32 mov   gs, eax
     52 o32 mov   ss, eax
     53     mov   eax, cr0          ; Get control register 0
     54     and   eax, 0x0fffffffe  ; Clear PE bit (bit #0)
     55     mov   cr0, eax          ; Activate real mode
     56 @jmp_addr:
     57     jmp  0x0:0x0
     58 
     59 global ASM_PFX(AsmTransferControl32)
     60 ASM_PFX(AsmTransferControl32):
     61   jmp ASM_PFX(AsmTransferControl)
     62 
     63 ; dummy
     64 global ASM_PFX(AsmTransferControl16)
     65 ASM_PFX(AsmTransferControl16):
     66 ASM_PFX(AsmFixAddress16): DD 0
     67 ASM_PFX(AsmJmpAddr32): DD 0
     68 
     69