aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2008-04-30 03:54:13 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-30 11:29:47 -0400
commitf34d7a5b7010b82fe97da95496b9971435530062 (patch)
tree87e2abec1e33ed4fe5e63ee2fd000bc2ad745e57 /arch/ia64
parent251b8dd7eee30fda089a1dc088abf4fc9a0dee9c (diff)
tty: The big operations rework
- Operations are now a shared const function block as with most other Linux objects - Introduce wrappers for some optional functions to get consistent behaviour - Wrap put_char which used to be patched by the tty layer - Document which functions are needed/optional - Make put_char report success/fail - Cache the driver->ops pointer in the tty as tty->ops - Remove various surplus lock calls we no longer need - Remove proc_write method as noted by Alexey Dobriyan - Introduce some missing sanity checks where certain driver/ldisc combinations would oops as they didn't check needed methods were present [akpm@linux-foundation.org: fix fs/compat_ioctl.c build] [akpm@linux-foundation.org: fix isicom] [akpm@linux-foundation.org: fix arch/ia64/hp/sim/simserial.c build] [akpm@linux-foundation.org: fix kgdb] Signed-off-by: Alan Cox <alan@redhat.com> Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Cc: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/ia64')
-rw-r--r--arch/ia64/hp/sim/simserial.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
index eb0c32a85fd7..23cafc80d2a4 100644
--- a/arch/ia64/hp/sim/simserial.c
+++ b/arch/ia64/hp/sim/simserial.c
@@ -210,21 +210,23 @@ static void do_softint(struct work_struct *private_)
210 printk(KERN_ERR "simserial: do_softint called\n"); 210 printk(KERN_ERR "simserial: do_softint called\n");
211} 211}
212 212
213static void rs_put_char(struct tty_struct *tty, unsigned char ch) 213static int rs_put_char(struct tty_struct *tty, unsigned char ch)
214{ 214{
215 struct async_struct *info = (struct async_struct *)tty->driver_data; 215 struct async_struct *info = (struct async_struct *)tty->driver_data;
216 unsigned long flags; 216 unsigned long flags;
217 217
218 if (!tty || !info->xmit.buf) return; 218 if (!tty || !info->xmit.buf)
219 return 0;
219 220
220 local_irq_save(flags); 221 local_irq_save(flags);
221 if (CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE) == 0) { 222 if (CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE) == 0) {
222 local_irq_restore(flags); 223 local_irq_restore(flags);
223 return; 224 return 0;
224 } 225 }
225 info->xmit.buf[info->xmit.head] = ch; 226 info->xmit.buf[info->xmit.head] = ch;
226 info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1); 227 info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1);
227 local_irq_restore(flags); 228 local_irq_restore(flags);
229 return 1;
228} 230}
229 231
230static void transmit_chars(struct async_struct *info, int *intr_done) 232static void transmit_chars(struct async_struct *info, int *intr_done)
@@ -621,7 +623,8 @@ static void rs_close(struct tty_struct *tty, struct file * filp)
621 * the line discipline to only process XON/XOFF characters. 623 * the line discipline to only process XON/XOFF characters.
622 */ 624 */
623 shutdown(info); 625 shutdown(info);
624 if (tty->driver->flush_buffer) tty->driver->flush_buffer(tty); 626 if (tty->ops->flush_buffer)
627 tty->ops->flush_buffer(tty);
625 if (tty->ldisc.flush_buffer) tty->ldisc.flush_buffer(tty); 628 if (tty->ldisc.flush_buffer) tty->ldisc.flush_buffer(tty);
626 info->event = 0; 629 info->event = 0;
627 info->tty = NULL; 630 info->tty = NULL;