diff options
| author | Tom Rini <trini@ti.com> | 2012-09-20 11:27:35 -0700 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2012-09-20 11:27:35 -0700 | 
| commit | 5fb29f3c48d26981b117b08286bc16ec99d4ca0b (patch) | |
| tree | b4a4c5b5cc88fedc568bcb49e248e9561a884ef4 /common/cmd_ext2.c | |
| parent | 30a3f3881e44187f21eb08bf8601ed4adaf4ca0e (diff) | |
| parent | 55b523b7d4ab885142f77d388007eb5490ba6bf4 (diff) | |
| download | olio-uboot-2014.01-5fb29f3c48d26981b117b08286bc16ec99d4ca0b.tar.xz olio-uboot-2014.01-5fb29f3c48d26981b117b08286bc16ec99d4ca0b.zip | |
Merge branch 'ext4'
Update Makefile change for LIBS -> LIBS-y change.
Conflicts:
	Makefile
Signed-off-by: Tom Rini <trini@ti.com>
Diffstat (limited to 'common/cmd_ext2.c')
| -rw-r--r-- | common/cmd_ext2.c | 219 | 
1 files changed, 17 insertions, 202 deletions
| diff --git a/common/cmd_ext2.c b/common/cmd_ext2.c index 79b1e2fb6..c27d9c7ed 100644 --- a/common/cmd_ext2.c +++ b/common/cmd_ext2.c @@ -1,4 +1,9 @@  /* + * (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> +   * (C) Copyright 2004   * esd gmbh <www.esd-electronics.com>   * Reinhard Arlt <reinhard.arlt@esd-electronics.com> @@ -33,225 +38,35 @@   * Ext2fs support   */  #include <common.h> -#include <part.h> -#include <config.h> -#include <command.h> -#include <image.h> -#include <linux/ctype.h> -#include <asm/byteorder.h> -#include <ext2fs.h> -#if defined(CONFIG_CMD_USB) && defined(CONFIG_USB_STORAGE) -#include <usb.h> -#endif - -#if !defined(CONFIG_DOS_PARTITION) && !defined(CONFIG_EFI_PARTITION) -#error DOS or EFI partition support must be selected -#endif - -/* #define	EXT2_DEBUG */ - -#ifdef	EXT2_DEBUG -#define	PRINTF(fmt,args...)	printf (fmt ,##args) -#else -#define PRINTF(fmt,args...) -#endif +#include <ext_common.h>  int do_ext2ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	char *filename = "/"; -	int dev=0; -	int part=1; -	char *ep; -	block_dev_desc_t *dev_desc=NULL; -	int part_length; - -	if (argc < 3) -		return CMD_RET_USAGE; - -	dev = (int)simple_strtoul (argv[2], &ep, 16); -	dev_desc = get_dev(argv[1],dev); - -	if (dev_desc == NULL) { -		printf ("\n** Block device %s %d not supported\n", argv[1], dev); -		return 1; -	} - -	if (*ep) { -		if (*ep != ':') { -			puts ("\n** Invalid boot device, use `dev[:part]' **\n"); -			return 1; -		} -		part = (int)simple_strtoul(++ep, NULL, 16); -	} - -	if (argc == 4) -		filename = argv[3]; - -	PRINTF("Using device %s %d:%d, directory: %s\n", argv[1], dev, part, filename); - -	if ((part_length = ext2fs_set_blk_dev(dev_desc, part)) == 0) { -		printf ("** Bad partition - %s %d:%d **\n",  argv[1], dev, part); -		ext2fs_close(); -		return 1; -	} - -	if (!ext2fs_mount(part_length)) { -		printf ("** Bad ext2 partition or disk - %s %d:%d **\n",  argv[1], dev, part); -		ext2fs_close(); -		return 1; -	} - -	if (ext2fs_ls (filename)) { -		printf ("** Error ext2fs_ls() **\n"); -		ext2fs_close(); -		return 1; -	}; - -	ext2fs_close(); +	if (do_ext_ls(cmdtp, flag, argc, argv)) +		return -1;  	return 0;  } -U_BOOT_CMD( -	ext2ls,	4,	1,	do_ext2ls, -	"list files in a directory (default /)", -	"<interface> <dev[:part]> [directory]\n" -	"    - list files from 'dev' on 'interface' in a 'directory'" -); -  /******************************************************************************   * Ext2fs boot command intepreter. Derived from diskboot   */  int do_ext2load (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  { -	char *filename = NULL; -	char *ep; -	int dev, part = 1; -	ulong addr = 0, part_length; -	int filelen; -	disk_partition_t info; -	block_dev_desc_t *dev_desc = NULL; -	char buf [12]; -	unsigned long count; -	char *addr_str; - -	switch (argc) { -	case 3: -		addr_str = getenv("loadaddr"); -		if (addr_str != NULL) -			addr = simple_strtoul (addr_str, NULL, 16); -		else -			addr = CONFIG_SYS_LOAD_ADDR; - -		filename = getenv ("bootfile"); -		count = 0; -		break; -	case 4: -		addr = simple_strtoul (argv[3], NULL, 16); -		filename = getenv ("bootfile"); -		count = 0; -		break; -	case 5: -		addr = simple_strtoul (argv[3], NULL, 16); -		filename = argv[4]; -		count = 0; -		break; -	case 6: -		addr = simple_strtoul (argv[3], NULL, 16); -		filename = argv[4]; -		count = simple_strtoul (argv[5], NULL, 16); -		break; - -	default: -		return CMD_RET_USAGE; -	} - -	if (!filename) { -		puts ("** No boot file defined **\n"); -		return 1; -	} - -	dev = (int)simple_strtoul (argv[2], &ep, 16); -	dev_desc = get_dev(argv[1],dev); -	if (dev_desc==NULL) { -		printf ("** Block device %s %d not supported\n", argv[1], dev); -		return 1; -	} -	if (*ep) { -		if (*ep != ':') { -			puts ("** Invalid boot device, use `dev[:part]' **\n"); -			return 1; -		} -		part = (int)simple_strtoul(++ep, NULL, 16); -	} - -	PRINTF("Using device %s%d, partition %d\n", argv[1], dev, part); - -	if (part != 0) { -		if (get_partition_info (dev_desc, part, &info)) { -			printf ("** Bad partition %d **\n", part); -			return 1; -		} - -		if (strncmp((char *)info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) { -			printf ("** Invalid partition type \"%.32s\"" -				" (expect \"" BOOT_PART_TYPE "\")\n", -				info.type); -			return 1; -		} -		printf ("Loading file \"%s\" " -			"from %s device %d:%d (%.32s)\n", -			filename, -			argv[1], dev, part, info.name); -	} else { -		printf ("Loading file \"%s\" from %s device %d\n", -			filename, argv[1], dev); -	} - - -	if ((part_length = ext2fs_set_blk_dev(dev_desc, part)) == 0) { -		printf ("** Bad partition - %s %d:%d **\n",  argv[1], dev, part); -		ext2fs_close(); -		return 1; -	} - -	if (!ext2fs_mount(part_length)) { -		printf ("** Bad ext2 partition or disk - %s %d:%d **\n", -			argv[1], dev, part); -		ext2fs_close(); -		return 1; -	} - -	filelen = ext2fs_open(filename); -	if (filelen < 0) { -		printf("** File not found %s\n", filename); -		ext2fs_close(); -		return 1; -	} -	if ((count < filelen) && (count != 0)) { -	    filelen = count; -	} - -	if (ext2fs_read((char *)addr, filelen) != filelen) { -		printf("** Unable to read \"%s\" from %s %d:%d **\n", -			filename, argv[1], dev, part); -		ext2fs_close(); -		return 1; -	} - -	ext2fs_close(); - -	/* Loading ok, update default load address */ -	load_addr = addr; - -	printf ("%d bytes read\n", filelen); -	sprintf(buf, "%X", filelen); -	setenv("filesize", buf); +	if (do_ext_load(cmdtp, flag, argc, argv)) +		return -1;  	return 0;  }  U_BOOT_CMD( +	ext2ls,	4,	1,	do_ext2ls, +	"list files in a directory (default /)", +	"<interface> <dev[:part]> [directory]\n" +	"    - list files from 'dev' on 'interface' in a 'directory'" +); + +U_BOOT_CMD(  	ext2load,	6,	0,	do_ext2load,  	"load binary file from a Ext2 filesystem",  	"<interface> <dev[:part]> [addr] [filename] [bytes]\n" |