[PATCH 5/5] termios: Add IO control handler

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Sep 16 12:23:23 UTC 2016


Update #2785.
---
 cpukit/libcsupport/include/rtems/termiostypes.h | 15 +++++++++++++++
 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 80251a2..a852c1d 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 3a6a389..b972b4f 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;
-- 
1.8.4.5




More information about the devel mailing list