Blame view

common/cmd_ext4.c 3.03 KB
a1596438a   Uma Shankar   ext4fs ls load su...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  /*
   * (C) Copyright 2011 - 2012 Samsung Electronics
   * EXT4 filesystem implementation in Uboot by
   * Uma Shankar <uma.shankar@samsung.com>
   * Manjunatha C Achar <a.manjunatha@samsung.com>
   *
   * Ext4fs support
   * made from existing cmd_ext2.c file of Uboot
   *
   * (C) Copyright 2004
   * esd gmbh <www.esd-electronics.com>
   * Reinhard Arlt <reinhard.arlt@esd-electronics.com>
   *
   * made from cmd_reiserfs by
   *
   * (C) Copyright 2003 - 2004
   * Sysgo Real-Time Solutions, AG <www.elinos.com>
   * Pavel Bartusek <pba@sysgo.com>
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
20
   * SPDX-License-Identifier:	GPL-2.0+
a1596438a   Uma Shankar   ext4fs ls load su...
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
   */
  
  /*
   * Changelog:
   *	0.1 - Newly created file for ext4fs support. Taken from cmd_ext2.c
   *	        file in uboot. Added ext4fs ls load and write support.
   */
  
  #include <common.h>
  #include <part.h>
  #include <config.h>
  #include <command.h>
  #include <image.h>
  #include <linux/ctype.h>
  #include <asm/byteorder.h>
a1596438a   Uma Shankar   ext4fs ls load su...
36
37
38
  #include <ext4fs.h>
  #include <linux/stat.h>
  #include <malloc.h>
045fa1e11   Stephen Warren   fs: add filesyste...
39
  #include <fs.h>
a1596438a   Uma Shankar   ext4fs ls load su...
40
41
42
43
  
  #if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE)
  #include <usb.h>
  #endif
a1596438a   Uma Shankar   ext4fs ls load su...
44
45
46
  int do_ext4_load(cmd_tbl_t *cmdtp, int flag, int argc,
  						char *const argv[])
  {
b770e88a6   Wolfgang Denk   Fix number base h...
47
  	return do_load(cmdtp, flag, argc, argv, FS_TYPE_EXT);
a1596438a   Uma Shankar   ext4fs ls load su...
48
49
50
51
  }
  
  int do_ext4_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
  {
045fa1e11   Stephen Warren   fs: add filesyste...
52
  	return do_ls(cmdtp, flag, argc, argv, FS_TYPE_EXT);
a1596438a   Uma Shankar   ext4fs ls load su...
53
  }
ed34f34db   Uma Shankar   ext4fs write support
54
  #if defined(CONFIG_CMD_EXT4_WRITE)
ed34f34db   Uma Shankar   ext4fs write support
55
56
57
58
  int do_ext4_write(cmd_tbl_t *cmdtp, int flag, int argc,
  				char *const argv[])
  {
  	const char *filename = "/";
81180819b   Rob Herring   cmd_extX: use com...
59
  	int dev, part;
ed34f34db   Uma Shankar   ext4fs write support
60
61
62
  	unsigned long ram_address;
  	unsigned long file_size;
  	disk_partition_t info;
81180819b   Rob Herring   cmd_extX: use com...
63
  	block_dev_desc_t *dev_desc;
ed34f34db   Uma Shankar   ext4fs write support
64
65
66
  
  	if (argc < 6)
  		return cmd_usage(cmdtp);
10a37fd7a   Stephen Warren   disk: get_device_...
67
  	part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
81180819b   Rob Herring   cmd_extX: use com...
68
  	if (part < 0)
ed34f34db   Uma Shankar   ext4fs write support
69
  		return 1;
ed34f34db   Uma Shankar   ext4fs write support
70

81180819b   Rob Herring   cmd_extX: use com...
71
  	dev = dev_desc->dev;
ed34f34db   Uma Shankar   ext4fs write support
72
73
  
  	/* get the filename */
0171d52c4   Tom Rini   cmd_ext4: BREAK a...
74
  	filename = argv[4];
ed34f34db   Uma Shankar   ext4fs write support
75
76
  
  	/* get the address in hexadecimal format (string to int) */
0171d52c4   Tom Rini   cmd_ext4: BREAK a...
77
  	ram_address = simple_strtoul(argv[3], NULL, 16);
ed34f34db   Uma Shankar   ext4fs write support
78
79
80
81
82
  
  	/* get the filesize in base 10 format */
  	file_size = simple_strtoul(argv[5], NULL, 10);
  
  	/* set the device as block device */
81180819b   Rob Herring   cmd_extX: use com...
83
  	ext4fs_set_blk_dev(dev_desc, &info);
ed34f34db   Uma Shankar   ext4fs write support
84
85
  
  	/* mount the filesystem */
81180819b   Rob Herring   cmd_extX: use com...
86
  	if (!ext4fs_mount(info.size)) {
b9dc49412   Simon Glass   ext4: Fix printf(...
87
88
  		printf("Bad ext4 partition %s %d:%d
  ", argv[1], dev, part);
ed34f34db   Uma Shankar   ext4fs write support
89
90
91
92
93
94
95
96
97
98
  		goto fail;
  	}
  
  	/* start write */
  	if (ext4fs_write(filename, (unsigned char *)ram_address, file_size)) {
  		printf("** Error ext4fs_write() **
  ");
  		goto fail;
  	}
  	ext4fs_close();
ed34f34db   Uma Shankar   ext4fs write support
99
100
101
102
103
  
  	return 0;
  
  fail:
  	ext4fs_close();
ed34f34db   Uma Shankar   ext4fs write support
104
105
106
107
108
109
  
  	return 1;
  }
  
  U_BOOT_CMD(ext4write, 6, 1, do_ext4_write,
  	"create a file in the root directory",
0171d52c4   Tom Rini   cmd_ext4: BREAK a...
110
111
  	"<interface> <dev[:part]> <addr> <absolute filename path> [sizebytes]
  "
b6a304443   Stephen Warren   cmd_ext4: remove ...
112
  	"    - create a file in / directory");
ed34f34db   Uma Shankar   ext4fs write support
113
114
  
  #endif
a1596438a   Uma Shankar   ext4fs ls load su...
115
116
117
118
  U_BOOT_CMD(ext4ls, 4, 1, do_ext4_ls,
  	   "list files in a directory (default /)",
  	   "<interface> <dev[:part]> [directory]
  "
b6a304443   Stephen Warren   cmd_ext4: remove ...
119
  	   "    - list files from 'dev' on 'interface' in a 'directory'");
a1596438a   Uma Shankar   ext4fs ls load su...
120
121
122
123
124
  
  U_BOOT_CMD(ext4load, 6, 0, do_ext4_load,
  	   "load binary file from a Ext4 filesystem",
  	   "<interface> <dev[:part]> [addr] [filename] [bytes]
  "
b6a304443   Stephen Warren   cmd_ext4: remove ...
125
126
  	   "    - load binary file 'filename' from 'dev' on 'interface'
  "
b770e88a6   Wolfgang Denk   Fix number base h...
127
  	   "      to address 'addr' from ext4 filesystem");