diff options
Diffstat (limited to 'drivers/dfu/dfu.c')
| -rw-r--r-- | drivers/dfu/dfu.c | 21 | 
1 files changed, 17 insertions, 4 deletions
| diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c index 56b21c78a..1eb92e541 100644 --- a/drivers/dfu/dfu.c +++ b/drivers/dfu/dfu.c @@ -67,14 +67,14 @@ int dfu_init_env_entities(char *interface, int dev)  static unsigned char *dfu_buf;  static unsigned long dfu_buf_size = CONFIG_SYS_DFU_DATA_BUF_SIZE; -static unsigned char *dfu_free_buf(void) +unsigned char *dfu_free_buf(void)  {  	free(dfu_buf);  	dfu_buf = NULL;  	return dfu_buf;  } -static unsigned char *dfu_get_buf(void) +unsigned char *dfu_get_buf(void)  {  	char *s; @@ -229,6 +229,7 @@ static int dfu_read_buffer_fill(struct dfu_entity *dfu, void *buf, int size)  			dfu->crc = crc32(dfu->crc, buf, chunk);  			dfu->i_buf += chunk;  			dfu->b_left -= chunk; +			dfu->r_left -= chunk;  			size -= chunk;  			buf += chunk;  			readn += chunk; @@ -287,7 +288,7 @@ int dfu_read(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)  		dfu->offset = 0;  		dfu->i_buf_end = dfu_get_buf() + dfu_buf_size;  		dfu->i_buf = dfu->i_buf_start; -		dfu->b_left = 0; +		dfu->b_left = min(dfu_buf_size, dfu->r_left);  		dfu->bad_skip = 0; @@ -330,7 +331,7 @@ int dfu_read(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)  }  static int dfu_fill_entity(struct dfu_entity *dfu, char *s, int alt, -			    char *interface, int num) +			   char *interface, int num)  {  	char *st; @@ -440,3 +441,15 @@ struct dfu_entity *dfu_get_entity(int alt)  	return NULL;  } + +int dfu_get_alt(char *name) +{ +	struct dfu_entity *dfu; + +	list_for_each_entry(dfu, &dfu_list, list) { +		if (!strncmp(dfu->name, name, strlen(dfu->name))) +			return dfu->alt; +	} + +	return -ENODEV; +} |