123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- ;; @file
- ; This is the assembly code for transferring to control to OS S3 waking vector
- ; for IA32 platform
- ;
- ; Copyright (c) 2013-2015 Intel Corporation.
- ;
- ; SPDX-License-Identifier: BSD-2-Clause-Patent
- .586P
- .model flat,C
- .code
- ;-----------------------------------------
- ;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
- END
|