Skip to content

Commit

Permalink
ACPI: Move module parameter gts and bfs to sleep.c
Browse files Browse the repository at this point in the history
Move linux specific module parameter gts and bfs out of ACPICA core
code to sleep.c.

Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Lin Ming authored and Len Brown committed Mar 27, 2012
1 parent 8a73b17 commit a2ef5c4
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 20 deletions.
13 changes: 0 additions & 13 deletions drivers/acpi/acpica/hwesleep.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,10 @@

#include <acpi/acpi.h>
#include "accommon.h"
#include <linux/module.h>

#define _COMPONENT ACPI_HARDWARE
ACPI_MODULE_NAME("hwesleep")

static unsigned int gts, bfs;
module_param(gts, uint, 0644);
module_param(bfs, uint, 0644);
MODULE_PARM_DESC(gts, "Enable evaluation of _GTS on suspend.");
MODULE_PARM_DESC(bfs, "Enable evaluation of _BFS on resume".);

/*******************************************************************************
*
* FUNCTION: acpi_hw_execute_sleep_method
Expand All @@ -76,12 +69,6 @@ void acpi_hw_execute_sleep_method(char *method_pathname, u32 integer_argument)

ACPI_FUNCTION_TRACE(hw_execute_sleep_method);

if (!ACPI_STRCMP(METHOD_PATHNAME__GTS, method_pathname) && !gts)
return_VOID;

if (!ACPI_STRCMP(METHOD_PATHNAME__BFS, method_pathname) && !bfs)
return_VOID;

/* One argument, integer_argument; No return value expected */

arg_list.count = 1;
Expand Down
38 changes: 31 additions & 7 deletions drivers/acpi/sleep.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <linux/suspend.h>
#include <linux/reboot.h>
#include <linux/acpi.h>
#include <linux/module.h>

#include <asm/io.h>

Expand All @@ -26,6 +27,24 @@
#include "internal.h"
#include "sleep.h"

static unsigned int gts, bfs;
module_param(gts, uint, 0644);
module_param(bfs, uint, 0644);
MODULE_PARM_DESC(gts, "Enable evaluation of _GTS on suspend.");
MODULE_PARM_DESC(bfs, "Enable evaluation of _BFS on resume".);

static u8 wake_sleep_flags(void)
{
u8 flags = ACPI_NO_OPTIONAL_METHODS;

if (gts)
flags |= ACPI_EXECUTE_GTS;
if (bfs)
flags |= ACPI_EXECUTE_BFS;

return flags;
}

static u8 sleep_states[ACPI_S_STATE_COUNT];

static void acpi_sleep_tts_switch(u32 acpi_state)
Expand Down Expand Up @@ -243,15 +262,15 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
{
acpi_status status = AE_OK;
u32 acpi_state = acpi_target_sleep_state;
u8 flags = wake_sleep_flags();
int error;

ACPI_FLUSH_CPU_CACHE();

switch (acpi_state) {
case ACPI_STATE_S1:
barrier();
status = acpi_enter_sleep_state(acpi_state,
ACPI_NO_OPTIONAL_METHODS);
status = acpi_enter_sleep_state(acpi_state, flags);
break;

case ACPI_STATE_S3:
Expand All @@ -266,7 +285,7 @@ static int acpi_suspend_enter(suspend_state_t pm_state)
acpi_write_bit_register(ACPI_BITREG_SCI_ENABLE, 1);

/* Reprogram control registers and execute _BFS */
acpi_leave_sleep_state_prep(acpi_state, ACPI_NO_OPTIONAL_METHODS);
acpi_leave_sleep_state_prep(acpi_state, flags);

/* ACPI 3.0 specs (P62) says that it's the responsibility
* of the OSPM to clear the status bit [ implying that the
Expand Down Expand Up @@ -530,27 +549,30 @@ static int acpi_hibernation_begin(void)

static int acpi_hibernation_enter(void)
{
u8 flags = wake_sleep_flags();
acpi_status status = AE_OK;

ACPI_FLUSH_CPU_CACHE();

/* This shouldn't return. If it returns, we have a problem */
status = acpi_enter_sleep_state(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS);
status = acpi_enter_sleep_state(ACPI_STATE_S4, flags);
/* Reprogram control registers and execute _BFS */
acpi_leave_sleep_state_prep(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS);
acpi_leave_sleep_state_prep(ACPI_STATE_S4, flags);

return ACPI_SUCCESS(status) ? 0 : -EFAULT;
}

static void acpi_hibernation_leave(void)
{
u8 flags = wake_sleep_flags();

/*
* If ACPI is not enabled by the BIOS and the boot kernel, we need to
* enable it here.
*/
acpi_enable();
/* Reprogram control registers and execute _BFS */
acpi_leave_sleep_state_prep(ACPI_STATE_S4, ACPI_NO_OPTIONAL_METHODS);
acpi_leave_sleep_state_prep(ACPI_STATE_S4, flags);
/* Check the hardware signature */
if (facs && s4_hardware_signature != facs->hardware_signature) {
printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
Expand Down Expand Up @@ -771,10 +793,12 @@ static void acpi_power_off_prepare(void)

static void acpi_power_off(void)
{
u8 flags = wake_sleep_flags();

/* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
printk(KERN_DEBUG "%s called\n", __func__);
local_irq_disable();
acpi_enter_sleep_state(ACPI_STATE_S5, ACPI_NO_OPTIONAL_METHODS);
acpi_enter_sleep_state(ACPI_STATE_S5, flags);
}

/*
Expand Down

0 comments on commit a2ef5c4

Please sign in to comment.