[RFC] tty (or char) bus?

Janusz Krzysztofik
2009-07-14T15:31:23Z

Hi,

In my attempt to add support for contols to a voice modem codec sound
device driver, I found that in order to talk to the modem, it would be
convenient if I can get access to a tty device from inside the kernel in
a way similiar to that available form userspace. AFAICS, even if tty
lowlevel write() could be used unmodified, a convenient way of reading
characters from a tty is missing and should be implemented in a line
discipline. Please correct me if I am wrong.

OTOH, I found that some kind of abstraction layer for acccessing devices
over a tty could be convenient. Instead of allocating a new line
discipline for each specific device, sometimes found on a specific board
only, why not just create a new bus type?

Implemented as a line discipline, activated (hot-plugged) from userspace
with ldattach, that new bus adapter would give kernel level access to an
arbitrary device hanging off a tty. As the bus can be assumed
point-to-point, a single generic device could be registered
automatically in order to trigger that bus registerd drivers' probes
(vendor/model id queries, for example). If not enough, an ioctl and a
ldattach replacement could be provided for setting up a device id that
would match a driver id (something like inputattach does for N_MOUSE).

Once detected by a voice modem codec driver tty bus probe(), a codec
subdevice could then be registered with a sound card.

Please let me know if you like the idea. If not, please push me in a
better direction.

Many of the new code could be probably based on currently existing
drivers and line discplines. As I'm not familiar enough with the linux
kernel code, unlike most of you, so please give me some hints on what
specific drivers should I look at to get examples best matching my idea.

Thanks,
Janusz