dfu:usb: Support for ext4
authorŁukasz Majewski <l.majewski@samsung.com>
Thu, 23 Aug 2012 23:33:55 +0000 (23:33 +0000)
committerMarek Vasut <marex@denx.de>
Thu, 20 Sep 2012 22:04:59 +0000 (00:04 +0200)
Support for ext4 file system handling at DFU.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Reviewed-by: Marek Vasut <marex@denx.de>
drivers/dfu/dfu_mmc.c

index 060145b..2270a61 100644 (file)
@@ -63,10 +63,23 @@ static int mmc_file_op(enum dfu_mmc_op op, struct dfu_entity *dfu,
        char *str_env;
        int ret;
 
        char *str_env;
        int ret;
 
-       sprintf(cmd_buf, "fat%s mmc %d:%d 0x%x %s %lx",
-               op == DFU_OP_READ ? "load" : "write",
-               dfu->data.mmc.dev, dfu->data.mmc.part,
-               (unsigned int) buf, dfu->name, *len);
+       switch (dfu->layout) {
+       case DFU_FS_FAT:
+               sprintf(cmd_buf, "fat%s mmc %d:%d 0x%x %s %lx",
+                       op == DFU_OP_READ ? "load" : "write",
+                       dfu->data.mmc.dev, dfu->data.mmc.part,
+                       (unsigned int) buf, dfu->name, *len);
+               break;
+       case DFU_FS_EXT4:
+               sprintf(cmd_buf, "ext4%s mmc %d:%d /%s 0x%x %ld",
+                       op == DFU_OP_READ ? "load" : "write",
+                       dfu->data.mmc.dev, dfu->data.mmc.part,
+                       dfu->name, (unsigned int) buf, *len);
+               break;
+       default:
+               printf("%s: Layout (%s) not (yet) supported!\n", __func__,
+                      dfu_get_layout(dfu->layout));
+       }
 
        debug("%s: %s 0x%p\n", __func__, cmd_buf, cmd_buf);
 
 
        debug("%s: %s 0x%p\n", __func__, cmd_buf, cmd_buf);
 
@@ -107,6 +120,7 @@ int dfu_write_medium_mmc(struct dfu_entity *dfu, void *buf, long *len)
                ret = mmc_block_write(dfu, buf, len);
                break;
        case DFU_FS_FAT:
                ret = mmc_block_write(dfu, buf, len);
                break;
        case DFU_FS_FAT:
+       case DFU_FS_EXT4:
                ret = mmc_file_write(dfu, buf, len);
                break;
        default:
                ret = mmc_file_write(dfu, buf, len);
                break;
        default:
@@ -126,6 +140,7 @@ int dfu_read_medium_mmc(struct dfu_entity *dfu, void *buf, long *len)
                ret = mmc_block_read(dfu, buf, len);
                break;
        case DFU_FS_FAT:
                ret = mmc_block_read(dfu, buf, len);
                break;
        case DFU_FS_FAT:
+       case DFU_FS_EXT4:
                ret = mmc_file_read(dfu, buf, len);
                break;
        default:
                ret = mmc_file_read(dfu, buf, len);
                break;
        default:
@@ -149,12 +164,17 @@ int dfu_fill_entity_mmc(struct dfu_entity *dfu, char *s)
                dfu->data.mmc.lba_blk_size = get_mmc_blk_size(dfu->dev_num);
        } else if (!strcmp(st, "fat")) {
                dfu->layout = DFU_FS_FAT;
                dfu->data.mmc.lba_blk_size = get_mmc_blk_size(dfu->dev_num);
        } else if (!strcmp(st, "fat")) {
                dfu->layout = DFU_FS_FAT;
-               dfu->data.mmc.dev = simple_strtoul(s, &s, 10);
-               dfu->data.mmc.part = simple_strtoul(++s, &s, 10);
+       } else if (!strcmp(st, "ext4")) {
+               dfu->layout = DFU_FS_EXT4;
        } else {
                printf("%s: Memory layout (%s) not supported!\n", __func__, st);
        }
 
        } else {
                printf("%s: Memory layout (%s) not supported!\n", __func__, st);
        }
 
+       if (dfu->layout == DFU_FS_EXT4 || dfu->layout == DFU_FS_FAT) {
+               dfu->data.mmc.dev = simple_strtoul(s, &s, 10);
+               dfu->data.mmc.part = simple_strtoul(++s, &s, 10);
+       }
+
        dfu->read_medium = dfu_read_medium_mmc;
        dfu->write_medium = dfu_write_medium_mmc;
 
        dfu->read_medium = dfu_read_medium_mmc;
        dfu->write_medium = dfu_write_medium_mmc;