Hi Benjamin, On Sat, Oct 12, 2013 at 07:43:24AM +1100, Benjamin Herrenschmidt wrote: > On Fri, 2013-10-11 at 14:47 +0200, Hendrik Brueckner wrote: > > The tiocmget/tiocmset callbacks are used to set and get modem status and > > triggered through an tty ioctl. > > > > The dtr_rts() callback is different and it is used for DTS/RTS handshaking > > between the hvc_console (or any other tty_port) and the tty layer. The tty > > port layer uses this callback to signal the hvc_console whether to raise or > > lower the DTR/RTS lines. This is different than the ioctl interface to > > controls the modem status. > > Well, DTR at least is the same via both callbacks... Also normal handshaking > is normally RTS/CTS, only some HW setups "hijacks" DTR for RTS (old Macs come > to mind). Yep. DTR is changed in both callbacks but from different layers. The tiocmget/tiocmset are triggered through the ioctl. The dtr_rts() callback is called in hvc_close() to properly handle HUPCL to lower modem control lines after last process closes the device (hang up). This is also done in the hvsilib_close() in hvsi_lib.c: /* Clear our own DTR */ if (!pv->tty || (pv->tty->termios.c_cflag & HUPCL)) hvsilib_write_mctrl(pv, 0); This is actually what the dtr_rts() callback should trigger and I wonder whether it would be worth to introduce the dtr_rts() callback to encapsulate the "hvsilib_write_mctrl(pv, 0);" call from above. On the other hand, the dtr_rts() callback is a good encapsulation to not directly access the hp->tty to potentially prevent a layering violation. At least for the hvc_iucv() I do not want to deal with the "underlying" tty layer and introduce additional reference accounting. I hope this helps you to understand my rational for introducing the dtr_rts() callback. Thanks and kind regards, Hendrik -- To unsubscribe from this list: send the line "unsubscribe linux-s390" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html