Make resetting the video BIOS in the ACPI wakecode optional. It can be
configured via sysctl machdep.acpi_vbios_reset. Defaults to 1 -- reset vbios on resume.
This commit is contained in:
parent
5fea743b13
commit
93305d7b62
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: acpi_wakecode.S,v 1.7 2006/06/17 17:11:53 jmcneill Exp $ */
|
/* $NetBSD: acpi_wakecode.S,v 1.8 2006/06/20 22:36:58 jmcneill Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
||||||
@ -96,16 +96,18 @@ wakeup_16:
|
|||||||
|
|
||||||
call beepon
|
call beepon
|
||||||
|
|
||||||
/* The following needs to be configurable */
|
/* Only reset the VBIOS if machdep.acpi_vbios_reset=1 */
|
||||||
/*#ifdef notyet*/
|
cmpb $1,vbios_reset
|
||||||
|
jne novbiosreset
|
||||||
|
|
||||||
/* Kick the VBIOS. */
|
/* Kick the VBIOS. */
|
||||||
lcall $0xc000,$3
|
lcall $0xc000,$3
|
||||||
|
|
||||||
movw %cs,%ax
|
movw %cs,%ax
|
||||||
movw %ax,%ds
|
movw %ax,%ds
|
||||||
movw %ax,%ss
|
movw %ax,%ss
|
||||||
|
novbiosreset:
|
||||||
|
|
||||||
/*#endif*/
|
|
||||||
call beepoff
|
call beepoff
|
||||||
|
|
||||||
/* Get physical address of the code */
|
/* Get physical address of the code */
|
||||||
@ -251,3 +253,4 @@ previous_fs: .word 0
|
|||||||
previous_gs: .word 0
|
previous_gs: .word 0
|
||||||
previous_ss: .word 0
|
previous_ss: .word 0
|
||||||
where_to_recover: .long 0
|
where_to_recover: .long 0
|
||||||
|
vbios_reset: .byte 0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: acpi_wakeup.c,v 1.26 2006/06/19 02:33:19 jmcneill Exp $ */
|
/* $NetBSD: acpi_wakeup.c,v 1.27 2006/06/20 22:36:58 jmcneill Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
* Copyright (c) 2002 The NetBSD Foundation, Inc.
|
||||||
@ -37,7 +37,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.26 2006/06/19 02:33:19 jmcneill Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.27 2006/06/20 22:36:58 jmcneill Exp $");
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2001 Takanori Watanabe <takawata@jp.freebsd.org>
|
* Copyright (c) 2001 Takanori Watanabe <takawata@jp.freebsd.org>
|
||||||
@ -73,6 +73,7 @@ __KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.26 2006/06/19 02:33:19 jmcneill Ex
|
|||||||
#include <sys/kernel.h>
|
#include <sys/kernel.h>
|
||||||
#include <machine/bus.h>
|
#include <machine/bus.h>
|
||||||
#include <sys/proc.h>
|
#include <sys/proc.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
#include <uvm/uvm_extern.h>
|
#include <uvm/uvm_extern.h>
|
||||||
#include <uvm/uvm_page.h>
|
#include <uvm/uvm_page.h>
|
||||||
@ -98,6 +99,10 @@ __KERNEL_RCSID(0, "$NetBSD: acpi_wakeup.c,v 1.26 2006/06/19 02:33:19 jmcneill Ex
|
|||||||
|
|
||||||
|
|
||||||
static paddr_t phys_wakeup = 0;
|
static paddr_t phys_wakeup = 0;
|
||||||
|
static int acpi_md_node = CTL_EOL;
|
||||||
|
static int acpi_md_vbios_reset = 1;
|
||||||
|
|
||||||
|
static int sysctl_md_acpi_vbios_reset(SYSCTLFN_ARGS);
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
acpi_md_get_npages_of_wakecode(void)
|
acpi_md_get_npages_of_wakecode(void)
|
||||||
@ -357,6 +362,8 @@ acpi_md_sleep(int state)
|
|||||||
p_gdt->rd_limit = r_gdt.rd_limit;
|
p_gdt->rd_limit = r_gdt.rd_limit;
|
||||||
p_gdt->rd_base = vtophys(r_gdt.rd_base);
|
p_gdt->rd_base = vtophys(r_gdt.rd_base);
|
||||||
|
|
||||||
|
WAKECODE_FIXUP(vbios_reset, uint8_t, acpi_md_vbios_reset);
|
||||||
|
|
||||||
WAKECODE_FIXUP(previous_cr0, uint32_t, r_cr0);
|
WAKECODE_FIXUP(previous_cr0, uint32_t, r_cr0);
|
||||||
WAKECODE_FIXUP(previous_cr2, uint32_t, r_cr2);
|
WAKECODE_FIXUP(previous_cr2, uint32_t, r_cr2);
|
||||||
WAKECODE_FIXUP(previous_cr4, uint32_t, r_cr4);
|
WAKECODE_FIXUP(previous_cr4, uint32_t, r_cr4);
|
||||||
@ -458,3 +465,41 @@ out:
|
|||||||
#undef WAKECODE_FIXUP
|
#undef WAKECODE_FIXUP
|
||||||
#undef WAKECODE_BCOPY
|
#undef WAKECODE_BCOPY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SYSCTL_SETUP(sysctl_md_acpi_setup, "acpi i386 sysctl setup")
|
||||||
|
{
|
||||||
|
const struct sysctlnode *node;
|
||||||
|
const struct sysctlnode *ssnode;
|
||||||
|
|
||||||
|
if (sysctl_createv(NULL, 0, NULL, &node, CTLFLAG_PERMANENT,
|
||||||
|
CTLTYPE_NODE, "machdep", NULL, NULL, 0, NULL, 0, CTL_MACHDEP,
|
||||||
|
CTL_EOL) != 0)
|
||||||
|
return;
|
||||||
|
if (sysctl_createv(NULL, 0, &node, &ssnode, CTLFLAG_READWRITE,
|
||||||
|
CTLTYPE_INT, "acpi_vbios_reset", NULL, sysctl_md_acpi_vbios_reset,
|
||||||
|
0, NULL, 0, CTL_CREATE, CTL_EOL) != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
acpi_md_node = node->sysctl_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
sysctl_md_acpi_vbios_reset(SYSCTLFN_ARGS)
|
||||||
|
{
|
||||||
|
int error, t;
|
||||||
|
struct sysctlnode node;
|
||||||
|
|
||||||
|
node = *rnode;
|
||||||
|
t = acpi_md_vbios_reset;
|
||||||
|
node.sysctl_data = &t;
|
||||||
|
error = sysctl_lookup(SYSCTLFN_CALL(&node));
|
||||||
|
if (error || newp == NULL)
|
||||||
|
return error;
|
||||||
|
|
||||||
|
if (t < 0 || t > 1)
|
||||||
|
return EINVAL;
|
||||||
|
|
||||||
|
acpi_md_vbios_reset = t;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user