Changeset 05b9912 in mainline for uspace/srv/vfs/vfs.h


Ignore:
Timestamp:
2009-06-03T18:54:49Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
17fd1d4
Parents:
215abc1
Message:

VFS rewrite:

  • add new VFS methods
    • VFS_NODE for getting VFS node for a file descriptor
    • VFS_OPEN_NODE for opening an i-node directly
    • VFS_DEVICE for getting the underlying device of a file (if any)
    • VFS_SYNC for syncing buffers
  • L_OPEN flag is set to underlying filesystem in VFS_LOOKUP when opening a file to support initialization (if any)
  • VFS_CLOSE is now propagated to underlying filesystem to support cleanup (if any)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs.h

    r215abc1 r05b9912  
    2929/** @addtogroup fs
    3030 * @{
    31  */ 
     31 */
    3232
    3333#ifndef VFS_VFS_H_
     
    4141#include <devmap.h>
    4242#include <bool.h>
     43#include <ipc/vfs.h>
    4344
    4445// FIXME: according to CONFIG_DEBUG
    45 // #define dprintf(...) printf(__VA_ARGS__)
     46// #define dprintf(...)  printf(__VA_ARGS__)
    4647
    4748#define dprintf(...)
    48 
    49 #define VFS_FIRST       IPC_FIRST_USER_METHOD
    50 
    51 /* Basic types. */
    52 typedef int16_t fs_handle_t;
    53 typedef uint32_t fs_index_t;
    54 
    55 typedef enum {
    56         VFS_READ = VFS_FIRST,
    57         VFS_WRITE,
    58         VFS_TRUNCATE,
    59         VFS_MOUNT,
    60         VFS_UNMOUNT,
    61         VFS_LAST_CMN,   /* keep this the last member of this enum */
    62 } vfs_request_cmn_t;
    63 
    64 typedef enum {
    65         VFS_LOOKUP = VFS_LAST_CMN,
    66         VFS_MOUNTED,
    67         VFS_DESTROY,
    68         VFS_LAST_CLNT,  /* keep this the last member of this enum */
    69 } vfs_request_clnt_t;
    70 
    71 typedef enum {
    72         VFS_REGISTER = VFS_LAST_CMN,
    73         VFS_OPEN,
    74         VFS_CLOSE,
    75         VFS_SEEK,
    76         VFS_MKDIR,
    77         VFS_UNLINK,
    78         VFS_RENAME,
    79         VFS_LAST_SRV,   /* keep this the last member of this enum */
    80 } vfs_request_srv_t;
    81 
    82 #define FS_NAME_MAXLEN  20
    83 
    84 /**
    85  * A structure like this is passed to VFS by each individual FS upon its
    86  * registration. It assosiates a human-readable identifier with each
    87  * registered FS.
    88  */
    89 typedef struct {
    90         /** Unique identifier of the fs. */
    91         char name[FS_NAME_MAXLEN + 1];
    92 } vfs_info_t;
    9349
    9450/**
     
    10662 * VFS_PAIR uniquely represents a file system instance.
    10763 */
    108 #define VFS_PAIR                \
    109         fs_handle_t fs_handle;  \
     64#define VFS_PAIR \
     65        fs_handle_t fs_handle; \
    11066        dev_handle_t dev_handle;
    11167
     
    11773 *              IPC reply.
    11874 */
    119 #define VFS_TRIPLET     \
    120         VFS_PAIR;       \
     75#define VFS_TRIPLET \
     76        VFS_PAIR; \
    12177        fs_index_t index;
    12278
     
    12884        VFS_TRIPLET;
    12985} vfs_triplet_t;
    130 
    131 /*
    132  * Lookup flags.
    133  */
    134 /**
    135  * No lookup flags used.
    136  */
    137 #define L_NONE          0
    138 /**
    139  * Lookup will succeed only if the object is a regular file.  If L_CREATE is
    140  * specified, an empty file will be created. This flag is mutually exclusive
    141  * with L_DIRECTORY.
    142  */
    143 #define L_FILE          1
    144 /**
    145  * Lookup wil succeed only if the object is a directory. If L_CREATE is
    146  * specified, an empty directory will be created. This flag is mutually
    147  * exclusive with L_FILE.
    148  */
    149 #define L_DIRECTORY     2
    150 /**
    151  * When used with L_CREATE, L_EXCLUSIVE will cause the lookup to fail if the
    152  * object already exists. L_EXCLUSIVE is implied when L_DIRECTORY is used.
    153  */
    154 #define L_EXCLUSIVE     4
    155 /**
    156  * L_CREATE is used for creating both regular files and directories.
    157  */
    158 #define L_CREATE        8
    159 /**
    160  * L_LINK is used for linking to an already existing nodes.
    161  */
    162 #define L_LINK          16
    163 /**
    164  * L_UNLINK is used to remove leaves from the file system namespace. This flag
    165  * cannot be passed directly by the client, but will be set by VFS during
    166  * VFS_UNLINK.
    167  */
    168 #define L_UNLINK        32     
    16986
    17087typedef enum vfs_node_type {
     
    235152extern vfs_pair_t rootfs;       /**< Root file system. */
    236153
    237 #define MAX_PATH_LEN            (64 * 1024)
    238 
    239 #define PLB_SIZE                (2 * MAX_PATH_LEN)
    240 
    241154/** Each instance of this type describes one path lookup in progress. */
    242155typedef struct {
     
    260173extern fs_handle_t fs_name_to_handle(char *, bool);
    261174
    262 extern int vfs_lookup_internal(char *, int, vfs_lookup_res_t *, vfs_pair_t *,
    263     ...);
     175extern int vfs_lookup_internal(char *, int, vfs_lookup_res_t *,
     176    vfs_pair_t *, ...);
     177extern int vfs_open_node_internal(vfs_lookup_res_t *);
    264178
    265179extern bool vfs_nodes_init(void);
     
    284198extern void vfs_mount(ipc_callid_t, ipc_call_t *);
    285199extern void vfs_open(ipc_callid_t, ipc_call_t *);
     200extern void vfs_open_node(ipc_callid_t, ipc_call_t *);
     201extern void vfs_device(ipc_callid_t, ipc_call_t *);
     202extern void vfs_sync(ipc_callid_t, ipc_call_t *);
     203extern void vfs_node(ipc_callid_t, ipc_call_t *);
    286204extern void vfs_close(ipc_callid_t, ipc_call_t *);
    287205extern void vfs_read(ipc_callid_t, ipc_call_t *);
Note: See TracChangeset for help on using the changeset viewer.