Hi,

I think we agree that it would be nice for s2both to have the same
commandline options as s2ram. Well, here is a patch;) A few comments:

The logic I choose for s2both is to continue with suspend-to-disk
in case of an error in the s2ram part. Even if the problem is with cli
options. This is how it was until know...

To minimize duplication, I moved some things around in s2ram. Only
the option string is duplicated now. We could of course do a 
s2ram_get_optstring function...

I changed the short option for s2both/s2disk --config,
which currently is -f to -c, so we can use -f for --force. This of
course breaks stefan his scripts;)

I could add `force' to the flags,
        #define S2RAM_FORCE     0x8000
        flags |= S2RAM_FORCE;

etc. Seems cleaner, but maybe you don't like it...

Index: s2ram.c
===================================================================
RCS file: /cvsroot/suspend/suspend/s2ram.c,v
retrieving revision 1.51
diff -u -r1.51 s2ram.c
--- s2ram.c     16 Mar 2007 15:03:08 -0000      1.51
+++ s2ram.c     27 Mar 2007 12:18:20 -0000
@@ -25,7 +25,7 @@
 static struct pci_dev vga_dev;
 static struct pci_access *pacc;
 /* Flags set from whitelist */
-static int flags, vbe_mode = -1;
+static int flags = 0, force = 0, vbe_mode = -1;
 char bios_version[1024], sys_vendor[1024], sys_product[1024], 
sys_version[1024];
 
 /* return codes for s2ram_prepare */
@@ -229,18 +229,21 @@
        return 0;
 }
 
-int s2ram_prepare(void)
+int s2ram_prepare(void)
 {
-       int ret, id;
+       int ret = 0, id;
 
-       dmi_scan();
-       id = machine_match();
-       ret = s2ram_check(id);
-
-       if (ret)
-               return ret;
+       if (flags && !force) {
+               printf("acpi_sleep, vbe_save, vbe_post and radeontool parameter 
"
+                      "must be used with --force\n\n");
+               return EINVAL;
+       }
 
-       ret = s2ram_hacks();
+       if (!force) {
+               dmi_scan();
+               id = machine_match();
+               ret = s2ram_check(id);
+       }
 
        return ret;
 }
@@ -299,6 +302,33 @@
        }
 }
 
+void s2ram_add_flag(int opt, const char *opt_arg)
+{
+       switch (opt) {
+               case 's':
+                       flags |= VBE_SAVE;
+                       break;
+               case 'p':
+                       flags |= VBE_POST;
+                       break;
+               case 'm':
+                       flags |= VBE_MODE;
+                       break;
+               case 'r':
+                       flags |= RADEON_OFF;
+                       break;
+               case 'a':
+                       flags |= (atoi(optarg) & (S3_BIOS | S3_MODE));
+                       break;
+               case 'v':
+                       flags |= PCI_SAVE;
+                       break;
+               case 'f':
+                       force = 1;
+                       break;
+       }
+}
+
 #ifndef CONFIG_BOTH
 static void usage(void)
 {
@@ -328,7 +358,7 @@
 
 int main(int argc, char *argv[])
 {
-       int i, id = -1, ret = 0, test_mode = 0, force = 0;
+       int i, id = -1, ret = 0, test_mode = 0;
        int active_console = -1;
        struct option options[] = {
                { "test",       no_argument,            NULL, 'n'},
@@ -356,48 +386,27 @@
                case 'n':
                        test_mode = 1;
                        break;
-               case 'f':
-                       force = 1;
-                       break;
-               case 's':
-                       flags |= VBE_SAVE;
-                       break;
-               case 'p':
-                       flags |= VBE_POST;
-                       break;
-               case 'm':
-                       flags |= VBE_MODE;
-                       break;
-               case 'r':
-                       flags |= RADEON_OFF;
-                       break;
-               case 'a':
-                       flags |= (atoi(optarg) & (S3_BIOS | S3_MODE));
-                       break;
-               case 'v':
-                       flags |= PCI_SAVE;
+               case '?':
+                       usage();
                        break;
                default:
-                       usage();
+                       s2ram_add_flag(i,optarg);
                        break;
                }
        }
-       if (flags && !force) {
-               printf("acpi_sleep, vbe_save, vbe_post and radeontool parameter 
"
-                      "must be used with --force\n\n");
-               usage();
-       }
+
        if (force && test_mode) {
                printf("force and test mode do not make sense together.\n\n");
                usage();
        }
 
-       if (!force) {
-               dmi_scan();
-               id = machine_match();
-               ret = s2ram_check(id);
+       if (test_mode) {
+               machine_known(id);
+               goto out;
        }
 
+       ret = s2ram_prepare();
+
        if (ret == S2RAM_UNKNOWN) {
                printf("Machine is unknown.\n");
                identify_machine();
@@ -407,11 +416,6 @@
        if (ret == S2RAM_NOFB)
                printf("This machine can only suspend without framebuffer.\n");
 
-       if (test_mode) {
-               machine_known(id);
-               goto out;
-       }
-
        if (ret)
                goto out;
 
Index: s2ram.h
===================================================================
RCS file: /cvsroot/suspend/suspend/s2ram.h,v
retrieving revision 1.4
diff -u -r1.4 s2ram.h
--- s2ram.h     28 Mar 2006 13:16:21 -0000      1.4
+++ s2ram.h     27 Mar 2007 12:18:20 -0000
@@ -18,3 +18,4 @@
 int s2ram_prepare(void);
 int s2ram_do(void);
 void s2ram_resume(void);
+void s2ram_add_flag(int opt, const char *arg);
Index: suspend.c
===================================================================
RCS file: /cvsroot/suspend/suspend/suspend.c,v
retrieving revision 1.70
diff -u -r1.70 suspend.c
--- suspend.c   16 Mar 2007 16:02:22 -0000      1.70
+++ suspend.c   27 Mar 2007 12:18:21 -0000
@@ -1166,9 +1166,18 @@
 {
        static struct option options[] = {
                { "help",               no_argument,            NULL, 'h'},
-               { "config",             required_argument,      NULL, 'f'},
+               { "config",             required_argument,      NULL, 'c'},
                { "image_size",         required_argument,      NULL, 's'},
                { "resume_offset",      required_argument,      NULL, 'o'},
+#ifdef CONFIG_BOTH
+               { "force",              no_argument,            NULL, 'f'},
+               { "vbe_save",           no_argument,            NULL, 's'},
+               { "vbe_post",           no_argument,            NULL, 'p'},
+               { "vbe_mode",           no_argument,            NULL, 'm'},
+               { "radeontool",         no_argument,            NULL, 'r'},
+               { "acpi_sleep",         required_argument,      NULL, 'a'},
+               { "pci_save",           no_argument,            NULL, 'v'},
+#endif
                { NULL,                 0,                      NULL,  0 }
        };
        int i, error;
@@ -1177,13 +1186,18 @@
        unsigned long long int off = 0;
        int set_size = 0;
        unsigned long int im_size = 0;
+#ifdef CONFIG_BOTH
+       const char *optstring = "hc:s:o:";
+#else
+       const char *optstring = "hc:s:o:fspmra:v";
+#endif
 
-       while ((i = getopt_long(argc, argv, "hf:s:o:", options, NULL)) != -1) {
+       while ((i = getopt_long(argc, argv, optstring, options, NULL)) != -1) {
                switch (i) {
                case 'h':
                        usage("suspend", options);
                        exit(0);
-               case 'f':
+               case 'c':
                        conf_name = optarg;
                        break;
                case 's':
@@ -1194,9 +1208,14 @@
                        off = atoll(optarg);
                        set_off = 1;
                        break;
-               default:
+               case '?':
                        usage("suspend", options);
                        return -EINVAL;
+#ifdef CONFIG_BOTH
+               default:
+                       s2ram_add_flag(i, optarg);
+                       break;
+#endif
                }
        }
        error = parse("suspend", conf_name, PARAM_NO, parameters);
@@ -1385,8 +1404,11 @@
        splash.progress(5);
 
 #ifdef CONFIG_BOTH
-       /* If s2ram_prepare returns != 0, better not try to suspend to RAM */
+       /* If s2ram_prepare or s2ram_hacks returns != 0, better not try to 
+        * suspend to RAM */
        s2ram = !s2ram_prepare();
+       if (s2ram) 
+               s2ram = !s2ram_hacks();
 #endif
 #ifdef CONFIG_ENCRYPT
         if (encrypt && ! use_RSA) {


Attachment: signature.asc
Description: PGP signature

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Suspend-devel mailing list
Suspend-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/suspend-devel

Reply via email to