aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/acpi/wakeup_32.S12
-rw-r--r--arch/x86/kernel/acpi/wakeup_64.S32
2 files changed, 1 insertions, 43 deletions
diff --git a/arch/x86/kernel/acpi/wakeup_32.S b/arch/x86/kernel/acpi/wakeup_32.S
index f22ba8534d26..a97313b1270e 100644
--- a/arch/x86/kernel/acpi/wakeup_32.S
+++ b/arch/x86/kernel/acpi/wakeup_32.S
@@ -11,7 +11,7 @@
11# 11#
12# If physical address of wakeup_code is 0x12345, BIOS should call us with 12# If physical address of wakeup_code is 0x12345, BIOS should call us with
13# cs = 0x1234, eip = 0x05 13# cs = 0x1234, eip = 0x05
14# 14#
15 15
16#define BEEP \ 16#define BEEP \
17 inb $97, %al; \ 17 inb $97, %al; \
@@ -52,7 +52,6 @@ wakeup_code:
52 BEEP 52 BEEP
531: 531:
54 mov $(wakeup_stack - wakeup_code), %sp # Private stack is needed for ASUS board 54 mov $(wakeup_stack - wakeup_code), %sp # Private stack is needed for ASUS board
55 movw $0x0e00 + 'S', %fs:(0x12)
56 55
57 pushl $0 # Kill any dangerous flags 56 pushl $0 # Kill any dangerous flags
58 popfl 57 popfl
@@ -90,9 +89,6 @@ wakeup_code:
90 # make sure %cr4 is set correctly (features, etc) 89 # make sure %cr4 is set correctly (features, etc)
91 movl real_save_cr4 - wakeup_code, %eax 90 movl real_save_cr4 - wakeup_code, %eax
92 movl %eax, %cr4 91 movl %eax, %cr4
93 movw $0xb800, %ax
94 movw %ax,%fs
95 movw $0x0e00 + 'i', %fs:(0x12)
96 92
97 # need a gdt -- use lgdtl to force 32-bit operands, in case 93 # need a gdt -- use lgdtl to force 32-bit operands, in case
98 # the GDT is located past 16 megabytes. 94 # the GDT is located past 16 megabytes.
@@ -102,8 +98,6 @@ wakeup_code:
102 movl %eax, %cr0 98 movl %eax, %cr0
103 jmp 1f 99 jmp 1f
1041: 1001:
105 movw $0x0e00 + 'n', %fs:(0x14)
106
107 movl real_magic - wakeup_code, %eax 101 movl real_magic - wakeup_code, %eax
108 cmpl $0x12345678, %eax 102 cmpl $0x12345678, %eax
109 jne bogus_real_magic 103 jne bogus_real_magic
@@ -122,13 +116,11 @@ real_save_cr4: .long 0
122real_magic: .long 0 116real_magic: .long 0
123video_mode: .long 0 117video_mode: .long 0
124realmode_flags: .long 0 118realmode_flags: .long 0
125beep_flags: .long 0
126real_efer_save_restore: .long 0 119real_efer_save_restore: .long 0
127real_save_efer_edx: .long 0 120real_save_efer_edx: .long 0
128real_save_efer_eax: .long 0 121real_save_efer_eax: .long 0
129 122
130bogus_real_magic: 123bogus_real_magic:
131 movw $0x0e00 + 'B', %fs:(0x12)
132 jmp bogus_real_magic 124 jmp bogus_real_magic
133 125
134/* This code uses an extended set of video mode numbers. These include: 126/* This code uses an extended set of video mode numbers. These include:
@@ -194,7 +186,6 @@ wakeup_pmode_return:
194 movw %ax, %es 186 movw %ax, %es
195 movw %ax, %fs 187 movw %ax, %fs
196 movw %ax, %gs 188 movw %ax, %gs
197 movw $0x0e00 + 'u', 0xb8016
198 189
199 # reload the gdt, as we need the full 32 bit address 190 # reload the gdt, as we need the full 32 bit address
200 lgdt saved_gdt 191 lgdt saved_gdt
@@ -218,7 +209,6 @@ wakeup_pmode_return:
218 jmp *%eax 209 jmp *%eax
219 210
220bogus_magic: 211bogus_magic:
221 movw $0x0e00 + 'B', 0xb8018
222 jmp bogus_magic 212 jmp bogus_magic
223 213
224 214
diff --git a/arch/x86/kernel/acpi/wakeup_64.S b/arch/x86/kernel/acpi/wakeup_64.S
index 8b4357e1efe0..55608ec2ed72 100644
--- a/arch/x86/kernel/acpi/wakeup_64.S
+++ b/arch/x86/kernel/acpi/wakeup_64.S
@@ -41,7 +41,6 @@ wakeup_code:
41 41
42# Running in *copy* of this code, somewhere in low 1MB. 42# Running in *copy* of this code, somewhere in low 1MB.
43 43
44 movb $0xa1, %al ; outb %al, $0x80
45 cli 44 cli
46 cld 45 cld
47 # setup data segment 46 # setup data segment
@@ -65,11 +64,6 @@ wakeup_code:
65 cmpl $0x12345678, %eax 64 cmpl $0x12345678, %eax
66 jne bogus_real_magic 65 jne bogus_real_magic
67 66
68 call verify_cpu # Verify the cpu supports long
69 # mode
70 testl %eax, %eax
71 jnz no_longmode
72
73 testl $1, realmode_flags - wakeup_code 67 testl $1, realmode_flags - wakeup_code
74 jz 1f 68 jz 1f
75 lcall $0xc000,$3 69 lcall $0xc000,$3
@@ -84,12 +78,6 @@ wakeup_code:
84 call mode_set 78 call mode_set
851: 791:
86 80
87 movw $0xb800, %ax
88 movw %ax,%fs
89 movw $0x0e00 + 'L', %fs:(0x10)
90
91 movb $0xa2, %al ; outb %al, $0x80
92
93 mov %ds, %ax # Find 32bit wakeup_code addr 81 mov %ds, %ax # Find 32bit wakeup_code addr
94 movzx %ax, %esi # (Convert %ds:gdt to a liner ptr) 82 movzx %ax, %esi # (Convert %ds:gdt to a liner ptr)
95 shll $4, %esi 83 shll $4, %esi
@@ -117,14 +105,10 @@ wakeup_32_vector:
117 .code32 105 .code32
118wakeup_32: 106wakeup_32:
119# Running in this code, but at low address; paging is not yet turned on. 107# Running in this code, but at low address; paging is not yet turned on.
120 movb $0xa5, %al ; outb %al, $0x80
121 108
122 movl $__KERNEL_DS, %eax 109 movl $__KERNEL_DS, %eax
123 movl %eax, %ds 110 movl %eax, %ds
124 111
125 movw $0x0e00 + 'i', %ds:(0xb8012)
126 movb $0xa8, %al ; outb %al, $0x80;
127
128 /* 112 /*
129 * Prepare for entering 64bits mode 113 * Prepare for entering 64bits mode
130 */ 114 */
@@ -200,16 +184,11 @@ wakeup_long64:
200 */ 184 */
201 lgdt cpu_gdt_descr 185 lgdt cpu_gdt_descr
202 186
203 movw $0x0e00 + 'n', %ds:(0xb8014)
204 movb $0xa9, %al ; outb %al, $0x80
205
206 movq saved_magic, %rax 187 movq saved_magic, %rax
207 movq $0x123456789abcdef0, %rdx 188 movq $0x123456789abcdef0, %rdx
208 cmpq %rdx, %rax 189 cmpq %rdx, %rax
209 jne bogus_64_magic 190 jne bogus_64_magic
210 191
211 movw $0x0e00 + 'u', %ds:(0xb8016)
212
213 nop 192 nop
214 nop 193 nop
215 movw $__KERNEL_DS, %ax 194 movw $__KERNEL_DS, %ax
@@ -220,13 +199,11 @@ wakeup_long64:
220 movw %ax, %gs 199 movw %ax, %gs
221 movq saved_rsp, %rsp 200 movq saved_rsp, %rsp
222 201
223 movw $0x0e00 + 'x', %ds:(0xb8018)
224 movq saved_rbx, %rbx 202 movq saved_rbx, %rbx
225 movq saved_rdi, %rdi 203 movq saved_rdi, %rdi
226 movq saved_rsi, %rsi 204 movq saved_rsi, %rsi
227 movq saved_rbp, %rbp 205 movq saved_rbp, %rbp
228 206
229 movw $0x0e00 + '!', %ds:(0xb801a)
230 movq saved_rip, %rax 207 movq saved_rip, %rax
231 jmp *%rax 208 jmp *%rax
232 209
@@ -256,21 +233,12 @@ realmode_flags: .quad 0
256 233
257.code16 234.code16
258bogus_real_magic: 235bogus_real_magic:
259 movb $0xba,%al ; outb %al,$0x80
260 jmp bogus_real_magic 236 jmp bogus_real_magic
261 237
262.code64 238.code64
263bogus_64_magic: 239bogus_64_magic:
264 movb $0xb3,%al ; outb %al,$0x80
265 jmp bogus_64_magic 240 jmp bogus_64_magic
266 241
267.code16
268no_longmode:
269 movb $0xbc,%al ; outb %al,$0x80
270 jmp no_longmode
271
272#include "../verify_cpu_64.S"
273
274/* This code uses an extended set of video mode numbers. These include: 242/* This code uses an extended set of video mode numbers. These include:
275 * Aliases for standard modes 243 * Aliases for standard modes
276 * NORMAL_VGA (-1) 244 * NORMAL_VGA (-1)