dfu: prepare the support of multiple interface
authorPatrick Delaunay <patrick.delaunay@st.com>
Mon, 14 Oct 2019 07:28:01 +0000 (09:28 +0200)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Thu, 31 Oct 2019 11:12:31 +0000 (12:12 +0100)
Split the function dfu_config_entities with 2 new functions
- dfu_alt_init
- dfu_alt_add

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
drivers/dfu/dfu.c
include/dfu.h

index e9db7f8..900a844 100644 (file)
@@ -439,13 +439,12 @@ void dfu_free_entities(void)
        alt_num_cnt = 0;
 }
 
-int dfu_config_entities(char *env, char *interface, char *devstr)
+int dfu_alt_init(int num, struct dfu_entity **dfu)
 {
-       struct dfu_entity *dfu;
-       int i, ret;
        char *s;
+       int ret;
 
-       dfu_alt_num = dfu_find_alt_num(env);
+       dfu_alt_num = num;
        debug("%s: dfu_alt_num=%d\n", __func__, dfu_alt_num);
 
        dfu_hash_algo = NULL;
@@ -456,21 +455,49 @@ int dfu_config_entities(char *env, char *interface, char *devstr)
                        pr_err("Hash algorithm %s not supported\n", s);
        }
 
-       dfu = calloc(sizeof(*dfu), dfu_alt_num);
-       if (!dfu)
+       *dfu = calloc(sizeof(struct dfu_entity), dfu_alt_num);
+       if (!*dfu)
+               return -1;
+
+       return 0;
+}
+
+int dfu_alt_add(struct dfu_entity *dfu, char *interface, char *devstr, char *s)
+{
+       struct dfu_entity *p_dfu;
+       int ret;
+
+       if (alt_num_cnt >= dfu_alt_num)
+               return -1;
+
+       p_dfu = &dfu[alt_num_cnt];
+       ret = dfu_fill_entity(p_dfu, s, alt_num_cnt, interface, devstr);
+       if (ret)
                return -1;
-       for (i = 0; i < dfu_alt_num; i++) {
 
+       list_add_tail(&p_dfu->list, &dfu_list);
+       alt_num_cnt++;
+
+       return 0;
+}
+
+int dfu_config_entities(char *env, char *interface, char *devstr)
+{
+       struct dfu_entity *dfu;
+       int i, ret;
+       char *s;
+
+       ret = dfu_alt_init(dfu_find_alt_num(env), &dfu);
+       if (ret)
+               return -1;
+
+       for (i = 0; i < dfu_alt_num; i++) {
                s = strsep(&env, ";");
-               ret = dfu_fill_entity(&dfu[i], s, alt_num_cnt, interface,
-                                     devstr);
+               ret = dfu_alt_add(dfu, interface, devstr, s);
                if (ret) {
                        /* We will free "dfu" in dfu_free_entities() */
                        return -1;
                }
-
-               list_add_tail(&dfu[i].list, &dfu_list);
-               alt_num_cnt++;
        }
 
        return 0;
index bf51ab7..7d60ffc 100644 (file)
@@ -143,6 +143,8 @@ struct dfu_entity {
 #ifdef CONFIG_SET_DFU_ALT_INFO
 void set_dfu_alt_info(char *interface, char *devstr);
 #endif
+int dfu_alt_init(int num, struct dfu_entity **dfu);
+int dfu_alt_add(struct dfu_entity *dfu, char *interface, char *devstr, char *s);
 int dfu_config_entities(char *s, char *interface, char *devstr);
 void dfu_free_entities(void);
 void dfu_show_entities(void);