tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: btuart API change - rfc



In article <1207414153.037208.1496.nullmailer%galant.ukfsn.org@localhost>,
Iain Hibbert  <plunky%rya-online.net@localhost> wrote:
>Hi,
>
>I've been discussing some changes I would like to make to the btuart(4)
>driver with kiyohara@ who wrote it and we have failed to agree on the
>correctness of one fairly major change.  So, we have come to tech-kern for
>arbitration.
>
>As background, the btuart(4) driver is a tty line discipline, that
>provides a way for the bluetooth stack to interface with certain
>devices that manifest as a serial interface (either via standard RS232
>port or an internal UART) much like the way slip(4) and ppp(4) interface
>to the network stack, and possibly related to irframetty(4) that provides
>IR device access (though, there is no in-kernel IrDA stack)
>
>The way that Kiyohara wrote this driver, all the initialisation for
>supported chips is carried out inside the kernel; the application that
>activates the device must open the /dev/ttyXX and set the speed and
>the line discipline, then set some parameters and activate it, eg:
>
>       ioctl(com, TIOCSLINED, line);
>       ioctl(com, BTUART_INITSPEED, &init_speed);
>       ioctl(com, BTUART_HCITYPE, &type);
>       ioctl(com, BTUART_START);
>
>I find this to be onerous because
>    - it is complex (code and API)
>    - must update kernel to handle new device types
>    - user program and kernel must be in sync (HCITYPE must be known to both)
>    - hardware is behind a tty, we do not deal with the chip
>    - not easy to debug failed initialisations
>
>and I would like to move the initialisation of devices to the userland
>program, which would handle setting a device into the known state *before*
>activating the line discipline.
>
>My point is that slip(4) and ppp(4) do not deal with tty or modem init,
>or dialing the connection; that is handled how I think it should be handled.
>
>Kiyohara points to irframetty(4) which also knows how to set line speed on
>different devices but I'm not sure thats the same, since it may be that the
>IrDA stack needs to change settings (I'm not sure how that works, really :)
>
>Things we agreed on were that btuartd should be btattach to follow naming
>conventions (it handles btuart(4) and bcsp(4) line disciplines) and that it
>should be single-shot rather than the multiple line daemon that it is now
>(C is IMHO not best suited to parsing config files, and if one daemon handles
>many lines it is not easily possible to start and stop each separately)
>
>Rather than a diff which would be messy, I have posted a shar file of the
>reduced driver and new btattach program at
>
>       http://www.netbsd.org/~plunky/btattach.4.shar
>
>If anybody would care to take a look and give opinions on the [proposed]
>API change I would apreciate it, thanks!
>
>regards,
>iain
>
>(btuart(4) is only in -current so far, so no compat need be considered)

While I prefer for device drivers to live completely in the kernel and
not do depend on userland programs to participate in device configuration,
I think that in this case the btattach way proposed here is cleaner than
the magic ioctls and easier to extend.

christos



Home | Main Index | Thread Index | Old Index