[U-Boot] [PATCH V4 2/3] fs: separate CONFIG_FS_{FAT, EXT4} from CONFIG_CMD_{FAT, EXT*}

Stephen Warren
2012-10-22T16:43:50Z

From: Stephen Warren <swarren@nvidia.com>

This makes the FAT and ext4 filesystem implementations build if
CONFIG_FS_{FAT,EXT4} are defined, rather than basing the build on
whether CONFIG_CMD_{FAT,EXT*} are defined. This will allow the
filesystems to be built separately from the filesystem-specific commands
that use them. This paves the way for the creation of filesystem-generic
commands that used the filesystems, without requiring the filesystem-
specific commands.

Minor documentation changes are made for this change.

The new config options are automatically selected by the old config
options to retain backwards-compatibility.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Beno?t Th?baudeau <benoit.thebaudeau@advansee.com>
---
v4: No change.
v3: No change.
v2: New patch.
---
README | 4 +++-
doc/README.ext4 | 13 +++++++++++++
fs/ext4/Makefile | 7 ++-----
fs/ext4/ext4_common.c | 2 +-
fs/ext4/ext4_common.h | 4 ++--
fs/ext4/ext4fs.c | 2 +-
fs/fat/Makefile | 4 ++--
include/config_fallbacks.h | 13 +++++++++++++
include/ext4fs.h | 2 +-
9 files changed, 38 insertions(+), 13 deletions(-)

diff --git a/README b/README
index 9804cea..f22ed1b 100644
--- a/README
+++ b/README
@@ -801,9 +801,11 @@ The following options need to be configured:
CONFIG_CMD_EEPROM * EEPROM read/write support
CONFIG_CMD_ELF * bootelf, bootvx
CONFIG_CMD_EXPORTENV * export the environment
+ CONFIG_CMD_EXT2 * ext2 command support
+ CONFIG_CMD_EXT4 * ext4 command support
CONFIG_CMD_SAVEENV saveenv
CONFIG_CMD_FDC * Floppy Disk Support
- CONFIG_CMD_FAT * FAT partition support
+ CONFIG_CMD_FAT * FAT command support
CONFIG_CMD_FDOS * Dos diskette Support
CONFIG_CMD_FLASH flinfo, erase, protect
CONFIG_CMD_FPGA FPGA device initialization support
diff --git a/doc/README.ext4 b/doc/README.ext4
index b3ea8b7..b7d0ad3 100644
--- a/doc/README.ext4
+++ b/doc/README.ext4
@@ -1,15 +1,28 @@
This patch series adds support for ext4 ls,load and write features in uboot
Journaling is supported for write feature.

+To enable support for the ext4 (and ext2) filesystem implementation,
+#define CONFIG_FS_EXT4
+
+If you want write support,
+#define CONFIG_EXT4_WRITE
+
To Enable ext2 ls and load commands, modify the board specific config file with
#define CONFIG_CMD_EXT2
+This automatically defines CONFIG_FS_EXT4 for you.

To Enable ext4 ls and load commands, modify the board specific config file with
#define CONFIG_CMD_EXT4
+This automatically defines CONFIG_FS_EXT4 for you.

To enable ext4 write command, modify the board specific config file with
#define CONFIG_CMD_EXT4
#define CONFIG_CMD_EXT4_WRITE
+These automatically define CONFIG_FS_EXT4 and CONFIG_EXT4_WRITE for you.
+
+Also relevant are the generic filesystem commands,
+#define CONFIG_CMD_FS_GENERIC
+This does not automatically enable EXT4 support for you.

Steps to test:

diff --git a/fs/ext4/Makefile b/fs/ext4/Makefile
index 82cd9ae..bb801f9 100644
--- a/fs/ext4/Makefile
+++ b/fs/ext4/Makefile
@@ -30,11 +30,8 @@ include $(TOPDIR)/config.mk
LIB = $(obj)libext4fs.o

AOBJS =
-COBJS-$(CONFIG_CMD_EXT4) := ext4fs.o ext4_common.o dev.o
-ifndef CONFIG_CMD_EXT4
-COBJS-$(CONFIG_CMD_EXT2) := ext4fs.o ext4_common.o dev.o
-endif
-COBJS-$(CONFIG_CMD_EXT4_WRITE) += ext4_journal.o crc16.o
+COBJS-$(CONFIG_FS_EXT4) := ext4fs.o ext4_common.o dev.o
+COBJS-$(CONFIG_EXT4_WRITE) += ext4_journal.o crc16.o

SRCS := $(AOBJS:.o=.S) $(COBJS-y:.o=.c)
OBJS := $(addprefix $(obj),$(AOBJS) $(COBJS-y))
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index d6d55b9..323875f 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -56,7 +56,7 @@ int ext4fs_indir3_blkno = -1;
struct ext2_inode *g_parent_inode;
static int symlinknest;

-#if defined(CONFIG_CMD_EXT4_WRITE)
+#if defined(CONFIG_EXT4_WRITE)
uint32_t ext4fs_div_roundup(uint32_t size, uint32_t n)
{
uint32_t res = size / n;
diff --git a/fs/ext4/ext4_common.h b/fs/ext4/ext4_common.h
index f728134..87cab16 100644
--- a/fs/ext4/ext4_common.h
+++ b/fs/ext4/ext4_common.h
@@ -37,7 +37,7 @@
#include <ext4fs.h>
#include <malloc.h>
#include <asm/errno.h>
-#if defined(CONFIG_CMD_EXT4_WRITE)
+#if defined(CONFIG_EXT4_WRITE)
#include "ext4_journal.h"
#include "crc16.h"
#endif
@@ -71,7 +71,7 @@ int ext4fs_find_file(const char *path, struct ext2fs_node *rootnode,
int ext4fs_iterate_dir(struct ext2fs_node *dir, char *name,
struct ext2fs_node **fnode, int *ftype);

-#if defined(CONFIG_CMD_EXT4_WRITE)
+#if defined(CONFIG_EXT4_WRITE)
uint32_t ext4fs_div_roundup(uint32_t size, uint32_t n);
int ext4fs_checksum_update(unsigned int i);
int ext4fs_get_parent_inode_num(const char *dirname, char *dname, int flags);
diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
index 3a5ef20..06536ba 100644
--- a/fs/ext4/ext4fs.c
+++ b/fs/ext4/ext4fs.c
@@ -196,7 +196,7 @@ int ext4fs_read(char *buf, unsigned len)
return ext4fs_read_file(ext4fs_file, 0, len, buf);
}

-#if defined(CONFIG_CMD_EXT4_WRITE)
+#if defined(CONFIG_EXT4_WRITE)
static void ext4fs_update(void)
{
short i;
diff --git a/fs/fat/Makefile b/fs/fat/Makefile
index 9635d36..3e33e38 100644
--- a/fs/fat/Makefile
+++ b/fs/fat/Makefile
@@ -24,11 +24,11 @@ include $(TOPDIR)/config.mk
LIB = $(obj)libfat.o

AOBJS =
-COBJS-$(CONFIG_CMD_FAT) := fat.o
+COBJS-$(CONFIG_FS_FAT) := fat.o
COBJS-$(CONFIG_FAT_WRITE):= fat_write.o

ifndef CONFIG_SPL_BUILD
-COBJS-$(CONFIG_CMD_FAT) += file.o
+COBJS-$(CONFIG_FS_FAT) += file.o
endif

SRCS := $(AOBJS:.o=.S) $(COBJS-y:.o=.c)
diff --git a/include/config_fallbacks.h b/include/config_fallbacks.h
index 430890c..bfb9680 100644
--- a/include/config_fallbacks.h
+++ b/include/config_fallbacks.h
@@ -13,4 +13,17 @@
#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
#endif

+#if defined(CONFIG_CMD_FAT) && !defined(CONFIG_FS_FAT)
+#define CONFIG_FS_FAT
+#endif
+
+#if (defined(CONFIG_CMD_EXT4) || defined(CONFIG_CMD_EXT2)) && \
+ !defined(CONFIG_FS_EXT4)
+#define CONFIG_FS_EXT4
+#endif
+
+#if defined(CONFIG_CMD_EXT4_WRITE) && !defined(CONFIG_EXT4_WRITE)
+#define CONFIG_EXT4_WRITE
+#endif
+
#endif /* __CONFIG_FALLBACKS_H */
diff --git a/include/ext4fs.h b/include/ext4fs.h
index 23298fc..3b59d15 100644
--- a/include/ext4fs.h
+++ b/include/ext4fs.h
@@ -116,7 +116,7 @@ struct ext_filesystem {
extern struct ext2_data *ext4fs_root;
extern struct ext2fs_node *ext4fs_file;

-#if defined(CONFIG_CMD_EXT4_WRITE)
+#if defined(CONFIG_EXT4_WRITE)
extern struct ext2_inode *g_parent_inode;
extern int gd_index;
extern int gindex;
--
1.7.0.4