|
@@ -13,6 +13,21 @@
|
|
|
# cs = 0x1234, eip = 0x05
|
|
|
#
|
|
|
|
|
|
+#define BEEP \
|
|
|
+ inb $97, %al; \
|
|
|
+ outb %al, $0x80; \
|
|
|
+ movb $3, %al; \
|
|
|
+ outb %al, $97; \
|
|
|
+ outb %al, $0x80; \
|
|
|
+ movb $-74, %al; \
|
|
|
+ outb %al, $67; \
|
|
|
+ outb %al, $0x80; \
|
|
|
+ movb $-119, %al; \
|
|
|
+ outb %al, $66; \
|
|
|
+ outb %al, $0x80; \
|
|
|
+ movb $15, %al; \
|
|
|
+ outb %al, $66;
|
|
|
+
|
|
|
ALIGN
|
|
|
.align 4096
|
|
|
ENTRY(wakeup_start)
|
|
@@ -31,6 +46,11 @@ wakeup_code:
|
|
|
movw %cs, %ax
|
|
|
movw %ax, %ds # Make ds:0 point to wakeup_start
|
|
|
movw %ax, %ss
|
|
|
+
|
|
|
+ testl $1, beep_flags - wakeup_code
|
|
|
+ jz 1f
|
|
|
+ BEEP
|
|
|
+1:
|
|
|
mov $(wakeup_stack - wakeup_code), %sp # Private stack is needed for ASUS board
|
|
|
movw $0x0e00 + 'S', %fs:(0x12)
|
|
|
|
|
@@ -88,6 +108,10 @@ wakeup_code:
|
|
|
cmpl $0x12345678, %eax
|
|
|
jne bogus_real_magic
|
|
|
|
|
|
+ testl $2, beep_flags - wakeup_code
|
|
|
+ jz 1f
|
|
|
+ BEEP
|
|
|
+1:
|
|
|
ljmpl $__KERNEL_CS,$wakeup_pmode_return
|
|
|
|
|
|
real_save_gdt: .word 0
|
|
@@ -98,6 +122,7 @@ real_save_cr4: .long 0
|
|
|
real_magic: .long 0
|
|
|
video_mode: .long 0
|
|
|
video_flags: .long 0
|
|
|
+beep_flags: .long 0
|
|
|
real_efer_save_restore: .long 0
|
|
|
real_save_efer_edx: .long 0
|
|
|
real_save_efer_eax: .long 0
|
|
@@ -262,6 +287,8 @@ ENTRY(acpi_copy_wakeup_routine)
|
|
|
movl %edx, video_mode - wakeup_start (%eax)
|
|
|
movl acpi_video_flags, %edx
|
|
|
movl %edx, video_flags - wakeup_start (%eax)
|
|
|
+ movl s2ram_beep, %edx
|
|
|
+ movl %edx, beep_flags - wakeup_start (%eax)
|
|
|
movl $0x12345678, real_magic - wakeup_start (%eax)
|
|
|
movl $0x12345678, saved_magic
|
|
|
popl %ebx
|