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,
0025 0,
0026 0,
0027 app_memory_write,
0028 0,
0029 0,
0030 0,
0031 TERMIOS_POLLED
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 }