yaffs2.c 6.99 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/* Yaffs commands.
 * Modified by Charles Manning by adding ydevconfig command.
 *
 * Use ydevconfig to configure a mountpoint before use.
 * For example:
 *  # Configure mountpt xxx using nand device 0 using blocks 100-500
 *  ydevconfig xxx 0 100 500
 *  # Mount it
 *  ymount xxx
 *  # yls, yrdm etc
 *  yls -l xxx
 *  yrdm xxx/boot-image 82000000
 *  ...
 */

16 17 18 19 20
#include <common.h>

#include <config.h>
#include <command.h>

21 22
#ifdef YAFFS2_DEBUG
#define PRINTF(fmt, args...) printf(fmt, ##args)
23
#else
24
#define PRINTF(fmt, args...) do { } while (0)
25 26
#endif

27 28 29 30
extern void cmd_yaffs_dev_ls(void);
extern void cmd_yaffs_tracemask(unsigned set, unsigned mask);
extern void cmd_yaffs_devconfig(char *mp, int flash_dev,
				int start_block, int end_block);
31 32 33
extern void cmd_yaffs_mount(char *mp);
extern void cmd_yaffs_umount(char *mp);
extern void cmd_yaffs_read_file(char *fn);
34
extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile);
35 36 37 38 39 40 41 42
extern void cmd_yaffs_ls(const char *mountpt, int longlist);
extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size);
extern void cmd_yaffs_mread_file(char *fn, char *addr);
extern void cmd_yaffs_mkdir(const char *dir);
extern void cmd_yaffs_rmdir(const char *dir);
extern void cmd_yaffs_rm(const char *path);
extern void cmd_yaffs_mv(const char *oldPath, const char *newPath);

43 44 45 46 47 48 49 50 51
extern int yaffs_dump_dev(const char *path);

/* ytrace - show/set yaffs trace mask */
int do_ytrace(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
	if (argc > 1)
		cmd_yaffs_tracemask(1, simple_strtol(argv[1], NULL, 16));
	else
		cmd_yaffs_tracemask(0, 0);
52

53 54
	return 0;
}
55

56 57
/* ydevls - lists yaffs mount points. */
int do_ydevls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
58
{
59
	cmd_yaffs_dev_ls();
60

61
	return 0;
62 63
}

64 65
/* ydevconfig mount_pt mtd_dev_num start_block end_block */
int do_ydevconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
66
{
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
	char *mtpoint;
	int mtd_dev;
	int start_block;
	int end_block;

	if (argc != 5) {
		printf
		    ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n");
		return -1;
	}

	mtpoint = argv[1];
	mtd_dev = simple_strtol(argv[2], NULL, 16);
	start_block = simple_strtol(argv[3], NULL, 16);
	end_block = simple_strtol(argv[4], NULL, 16);
82

83 84 85
	cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block);

	return 0;
86 87
}

88
int do_ymount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
89
{
90 91 92 93 94 95 96 97 98
	char *mtpoint;

	if (argc != 2) {
		printf("Bad arguments: ymount mount_pt\n");
		return -1;
	}

	mtpoint = argv[1];
	printf("Mounting yaffs2 mount point %s\n", mtpoint);
99

100
	cmd_yaffs_mount(mtpoint);
101

102
	return 0;
103 104
}

105
int do_yumount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
106
{
107
	char *mtpoint;
108

109 110 111 112
	if (argc != 2) {
		printf("Bad arguments: yumount mount_pt\n");
		return -1;
	}
113

114 115 116 117 118
	mtpoint = argv[1];
	printf("Unmounting yaffs2 mount point %s\n", mtpoint);
	cmd_yaffs_umount(mtpoint);

	return 0;
119 120
}

121
int do_yls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
122
{
123 124 125 126 127 128
	char *dirname;

	if (argc < 2 || argc > 3 || (argc == 3 && strcmp(argv[1], "-l"))) {
		printf("Bad arguments: yls [-l] dir\n");
		return -1;
	}
129

130
	dirname = argv[argc - 1];
131

132
	cmd_yaffs_ls(dirname, (argc > 2) ? 1 : 0);
133

134
	return 0;
135 136
}

137
int do_yrd(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
138
{
139 140 141 142 143 144
	char *filename;

	if (argc != 2) {
		printf("Bad arguments: yrd file_name\n");
		return -1;
	}
145

146
	filename = argv[1];
147

148 149 150 151 152 153
	printf("Reading file %s ", filename);

	cmd_yaffs_read_file(filename);

	printf("done\n");
	return 0;
154 155
}

156
int do_ywr(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
157
{
158 159 160 161 162 163 164 165
	char *filename;
	ulong value;
	ulong numValues;

	if (argc != 4) {
		printf("Bad arguments: ywr file_name value n_values\n");
		return -1;
	}
166

167 168 169
	filename = argv[1];
	value = simple_strtoul(argv[2], NULL, 16);
	numValues = simple_strtoul(argv[3], NULL, 16);
170

171 172 173 174 175 176 177
	printf("Writing value (%lx) %lx times to %s... ", value, numValues,
	       filename);

	cmd_yaffs_write_file(filename, value, numValues);

	printf("done\n");
	return 0;
178 179
}

180
int do_yrdm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
181
{
182 183 184 185 186 187 188
	char *filename;
	ulong addr;

	if (argc != 3) {
		printf("Bad arguments: yrdm file_name addr\n");
		return -1;
	}
189

190 191
	filename = argv[1];
	addr = simple_strtoul(argv[2], NULL, 16);
192

193 194 195
	cmd_yaffs_mread_file(filename, (char *)addr);

	return 0;
196 197
}

198
int do_ywrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
199
{
200 201 202 203 204 205 206 207 208 209 210 211
	char *filename;
	ulong addr;
	ulong size;

	if (argc != 4) {
		printf("Bad arguments: ywrm file_name addr size\n");
		return -1;
	}

	filename = argv[1];
	addr = simple_strtoul(argv[2], NULL, 16);
	size = simple_strtoul(argv[3], NULL, 16);
212

213
	cmd_yaffs_mwrite_file(filename, (char *)addr, size);
214

215
	return 0;
216 217
}

218
int do_ymkdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
219
{
220
	char *dirname;
221

222 223 224 225
	if (argc != 2) {
		printf("Bad arguments: ymkdir dir_name\n");
		return -1;
	}
226

227 228 229 230
	dirname = argv[1];
	cmd_yaffs_mkdir(dirname);

	return 0;
231 232
}

233
int do_yrmdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
234
{
235 236 237 238 239 240
	char *dirname;

	if (argc != 2) {
		printf("Bad arguments: yrmdir dir_name\n");
		return -1;
	}
241

242 243
	dirname = argv[1];
	cmd_yaffs_rmdir(dirname);
244

245
	return 0;
246 247
}

248
int do_yrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
249
{
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
	char *name;

	if (argc != 2) {
		printf("Bad arguments: yrm name\n");
		return -1;
	}

	name = argv[1];

	cmd_yaffs_rm(name);

	return 0;
}

int do_ymv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
	char *oldPath;
	char *newPath;

	if (argc != 3) {
		printf("Bad arguments: ymv old_path new_path\n");
		return -1;
	}

	oldPath = argv[1];
	newPath = argv[2];

	cmd_yaffs_mv(newPath, oldPath);

	return 0;
280 281
}

282 283
U_BOOT_CMD(ytrace, 2, 0, do_ytrace,
	   "show/set yaffs trace mask",
284
	   "[new_mask]  show/set yaffs trace mask");
285 286 287 288 289 290

U_BOOT_CMD(ydevls, 1, 0, do_ydevls,
	   "list yaffs mount points", "list yaffs mount points");

U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig,
	   "configure yaffs mount point",
291
	   "mtpoint mtd_id start_block end_block   configures a yaffs2 mount point");
292 293

U_BOOT_CMD(ymount, 2, 0, do_ymount,
294
	   "mount yaffs", "mtpoint  mounts a yaffs2 mount point");
295 296

U_BOOT_CMD(yumount, 2, 0, do_yumount,
297
	   "unmount yaffs", "mtpoint  unmounts a yaffs2 mount point");
298

299
U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "[-l] dirname");
300 301

U_BOOT_CMD(yrd, 2, 0, do_yrd,
302
	   "read file from yaffs", "path   read file from yaffs");
303 304 305

U_BOOT_CMD(ywr, 4, 0, do_ywr,
	   "write file to yaffs",
306
	   "filename value num_vlues   write values to yaffs file");
307 308 309

U_BOOT_CMD(yrdm, 3, 0, do_yrdm,
	   "read file to memory from yaffs",
310
	   "filename offset    reads yaffs file into memory");
311 312 313

U_BOOT_CMD(ywrm, 4, 0, do_ywrm,
	   "write file from memory to yaffs",
314
	   "filename offset size  writes memory to yaffs file");
315 316

U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir,
317
	   "YAFFS mkdir", "dir    create a yaffs directory");
318 319

U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir,
320
	   "YAFFS rmdir", "dirname   removes a yaffs directory");
321

322
U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "path   removes a yaffs file");
323 324 325

U_BOOT_CMD(ymv, 4, 0, do_ymv,
	   "YAFFS mv",
326
	   "old_path new_path   moves/rename files within a yaffs mount point");