linux/drivers/serial
Remy Bohmer 1ecc26bd27 atmel_serial: split the interrupt handler
Split up the interrupt handler of the serial port into a interrupt top-half
and a tasklet.

The goal is to get the interrupt top-half as short as possible to minimize
latencies on interrupts.  But the old code also does some calls in the
interrupt handler that are not allowed on preempt-RT in IRQF_NODELAY context.
This handler is executed in this context because of the interrupt sharing with
the timer interrupt.  The timer interrupt on Preempt-RT runs in IRQF_NODELAY
context.

The tasklet takes care of handling control status changes, pushing incoming
characters to the tty layer, handling break and other errors.  It also handles
pushing TX data into the data register.

Reading the complete receive queue is still done in the top-half because we
never want to miss any incoming character.

[hskinnemoen@atmel.com: misc cleanups and simplifications]
Signed-off-by: Remy Bohmer <linux@bohmer.net>
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Andrew Victor <linux@maxim.org.za>
Tested-by: Marc Pignat <marc.pignat@hevs.ch>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-08 09:22:37 -08:00
..
cpm_uart Remove pointless casts from void pointers 2008-02-06 10:41:01 -08:00
jsm jsm: Remove further unneeded crud 2007-10-17 08:42:52 -07:00
8250_accent.c
8250_acorn.c [ARM] ecard: add ecardm_iomap() / ecardm_iounmap() 2007-05-11 17:19:02 +01:00
8250_au1x00.c
8250_boca.c
8250_early.c 8250_early: coding style 2008-02-08 09:22:25 -08:00
8250_exar_st16c554.c [PATCH] Exar quad port serial 2006-12-07 08:39:35 -08:00
8250_fourport.c
8250_gsc.c 8250_gsc: coding style 2008-02-08 09:22:25 -08:00
8250_hp300.c 8250_hp300: coding style 2008-02-08 09:22:25 -08:00
8250_hub6.c 8250_hub6: codding style 2008-02-08 09:22:25 -08:00
8250_mca.c
8250_pci.c 8250_pci: coding style 2008-02-08 09:22:25 -08:00
8250_pnp.c serial: Coding style 2008-02-05 09:44:10 -08:00
8250.c 8250: enable rate reporting via termios 2008-02-08 09:22:25 -08:00
8250.h
21285.c [ARM] 21285 serial: fix build error 2008-02-04 13:14:06 +00:00
68328serial.c Char: char/serial, remove SERIAL_TYPE_NORMAL redefines 2008-02-07 08:42:33 -08:00
68328serial.h
68360serial.c 68360serial: remove broken optimisation 2007-07-16 09:05:51 -07:00
amba-pl010.c [ARM] Fix 4417/1: Serial: Fix AMBA drivers locking 2007-06-05 19:39:49 +01:00
amba-pl011.c amba-pl011, rename BIT macro 2007-10-19 11:53:42 -07:00
atmel_serial.c atmel_serial: split the interrupt handler 2008-02-08 09:22:37 -08:00
bfin_5xx.c [Blackfin] arch: set_bfin_dma_config shouldnt set SYNC or RESTART by default - add argument or option 2008-01-22 15:29:18 +08:00
clps711x.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
crisv10.c Char: char/serial, remove SERIAL_TYPE_NORMAL redefines 2008-02-07 08:42:33 -08:00
crisv10.h CRISv10 serial driver rewrite 2007-11-14 18:45:46 -08:00
dz.c dz.c: Resource management 2008-02-07 08:42:24 -08:00
dz.h dz: clean up and improve the setup of termios settings 2008-02-07 08:42:24 -08:00
icom.c kobject: convert icom to use kref, not kobject 2008-01-24 20:40:09 -08:00
icom.h Coding style fix drivers/serial/icom.h 2008-02-03 14:47:38 +02:00
imx.c Remove pointless casts from void pointers 2008-02-06 10:41:01 -08:00
ioc3_serial.c [PATCH] serial: replace kmalloc+memset with kzalloc 2007-02-14 08:09:52 -08:00
ioc4_serial.c [PATCH] serial: replace kmalloc+memset with kzalloc 2007-02-14 08:09:52 -08:00
ip22zilog.c IP22ZILOG: fix lockup and sysrq 2007-11-29 09:24:53 -08:00
ip22zilog.h
Kconfig Merge branch 'for-2.6.25' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-02-07 09:02:26 -08:00
m32r_sio_reg.h
m32r_sio.c m32r: serial: remove M32R_SIO_SHARE_IRQS 2007-10-16 09:43:04 -07:00
m32r_sio.h m32r: serial: remove M32R_SIO_SHARE_IRQS 2007-10-16 09:43:04 -07:00
Makefile SC26XX: New serial driver for SC2681 uarts 2008-02-06 10:41:06 -08:00
mcf.c m68knommu: use ARRAY_SIZE in ColdFire serial driver 2008-02-05 09:44:21 -08:00
mcfserial.c [PATCH] m68knommu: fix work queues in mcfserial.c driver 2007-03-06 18:08:38 -08:00
mcfserial.h
mpc52xx_uart.c [POWERPC] mpc52xx: fix compile error introduce when rebasing patch 2008-02-06 22:29:25 -07:00
mpsc.c serial: MPSC: set baudrate when BRG divider is set. 2008-02-05 09:44:10 -08:00
mux.c drivers/serial/: Spelling fixes 2008-02-03 17:29:25 +02:00
netx-serial.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
of_serial.c [POWERPC] of_serial: add port type checking 2007-07-10 21:53:42 +10:00
pmac_zilog.c [POWERPC] Optionally use new device number for pmac_zilog 2007-09-22 14:49:21 +10:00
pmac_zilog.h [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
pnx8xxx_uart.c [PATCH] PNX8550 UART driver 2007-02-14 08:09:52 -08:00
pxa.c [ARM] 4662/1: Fix PXA serial driver compilation if SERIAL_PXA_CONSOLE is disabled 2007-11-26 14:39:12 +00:00
s3c2410.c drivers/serial/s3c2410.c: remove dead config symbols 2008-02-05 09:44:09 -08:00
sa1100.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
sb1250-duart.c BCM1480 serial build fix 2007-09-11 17:21:19 -07:00
sc26xx.c SC26XX: New serial driver for SC2681 uarts 2008-02-06 10:41:06 -08:00
serial_core.c serial_core: bring mostly into line with coding style 2008-02-08 09:22:25 -08:00
serial_cs.c pcmcia: replace kio_addr_t with unsigned int everywhere 2008-02-05 09:44:08 -08:00
serial_ks8695.c [ARM] 4411/1: KS8695: Another serial driver fix 2007-05-30 13:15:19 +01:00
serial_lh7a40x.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
serial_txx9.c serial: fix serial_txx9 console initialization 2007-10-30 08:06:55 -07:00
sh-sci.c sh: Add support for SH7763 CPU subtype. 2008-01-28 13:19:02 +09:00
sh-sci.h sh: Add support for SH7763 CPU subtype. 2008-01-28 13:19:02 +09:00
sn_console.c sn_console section mismatch warning 2007-07-16 09:05:53 -07:00
suncore.c [SERIAL]: Fix section mismatches in Sun serial console drivers. 2007-12-29 01:19:49 -08:00
suncore.h [SERIAL] sparc: Infrastructure to fix section mismatch bugs. 2007-12-12 07:36:34 -08:00
sunhv.c [SERIAL] sparc: Infrastructure to fix section mismatch bugs. 2007-12-12 07:36:34 -08:00
sunsab.c [SERIAL] sparc: Infrastructure to fix section mismatch bugs. 2007-12-12 07:36:34 -08:00
sunsab.h
sunsu.c [SERIAL] sparc: Infrastructure to fix section mismatch bugs. 2007-12-12 07:36:34 -08:00
sunzilog.c [SERIAL] sparc: Infrastructure to fix section mismatch bugs. 2007-12-12 07:36:34 -08:00
sunzilog.h [SERIAL] sunzilog: Interrupt enable before ISR handler installed 2007-05-09 13:49:04 -07:00
uartlite.c Merge branch 'for-2.6.25' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc 2008-02-07 09:02:26 -08:00
ucc_uart.c [POWERPC] qe-uart: add support for Freescale QUICCEngine UART 2008-01-23 19:34:12 -06:00
v850e_uart.c [PATCH] tty: switch to ktermios 2006-12-08 08:28:57 -08:00
vr41xx_siu.c serial: fix vr41xx_siu serial console support 2007-07-31 15:39:41 -07:00
zs.c zs: move to the serial subsystem 2007-07-18 08:38:22 -07:00
zs.h zs: move to the serial subsystem 2007-07-18 08:38:22 -07:00