Lines Matching defs:dfu

3  * dfu.c -- DFU back-end routines
14 #include <dfu.h>
26 static int mmc_block_op(enum dfu_op op, struct dfu_entity *dfu,
33 mmc = find_mmc_device(dfu->data.mmc.dev_num);
35 pr_err("Device MMC %d - not found!", dfu->data.mmc.dev_num);
43 *len = ALIGN(*len, dfu->data.mmc.lba_blk_size);
45 blk_start = dfu->data.mmc.lba_start +
46 (u32)lldiv(offset, dfu->data.mmc.lba_blk_size);
47 blk_count = *len / dfu->data.mmc.lba_blk_size;
49 dfu->data.mmc.lba_start + dfu->data.mmc.lba_size) {
54 if (dfu->data.mmc.hw_partition >= 0) {
57 dfu->data.mmc.dev_num,
58 dfu->data.mmc.hw_partition);
65 dfu->data.mmc.dev_num, blk_start, blk_count, buf);
80 if (dfu->data.mmc.hw_partition >= 0)
82 dfu->data.mmc.dev_num,
87 if (dfu->data.mmc.hw_partition >= 0) {
89 dfu->data.mmc.dev_num,
98 static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu,
106 switch (dfu->layout) {
117 dfu_get_layout(dfu->layout));
122 dfu->data.mmc.dev, dfu->data.mmc.part);
126 puts("dfu: fs_set_blk_dev error!\n");
132 ret = fs_read(dfu->name, (size_t)buf, offset, *len, &size);
134 puts("dfu: fs_read error!\n");
140 ret = fs_write(dfu->name, (size_t)buf, offset, *len, &size);
142 puts("dfu: fs_write error!\n");
147 ret = fs_size(dfu->name, &size);
149 puts("dfu: fs_size error!\n");
161 static int mmc_file_buf_write(struct dfu_entity *dfu, u64 offset, void *buf, long *len)
177 ret = mmc_file_op(DFU_OP_WRITE, dfu, dfu_file_buf_offset,
186 static int mmc_file_buf_write_finish(struct dfu_entity *dfu)
188 int ret = mmc_file_op(DFU_OP_WRITE, dfu, dfu_file_buf_offset,
198 int dfu_write_medium_mmc(struct dfu_entity *dfu,
203 switch (dfu->layout) {
205 ret = mmc_block_op(DFU_OP_WRITE, dfu, offset, buf, len);
209 ret = mmc_file_buf_write(dfu, offset, buf, len);
219 dfu_get_layout(dfu->layout));
225 int dfu_flush_medium_mmc(struct dfu_entity *dfu)
229 switch (dfu->layout) {
232 ret = mmc_file_buf_write_finish(dfu);
243 dfu_get_layout(dfu->layout));
249 int dfu_get_medium_size_mmc(struct dfu_entity *dfu, u64 *size)
253 switch (dfu->layout) {
255 *size = dfu->data.mmc.lba_size * dfu->data.mmc.lba_blk_size;
259 ret = mmc_file_op(DFU_OP_SIZE, dfu, 0, NULL, size);
268 dfu_get_layout(dfu->layout));
274 static int mmc_file_buf_read(struct dfu_entity *dfu, u64 offset, void *buf,
283 ret = mmc_file_op(DFU_OP_READ, dfu, offset, dfu_file_buf,
299 int dfu_read_medium_mmc(struct dfu_entity *dfu, u64 offset, void *buf,
304 switch (dfu->layout) {
306 ret = mmc_block_op(DFU_OP_READ, dfu, offset, buf, len);
310 ret = mmc_file_buf_read(dfu, offset, buf, len);
314 dfu_get_layout(dfu->layout));
320 void dfu_free_entity_mmc(struct dfu_entity *dfu)
341 int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *devstr, char **argv, int argc)
354 dfu->data.mmc.dev_num = dectoul(devstr, &s);
370 mmc = find_mmc_device(dfu->data.mmc.dev_num);
373 dfu->data.mmc.dev_num);
382 dfu->data.mmc.hw_partition = -EINVAL;
384 dfu->layout = DFU_RAW_ADDR;
385 dfu->data.mmc.lba_start = second_arg;
386 dfu->data.mmc.lba_size = third_arg;
387 dfu->data.mmc.lba_blk_size = mmc->read_bl_len;
396 dfu->data.mmc.lba_size = blk_dev->lba;
408 dfu->data.mmc.hw_partition =
434 dfu->data.mmc.hw_partition =
438 dfu->layout = DFU_RAW_ADDR;
439 dfu->data.mmc.lba_start = partinfo.start + offset;
440 dfu->data.mmc.lba_size = partinfo.size - offset;
441 dfu->data.mmc.lba_blk_size = partinfo.blksz;
443 dfu->layout = DFU_FS_FAT;
445 dfu->layout = DFU_FS_EXT4;
447 dfu->layout = DFU_SKIP;
449 dfu->layout = DFU_SCRIPT;
457 dfu->data.mmc.dev = (second_arg != -1) ? second_arg :
458 dfu->data.mmc.dev_num;
459 dfu->data.mmc.part = third_arg;
462 dfu->dev_type = DFU_DEV_MMC;
463 dfu->get_medium_size = dfu_get_medium_size_mmc;
464 dfu->read_medium = dfu_read_medium_mmc;
465 dfu->write_medium = dfu_write_medium_mmc;
466 dfu->flush_medium = dfu_flush_medium_mmc;
467 dfu->inited = 0;
468 dfu->free_entity = dfu_free_entity_mmc;