[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <479A7269.1060007@zytor.com>
Date: Fri, 25 Jan 2008 15:36:09 -0800
From: "H. Peter Anvin" <hpa@...or.com>
To: Pavel Machek <pavel@....cz>
CC: kernel list <linux-kernel@...r.kernel.org>,
Linux-pm mailing list <linux-pm@...ts.osdl.org>,
"Rafael J. Wysocki" <rjw@...k.pl>
Subject: Re: factor out common s2ram wakeup code
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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists