1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2005-02-22 Bernard The first version. 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #ifndef __DFS_FS_H__ 12*10465441SEvalZero #define __DFS_FS_H__ 13*10465441SEvalZero 14*10465441SEvalZero #include <dfs.h> 15*10465441SEvalZero 16*10465441SEvalZero #ifdef __cplusplus 17*10465441SEvalZero extern "C" { 18*10465441SEvalZero #endif 19*10465441SEvalZero 20*10465441SEvalZero /* Pre-declaration */ 21*10465441SEvalZero struct dfs_filesystem; 22*10465441SEvalZero struct dfs_fd; 23*10465441SEvalZero 24*10465441SEvalZero /* File system operations */ 25*10465441SEvalZero struct dfs_filesystem_ops 26*10465441SEvalZero { 27*10465441SEvalZero char *name; 28*10465441SEvalZero uint32_t flags; /* flags for file system operations */ 29*10465441SEvalZero 30*10465441SEvalZero /* operations for file */ 31*10465441SEvalZero const struct dfs_file_ops *fops; 32*10465441SEvalZero 33*10465441SEvalZero /* mount and unmount file system */ 34*10465441SEvalZero int (*mount) (struct dfs_filesystem *fs, unsigned long rwflag, const void *data); 35*10465441SEvalZero int (*unmount) (struct dfs_filesystem *fs); 36*10465441SEvalZero 37*10465441SEvalZero /* make a file system */ 38*10465441SEvalZero int (*mkfs) (rt_device_t devid); 39*10465441SEvalZero int (*statfs) (struct dfs_filesystem *fs, struct statfs *buf); 40*10465441SEvalZero 41*10465441SEvalZero int (*unlink) (struct dfs_filesystem *fs, const char *pathname); 42*10465441SEvalZero int (*stat) (struct dfs_filesystem *fs, const char *filename, struct stat *buf); 43*10465441SEvalZero int (*rename) (struct dfs_filesystem *fs, const char *oldpath, const char *newpath); 44*10465441SEvalZero }; 45*10465441SEvalZero 46*10465441SEvalZero /* Mounted file system */ 47*10465441SEvalZero struct dfs_filesystem 48*10465441SEvalZero { 49*10465441SEvalZero rt_device_t dev_id; /* Attached device */ 50*10465441SEvalZero 51*10465441SEvalZero char *path; /* File system mount point */ 52*10465441SEvalZero const struct dfs_filesystem_ops *ops; /* Operations for file system type */ 53*10465441SEvalZero 54*10465441SEvalZero void *data; /* Specific file system data */ 55*10465441SEvalZero }; 56*10465441SEvalZero 57*10465441SEvalZero /* file system partition table */ 58*10465441SEvalZero struct dfs_partition 59*10465441SEvalZero { 60*10465441SEvalZero uint8_t type; /* file system type */ 61*10465441SEvalZero off_t offset; /* partition start offset */ 62*10465441SEvalZero size_t size; /* partition size */ 63*10465441SEvalZero rt_sem_t lock; 64*10465441SEvalZero }; 65*10465441SEvalZero 66*10465441SEvalZero /* mount table */ 67*10465441SEvalZero struct dfs_mount_tbl 68*10465441SEvalZero { 69*10465441SEvalZero const char *device_name; 70*10465441SEvalZero const char *path; 71*10465441SEvalZero const char *filesystemtype; 72*10465441SEvalZero unsigned long rwflag; 73*10465441SEvalZero const void *data; 74*10465441SEvalZero }; 75*10465441SEvalZero 76*10465441SEvalZero int dfs_register(const struct dfs_filesystem_ops *ops); 77*10465441SEvalZero struct dfs_filesystem *dfs_filesystem_lookup(const char *path); 78*10465441SEvalZero const char* dfs_filesystem_get_mounted_path(struct rt_device* device); 79*10465441SEvalZero 80*10465441SEvalZero int dfs_filesystem_get_partition(struct dfs_partition *part, 81*10465441SEvalZero uint8_t *buf, 82*10465441SEvalZero uint32_t pindex); 83*10465441SEvalZero 84*10465441SEvalZero int dfs_mount(const char *device_name, 85*10465441SEvalZero const char *path, 86*10465441SEvalZero const char *filesystemtype, 87*10465441SEvalZero unsigned long rwflag, 88*10465441SEvalZero const void *data); 89*10465441SEvalZero int dfs_unmount(const char *specialfile); 90*10465441SEvalZero 91*10465441SEvalZero int dfs_mkfs(const char *fs_name, const char *device_name); 92*10465441SEvalZero int dfs_statfs(const char *path, struct statfs *buffer); 93*10465441SEvalZero 94*10465441SEvalZero #ifdef __cplusplus 95*10465441SEvalZero } 96*10465441SEvalZero #endif 97*10465441SEvalZero 98*10465441SEvalZero #endif 99