diff options
Diffstat (limited to 'include/rtems/fs.h')
-rw-r--r-- | include/rtems/fs.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/include/rtems/fs.h b/include/rtems/fs.h new file mode 100644 index 0000000000..4801007c1a --- /dev/null +++ b/include/rtems/fs.h @@ -0,0 +1,109 @@ +/** + * @file rtems/fs.h + * + * @brief Basic Filesystem Types + * + * This file defines basic filesystem types + */ + +/* + * COPYRIGHT (c) 1989-2011. + * On-Line Applications Research Corporation (OAR). + * + * Modifications to support reference counting in the file system are + * Copyright (c) 2012 embedded brains GmbH. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifndef _RTEMS_FS_H +#define _RTEMS_FS_H + +#include <rtems/chain.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * File descriptor Table Information + */ + +/* Forward declarations */ + +/* FIXME: shouldn't this better not be here? */ +typedef struct rtems_libio_tt rtems_libio_t; + +struct rtems_filesystem_mount_table_entry_tt; +typedef struct rtems_filesystem_mount_table_entry_tt + rtems_filesystem_mount_table_entry_t; + +typedef struct _rtems_filesystem_file_handlers_r + rtems_filesystem_file_handlers_r; +typedef struct _rtems_filesystem_operations_table + rtems_filesystem_operations_table; + +/** + * @brief File system location. + * + * @ingroup LibIO + */ +typedef struct rtems_filesystem_location_info_tt { + rtems_chain_node mt_entry_node; + void *node_access; + void *node_access_2; + const rtems_filesystem_file_handlers_r *handlers; + rtems_filesystem_mount_table_entry_t *mt_entry; +} rtems_filesystem_location_info_t; + +/** + * @brief Global file system location. + * + * @ingroup LibIO + * + * The global file system locations are used for + * - the mount point location in the mount table entry, + * - the file system root location in the mount table entry, + * - the root directory location in the user environment, and + * - the current directory location in the user environment. + * + * During the path evaluation global start locations are obtained to ensure + * that the current file system will be not unmounted in the meantime. + * + * To support a release within critical sections of the operating system a + * deferred release is supported. This is similar to malloc() and free(). + * + * @see rtems_filesystem_global_location_obtain() and + * rtems_filesystem_global_location_release(). + */ +typedef struct rtems_filesystem_global_location_t { + rtems_filesystem_location_info_t location; + int reference_count; + + /** + * A release within a critical section of the operating system will add this + * location to a list of deferred released locations. This list is processed + * in the next rtems_filesystem_global_location_obtain() in FIFO order. + */ + struct rtems_filesystem_global_location_t *deferred_released_next; + + /** + * A release within a critical section can happen multiple times. This field + * counts the deferred releases. + */ + int deferred_released_count; +} rtems_filesystem_global_location_t; + +/* + * Return the mount table entry for a path location. + */ +#define rtems_filesystem_location_mount(_pl) ((_pl)->mt_entry) + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ |