rt-thread/components/dfs/dfs_v2/include/dfs_fs.h

104 lines
2.7 KiB
C
Raw Normal View History

/*
2023-06-10 21:35:25 +08:00
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2005-02-22 Bernard The first version.
2023-06-10 21:35:25 +08:00
* 2023-05-05 Bernard Change to dfs v2.0
*/
2019-04-03 18:09:52 +08:00
#ifndef __DFS_FS_H__
#define __DFS_FS_H__
#include <dfs.h>
2023-06-10 21:35:25 +08:00
#include <dfs_file.h>
2021-11-10 07:40:53 +08:00
#ifdef __cplusplus
2023-06-10 21:35:25 +08:00
extern "C"
{
#endif
2023-06-10 21:35:25 +08:00
/* file system partition table */
struct dfs_partition
{
uint8_t type; /* file system type */
off_t offset; /* partition start offset */
size_t size; /* partition size */
rt_sem_t lock;
};
struct dfs_attr
{
mode_t st_mode;
};
struct dfs_mnt;
struct dfs_dentry;
struct dfs_vnode;
struct statfs;
struct dfs_filesystem_ops
{
2023-06-10 21:35:25 +08:00
const char *name;
uint32_t flags;
#define FS_NEED_DEVICE 0x1
2023-06-10 21:35:25 +08:00
const struct dfs_file_ops *default_fops;
2023-06-10 21:35:25 +08:00
int (*mount)(struct dfs_mnt *mnt, unsigned long rwflag, const void *data);
int (*umount)(struct dfs_mnt *mnt);
2023-06-10 21:35:25 +08:00
int (*mkfs)(rt_device_t devid, const char *fs_name);
2023-06-10 21:35:25 +08:00
int (*readlink)(struct dfs_dentry *dentry, char *buf, int len);
int (*link)(struct dfs_dentry *src_dentry, struct dfs_dentry *dst_dentry); /*hard link interface */
int (*unlink)(struct dfs_dentry *dentry);
int (*symlink)(struct dfs_dentry *parent_dentry, const char *target, const char *newpath); /*soft link interface*/
2023-06-10 21:35:25 +08:00
int (*rename)(struct dfs_dentry *old_dentry, struct dfs_dentry *new_dentry);
int (*stat)(struct dfs_dentry *dentry, struct stat *buf);
2023-06-10 21:35:25 +08:00
int (*statfs)(struct dfs_mnt *mnt, struct statfs *buf);
2023-06-10 21:35:25 +08:00
int (*setattr) (struct dfs_dentry *dentry, struct dfs_attr *attr);
2023-06-10 21:35:25 +08:00
struct dfs_vnode* (*lookup)(struct dfs_dentry *dentry);
struct dfs_vnode* (*create_vnode)(struct dfs_dentry *dentry, int type, mode_t mode);
int (*free_vnode)(struct dfs_vnode* vnode);
};
2023-06-10 21:35:25 +08:00
struct dfs_filesystem_type
2013-07-22 07:46:10 +08:00
{
2023-06-10 21:35:25 +08:00
const struct dfs_filesystem_ops *fs_ops;
struct dfs_filesystem_type *next;
2013-07-22 07:46:10 +08:00
};
2023-08-02 13:59:43 +08:00
struct dfs_filesystem_type *dfs_filesystems(void);
2023-06-10 21:35:25 +08:00
int dfs_unregister(struct dfs_filesystem_type *fs);
int dfs_register(struct dfs_filesystem_type *fs);
2019-04-03 18:09:52 +08:00
const char *dfs_filesystem_get_mounted_path(struct rt_device *device);
int dfs_mount(const char *device_name,
2023-06-10 21:35:25 +08:00
const char *path,
const char *filesystemtype,
unsigned long rwflag,
const void *data);
2023-08-02 13:59:43 +08:00
int dfs_umount(const char *specialfile, int flags);
int dfs_unmount(const char *specialfile);
2023-08-02 13:59:43 +08:00
int dfs_is_mounted(struct dfs_mnt *mnt);
int dfs_mkfs(const char *fs_name, const char *device_name);
int dfs_statfs(const char *path, struct statfs *buffer);
2023-06-10 21:35:25 +08:00
int dfs_filesystem_get_partition(struct dfs_partition *part,
uint8_t *buf,
uint32_t pindex);
#ifdef __cplusplus
}
#endif
#endif