diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-09-16 14:20:07 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-09-19 07:52:34 +0200 |
commit | e814a233ed93402b07f3ea5d1f55ec1af08fbb76 (patch) | |
tree | e912d1d77a015227663614477e9db216403bff99 /cpukit/libcsupport | |
parent | termios: Use IMFS nodes for new Termios devices (diff) | |
download | rtems-e814a233ed93402b07f3ea5d1f55ec1af08fbb76.tar.bz2 |
termios: Add IO control handler
Update #2785.
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r-- | cpukit/libcsupport/include/rtems/termiostypes.h | 15 | ||||
-rw-r--r-- | cpukit/libcsupport/src/termios.c | 7 |
2 files changed, 20 insertions, 2 deletions
diff --git a/cpukit/libcsupport/include/rtems/termiostypes.h b/cpukit/libcsupport/include/rtems/termiostypes.h index 80251a22d2..a852c1dbed 100644 --- a/cpukit/libcsupport/include/rtems/termiostypes.h +++ b/cpukit/libcsupport/include/rtems/termiostypes.h @@ -184,6 +184,21 @@ typedef struct { ); /** + * @brief IO control handler. + * + * Invoked in case the Termios layer cannot deal with the IO request. + * + * @param[in] context The Termios device context. + * @param[in] request The IO control request. + * @param[in] buffer The IO control buffer. + */ + int (*ioctl)( + rtems_termios_device_context *context, + ioctl_command_t request, + void *buffer + ); + + /** * @brief Termios device mode. */ rtems_termios_device_mode mode; diff --git a/cpukit/libcsupport/src/termios.c b/cpukit/libcsupport/src/termios.c index 3a6a3897f4..b972b4f34f 100644 --- a/cpukit/libcsupport/src/termios.c +++ b/cpukit/libcsupport/src/termios.c @@ -781,8 +781,11 @@ rtems_termios_ioctl (void *arg) default: if (rtems_termios_linesw[tty->t_line].l_ioctl != NULL) { sc = rtems_termios_linesw[tty->t_line].l_ioctl(tty,args); - } - else { + } else if (tty->handler.ioctl) { + args->ioctl_return = (*tty->handler.ioctl) (tty->device_context, + args->command, args->buffer); + sc = RTEMS_SUCCESSFUL; + } else { sc = RTEMS_INVALID_NUMBER; } break; |