This is fine, but should do some testing on a few BSPs if you can.
On Thu, Aug 12, 2021 at 5:42 AM Christian Mauderer <christian.maude...@embedded-brains.de> wrote: > > At the moment the line discipline start function (l_start) has no > possibility to get feedback about the number of characters that have > been sent. This patch passes that information via an additional > parameter. > > The change might trigger a warning on existing code because of a pointer > mismatch but it shouldn't break it. An existing function with the old > API will just ignore the additional parameter. > > Update #4493 > --- > cpukit/include/rtems/termiostypes.h | 6 +++++- > cpukit/libcsupport/src/termios.c | 5 +++-- > 2 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/cpukit/include/rtems/termiostypes.h > b/cpukit/include/rtems/termiostypes.h > index ef2c958271..5821d52775 100644 > --- a/cpukit/include/rtems/termiostypes.h > +++ b/cpukit/include/rtems/termiostypes.h > @@ -367,6 +367,10 @@ typedef struct rtems_termios_tty { > */ > rtems_id rxTaskId; > rtems_id txTaskId; > + /* > + * Information for the tx task how many characters have been dequeued. > + */ > + int txTaskCharsDequeued; > > /* > * line discipline related stuff > @@ -482,7 +486,7 @@ struct rtems_termios_linesw { > int (*l_read )(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args); > int (*l_write)(struct rtems_termios_tty *tp,rtems_libio_rw_args_t *args); > int (*l_rint )(int c,struct rtems_termios_tty *tp); > - int (*l_start)(struct rtems_termios_tty *tp); > + int (*l_start)(struct rtems_termios_tty *tp,int len); > int (*l_ioctl)(struct rtems_termios_tty *tp,rtems_libio_ioctl_args_t > *args); > int (*l_modem)(struct rtems_termios_tty *tp,int flags); > }; > diff --git a/cpukit/libcsupport/src/termios.c > b/cpukit/libcsupport/src/termios.c > index 829c2bf158..4a4a7e77ac 100644 > --- a/cpukit/libcsupport/src/termios.c > +++ b/cpukit/libcsupport/src/termios.c > @@ -1969,6 +1969,7 @@ rtems_termios_dequeue_characters (void *ttyp, int len) > /* > * send wake up to transmitter task > */ > + tty->txTaskCharsDequeued = len; > sc = rtems_event_send(tty->txTaskId, TERMIOS_TX_START_EVENT); > if (sc != RTEMS_SUCCESSFUL) > rtems_fatal_error_occurred (sc); > @@ -1980,7 +1981,7 @@ rtems_termios_dequeue_characters (void *ttyp, int len) > * call PPP line discipline start function > */ > if (rtems_termios_linesw[tty->t_line].l_start != NULL) { > - rtems_termios_linesw[tty->t_line].l_start(tty); > + rtems_termios_linesw[tty->t_line].l_start(tty, len); > } > return 0; /* nothing to output in IRQ... */ > } > @@ -2015,7 +2016,7 @@ static rtems_task > rtems_termios_txdaemon(rtems_task_argument argument) > * call any line discipline start function > */ > if (rtems_termios_linesw[tty->t_line].l_start != NULL) { > - rtems_termios_linesw[tty->t_line].l_start(tty); > + rtems_termios_linesw[tty->t_line].l_start(tty, > tty->txTaskCharsDequeued); > > if (tty->t_line == PPPDISC) { > /* > -- > 2.31.1 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel