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 .586P 17 .model flat,C 18 .code 19 20 PUBLIC AsmFixAddress16 21 PUBLIC AsmJmpAddr32 22 23 ;----------------------------------------- 24 ;VOID 25 ;AsmTransferControl ( 26 ; IN UINT32 S3WakingVector, 27 ; IN UINT32 AcpiLowMemoryBase 28 ; ); 29 ;----------------------------------------- 30 31 AsmTransferControl PROC 32 ; S3WakingVector :DWORD 33 ; AcpiLowMemoryBase :DWORD 34 push ebp 35 mov ebp, esp 36 lea eax, @F 37 push 28h ; CS 38 push eax 39 mov ecx, [ebp + 8] 40 shrd ebx, ecx, 20 41 and ecx, 0fh 42 mov bx, cx 43 mov [@jmp_addr], ebx 44 retf 45 @@: 46 DB 0b8h, 30h, 0 ; mov ax, 30h as selector 47 mov ds, ax 48 mov es, ax 49 mov fs, ax 50 mov gs, ax 51 mov ss, ax 52 mov eax, cr0 ; Get control register 0 53 DB 66h 54 DB 83h, 0e0h, 0feh ; and eax, 0fffffffeh ; Clear PE bit (bit #0) 55 DB 0fh, 22h, 0c0h ; mov cr0, eax ; Activate real mode 56 DB 0eah ; jmp far @jmp_addr 57 @jmp_addr DD ? 58 59 AsmTransferControl ENDP 60 61 AsmTransferControl32 PROC 62 jmp AsmTransferControl 63 AsmTransferControl32 ENDP 64 65 ; dummy 66 AsmTransferControl16 PROC 67 AsmFixAddress16 DD ? 68 AsmJmpAddr32 DD ? 69 AsmTransferControl16 ENDP 70 71 END