[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