/** * @file * * Simple mount point manager * ========================== * * Add up to MAX_MOUNTS (as defined in kernel.h) mountpoints and use the * provided functions to transparently dispatch them to the undelying * infrastructure provided via the mount_struct structures * * unt_file_open() and mount_read_dir() * * The mount directories itself should exist inside the * root direcotry '/'. */ #ifndef MOUNT_H #define MOUNT_H #include #include // provides fs_dirent structure for read_dir() #include "fd.h" // file descriptor returned by open /** the possible values for mount_struct.type */ enum MOUNT_TYPE{ MOUNT_TYPE_EXT2 = 1, MOUNT_TYPE_SYS = 3 }; /** struct providing all the required info, about a single mountpoint */ typedef struct mount_struct { uint32_t type; // MOUNT_TYPE char path[256]; // where are we mounted (provide leading and trailing slash!) fd (*mount_file_open)(struct mount_struct*, char *path); int (*mount_read_dir) (struct mount_struct*, char *path, struct dirent *dirs, uint32_t *pos); void *data; // pointer to some opaque private data }mount; /** adds a new mountpoints */ void mount_add(mount mnt); /** dispatchers to according mount points */ fd mount_file_open(char *path); /** TODO: should use fd number instead of PATH on each call*/ int mount_read_dir (char *path, struct dirent *dirs, uint32_t *pos); /** sysfs interface / exposing status via /sysfs/ file */ void mount_sysfs(ringbuffer *r, void (*f)(ringbuffer *r,char *fmt, ...)); #endif