[PATCH] interrupt driven hvc_console as vio device
This is an hvc_console patch which provides driver and ppc64 architecture
fixes to enable the hvc_console driver to register itself as a vio device
with the vio bus, provide hotplug add/remove for vty adapters, and act as
an interrupt driven driver on Power-5 hardware or remain as a polling
driver on Power-4 hardware.
- Changed hvc_get_chars() and hvc_put_chars() api to take vtermno rather
than index number.
- Added hvc_find_vtys() function which walks the bus looking for
vterm/vty devices to callback to the hvc_console driver. This provides
console output functionality prior to early console init (pre mem init
and pre device probe).
- Switch khvcd from kernel_threads to kthreads which got rid of
deprecated daemonize().
- Added module exit clause to be thorough (not terribly necessary with a
console driver of course)
- Added early discovery of vterm/vty adapters by doing a bus walk on
early console init which results in hvc_instantiate() callback and
addition of the vtermno into a static array of vtermnos supported as
console adapters (meaning the console api's work against these vtermnos
prior to full console initialization).
- This driver is now registered as a vio driver which means that vty
adapters are now managed via probe/remove. This means hvc_console
supports hotplug vty adapters.
- Driver now requests more device nodes than what was found on the
initial bus walk when registered as a tty driver to make room for hotplug
vty adapters. These secondary vty adapters provide a tty tunnel between
partitions.
- Removed static hvc_struct array and replaced with a linux list that has
elements (hvc_struct instances) added/removed on probe/remove AFTER early
console init. This is important because kmalloc can't be done at early
console init.
- Driver now either runs in interrupt driven mode or in polling mode on
older hardware. The khvcd is smart enough to not 'schedule()' when there
are no interrupts.
- kobjects are now used for ref counting on the hvc_struct instances.
- This driver puts the tty layer to sleep on hvc_close() if there are
pending data writes being blocked by firmware.
- Removed useless spinlocks in hvc_chars_in_buffer() and hvc_write_room.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Ryan S. Arnold <rsa@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>