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