Pavel Machek wrote:
diff --git a/arch/x86/kernel/acpi/rm/wakemain.c b/arch/x86/kernel/acpi/rm/wakemain.c new file mode 100644 index 0000000..d3173cc --- /dev/null +++ b/arch/x86/kernel/acpi/rm/wakemain.c @@ -0,0 +1,18 @@ +#include "wakeup.h" +#include "boot.h" + +extern struct wakeup_header wakeup_header; + +void main(void) +{ + asm volatile("lcallw $0xc000,$3; movw %cs, %ax; movw %ax, %ds; movw %ax, %es; movw %ax, %ss"); + +// asm volatile("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"); + + /* Need to call BIOS */ + probe_cards(0); +// set_mode(wakeup_header.video_mode); + set_mode(6); + + /* Set up GDT and IDT here, possibly CR4 and EFER */ +}
Surely this needs some cleaning up? ;)
diff --git a/arch/x86/kernel/acpi/rm/wakeup.S b/arch/x86/kernel/acpi/rm/wakeup.S new file mode 100644 index 0000000..bfa348c --- /dev/null +++ b/arch/x86/kernel/acpi/rm/wakeup.S @@ -0,0 +1,129 @@ +/* + * ACPI wakeup real mode startup stub + */ +#include <asm/segment.h> +#include <asm/msr-index.h> + + +#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; +
BEEP isn't actually used here and should probably be a C function if needed. Note: in real mode you can also produce a beep by calling int $0x10 with %ax = 0x0e07. Please note that some int $0x10 implementations clobber certain registers... see the INT10 macro in the bootup code.
Seriously cool, though, that you're getting this far. -hpa _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm