Debugger: Enhance Sleep command to execute all sleep states.

This change allows Sleep to be invoked with no arguments. This causes
the debugger to execute all of the sleep states, 0-5, automatically.
This commit is contained in:
Robert Moore 2013-01-09 12:46:47 -08:00
parent 5869690a09
commit 81c20d2886
2 changed files with 89 additions and 20 deletions

View File

@ -154,6 +154,10 @@ AcpiDbDeviceResources (
void *Context,
void **ReturnValue);
static void
AcpiDbDoOneSleepState (
UINT8 SleepState);
/*******************************************************************************
*
@ -217,11 +221,12 @@ AcpiDbConvertToNode (
*
* FUNCTION: AcpiDbSleep
*
* PARAMETERS: ObjectArg - Desired sleep state (0-5)
* PARAMETERS: ObjectArg - Desired sleep state (0-5). NULL means
* invoke all possible sleep states.
*
* RETURN: Status
*
* DESCRIPTION: Simulate a sleep/wake sequence
* DESCRIPTION: Simulate sleep/wake sequences
*
******************************************************************************/
@ -229,60 +234,124 @@ ACPI_STATUS
AcpiDbSleep (
char *ObjectArg)
{
ACPI_STATUS Status;
UINT8 SleepState;
UINT8 i;
UINT8 SleepTypeA;
UINT8 SleepTypeB;
UINT32 i;
ACPI_FUNCTION_TRACE (AcpiDbSleep);
/* Check all possible sleep states */
/* Null input (no arguments) means to invoke all sleep states */
for (i = 0; i < ACPI_S_STATES_MAX; i++)
if (!ObjectArg)
{
Status = AcpiGetSleepTypeData (i, &SleepTypeA, &SleepTypeB);
AcpiOsPrintf ("Invoking all possible sleep states, 0-%d\n",
ACPI_S_STATES_MAX);
for (i = 0; i <= ACPI_S_STATES_MAX; i++)
{
AcpiDbDoOneSleepState ((UINT8) i);
}
return_ACPI_STATUS (AE_OK);
}
SleepState = (UINT8) ACPI_STRTOUL (ObjectArg, NULL, 0);
/* Convert argument to binary and invoke the sleep state */
AcpiOsPrintf ("**** Prepare to sleep ****\n");
SleepState = (UINT8) ACPI_STRTOUL (ObjectArg, NULL, 0);
AcpiDbDoOneSleepState (SleepState);
return_ACPI_STATUS (AE_OK);
}
/*******************************************************************************
*
* FUNCTION: AcpiDbDoOneSleepState
*
* PARAMETERS: SleepState - Desired sleep state (0-5)
*
* RETURN: Status
*
* DESCRIPTION: Simulate a sleep/wake sequence
*
******************************************************************************/
static void
AcpiDbDoOneSleepState (
UINT8 SleepState)
{
ACPI_STATUS Status;
UINT8 SleepTypeA;
UINT8 SleepTypeB;
/* Validate parameter */
if (SleepState > ACPI_S_STATES_MAX)
{
AcpiOsPrintf ("Sleep state %d out of range (%d max)\n",
SleepState, ACPI_S_STATES_MAX);
return;
}
AcpiOsPrintf ("\n---- Invoking sleep state S%d (%s):\n",
SleepState, AcpiGbl_SleepStateNames[SleepState]);
/* Get the values for the sleep type registers (for display only) */
Status = AcpiGetSleepTypeData (SleepState, &SleepTypeA, &SleepTypeB);
if (ACPI_FAILURE (Status))
{
AcpiOsPrintf ("Could not evaluate [%s] method, %s\n",
AcpiGbl_SleepStateNames[SleepState],
AcpiFormatException (Status));
return;
}
AcpiOsPrintf (
"Register values for sleep state S%d: Sleep-A: %.2X, Sleep-B: %.2X\n",
SleepState, SleepTypeA, SleepTypeB);
/* Invoke the various sleep/wake interfaces */
AcpiOsPrintf ("**** Sleep: Prepare to sleep (S%d) ****\n",
SleepState);
Status = AcpiEnterSleepStatePrep (SleepState);
if (ACPI_FAILURE (Status))
{
goto ErrorExit;
}
AcpiOsPrintf ("**** Going to sleep ****\n");
AcpiOsPrintf ("**** Sleep: Going to sleep (S%d) ****\n",
SleepState);
Status = AcpiEnterSleepState (SleepState);
if (ACPI_FAILURE (Status))
{
goto ErrorExit;
}
AcpiOsPrintf ("**** Prepare to return from sleep ****\n");
AcpiOsPrintf ("**** Wake: Prepare to return from sleep (S%d) ****\n",
SleepState);
Status = AcpiLeaveSleepStatePrep (SleepState);
if (ACPI_FAILURE (Status))
{
goto ErrorExit;
}
AcpiOsPrintf ("**** Returning from sleep ****\n");
AcpiOsPrintf ("**** Wake: Return from sleep (S%d) ****\n",
SleepState);
Status = AcpiLeaveSleepState (SleepState);
if (ACPI_FAILURE (Status))
{
goto ErrorExit;
}
return_ACPI_STATUS (Status);
return;
ErrorExit:
ACPI_EXCEPTION ((AE_INFO, Status, "During sleep test"));
return_ACPI_STATUS (Status);
ACPI_EXCEPTION ((AE_INFO, Status, "During invocation of sleep state S%d",
SleepState));
}

View File

@ -282,7 +282,7 @@ static const ACPI_DB_COMMAND_INFO AcpiGbl_DbCommands[] =
{"RESOURCES", 1},
{"RESULTS", 0},
{"SET", 3},
{"SLEEP", 1},
{"SLEEP", 0},
{"STATS", 1},
{"STOP", 0},
{"TABLES", 0},
@ -346,7 +346,7 @@ static const ACPI_DB_COMMAND_HELP AcpiGbl_DbCommandHelp[] =
{1, " References <Addr>", "Find all references to object at addr\n"},
{1, " Resources <DeviceName | *>", "Display Device resources (* = all devices)\n"},
{1, " Set N <NamedObject> <Value>", "Set value for named integer\n"},
{1, " Sleep <SleepState>", "Simulate sleep/wake sequence\n"},
{1, " Sleep [SleepState]", "Simulate sleep/wake sequence(s) (0-5)\n"},
{1, " Template <Object>", "Format/dump a Buffer/ResourceTemplate\n"},
{1, " Terminate", "Delete namespace and all internal objects\n"},
{1, " Type <Object>", "Display object type\n"},