Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:15

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  * Copyright (C) 2017, 2020 embedded brains GmbH & Co. KG
0005  *
0006  * Redistribution and use in source and binary forms, with or without
0007  * modification, are permitted provided that the following conditions
0008  * are met:
0009  * 1. Redistributions of source code must retain the above copyright
0010  *    notice, this list of conditions and the following disclaimer.
0011  * 2. Redistributions in binary form must reproduce the above copyright
0012  *    notice, this list of conditions and the following disclaimer in the
0013  *    documentation and/or other materials provided with the distribution.
0014  *
0015  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0016  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0017  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0018  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0019  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0020  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0021  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0023  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0024  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0025  * POSSIBILITY OF SUCH DAMAGE.
0026  */
0027 
0028 #ifdef HAVE_CONFIG_H
0029 #include "config.h"
0030 #endif
0031 
0032 #include <rtems/console.h>
0033 #include <rtems/bspIo.h>
0034 #include <rtems/imfs.h>
0035 
0036 #include "consolesimple.h"
0037 
0038 static ssize_t _Console_simple_Write(
0039   rtems_libio_t *iop,
0040   const void    *buffer,
0041   size_t         count
0042 )
0043 {
0044   const char *buf;
0045   ssize_t     i;
0046   ssize_t     n;
0047 
0048   buf = buffer;
0049   n = (ssize_t) count;
0050 
0051   for ( i = 0; i < n; ++i ) {
0052     rtems_putc( buf[ i ] );
0053   }
0054 
0055   return n;
0056 }
0057 
0058 static const rtems_filesystem_file_handlers_r _Console_simple_Handlers = {
0059   .open_h = rtems_filesystem_default_open,
0060   .close_h = rtems_filesystem_default_close,
0061   .read_h = _Console_simple_Read,
0062   .write_h = _Console_simple_Write,
0063   .ioctl_h = rtems_filesystem_default_ioctl,
0064   .lseek_h = rtems_filesystem_default_lseek,
0065   .fstat_h = IMFS_stat,
0066   .ftruncate_h = rtems_filesystem_default_ftruncate,
0067   .fsync_h = rtems_filesystem_default_fsync_or_fdatasync,
0068   .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
0069   .fcntl_h = rtems_filesystem_default_fcntl,
0070   .readv_h = rtems_filesystem_default_readv,
0071   .writev_h = rtems_filesystem_default_writev,
0072   .mmap_h = rtems_filesystem_default_mmap
0073 };
0074 
0075 static const IMFS_node_control
0076 _Console_simple_Node_control = IMFS_NODE_CONTROL_INITIALIZER(
0077   &_Console_simple_Handlers,
0078   IMFS_node_initialize_default,
0079   IMFS_do_nothing_destroy
0080 );
0081 
0082 static const char _Console_simple_Name[] = "console";
0083 
0084 static IMFS_jnode_t _Console_simple_Node = IMFS_NODE_INITIALIZER(
0085   &_Console_simple_Node_control,
0086   _Console_simple_Name,
0087   sizeof( _Console_simple_Name ) - 1,
0088   S_IFCHR | S_IRWXU | S_IRWXG | S_IRWXO
0089 );
0090 
0091 void _Console_simple_Initialize( void )
0092 {
0093   IMFS_add_node( "/dev", &_Console_simple_Node, NULL );
0094 }