summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-16 14:20:07 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-09-19 07:52:34 +0200
commite814a233ed93402b07f3ea5d1f55ec1af08fbb76 (patch)
treee912d1d77a015227663614477e9db216403bff99
parenttermios: Use IMFS nodes for new Termios devices (diff)
downloadrtems-e814a233ed93402b07f3ea5d1f55ec1af08fbb76.tar.bz2
termios: Add IO control handler
Update #2785.
-rw-r--r--cpukit/libcsupport/include/rtems/termiostypes.h15
-rw-r--r--cpukit/libcsupport/src/termios.c7
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;