x86/asm/32: Add ENDs to some functions and relabel with SYM_CODE_*
[linux-2.6-block.git] / arch / x86 / kernel / acpi / wakeup_32.S
CommitLineData
767a67b0 1/* SPDX-License-Identifier: GPL-2.0-only */
ec7fd344 2 .text
1da177e4
LT
3#include <linux/linkage.h>
4#include <asm/segment.h>
0341c14d 5#include <asm/page_types.h>
1da177e4 6
767a67b0 7# Copyright 2003, 2008 Pavel Machek <pavel@suse.cz
1da177e4 8
1da177e4
LT
9 .code32
10 ALIGN
11
78762b0e 12SYM_CODE_START(wakeup_pmode_return)
1da177e4
LT
13 movw $__KERNEL_DS, %ax
14 movw %ax, %ss
1da177e4
LT
15 movw %ax, %fs
16 movw %ax, %gs
1da177e4 17
ffa64eff
IM
18 movw $__USER_DS, %ax
19 movw %ax, %ds
20 movw %ax, %es
21
1da177e4 22 # reload the gdt, as we need the full 32 bit address
1da177e4
LT
23 lidt saved_idt
24 lldt saved_ldt
e44b7b75 25 ljmp $(__KERNEL_CS), $1f
1da177e4
LT
261:
27 movl %cr3, %eax
28 movl %eax, %cr3
29 wbinvd
30
31 # and restore the stack ... but you need gdt for this to work
32 movl saved_context_esp, %esp
33
34 movl %cs:saved_magic, %eax
35 cmpl $0x12345678, %eax
36 jne bogus_magic
37
38 # jump to place where we left off
e44b7b75 39 movl saved_eip, %eax
1da177e4 40 jmp *%eax
78762b0e 41SYM_CODE_END(wakeup_pmode_return)
1da177e4
LT
42
43bogus_magic:
1da177e4
LT
44 jmp bogus_magic
45
46
1da177e4 47
e44b7b75 48save_registers:
1da177e4
LT
49 sidt saved_idt
50 sldt saved_ldt
51 str saved_tss
52
1da177e4
LT
53 leal 4(%esp), %eax
54 movl %eax, saved_context_esp
e44b7b75
PM
55 movl %ebx, saved_context_ebx
56 movl %ebp, saved_context_ebp
57 movl %esi, saved_context_esi
58 movl %edi, saved_context_edi
59 pushfl
60 popl saved_context_eflags
61
62 movl $ret_point, saved_eip
1da177e4
LT
63 ret
64
65
66restore_registers:
e44b7b75
PM
67 movl saved_context_ebp, %ebp
68 movl saved_context_ebx, %ebx
69 movl saved_context_esi, %esi
70 movl saved_context_edi, %edi
71 pushl saved_context_eflags
72 popfl
73 ret
1da177e4 74
78762b0e 75SYM_CODE_START(do_suspend_lowlevel)
1da177e4
LT
76 call save_processor_state
77 call save_registers
3b6961ba 78 pushl $3
40bce100 79 call x86_acpi_enter_sleep_state
3b6961ba 80 addl $4, %esp
4e6e6504
WM
81
82# In case of S3 failure, we'll emerge here. Jump
83# to ret_point to recover
84 jmp ret_point
1da177e4
LT
85 .p2align 4,,7
86ret_point:
87 call restore_registers
88 call restore_processor_state
89 ret
78762b0e 90SYM_CODE_END(do_suspend_lowlevel)
1da177e4 91
daacf8bc 92.data
1da177e4 93ALIGN
37503f73 94SYM_DATA(saved_magic, .long 0)
5a064d39 95saved_eip: .long 0
daacf8bc 96
1da177e4 97# saved registers
1da177e4
LT
98saved_idt: .long 0,0
99saved_ldt: .long 0
100saved_tss: .long 0
101