Back to home page

LXR

 
 

    


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

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