Message ID | 1563541046-6432-4-git-send-email-patrick.delaunay@st.com |
---|---|
State | Superseded |
Delegated to: | Patrick Delaunay |
Headers | show |
Series | dfu: update dfu stack and use them for stm32mp1 | expand |
Hi Patrick, > Split the function dfu_config_entities with 2 new functions > - dfu_alt_init > - dfu_alt_add Ok. > > Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com> > --- > > drivers/dfu/dfu.c | 51 > +++++++++++++++++++++++++++++++++++++++------------ include/dfu.h > | 2 ++ 2 files changed, 41 insertions(+), 12 deletions(-) > > diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c > index eb3a3c6..79a652e 100644 > --- a/drivers/dfu/dfu.c > +++ b/drivers/dfu/dfu.c > @@ -438,13 +438,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; > @@ -455,21 +454,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; I'm aware that the dfu.c file in some places uses -1 or -<errno> as return value. I would prefer that with new code we shall add -<errno>. In this particular case it would be -ENOMEM > + > + 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; > diff --git a/include/dfu.h b/include/dfu.h > index bf51ab7..7d60ffc 100644 > --- a/include/dfu.h > +++ b/include/dfu.h > @@ -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); Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c index eb3a3c6..79a652e 100644 --- a/drivers/dfu/dfu.c +++ b/drivers/dfu/dfu.c @@ -438,13 +438,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; @@ -455,21 +454,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; diff --git a/include/dfu.h b/include/dfu.h index bf51ab7..7d60ffc 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -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);
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 | 51 +++++++++++++++++++++++++++++++++++++++------------ include/dfu.h | 2 ++ 2 files changed, 41 insertions(+), 12 deletions(-)