Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:23:59

0001 #include <rtems.h>
0002 #include <rtems/libio.h>
0003 #include <rtems/bspIo.h>
0004 #include <rtems/console.h>
0005 
0006 #include <string.h>
0007 
0008 ssize_t app_memory_write(int minor, const char* buf, size_t len)
0009 __attribute__(( weak, alias("__bsp_memory_write") ));
0010 
0011 ssize_t __bsp_memory_write(int minor, const char* buf, size_t len);
0012 rtems_device_driver console_initialize(rtems_device_major_number major,
0013                                        rtems_device_minor_number minor,
0014                                        void*                     arg);
0015 
0016 ssize_t __bsp_memory_write(int minor, const char* buf, size_t len)
0017 {
0018   const char* const last = buf+len;
0019   while (buf < last)
0020   {
0021     rtems_putc(*buf++);
0022   }
0023   return len;
0024 }
0025 
0026 static rtems_termios_callbacks gMemCallbacks = {
0027         0,                /* firstOpen */
0028         0,                /* lastClose */
0029         0,                /* PollRead */
0030         app_memory_write, /* write */
0031         0,                /* SetAttr */
0032         0,                /* stopRemoteTx */
0033         0,                /* startRemoteTx */
0034         TERMIOS_POLLED    /* outputUsesInterrupts */
0035 };
0036 
0037 rtems_device_driver console_initialize(rtems_device_major_number major,
0038                                        rtems_device_minor_number minor,
0039                                        void*                     arg)
0040 {
0041   rtems_status_code status;
0042 
0043   rtems_termios_initialize();
0044 
0045   status = rtems_io_register_name("/dev/console", major, 0);
0046 
0047   if (status != RTEMS_SUCCESSFUL)  rtems_fatal_error_occurred (status);
0048   return RTEMS_SUCCESSFUL;
0049 }
0050 
0051 rtems_device_driver console_open(rtems_device_major_number major,
0052                                  rtems_device_minor_number minor,
0053                                  void*                     arg)
0054 {
0055   rtems_status_code sc;
0056 
0057   sc = rtems_termios_open (major, minor, arg, &gMemCallbacks);
0058 
0059   return sc;
0060 }
0061 
0062 rtems_device_driver console_close(rtems_device_major_number major,
0063                                   rtems_device_minor_number minor,
0064                                   void*                     arg)
0065 {
0066   return rtems_termios_close(arg);
0067 }
0068 
0069 rtems_device_driver console_read(rtems_device_major_number major,
0070                                  rtems_device_minor_number minor,
0071                                  void*                     arg)
0072 {
0073   return rtems_termios_read(arg);
0074 }
0075 
0076 rtems_device_driver console_write(rtems_device_major_number major,
0077                                   rtems_device_minor_number minor,
0078                                   void*                     arg)
0079 {
0080   return rtems_termios_write(arg);
0081 }
0082 
0083 rtems_device_driver console_control(rtems_device_major_number major,
0084                                     rtems_device_minor_number minor,
0085                                     void*                     arg)
0086 {
0087   return rtems_termios_ioctl(arg);
0088 }