dfu: Extract common DFU code to handle "dfu_alt_info" environment variable
authorLukasz Majewski <l.majewski@samsung.com>
Wed, 11 Sep 2013 12:53:35 +0000 (14:53 +0200)
committerMarek Vasut <marex@denx.de>
Tue, 24 Sep 2013 15:51:35 +0000 (17:51 +0200)
New dfu_init_env_entities() function has been extracted from cmd_dfu.c and
stored at dfu core.

This is a dfu centric code, so it shall be processed in the core.

Change-Id: I756c5de922fa31399d8804eaadc004ee98844ec2
Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Tested-by: Heiko Schocher <hs@denx.de>
common/cmd_dfu.c
drivers/dfu/dfu.c
include/dfu.h

index 793c42212369a85d11047d7315e0f386e77c0e05..d3658cf7ee93cc39e3d64951ab586f6b64a81f53 100644 (file)
 
 static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       const char *str_env;
        char *s = "dfu";
        int ret, i = 0;
-       char *env_bkp;
 
        if (argc < 3)
                return CMD_RET_USAGE;
 
-       str_env = getenv("dfu_alt_info");
-       if (str_env == NULL) {
-               printf("%s: \"dfu_alt_info\" env variable not defined!\n",
-                      __func__);
-               return CMD_RET_FAILURE;
-       }
-
-       env_bkp = strdup(str_env);
-       ret = dfu_config_entities(env_bkp, argv[1],
-                           (int)simple_strtoul(argv[2], NULL, 10));
+       ret = dfu_init_env_entities(argv[1], simple_strtoul(argv[2], NULL, 10));
        if (ret)
-               return CMD_RET_FAILURE;
+               return ret;
 
        if (argc > 3 && strcmp(argv[3], "list") == 0) {
                dfu_show_entities();
@@ -67,7 +56,6 @@ exit:
        g_dnl_unregister();
 done:
        dfu_free_entities();
-       free(env_bkp);
 
        if (dfu_reset())
                run_command("reset", 0);
index 2f1e2afa199ab53c77d04cb05cc6bfb62fd47493..689f5dbdedad673c48734d7abe798d8800471d25 100644 (file)
@@ -41,6 +41,29 @@ static int dfu_find_alt_num(const char *s)
        return ++i;
 }
 
+int dfu_init_env_entities(char *interface, int dev)
+{
+       const char *str_env;
+       char *env_bkp;
+       int ret;
+
+       str_env = getenv("dfu_alt_info");
+       if (!str_env) {
+               error("\"dfu_alt_info\" env variable not defined!\n");
+               return -EINVAL;
+       }
+
+       env_bkp = strdup(str_env);
+       ret = dfu_config_entities(env_bkp, interface, dev);
+       if (ret) {
+               error("DFU entities configuration failed!\n");
+               return ret;
+       }
+
+       free(env_bkp);
+       return 0;
+}
+
 static unsigned char *dfu_buf;
 static unsigned long dfu_buf_size = CONFIG_SYS_DFU_DATA_BUF_SIZE;
 
index 7779710aafc9e97f49a76a57e14f2dd3eb8d1252..392cef126e28cde65c5301c1092f7f6faf2af1cd 100644 (file)
@@ -113,6 +113,7 @@ struct dfu_entity *dfu_get_entity(int alt);
 char *dfu_extract_token(char** e, int *n);
 void dfu_trigger_reset(void);
 bool dfu_reset(void);
+int dfu_init_env_entities(char *interface, int dev);
 
 int dfu_read(struct dfu_entity *de, void *buf, int size, int blk_seq_num);
 int dfu_write(struct dfu_entity *de, void *buf, int size, int blk_seq_num);