]> Git Repo - J-u-boot.git/blobdiff - include/fs.h
Merge branch 'next' of https://source.denx.de/u-boot/custodians/u-boot-riscv into...
[J-u-boot.git] / include / fs.h
index 29f737b8c2198b1dbd6595b44f1a3f63596ed82c..2474880385d4e6cc540d259b64fdceb6a36887fd 100644 (file)
@@ -5,7 +5,7 @@
 #ifndef _FS_H
 #define _FS_H
 
-#include <common.h>
+#include <rtc.h>
 
 struct cmd_tbl;
 
@@ -15,6 +15,9 @@ struct cmd_tbl;
 #define FS_TYPE_SANDBOX        3
 #define FS_TYPE_UBIFS  4
 #define FS_TYPE_BTRFS  5
+#define FS_TYPE_SQUASHFS 6
+#define FS_TYPE_EROFS   7
+#define FS_TYPE_SEMIHOSTING 8
 
 struct blk_desc;
 
@@ -22,10 +25,10 @@ struct blk_desc;
  * do_fat_fsload - Run the fatload command
  *
  * @cmdtp: Command information for fatload
- * @flag: Command flags (CMD_FLAG_...)
+ * @flag: Command flags (CMD_FLAG\_...)
  * @argc: Number of arguments
  * @argv: List of arguments
- * @return result (see enum command_ret_t)
+ * Return: result (see enum command_ret_t)
  */
 int do_fat_fsload(struct cmd_tbl *cmdtp, int flag, int argc,
                  char *const argv[]);
@@ -34,15 +37,15 @@ int do_fat_fsload(struct cmd_tbl *cmdtp, int flag, int argc,
  * do_ext2load - Run the ext2load command
  *
  * @cmdtp: Command information for ext2load
- * @flag: Command flags (CMD_FLAG_...)
+ * @flag: Command flags (CMD_FLAG\_...)
  * @argc: Number of arguments
  * @argv: List of arguments
- * @return result (see enum command_ret_t)
+ * Return: result (see enum command_ret_t)
  */
 int do_ext2load(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
 
 /*
- * Tell the fs layer which block device an partition to use for future
+ * Tell the fs layer which block device and partition to use for future
  * commands. This also internally identifies the filesystem that is present
  * within the partition. The identification process may be limited to a
  * specific filesystem type by passing FS_* in the fstype parameter.
@@ -53,6 +56,17 @@ int do_ext2load(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
  */
 int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype);
 
+/**
+ * fs_set_type() - Tell fs layer which filesystem type is used
+ *
+ * This is needed when reading from a non-block device such as sandbox. It does
+ * a similar job to fs_set_blk_dev() but just sets the filesystem type instead
+ * of detecting it and loading it on the block device
+ *
+ * @type: Filesystem type to use (FS_TYPE...)
+ */
+void fs_set_type(int type);
+
 /*
  * fs_set_blk_dev_with_part - Set current block device + partition
  *
@@ -116,7 +130,7 @@ int fs_exists(const char *filename);
  *
  * @filename: Name of the file
  * @size: Size of file
- * @return 0 if ok with valid *size, negative on error
+ * Return: 0 if ok with valid *size, negative on error
  */
 int fs_size(const char *filename, loff_t *size);
 
@@ -131,7 +145,7 @@ int fs_size(const char *filename, loff_t *size);
  * @offset:    offset in the file from where to start reading
  * @len:       the number of bytes to read. Use 0 to read entire file.
  * @actread:   returns the actual number of bytes read
- * Return:     0 if OK with valid *actread, -1 on error conditions
+ * Return:     0 if OK with valid @actread, -1 on error conditions
  */
 int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
            loff_t *actread);
@@ -146,7 +160,7 @@ int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
  * @offset:    offset in the file from where to start writing
  * @len:       the number of bytes to write
  * @actwrite:  returns the actual number of bytes written
- * Return:     0 if OK with valid *actwrite, -1 on error conditions
+ * Return:     0 if OK with valid @actwrite, -1 on error conditions
  */
 int fs_write(const char *filename, ulong addr, loff_t offset, loff_t len,
             loff_t *actwrite);
@@ -159,69 +173,100 @@ int fs_write(const char *filename, ulong addr, loff_t offset, loff_t len,
 #define FS_DT_REG  8         /* regular file */
 #define FS_DT_LNK  10        /* symbolic link */
 
-/*
- * A directory entry, returned by fs_readdir().  Returns information
+#define FS_DIRENT_NAME_LEN 256
+
+/**
+ * struct fs_dirent - directory entry
+ *
+ * A directory entry, returned by fs_readdir(). Returns information
  * about the file/directory at the current directory entry position.
  */
 struct fs_dirent {
-       unsigned type;       /* one of FS_DT_x (not a mask) */
-       loff_t size;         /* size in bytes */
-       char name[256];
+       /** @type:              one of FS_DT_x (not a mask) */
+       unsigned int type;
+       /** @size:              file size */
+       loff_t size;
+       /** @attr:              attribute flags (FS_ATTR_*) */
+       u32 attr;
+       /** @create_time:       time of creation */
+       struct rtc_time create_time;
+       /** @access_time:       time of last access */
+       struct rtc_time access_time;
+       /** @change_time:       time of last modification */
+       struct rtc_time change_time;
+       /** @name:              file name */
+       char name[FS_DIRENT_NAME_LEN];
 };
 
-/* Note: fs_dir_stream should be treated as opaque to the user of fs layer */
+/**
+ * struct fs_dir_stream - Structure representing an opened directory
+ *
+ * Struct fs_dir_stream should be treated opaque to the user of fs layer.
+ * The fields @desc and @part are used by the fs layer.
+ * File system drivers pass additional private fields with the pointers
+ * to this structure.
+ *
+ * @desc:      block device descriptor
+ * @part:      partition number
+ */
 struct fs_dir_stream {
-       /* private to fs. layer: */
        struct blk_desc *desc;
        int part;
 };
 
-/*
+/**
  * fs_opendir - Open a directory
  *
- * @filename: the path to directory to open
- * @return a pointer to the directory stream or NULL on error and errno
- *    set appropriately
+ * .. note::
+ *    The returned struct fs_dir_stream should be treated opaque to the
+ *    user of the fs layer.
+ *
+ * @filename: path to the directory to open
+ * Return:
+ * A pointer to the directory stream or NULL on error and errno set
+ * appropriately
  */
 struct fs_dir_stream *fs_opendir(const char *filename);
 
-/*
+/**
  * fs_readdir - Read the next directory entry in the directory stream.
  *
- * Works in an analogous way to posix readdir().  The previously returned
- * directory entry is no longer valid after calling fs_readdir() again.
+ * fs_readir works in an analogous way to posix readdir().
+ * The previously returned directory entry is no longer valid after calling
+ * fs_readdir() again.
  * After fs_closedir() is called, the returned directory entry is no
  * longer valid.
  *
  * @dirs: the directory stream
- * @return the next directory entry (only valid until next fs_readdir() or
- *    fs_closedir() call, do not attempt to free()) or NULL if the end of
- *    the directory is reached.
+ * Return:
+ * the next directory entry (only valid until next fs_readdir() or
+ * fs_closedir() call, do not attempt to free()) or NULL if the end of
+ * the directory is reached.
  */
 struct fs_dirent *fs_readdir(struct fs_dir_stream *dirs);
 
-/*
+/**
  * fs_closedir - close a directory stream
  *
  * @dirs: the directory stream
  */
 void fs_closedir(struct fs_dir_stream *dirs);
 
-/*
+/**
  * fs_unlink - delete a file or directory
  *
  * If a given name is a directory, it will be deleted only if it's empty
  *
  * @filename: Name of file or directory to delete
- * @return 0 on success, -1 on error conditions
+ * Return: 0 on success, -1 on error conditions
  */
 int fs_unlink(const char *filename);
 
-/*
+/**
  * fs_mkdir - Create a directory
  *
  * @filename: Name of directory to create
- * @return 0 on success, -1 on error conditions
+ * Return: 0 on success, -1 on error conditions
  */
 int fs_mkdir(const char *filename);
 
@@ -259,4 +304,53 @@ int do_fs_uuid(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[],
  */
 int do_fs_type(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
 
+/**
+ * do_fs_types - List supported filesystems.
+ *
+ * @cmdtp: Command information for fstypes
+ * @flag: Command flags (CMD_FLAG\_...)
+ * @argc: Number of arguments
+ * @argv: List of arguments
+ * Return: result (see enum command_ret_t)
+ */
+int do_fs_types(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]);
+
+/**
+ * fs_read_alloc() - Allocate space for a file and read it
+ *
+ * You must call fs_set_blk_dev() or a similar function before calling this,
+ * since that sets up the block device to use.
+ *
+ * The file is terminated with a nul character
+ *
+ * @fname: Filename to read
+ * @size: Size of file to read (must be correct!)
+ * @align: Alignment to use for memory allocation (0 for default: ARCH_DMA_MINALIGN)
+ * @bufp: On success, returns the allocated buffer with the nul-terminated file
+ *     in it
+ * Return: 0 if OK, -ENOMEM if out of memory, -EIO if read failed
+ */
+int fs_read_alloc(const char *fname, ulong size, uint align, void **bufp);
+
+/**
+ * fs_load_alloc() - Load a file into allocated space
+ *
+ * The file is terminated with a nul character
+ *
+ * @ifname: Interface name to read from (e.g. "mmc")
+ * @dev_part_str: Device and partition string (e.g. "1:2")
+ * @fname: Filename to read
+ * @max_size: Maximum allowed size for the file (use 0 for 1GB)
+ * @align: Alignment to use for memory allocation (0 for default)
+ * @bufp: On success, returns the allocated buffer with the nul-terminated file
+ *     in it
+ * @sizep: On success, returns the size of the file
+ * Return: 0 if OK, -ENOMEM if out of memory, -ENOENT if the file does not
+ * exist, -ENOMEDIUM if the device does not exist, -E2BIG if the file is too
+ * large (greater than @max_size), -EIO if read failed
+ */
+int fs_load_alloc(const char *ifname, const char *dev_part_str,
+                 const char *fname, ulong max_size, ulong align, void **bufp,
+                 ulong *sizep);
+
 #endif /* _FS_H */
This page took 0.033663 seconds and 4 git commands to generate.