dfu: Extract common DFU code to handle "dfu_alt_info" environment variable

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>
This commit is contained in:
Lukasz Majewski 2013-09-11 14:53:35 +02:00 committed by Marek Vasut
parent 3668ce3c80
commit 765c5ae5bc
3 changed files with 26 additions and 14 deletions

View File

@ -17,26 +17,15 @@
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);

View 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;

View 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);