summaryrefslogtreecommitdiffstats
path: root/u-boot/common
diff options
context:
space:
mode:
authorH. Nikolaus Schaller <hns@goldelico.com>2013-01-10 16:42:11 +0100
committerH. Nikolaus Schaller <hns@goldelico.com>2013-01-10 16:42:11 +0100
commit1d18c95643416cc9f1577755922e6593b508e8da (patch)
tree3d30910058cbfbddc388357d29307aaa0a615e90 /u-boot/common
parent2f7f1bd2415b74d98cfb8e0a0cd5e6436261de4a (diff)
downloadbootable_bootloader_goldelico_gta04-1d18c95643416cc9f1577755922e6593b508e8da.zip
bootable_bootloader_goldelico_gta04-1d18c95643416cc9f1577755922e6593b508e8da.tar.gz
bootable_bootloader_goldelico_gta04-1d18c95643416cc9f1577755922e6593b508e8da.tar.bz2
made ext4 and new general ls/load commands work
Diffstat (limited to 'u-boot/common')
-rw-r--r--u-boot/common/Makefile2
-rwxr-xr-x[-rw-r--r--]u-boot/common/cmd_fat.c193
-rwxr-xr-xu-boot/common/cmd_fs.c53
-rw-r--r--u-boot/common/cmd_jffs2.c12
4 files changed, 138 insertions, 122 deletions
diff --git a/u-boot/common/Makefile b/u-boot/common/Makefile
index 048df0c..121a47f 100644
--- a/u-boot/common/Makefile
+++ b/u-boot/common/Makefile
@@ -89,7 +89,9 @@ COBJS-$(CONFIG_ENV_IS_IN_EEPROM) += cmd_eeprom.o
COBJS-$(CONFIG_CMD_EEPROM) += cmd_eeprom.o
COBJS-$(CONFIG_CMD_ELF) += cmd_elf.o
COBJS-$(CONFIG_SYS_HUSH_PARSER) += cmd_exit.o
+COBJS-$(CONFIG_CMD_FS) += cmd_fs.o
COBJS-$(CONFIG_CMD_EXT2) += cmd_ext2.o
+COBJS-$(CONFIG_CMD_EXT4) += cmd_ext4.o
COBJS-$(CONFIG_CMD_FAT) += cmd_fat.o
COBJS-$(CONFIG_CMD_FDC)$(CONFIG_CMD_FDOS) += cmd_fdc.o
COBJS-$(CONFIG_OF_LIBFDT) += cmd_fdt.o fdt_support.o
diff --git a/u-boot/common/cmd_fat.c b/u-boot/common/cmd_fat.c
index 0220494..86be044 100644..100755
--- a/u-boot/common/cmd_fat.c
+++ b/u-boot/common/cmd_fat.c
@@ -31,146 +31,57 @@
#include <ata.h>
#include <part.h>
#include <fat.h>
-
+#include <fs.h>
int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
- long size;
- unsigned long offset;
- unsigned long count;
- char buf [12];
- block_dev_desc_t *dev_desc=NULL;
- int dev=0;
- int part=1;
- char *ep;
-
- if (argc < 5) {
- printf( "usage: fatload <interface> <dev[:part]> "
- "<addr> <filename> [bytes]\n");
- return 1;
- }
-
- dev = (int)simple_strtoul(argv[2], &ep, 16);
- dev_desc = get_dev(argv[1],dev);
- if (dev_desc == NULL) {
- puts("\n** Invalid boot device **\n");
- 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 (fat_register_device(dev_desc,part)!=0) {
- printf("\n** Unable to use %s %d:%d for fatload **\n",
- argv[1], dev, part);
- return 1;
- }
- offset = simple_strtoul(argv[3], NULL, 16);
- if (argc == 6)
- count = simple_strtoul(argv[5], NULL, 16);
- else
- count = 0;
- size = file_fat_read(argv[4], (unsigned char *)offset, count);
-
- if(size==-1) {
- printf("\n** Unable to read \"%s\" from %s %d:%d **\n",
- argv[4], argv[1], dev, part);
- return 1;
- }
-
- printf("\n%ld bytes read\n", size);
-
- sprintf(buf, "%lX", size);
- setenv("filesize", buf);
-
- return 0;
+ return do_load(cmdtp, flag, argc, argv, FS_TYPE_FAT, 16);
}
U_BOOT_CMD(
- fatload, 6, 0, do_fat_fsload,
+ fatload, 7, 0, do_fat_fsload,
"load binary file from a dos filesystem",
- "<interface> <dev[:part]> <addr> <filename> [bytes]\n"
- " - load binary file 'filename' from 'dev' on 'interface'\n"
- " to address 'addr' from dos filesystem"
+ "<interface> [<dev[:part]>] <addr> <filename> [bytes [pos]]\n"
+ " - Load binary file 'filename' from 'dev' on 'interface'\n"
+ " to address 'addr' from dos filesystem.\n"
+ " 'pos' gives the file position to start loading from.\n"
+ " If 'pos' is omitted, 0 is used. 'pos' requires 'bytes'.\n"
+ " 'bytes' gives the size to load. If 'bytes' is 0 or omitted,\n"
+ " the load stops on end of file.\n"
+ " All numeric parameters are assumed to be hex."
);
-int do_fat_ls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_fat_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
- char *filename = "/";
- int ret;
- int dev=0;
- int part=1;
- char *ep;
- block_dev_desc_t *dev_desc=NULL;
-
- if (argc < 3) {
- printf("usage: fatls <interface> <dev[:part]> [directory]\n");
- return 0;
- }
- dev = (int)simple_strtoul(argv[2], &ep, 16);
- dev_desc = get_dev(argv[1],dev);
- if (dev_desc == NULL) {
- puts("\n** Invalid boot device **\n");
- 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 (fat_register_device(dev_desc,part)!=0) {
- printf("\n** Unable to use %s %d:%d for fatls **\n",
- argv[1], dev, part);
- return 1;
- }
- if (argc == 4)
- ret = file_fat_ls(argv[3]);
- else
- ret = file_fat_ls(filename);
-
- if(ret!=0)
- printf("No Fat FS detected\n");
- return ret;
+ return do_ls(cmdtp, flag, argc, argv, FS_TYPE_FAT);
}
U_BOOT_CMD(
fatls, 4, 1, do_fat_ls,
"list files in a directory (default /)",
- "<interface> <dev[:part]> [directory]\n"
+ "<interface> [<dev[:part]>] [directory]\n"
" - list files from 'dev' on 'interface' in a 'directory'"
);
-int do_fat_fsinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_fat_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc,
+ char * const argv[])
{
- int dev=0;
- int part=1;
- char *ep;
- block_dev_desc_t *dev_desc=NULL;
+ int dev, part;
+ block_dev_desc_t *dev_desc;
+ disk_partition_t info;
if (argc < 2) {
- printf("usage: fatinfo <interface> <dev[:part]>\n");
+ printf("usage: fatinfo <interface> [<dev[:part]>]\n");
return 0;
}
- dev = (int)simple_strtoul(argv[2], &ep, 16);
- dev_desc = get_dev(argv[1],dev);
- if (dev_desc == NULL) {
- puts("\n** Invalid boot device **\n");
+
+ part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+ if (part < 0)
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 (fat_register_device(dev_desc,part)!=0) {
+
+ dev = dev_desc->dev;
+ if (fat_set_blk_dev(dev_desc, &info) != 0) {
printf("\n** Unable to use %s %d:%d for fatinfo **\n",
argv[1], dev, part);
return 1;
@@ -181,6 +92,56 @@ int do_fat_fsinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
U_BOOT_CMD(
fatinfo, 3, 1, do_fat_fsinfo,
"print information about filesystem",
- "<interface> <dev[:part]>\n"
+ "<interface> [<dev[:part]>]\n"
" - print information about filesystem from 'dev' on 'interface'"
);
+
+#ifdef CONFIG_FAT_WRITE
+static int do_fat_fswrite(cmd_tbl_t *cmdtp, int flag,
+ int argc, char * const argv[])
+{
+ long size;
+ unsigned long addr;
+ unsigned long count;
+ block_dev_desc_t *dev_desc = NULL;
+ disk_partition_t info;
+ int dev = 0;
+ int part = 1;
+
+ if (argc < 5)
+ return cmd_usage(cmdtp);
+
+ part = get_device_and_partition(argv[1], argv[2], &dev_desc, &info, 1);
+ if (part < 0)
+ return 1;
+
+ dev = dev_desc->dev;
+
+ if (fat_set_blk_dev(dev_desc, &info) != 0) {
+ printf("\n** Unable to use %s %d:%d for fatwrite **\n",
+ argv[1], dev, part);
+ return 1;
+ }
+ addr = simple_strtoul(argv[3], NULL, 16);
+ count = simple_strtoul(argv[5], NULL, 16);
+
+ size = file_fat_write(argv[4], (void *)addr, count);
+ if (size == -1) {
+ printf("\n** Unable to write \"%s\" from %s %d:%d **\n",
+ argv[4], argv[1], dev, part);
+ return 1;
+ }
+
+ printf("%ld bytes written\n", size);
+
+ return 0;
+}
+
+U_BOOT_CMD(
+ fatwrite, 6, 0, do_fat_fswrite,
+ "write file into a dos filesystem",
+ "<interface> <dev[:part]> <addr> <filename> <bytes>\n"
+ " - write file 'filename' from the address 'addr' in RAM\n"
+ " to 'dev' on 'interface'"
+);
+#endif
diff --git a/u-boot/common/cmd_fs.c b/u-boot/common/cmd_fs.c
new file mode 100755
index 0000000..a681d03
--- /dev/null
+++ b/u-boot/common/cmd_fs.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
+ *
+ * Inspired by cmd_ext_common.c, cmd_fat.c.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <fs.h>
+
+int do_load_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ return do_load(cmdtp, flag, argc, argv, FS_TYPE_ANY, 0);
+}
+
+U_BOOT_CMD(
+ load, 7, 0, do_load_wrapper,
+ "load binary file from a filesystem",
+ "<interface> [<dev[:part]> [<addr> [<filename> [bytes [pos]]]]]\n"
+ " - Load binary file 'filename' from partition 'part' on device\n"
+ " type 'interface' instance 'dev' to address 'addr' in memory.\n"
+ " 'bytes' gives the size to load in bytes.\n"
+ " If 'bytes' is 0 or omitted, the file is read until the end.\n"
+ " 'pos' gives the file byte position to start reading from.\n"
+ " If 'pos' is 0 or omitted, the file is read from the start.\n"
+ " All numeric parameters are assumed to be decimal,\n"
+ " unless specified otherwise using a leading \"0x\"."
+);
+
+int do_ls_wrapper(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ return do_ls(cmdtp, flag, argc, argv, FS_TYPE_ANY);
+}
+
+U_BOOT_CMD(
+ ls, 4, 1, do_ls_wrapper,
+ "list files in a directory (default /)",
+ "<interface> [<dev[:part]> [directory]]\n"
+ " - List files in directory 'directory' of partition 'part' on\n"
+ " device type 'interface' instance 'dev'."
+);
diff --git a/u-boot/common/cmd_jffs2.c b/u-boot/common/cmd_jffs2.c
index 27296dd..5843de8 100644
--- a/u-boot/common/cmd_jffs2.c
+++ b/u-boot/common/cmd_jffs2.c
@@ -617,21 +617,21 @@ int do_jffs2_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
/***************************************************/
U_BOOT_CMD(
- fsload, 3, 0, do_jffs2_fsload,
- "load binary file from a filesystem image",
+ jcload, 3, 0, do_jffs2_fsload,
+ "load binary file from a JFFS2/CRAMFS filesystem image",
"[ off ] [ filename ]\n"
" - load binary file from flash bank\n"
" with offset 'off'"
);
U_BOOT_CMD(
- ls, 2, 1, do_jffs2_ls,
- "list files in a directory (default /)",
+ jcls, 2, 1, do_jffs2_ls,
+ "list files in a JFFS2/CRAMFS directory (default /)",
"[ directory ]"
);
U_BOOT_CMD(
- fsinfo, 1, 1, do_jffs2_fsinfo,
- "print information about filesystems",
+ jcinfo, 1, 1, do_jffs2_fsinfo,
+ "print information about JFFS2/CRAMFS filesystems",
""
);
/***************************************************/