## @file # # Copyright (c) 2010, 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. # ## #----------------------------------------- #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