diff mbox

s3: add a "s3-hybrid" option to enable hybrid sleep for s3

Message ID 1395636793-26952-1-git-send-email-alex.hung@canonical.com
State Accepted
Headers show

Commit Message

Alex Hung March 24, 2014, 4:53 a.m. UTC
Signed-off-by: Alex Hung <alex.hung@canonical.com>
---
 src/acpi/s3/s3.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

Comments

Colin Ian King March 24, 2014, 9:19 a.m. UTC | #1
On 24/03/14 04:53, Alex Hung wrote:
> Signed-off-by: Alex Hung <alex.hung@canonical.com>
> ---
>  src/acpi/s3/s3.c | 21 ++++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
> index 6e1b4e4..e5b6ef1 100644
> --- a/src/acpi/s3/s3.c
> +++ b/src/acpi/s3/s3.c
> @@ -29,9 +29,10 @@
>  #include <unistd.h>
>  #include <time.h>
>  
> -#define PM_SUSPEND 	"pm-suspend"
> -#define FWTS_SUSPEND	"FWTS_SUSPEND"
> -#define FWTS_RESUME	"FWTS_RESUME"
> +#define PM_SUSPEND 		"pm-suspend"
> +#define PM_SUSPEND_HYBRID 	"pm-suspend-hybrid"
> +#define FWTS_SUSPEND		"FWTS_SUSPEND"
> +#define FWTS_RESUME		"FWTS_RESUME"
>  
>  static int  s3_multiple = 1;		/* number of s3 multiple tests to run */
>  static int  s3_min_delay = 0;		/* min time between resume and next suspend */
> @@ -44,6 +45,7 @@ static int  s3_device_check_delay = 15;	/* Time to sleep after waking up and the
>  static bool s3_min_max_delay = false;
>  static float s3_suspend_time = 15.0;	/* Maximum allowed suspend time */
>  static float s3_resume_time = 15.0;	/* Maximum allowed resume time */
> +static bool s3_hybrid = false;
>  
>  static int s3_init(fwts_framework *fw)
>  {
> @@ -78,8 +80,13 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>  		fwts_hwinfo_get(fw, &hwinfo1);
>  
>  	/* Format up pm-suspend command with optional quirking arguments */
> -	if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
> -		return FWTS_OUT_OF_MEMORY;
> +	if (s3_hybrid) {
> +		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND_HYBRID)) == NULL)
> +			return FWTS_OUT_OF_MEMORY;
> +	} else {
> +		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
> +			return FWTS_OUT_OF_MEMORY;
> +	}
>  
>  	if (s3_quirks) {
>  		if ((command = fwts_realloc_strcat(command, " ")) == NULL)
> @@ -494,6 +501,9 @@ static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[],
>  		case 9:
>  			s3_resume_time = atof(optarg);
>  			break;
> +		case 10:
> +			s3_hybrid = true;
> +			break;
>  		}
>  	}
>  	return FWTS_OK;
> @@ -510,6 +520,7 @@ static fwts_option s3_options[] = {
>  	{ "s3-device-check-delay", "", 1, "Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20" },
>  	{ "s3-suspend-time",	"", 1, "Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5" },
>  	{ "s3-resume-time", 	"", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" },
> +	{ "s3-hybrid",		"", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." },
>  	{ NULL, NULL, 0, NULL }
>  };
>  
> 
Thanks Alex.

Can you also update https://wiki.ubuntu.com/Kernel/Reference/fwts/s3
accordingly.

Acked-by: Colin Ian King <colin.king@canonical.com>
Colin Ian King March 24, 2014, 11:08 a.m. UTC | #2
On 24/03/14 04:53, Alex Hung wrote:
> Signed-off-by: Alex Hung <alex.hung@canonical.com>
> ---
>  src/acpi/s3/s3.c | 21 ++++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
> index 6e1b4e4..e5b6ef1 100644
> --- a/src/acpi/s3/s3.c
> +++ b/src/acpi/s3/s3.c
> @@ -29,9 +29,10 @@
>  #include <unistd.h>
>  #include <time.h>
>  
> -#define PM_SUSPEND 	"pm-suspend"
> -#define FWTS_SUSPEND	"FWTS_SUSPEND"
> -#define FWTS_RESUME	"FWTS_RESUME"
> +#define PM_SUSPEND 		"pm-suspend"
> +#define PM_SUSPEND_HYBRID 	"pm-suspend-hybrid"
> +#define FWTS_SUSPEND		"FWTS_SUSPEND"
> +#define FWTS_RESUME		"FWTS_RESUME"
>  
>  static int  s3_multiple = 1;		/* number of s3 multiple tests to run */
>  static int  s3_min_delay = 0;		/* min time between resume and next suspend */
> @@ -44,6 +45,7 @@ static int  s3_device_check_delay = 15;	/* Time to sleep after waking up and the
>  static bool s3_min_max_delay = false;
>  static float s3_suspend_time = 15.0;	/* Maximum allowed suspend time */
>  static float s3_resume_time = 15.0;	/* Maximum allowed resume time */
> +static bool s3_hybrid = false;
>  
>  static int s3_init(fwts_framework *fw)
>  {
> @@ -78,8 +80,13 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>  		fwts_hwinfo_get(fw, &hwinfo1);
>  
>  	/* Format up pm-suspend command with optional quirking arguments */
> -	if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
> -		return FWTS_OUT_OF_MEMORY;
> +	if (s3_hybrid) {
> +		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND_HYBRID)) == NULL)
> +			return FWTS_OUT_OF_MEMORY;
> +	} else {
> +		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
> +			return FWTS_OUT_OF_MEMORY;
> +	}
>  
>  	if (s3_quirks) {
>  		if ((command = fwts_realloc_strcat(command, " ")) == NULL)
> @@ -494,6 +501,9 @@ static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[],
>  		case 9:
>  			s3_resume_time = atof(optarg);
>  			break;
> +		case 10:
> +			s3_hybrid = true;
> +			break;
>  		}
>  	}
>  	return FWTS_OK;
> @@ -510,6 +520,7 @@ static fwts_option s3_options[] = {
>  	{ "s3-device-check-delay", "", 1, "Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20" },
>  	{ "s3-suspend-time",	"", 1, "Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5" },
>  	{ "s3-resume-time", 	"", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" },
> +	{ "s3-hybrid",		"", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." },
>  	{ NULL, NULL, 0, NULL }
>  };
>  
> 

Also the fwts-tests need updating, e.g. arg-help-0001 as you have added
a new --s3-hybrid option
Alex Hung March 24, 2014, 11:27 a.m. UTC | #3
Thanks for reminding. Will do it tomorrow.

Sent from my iPad

> On Mar 24, 2014, at 7:08 PM, Colin Ian King <colin.king@canonical.com> wrote:
> 
>> On 24/03/14 04:53, Alex Hung wrote:
>> Signed-off-by: Alex Hung <alex.hung@canonical.com>
>> ---
>> src/acpi/s3/s3.c | 21 ++++++++++++++++-----
>> 1 file changed, 16 insertions(+), 5 deletions(-)
>> 
>> diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
>> index 6e1b4e4..e5b6ef1 100644
>> --- a/src/acpi/s3/s3.c
>> +++ b/src/acpi/s3/s3.c
>> @@ -29,9 +29,10 @@
>> #include <unistd.h>
>> #include <time.h>
>> 
>> -#define PM_SUSPEND    "pm-suspend"
>> -#define FWTS_SUSPEND    "FWTS_SUSPEND"
>> -#define FWTS_RESUME    "FWTS_RESUME"
>> +#define PM_SUSPEND        "pm-suspend"
>> +#define PM_SUSPEND_HYBRID    "pm-suspend-hybrid"
>> +#define FWTS_SUSPEND        "FWTS_SUSPEND"
>> +#define FWTS_RESUME        "FWTS_RESUME"
>> 
>> static int  s3_multiple = 1;        /* number of s3 multiple tests to run */
>> static int  s3_min_delay = 0;        /* min time between resume and next suspend */
>> @@ -44,6 +45,7 @@ static int  s3_device_check_delay = 15;    /* Time to sleep after waking up and the
>> static bool s3_min_max_delay = false;
>> static float s3_suspend_time = 15.0;    /* Maximum allowed suspend time */
>> static float s3_resume_time = 15.0;    /* Maximum allowed resume time */
>> +static bool s3_hybrid = false;
>> 
>> static int s3_init(fwts_framework *fw)
>> {
>> @@ -78,8 +80,13 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>>        fwts_hwinfo_get(fw, &hwinfo1);
>> 
>>    /* Format up pm-suspend command with optional quirking arguments */
>> -    if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
>> -        return FWTS_OUT_OF_MEMORY;
>> +    if (s3_hybrid) {
>> +        if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND_HYBRID)) == NULL)
>> +            return FWTS_OUT_OF_MEMORY;
>> +    } else {
>> +        if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
>> +            return FWTS_OUT_OF_MEMORY;
>> +    }
>> 
>>    if (s3_quirks) {
>>        if ((command = fwts_realloc_strcat(command, " ")) == NULL)
>> @@ -494,6 +501,9 @@ static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[],
>>        case 9:
>>            s3_resume_time = atof(optarg);
>>            break;
>> +        case 10:
>> +            s3_hybrid = true;
>> +            break;
>>        }
>>    }
>>    return FWTS_OK;
>> @@ -510,6 +520,7 @@ static fwts_option s3_options[] = {
>>    { "s3-device-check-delay", "", 1, "Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20" },
>>    { "s3-suspend-time",    "", 1, "Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5" },
>>    { "s3-resume-time",    "", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" },
>> +    { "s3-hybrid",        "", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." },
>>    { NULL, NULL, 0, NULL }
>> };
> 
> Also the fwts-tests need updating, e.g. arg-help-0001 as you have added
> a new --s3-hybrid option
Ivan Hu March 25, 2014, 1:19 a.m. UTC | #4
On 03/24/2014 12:53 PM, Alex Hung wrote:
> Signed-off-by: Alex Hung <alex.hung@canonical.com>
> ---
>   src/acpi/s3/s3.c | 21 ++++++++++++++++-----
>   1 file changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
> index 6e1b4e4..e5b6ef1 100644
> --- a/src/acpi/s3/s3.c
> +++ b/src/acpi/s3/s3.c
> @@ -29,9 +29,10 @@
>   #include <unistd.h>
>   #include <time.h>
>
> -#define PM_SUSPEND 	"pm-suspend"
> -#define FWTS_SUSPEND	"FWTS_SUSPEND"
> -#define FWTS_RESUME	"FWTS_RESUME"
> +#define PM_SUSPEND 		"pm-suspend"
> +#define PM_SUSPEND_HYBRID 	"pm-suspend-hybrid"
> +#define FWTS_SUSPEND		"FWTS_SUSPEND"
> +#define FWTS_RESUME		"FWTS_RESUME"
>
>   static int  s3_multiple = 1;		/* number of s3 multiple tests to run */
>   static int  s3_min_delay = 0;		/* min time between resume and next suspend */
> @@ -44,6 +45,7 @@ static int  s3_device_check_delay = 15;	/* Time to sleep after waking up and the
>   static bool s3_min_max_delay = false;
>   static float s3_suspend_time = 15.0;	/* Maximum allowed suspend time */
>   static float s3_resume_time = 15.0;	/* Maximum allowed resume time */
> +static bool s3_hybrid = false;
>
>   static int s3_init(fwts_framework *fw)
>   {
> @@ -78,8 +80,13 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>   		fwts_hwinfo_get(fw, &hwinfo1);
>
>   	/* Format up pm-suspend command with optional quirking arguments */
> -	if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
> -		return FWTS_OUT_OF_MEMORY;
> +	if (s3_hybrid) {
> +		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND_HYBRID)) == NULL)
> +			return FWTS_OUT_OF_MEMORY;
> +	} else {
> +		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
> +			return FWTS_OUT_OF_MEMORY;
> +	}
>
>   	if (s3_quirks) {
>   		if ((command = fwts_realloc_strcat(command, " ")) == NULL)
> @@ -494,6 +501,9 @@ static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[],
>   		case 9:
>   			s3_resume_time = atof(optarg);
>   			break;
> +		case 10:
> +			s3_hybrid = true;
> +			break;
>   		}
>   	}
>   	return FWTS_OK;
> @@ -510,6 +520,7 @@ static fwts_option s3_options[] = {
>   	{ "s3-device-check-delay", "", 1, "Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20" },
>   	{ "s3-suspend-time",	"", 1, "Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5" },
>   	{ "s3-resume-time", 	"", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" },
> +	{ "s3-hybrid",		"", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." },
>   	{ NULL, NULL, 0, NULL }
>   };
>
>

Acked-by: Ivan Hu <ivan.hu@canonical.com>
diff mbox

Patch

diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
index 6e1b4e4..e5b6ef1 100644
--- a/src/acpi/s3/s3.c
+++ b/src/acpi/s3/s3.c
@@ -29,9 +29,10 @@ 
 #include <unistd.h>
 #include <time.h>
 
-#define PM_SUSPEND 	"pm-suspend"
-#define FWTS_SUSPEND	"FWTS_SUSPEND"
-#define FWTS_RESUME	"FWTS_RESUME"
+#define PM_SUSPEND 		"pm-suspend"
+#define PM_SUSPEND_HYBRID 	"pm-suspend-hybrid"
+#define FWTS_SUSPEND		"FWTS_SUSPEND"
+#define FWTS_RESUME		"FWTS_RESUME"
 
 static int  s3_multiple = 1;		/* number of s3 multiple tests to run */
 static int  s3_min_delay = 0;		/* min time between resume and next suspend */
@@ -44,6 +45,7 @@  static int  s3_device_check_delay = 15;	/* Time to sleep after waking up and the
 static bool s3_min_max_delay = false;
 static float s3_suspend_time = 15.0;	/* Maximum allowed suspend time */
 static float s3_resume_time = 15.0;	/* Maximum allowed resume time */
+static bool s3_hybrid = false;
 
 static int s3_init(fwts_framework *fw)
 {
@@ -78,8 +80,13 @@  static int s3_do_suspend_resume(fwts_framework *fw,
 		fwts_hwinfo_get(fw, &hwinfo1);
 
 	/* Format up pm-suspend command with optional quirking arguments */
-	if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
-		return FWTS_OUT_OF_MEMORY;
+	if (s3_hybrid) {
+		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND_HYBRID)) == NULL)
+			return FWTS_OUT_OF_MEMORY;
+	} else {
+		if ((command = fwts_realloc_strcat(NULL, PM_SUSPEND)) == NULL)
+			return FWTS_OUT_OF_MEMORY;
+	}
 
 	if (s3_quirks) {
 		if ((command = fwts_realloc_strcat(command, " ")) == NULL)
@@ -494,6 +501,9 @@  static int s3_options_handler(fwts_framework *fw, int argc, char * const argv[],
 		case 9:
 			s3_resume_time = atof(optarg);
 			break;
+		case 10:
+			s3_hybrid = true;
+			break;
 		}
 	}
 	return FWTS_OK;
@@ -510,6 +520,7 @@  static fwts_option s3_options[] = {
 	{ "s3-device-check-delay", "", 1, "Sleep N seconds before we run a device check after waking up from suspend. Default is 15 seconds, e.g. --s3-device-check-delay=20" },
 	{ "s3-suspend-time",	"", 1, "Maximum expected suspend time in seconds, e.g. --s3-suspend-time=3.5" },
 	{ "s3-resume-time", 	"", 1, "Maximum expected resume time in seconds, e.g. --s3-resume-time=5.1" },
+	{ "s3-hybrid",		"", 0, "Run S3 with hybrid sleep, i.e. saving system states as S4 does." },
 	{ NULL, NULL, 0, NULL }
 };