vserver 1.9.3
[linux-2.6.git] / arch / i386 / power / swsusp.S
1 .text
2
3 /* Originally gcc generated, modified by hand
4  *
5  * This may not use any stack, nor any variable that is not "NoSave":
6  *
7  * Its rewriting one kernel image with another. What is stack in "old"
8  * image could very well be data page in "new" image, and overwriting
9  * your own stack under you is bad idea.
10  */
11
12 #include <linux/linkage.h>
13 #include <asm/segment.h>
14 #include <asm/page.h>
15
16         .text
17
18 ENTRY(swsusp_arch_suspend)
19
20         movl %esp, saved_context_esp
21         movl %ebx, saved_context_ebx
22         movl %ebp, saved_context_ebp
23         movl %esi, saved_context_esi
24         movl %edi, saved_context_edi
25         pushfl ; popl saved_context_eflags
26
27         call swsusp_save
28         ret
29
30 ENTRY(swsusp_arch_resume)
31         movl $swsusp_pg_dir-__PAGE_OFFSET,%ecx
32         movl %ecx,%cr3
33
34         movl    pagedir_nosave, %ebx
35         xorl    %eax, %eax
36         xorl    %edx, %edx
37         .p2align 4,,7
38
39 copy_loop:
40         movl    4(%ebx,%edx),%edi
41         movl    (%ebx,%edx),%esi
42
43         movl    $1024, %ecx
44         rep
45         movsl
46
47         incl    %eax
48         addl    $16, %edx
49         cmpl    nr_copy_pages,%eax
50         jb copy_loop
51         .p2align 4,,7
52
53         movl saved_context_esp, %esp
54         movl saved_context_ebp, %ebp
55         movl saved_context_ebx, %ebx
56         movl saved_context_esi, %esi
57         movl saved_context_edi, %edi
58
59         pushl saved_context_eflags ; popfl
60         call swsusp_restore
61         ret