Remove all comments and copyrightable content from the moved content. Use BSD-2-Clause license for new file.
Update #3053. Update #3875. --- cpukit/headers.am | 1 + cpukit/include/rtems/confdefs.h | 449 +--------------------------------- cpukit/include/rtems/confdefs/libio.h | 410 +++++++++++++++++++++++++++++++ 3 files changed, 412 insertions(+), 448 deletions(-) create mode 100644 cpukit/include/rtems/confdefs/libio.h diff --git a/cpukit/headers.am b/cpukit/headers.am index e0b5af6402..f64e9867ff 100644 --- a/cpukit/headers.am +++ b/cpukit/headers.am @@ -184,6 +184,7 @@ include_rtems_HEADERS += include/rtems/version.h include_rtems_HEADERS += include/rtems/vmeintr.h include_rtems_HEADERS += include/rtems/watchdogdrv.h include_rtems_confdefs_HEADERS += include/rtems/confdefs/bsp.h +include_rtems_confdefs_HEADERS += include/rtems/confdefs/libio.h include_rtems_confdefs_HEADERS += include/rtems/confdefs/libpci.h include_rtems_confdefs_HEADERS += include/rtems/confdefs/obsolete.h include_rtems_confdefs_HEADERS += include/rtems/confdefs/percpu.h diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h index 240dd855cc..a51693834b 100644 --- a/cpukit/include/rtems/confdefs.h +++ b/cpukit/include/rtems/confdefs.h @@ -50,6 +50,7 @@ #include <rtems/posix/shm.h> #include <rtems/posix/timer.h> #include <rtems/confdefs/obsolete.h> +#include <rtems/confdefs/libio.h> #include <rtems/confdefs/libpci.h> #include <rtems/confdefs/percpu.h> @@ -100,441 +101,6 @@ extern "C" { #undef RTEMS_NEWLIB #endif -#ifndef RTEMS_SCHEDSIM -#include <rtems/libio_.h> - -#ifdef CONFIGURE_INIT - #ifndef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM - RTEMS_SYSINIT_ITEM( - rtems_filesystem_initialize, - RTEMS_SYSINIT_ROOT_FILESYSTEM, - RTEMS_SYSINIT_ORDER_MIDDLE - ); - #endif -#endif -#endif - -/** - * This macro defines the number of POSIX file descriptors allocated - * and managed by libio. These are the "integer" file descriptors that - * are used by calls like open(2) and read(2). - */ -#ifndef CONFIGURE_MAXIMUM_FILE_DESCRIPTORS - #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 3 -#endif - -#ifdef CONFIGURE_INIT - rtems_libio_t rtems_libio_iops[CONFIGURE_MAXIMUM_FILE_DESCRIPTORS]; - - /** - * When instantiating the configuration tables, this variable is - * initialized to specify the maximum number of file descriptors. - */ - const uint32_t rtems_libio_number_iops = RTEMS_ARRAY_SIZE(rtems_libio_iops); -#endif - -/* - * This sets up the resources for the FIFOs/pipes. - */ - -/** - * @defgroup ConfigFilesystems Filesystems and Mount Table Configuration - * - * @ingroup Configuration - * - * Defines to control the file system: - * - * - CONFIGURE_APPLICATION_DISABLE_FILESYSTEM: - * Disable the RTEMS filesystems. You get an empty DEVFS. - * - * - CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM: - * Use the DEVFS as the root file system. Limited functions are - * provided when this is used. - * - * - CONFIGURE_FILESYSTEM_ALL: - * Add file filesystems to the default filesystem table. - * - * List of available file systems. You can define as many as you like: - * - CONFIGURE_FILESYSTEM_IMFS - In Memory File System (IMFS) - * - CONFIGURE_FILESYSTEM_DEVFS - Device File System (DSVFS) - * - CONFIGURE_FILESYSTEM_TFTPFS - TFTP File System, networking enabled - * - CONFIGURE_FILESYSTEM_FTPFS - FTP File System, networking enabled - * - CONFIGURE_FILESYSTEM_NFS - Network File System, networking enabled - * - CONFIGURE_FILESYSTEM_DOSFS - DOS File System, uses libblock - * - CONFIGURE_FILESYSTEM_RFS - RTEMS File System (RFS), uses libblock - * - CONFIGURE_FILESYSTEM_JFFS2 - Journalling Flash File System, Version 2 - * - * Combinations: - * - * - If nothing is defined the base file system is the IMFS. - * - * - If CONFIGURE_APPLICATION_DISABLE_FILESYSTEM is defined all filesystems - * are disabled by force. - * - * - If CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM is defined all filesystems - * are disabled by force and DEVFS is defined. - */ -/**@{*/ - -#ifdef CONFIGURE_INIT - - /* - * Include all file systems. Do this before checking if the filesystem has - * been disabled. - */ - #ifdef CONFIGURE_FILESYSTEM_ALL - #define CONFIGURE_FILESYSTEM_IMFS - #define CONFIGURE_FILESYSTEM_DEVFS - #define CONFIGURE_FILESYSTEM_TFTPFS - #define CONFIGURE_FILESYSTEM_FTPFS - #define CONFIGURE_FILESYSTEM_NFS - #define CONFIGURE_FILESYSTEM_DOSFS - #define CONFIGURE_FILESYSTEM_RFS - #define CONFIGURE_FILESYSTEM_JFFS2 - #endif - - /* - * If disabling the file system, give a compile error if the user has - * configured other filesystem parameters. - */ - #if defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM) - #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - #error "Filesystem disabled and a base filesystem configured." - #endif - - #if defined(CONFIGURE_FILESYSTEM_IMFS) || \ - defined(CONFIGURE_FILESYSTEM_DEVFS) || \ - defined(CONFIGURE_FILESYSTEM_TFTPFS) || \ - defined(CONFIGURE_FILESYSTEM_FTPFS) || \ - defined(CONFIGURE_FILESYSTEM_NFS) || \ - defined(CONFIGURE_FILESYSTEM_DOSFS) || \ - defined(CONFIGURE_FILESYSTEM_RFS) || \ - defined(CONFIGURE_FILESYSTEM_JFFS2) - #error "Filesystem disabled and a filesystem configured." - #endif - #endif - - /* - * If the base filesystem is DEVFS define it else define IMFS. - * We will have either DEVFS or IMFS defined after this. - */ - #if !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM) - #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - #define CONFIGURE_FILESYSTEM_DEVFS - #endif - #endif - -#endif - -#ifndef RTEMS_SCHEDSIM -/** - * IMFS - */ -#include <rtems/imfs.h> - -/** - * This specifies the number of bytes per block for files within the IMFS. - * There are a maximum number of blocks per file so this dictates the maximum - * size of a file. This has to be balanced with the unused portion of each - * block that might be wasted. - */ -#ifndef CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK - #define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK \ - IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK -#endif - -/** - * This defines the IMFS file system table entry. - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_IMFS) && \ - defined(CONFIGURE_FILESYSTEM_IMFS) - #define CONFIGURE_FILESYSTEM_ENTRY_IMFS \ - { RTEMS_FILESYSTEM_TYPE_IMFS, IMFS_initialize } -#endif -#endif - -#ifdef CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM - #define CONFIGURE_IMFS_DISABLE_CHMOD - #define CONFIGURE_IMFS_DISABLE_CHOWN - #define CONFIGURE_IMFS_DISABLE_UTIME - #define CONFIGURE_IMFS_DISABLE_LINK - #define CONFIGURE_IMFS_DISABLE_SYMLINK - #define CONFIGURE_IMFS_DISABLE_READLINK - #define CONFIGURE_IMFS_DISABLE_RENAME - #define CONFIGURE_IMFS_DISABLE_UNMOUNT -#endif - -/** - * DEVFS - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_DEVFS) && \ - defined(CONFIGURE_FILESYSTEM_DEVFS) -#include <rtems/devfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_DEVFS \ - { RTEMS_FILESYSTEM_TYPE_DEVFS, devFS_initialize } -#endif - -/** - * FTPFS - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_FTPFS) && \ - defined(CONFIGURE_FILESYSTEM_FTPFS) - #include <rtems/ftpfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_FTPFS \ - { RTEMS_FILESYSTEM_TYPE_FTPFS, rtems_ftpfs_initialize } -#endif - -/** - * TFTPFS - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_TFTPFS) && \ - defined(CONFIGURE_FILESYSTEM_TFTPFS) - #include <rtems/tftp.h> - #define CONFIGURE_FILESYSTEM_ENTRY_TFTPFS \ - { RTEMS_FILESYSTEM_TYPE_TFTPFS, rtems_tftpfs_initialize } -#endif - -/** - * NFS - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_NFS) && \ - defined(CONFIGURE_FILESYSTEM_NFS) - #include <librtemsNfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_NFS \ - { RTEMS_FILESYSTEM_TYPE_NFS, rtems_nfs_initialize } -#endif - -/** - * DOSFS - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_DOSFS) && \ - defined(CONFIGURE_FILESYSTEM_DOSFS) - #include <rtems/dosfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_DOSFS \ - { RTEMS_FILESYSTEM_TYPE_DOSFS, rtems_dosfs_initialize } -#endif - -/** - * RFS - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_RFS) && \ - defined(CONFIGURE_FILESYSTEM_RFS) - #include <rtems/rtems-rfs.h> - #define CONFIGURE_FILESYSTEM_ENTRY_RFS \ - { RTEMS_FILESYSTEM_TYPE_RFS, rtems_rfs_rtems_initialise } -#endif - -/** - * JFFS2 - */ -#if !defined(CONFIGURE_FILESYSTEM_ENTRY_JFFS2) && \ - defined(CONFIGURE_FILESYSTEM_JFFS2) - #include <rtems/jffs2.h> - #define CONFIGURE_FILESYSTEM_ENTRY_JFFS2 \ - { RTEMS_FILESYSTEM_TYPE_JFFS2, rtems_jffs2_initialize } -#endif - -#ifdef CONFIGURE_INIT - - /** - * DEVFS variables. - * - * The number of individual devices that may be registered - * in the system or the CONFIGURE_MAXIMUM_DEVICES variable - * is defaulted to 4 when a filesystem is enabled, unless - * the bsp overwrides this. In which case the value is set - * to BSP_MAXIMUM_DEVICES. - */ - #ifdef CONFIGURE_FILESYSTEM_DEVFS - #ifndef CONFIGURE_MAXIMUM_DEVICES - #if defined(BSP_MAXIMUM_DEVICES) - #define CONFIGURE_MAXIMUM_DEVICES BSP_MAXIMUM_DEVICES - #else - #define CONFIGURE_MAXIMUM_DEVICES 4 - #endif - #endif - #include <rtems/devfs.h> - #endif - - /** - * Table termination record. - */ - #define CONFIGURE_FILESYSTEM_NULL { NULL, NULL } - -#ifndef RTEMS_SCHEDSIM - #if !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM) && \ - !defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - int imfs_rq_memfile_bytes_per_block = - CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK; - #endif - - /** - * The default file system table. Must be terminated with the NULL entry if - * you provide your own. - */ - #ifndef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM - const rtems_filesystem_table_t rtems_filesystem_table[] = { - #if !defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - { "/", IMFS_initialize_support }, - #endif - #if defined(CONFIGURE_FILESYSTEM_IMFS) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_IMFS) - CONFIGURE_FILESYSTEM_ENTRY_IMFS, - #endif - #if defined(CONFIGURE_FILESYSTEM_DEVFS) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_DEVFS) - CONFIGURE_FILESYSTEM_ENTRY_DEVFS, - #endif - #if defined(CONFIGURE_FILESYSTEM_TFTPFS) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_TFTPFS) - CONFIGURE_FILESYSTEM_ENTRY_TFTPFS, - #endif - #if defined(CONFIGURE_FILESYSTEM_FTPFS) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_FTPFS) - CONFIGURE_FILESYSTEM_ENTRY_FTPFS, - #endif - #if defined(CONFIGURE_FILESYSTEM_NFS) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_NFS) - CONFIGURE_FILESYSTEM_ENTRY_NFS, - #endif - #if defined(CONFIGURE_FILESYSTEM_DOSFS) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_DOSFS) - CONFIGURE_FILESYSTEM_ENTRY_DOSFS, - #endif - #if defined(CONFIGURE_FILESYSTEM_RFS) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_RFS) - CONFIGURE_FILESYSTEM_ENTRY_RFS, - #endif - #if defined(CONFIGURE_FILESYSTEM_JFFS2) && \ - defined(CONFIGURE_FILESYSTEM_ENTRY_JFFS2) - CONFIGURE_FILESYSTEM_ENTRY_JFFS2, - #endif - CONFIGURE_FILESYSTEM_NULL - }; - - #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - static devFS_node devFS_root_filesystem_nodes [CONFIGURE_MAXIMUM_DEVICES]; - static const devFS_data devFS_root_filesystem_data = { - devFS_root_filesystem_nodes, - CONFIGURE_MAXIMUM_DEVICES - }; - #else - static IMFS_fs_info_t _Configure_IMFS_fs_info; - - static const rtems_filesystem_operations_table _Configure_IMFS_ops = { - rtems_filesystem_default_lock, - rtems_filesystem_default_unlock, - IMFS_eval_path, - #ifdef CONFIGURE_IMFS_DISABLE_LINK - rtems_filesystem_default_link, - #else - IMFS_link, - #endif - rtems_filesystem_default_are_nodes_equal, - #ifdef CONFIGURE_IMFS_DISABLE_MKNOD - rtems_filesystem_default_mknod, - #else - IMFS_mknod, - #endif - #ifdef CONFIGURE_IMFS_DISABLE_RMNOD - rtems_filesystem_default_rmnod, - #else - IMFS_rmnod, - #endif - #ifdef CONFIGURE_IMFS_DISABLE_CHMOD - rtems_filesystem_default_fchmod, - #else - IMFS_fchmod, - #endif - #ifdef CONFIGURE_IMFS_DISABLE_CHOWN - rtems_filesystem_default_chown, - #else - IMFS_chown, - #endif - IMFS_node_clone, - IMFS_node_free, - #ifdef CONFIGURE_IMFS_DISABLE_MOUNT - rtems_filesystem_default_mount, - #else - IMFS_mount, - #endif - #ifdef CONFIGURE_IMFS_DISABLE_UNMOUNT - rtems_filesystem_default_unmount, - #else - IMFS_unmount, - #endif - rtems_filesystem_default_fsunmount, - #ifdef CONFIGURE_IMFS_DISABLE_UTIME - rtems_filesystem_default_utime, - #else - IMFS_utime, - #endif - #ifdef CONFIGURE_IMFS_DISABLE_SYMLINK - rtems_filesystem_default_symlink, - #else - IMFS_symlink, - #endif - #ifdef CONFIGURE_IMFS_DISABLE_READLINK - rtems_filesystem_default_readlink, - #else - IMFS_readlink, - #endif - #ifdef CONFIGURE_IMFS_DISABLE_RENAME - rtems_filesystem_default_rename, - #else - IMFS_rename, - #endif - rtems_filesystem_default_statvfs - }; - - static const IMFS_mknod_controls _Configure_IMFS_mknod_controls = { - #ifdef CONFIGURE_IMFS_DISABLE_READDIR - &IMFS_mknod_control_dir_minimal, - #else - &IMFS_mknod_control_dir_default, - #endif - &IMFS_mknod_control_device, - #ifdef CONFIGURE_IMFS_DISABLE_MKNOD_FILE - &IMFS_mknod_control_enosys, - #else - &IMFS_mknod_control_memfile, - #endif - #ifdef CONFIGURE_IMFS_ENABLE_MKFIFO - &IMFS_mknod_control_fifo - #else - &IMFS_mknod_control_enosys - #endif - }; - - static const IMFS_mount_data _Configure_IMFS_mount_data = { - &_Configure_IMFS_fs_info, - &_Configure_IMFS_ops, - &_Configure_IMFS_mknod_controls - }; - #endif - - const rtems_filesystem_mount_configuration - rtems_filesystem_root_configuration = { - NULL, - NULL, - #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - RTEMS_FILESYSTEM_TYPE_DEVFS, - #else - "/", - #endif - RTEMS_FILESYSTEM_READ_WRITE, - #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM) - &devFS_root_filesystem_data - #else - &_Configure_IMFS_mount_data - #endif - }; - #endif - -#endif -#endif -/**@}*/ /* end of file system group */ - /** * @brief Maximum priority configuration. * @@ -2591,18 +2157,5 @@ struct _reent *__getreent(void) #endif #endif -/* - * IMFS block size for in memory files (memfiles) must be a power of - * two between 16 and 512 inclusive. - */ -#if ((CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 16) && \ - (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 32) && \ - (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 64) && \ - (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 128) && \ - (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 256) && \ - (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 512)) - #error "IMFS Memfile block size must be a power of 2 between 16 and 512" -#endif - #endif /* end of include file */ diff --git a/cpukit/include/rtems/confdefs/libio.h b/cpukit/include/rtems/confdefs/libio.h new file mode 100644 index 0000000000..2ee14ff98b --- /dev/null +++ b/cpukit/include/rtems/confdefs/libio.h @@ -0,0 +1,410 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * @file + * + * @ingroup RTEMSApplicationConfiguration + * + * @brief Evaluate IO Library Configuration Options + */ + +#ifndef _RTEMS_CONFDEFS_LIBIO_H +#define _RTEMS_CONFDEFS_LIBIO_H + +#ifndef __CONFIGURATION_TEMPLATE_h +#error "Do not include this file directly, use <rtems/confdefs.h> instead" +#endif + +#ifdef CONFIGURE_INIT + +#include <rtems/confdefs/bsp.h> +#include <rtems/libio.h> +#include <rtems/sysinit.h> + +#ifdef CONFIGURE_FILESYSTEM_ALL + #define CONFIGURE_FILESYSTEM_DEVFS + #define CONFIGURE_FILESYSTEM_DOSFS + #define CONFIGURE_FILESYSTEM_FTPFS + #define CONFIGURE_FILESYSTEM_IMFS + #define CONFIGURE_FILESYSTEM_JFFS2 + #define CONFIGURE_FILESYSTEM_NFS + #define CONFIGURE_FILESYSTEM_RFS + #define CONFIGURE_FILESYSTEM_TFTPFS +#endif + +#ifdef CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM + #define CONFIGURE_FILESYSTEM_DEVFS +#elif !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM) + #define _CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM +#endif + +#ifdef CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM + #ifdef CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM + #error "CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM cannot be used together with CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM" + #endif + + #define CONFIGURE_IMFS_DISABLE_CHMOD + #define CONFIGURE_IMFS_DISABLE_CHOWN + #define CONFIGURE_IMFS_DISABLE_LINK + #define CONFIGURE_IMFS_DISABLE_READLINK + #define CONFIGURE_IMFS_DISABLE_RENAME + #define CONFIGURE_IMFS_DISABLE_SYMLINK + #define CONFIGURE_IMFS_DISABLE_UNMOUNT + #define CONFIGURE_IMFS_DISABLE_UTIME +#endif + +#ifdef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM + #ifdef CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM" + #endif + + #ifdef CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM" + #endif + + #ifdef CONFIGURE_FILESYSTEM_DEVFS + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_DEVFS" + #endif + + #ifdef CONFIGURE_FILESYSTEM_DOSFS + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_DOSFS" + #endif + + #ifdef CONFIGURE_FILESYSTEM_FTPFS + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_FTPFS" + #endif + + #ifdef CONFIGURE_FILESYSTEM_IMFS + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_IMFS" + #endif + + #ifdef CONFIGURE_FILESYSTEM_JFFS2 + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_JFFS2" + #endif + + #ifdef CONFIGURE_FILESYSTEM_NFS + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_NFS" + #endif + + #ifdef CONFIGURE_FILESYSTEM_RFS + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_RFS" + #endif + + #ifdef CONFIGURE_FILESYSTEM_TFTPFS + #error "CONFIGURE_APPLICATION_DISABLE_FILESYSTEM cannot be used together with CONFIGURE_FILESYSTEM_TFTPFS" + #endif +#else + #define _CONFIGURE_FILESYSTEM_INITIALIZE +#endif + +#ifdef CONFIGURE_FILESYSTEM_DEVFS +#include <rtems/devfs.h> +#endif + +#ifdef CONFIGURE_FILESYSTEM_DOSFS +#include <rtems/dosfs.h> +#endif + +#ifdef CONFIGURE_FILESYSTEM_FTPFS +#include <rtems/ftpfs.h> +#endif + +#if defined(CONFIGURE_FILESYSTEM_IMFS) \ + || defined(_CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM) +#include <rtems/imfs.h> +#endif + +#ifdef CONFIGURE_FILESYSTEM_JFFS2 +#include <rtems/jffs2.h> +#endif + +#ifdef CONFIGURE_FILESYSTEM_NFS +#include <librtemsNfs.h> +#endif + +#ifdef CONFIGURE_FILESYSTEM_RFS +#include <rtems/rtems-rfs.h> +#endif + +#ifdef CONFIGURE_FILESYSTEM_TFTPFS +#include <rtems/tftp.h> +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM + +#ifndef CONFIGURE_MAXIMUM_DEVICES + #ifdef BSP_MAXIMUM_DEVICES + #define CONFIGURE_MAXIMUM_DEVICES BSP_MAXIMUM_DEVICES + #else + #define CONFIGURE_MAXIMUM_DEVICES 4 + #endif +#endif + +static devFS_node devFS_root_filesystem_nodes[ CONFIGURE_MAXIMUM_DEVICES ]; + +static const devFS_data _Filesystem_Root_data = { + devFS_root_filesystem_nodes, + CONFIGURE_MAXIMUM_DEVICES +}; + +#define _CONFIGURE_FILESYSTEM_ROOT_TYPE RTEMS_FILESYSTEM_TYPE_DEVFS + +#endif /* CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM */ + +#ifdef _CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM + +#ifndef CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK + #define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK \ + IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK +#endif + +#if CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 16 && \ + CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 32 && \ + CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 64 && \ + CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 128 && \ + CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 256 && \ + CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 512 + #error "CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK must be a power of two between 16 and 512" +#endif + +int imfs_rq_memfile_bytes_per_block = CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK; + +static IMFS_fs_info_t _IMFS_fs_info; + +static const rtems_filesystem_operations_table _IMFS_ops = { + rtems_filesystem_default_lock, + rtems_filesystem_default_unlock, + IMFS_eval_path, + #ifdef CONFIGURE_IMFS_DISABLE_LINK + rtems_filesystem_default_link, + #else + IMFS_link, + #endif + rtems_filesystem_default_are_nodes_equal, + #ifdef CONFIGURE_IMFS_DISABLE_MKNOD + rtems_filesystem_default_mknod, + #else + IMFS_mknod, + #endif + #ifdef CONFIGURE_IMFS_DISABLE_RMNOD + rtems_filesystem_default_rmnod, + #else + IMFS_rmnod, + #endif + #ifdef CONFIGURE_IMFS_DISABLE_CHMOD + rtems_filesystem_default_fchmod, + #else + IMFS_fchmod, + #endif + #ifdef CONFIGURE_IMFS_DISABLE_CHOWN + rtems_filesystem_default_chown, + #else + IMFS_chown, + #endif + IMFS_node_clone, + IMFS_node_free, + #ifdef CONFIGURE_IMFS_DISABLE_MOUNT + rtems_filesystem_default_mount, + #else + IMFS_mount, + #endif + #ifdef CONFIGURE_IMFS_DISABLE_UNMOUNT + rtems_filesystem_default_unmount, + #else + IMFS_unmount, + #endif + rtems_filesystem_default_fsunmount, + #ifdef CONFIGURE_IMFS_DISABLE_UTIME + rtems_filesystem_default_utime, + #else + IMFS_utime, + #endif + #ifdef CONFIGURE_IMFS_DISABLE_SYMLINK + rtems_filesystem_default_symlink, + #else + IMFS_symlink, + #endif + #ifdef CONFIGURE_IMFS_DISABLE_READLINK + rtems_filesystem_default_readlink, + #else + IMFS_readlink, + #endif + #ifdef CONFIGURE_IMFS_DISABLE_RENAME + rtems_filesystem_default_rename, + #else + IMFS_rename, + #endif + rtems_filesystem_default_statvfs +}; + +static const IMFS_mknod_controls _IMFS_mknod_controls = { + #ifdef CONFIGURE_IMFS_DISABLE_READDIR + &IMFS_mknod_control_dir_minimal, + #else + &IMFS_mknod_control_dir_default, + #endif + &IMFS_mknod_control_device, + #ifdef CONFIGURE_IMFS_DISABLE_MKNOD_FILE + &IMFS_mknod_control_enosys, + #else + &IMFS_mknod_control_memfile, + #endif + #ifdef CONFIGURE_IMFS_ENABLE_MKFIFO + &IMFS_mknod_control_fifo + #else + &IMFS_mknod_control_enosys + #endif +}; + +static const IMFS_mount_data _Filesystem_Root_data = { + &_IMFS_fs_info, + &_IMFS_ops, + &_IMFS_mknod_controls +}; + +#define _CONFIGURE_FILESYSTEM_ROOT_TYPE "/" + +#endif /* _CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM */ + +#ifdef _CONFIGURE_FILESYSTEM_INITIALIZE + +#if defined(CONFIGURE_FILESYSTEM_DEVFS) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_DEVFS) + #define CONFIGURE_FILESYSTEM_ENTRY_DEVFS \ + { RTEMS_FILESYSTEM_TYPE_DEVFS, devFS_initialize } +#endif + +#if defined(CONFIGURE_FILESYSTEM_DOSFS) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_DOSFS) + #define CONFIGURE_FILESYSTEM_ENTRY_DOSFS \ + { RTEMS_FILESYSTEM_TYPE_DOSFS, rtems_dosfs_initialize } +#endif + +#if defined(CONFIGURE_FILESYSTEM_FTPFS) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_FTPFS) + #define CONFIGURE_FILESYSTEM_ENTRY_FTPFS \ + { RTEMS_FILESYSTEM_TYPE_FTPFS, rtems_ftpfs_initialize } +#endif + +#if defined(CONFIGURE_FILESYSTEM_IMFS) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_IMFS) + #define CONFIGURE_FILESYSTEM_ENTRY_IMFS \ + { RTEMS_FILESYSTEM_TYPE_IMFS, IMFS_initialize } +#endif + +#if defined(CONFIGURE_FILESYSTEM_JFFS2) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_JFFS2) + #define CONFIGURE_FILESYSTEM_ENTRY_JFFS2 \ + { RTEMS_FILESYSTEM_TYPE_JFFS2, rtems_jffs2_initialize } +#endif + +#if defined(CONFIGURE_FILESYSTEM_NFS) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_NFS) + #define CONFIGURE_FILESYSTEM_ENTRY_NFS \ + { RTEMS_FILESYSTEM_TYPE_NFS, rtems_nfs_initialize } +#endif + +#if defined(CONFIGURE_FILESYSTEM_RFS) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_RFS) + #define CONFIGURE_FILESYSTEM_ENTRY_RFS \ + { RTEMS_FILESYSTEM_TYPE_RFS, rtems_rfs_rtems_initialise } +#endif + +#if defined(CONFIGURE_FILESYSTEM_TFTPFS) \ + && !defined(CONFIGURE_FILESYSTEM_ENTRY_TFTPFS) + #define CONFIGURE_FILESYSTEM_ENTRY_TFTPFS \ + { RTEMS_FILESYSTEM_TYPE_TFTPFS, rtems_tftpfs_initialize } +#endif + +const rtems_filesystem_table_t rtems_filesystem_table[] = { + #ifdef _CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM + { "/", IMFS_initialize_support }, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_DEVFS + CONFIGURE_FILESYSTEM_ENTRY_DEVFS, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_DOSFS + CONFIGURE_FILESYSTEM_ENTRY_DOSFS, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_FTPFS + CONFIGURE_FILESYSTEM_ENTRY_FTPFS, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_IMFS + CONFIGURE_FILESYSTEM_ENTRY_IMFS, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_JFFS2 + CONFIGURE_FILESYSTEM_ENTRY_JFFS2, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_NFS + CONFIGURE_FILESYSTEM_ENTRY_NFS, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_RFS + CONFIGURE_FILESYSTEM_ENTRY_RFS, + #endif + #ifdef CONFIGURE_FILESYSTEM_ENTRY_TFTPFS + CONFIGURE_FILESYSTEM_ENTRY_TFTPFS, + #endif + { NULL, NULL } +}; + +const rtems_filesystem_mount_configuration +rtems_filesystem_root_configuration = { + NULL, + NULL, + _CONFIGURE_FILESYSTEM_ROOT_TYPE, + RTEMS_FILESYSTEM_READ_WRITE, + &_Filesystem_Root_data +}; + +RTEMS_SYSINIT_ITEM( + rtems_filesystem_initialize, + RTEMS_SYSINIT_ROOT_FILESYSTEM, + RTEMS_SYSINIT_ORDER_MIDDLE +); + +#endif /* _CONFIGURE_FILESYSTEM_INITIALIZE */ + +#ifndef CONFIGURE_MAXIMUM_FILE_DESCRIPTORS + #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 3 +#endif + +rtems_libio_t rtems_libio_iops[ CONFIGURE_MAXIMUM_FILE_DESCRIPTORS ]; + +const uint32_t rtems_libio_number_iops = RTEMS_ARRAY_SIZE( rtems_libio_iops ); + +#ifdef __cplusplus +} +#endif + +#endif /* CONFIGURE_INIT */ + +#endif /* _RTEMS_CONFDEFS_LIBIO_H */ -- 2.16.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel