From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-serial@vger.kernel.org
Cc: Jamie Iles <jamie@jamieiles.com>, Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 16/79] tty: serial8250: allow platforms to override irq handler
Date: Wed, 26 Oct 2011 14:12:21 +0200 [thread overview]
Message-ID: <1319631204-23262-16-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <1319631204-23262-1-git-send-email-gregkh@suse.de>
From: Jamie Iles <jamie@jamieiles.com>
Some ports (e.g. Synopsys DesignWare 8250) have special requirements for
handling the interrupts. Allow these platforms to specify their own
interrupt handler that will override the default.
serial8250_handle_irq() is provided so that platforms can extend the IRQ
handler rather than completely replacing it.
Signed-off-by: Jamie Iles <jamie@jamieiles.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/tty/serial/8250.c | 39 +++++++++++++++++++++++++++++++++++----
include/linux/serial_8250.h | 2 ++
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c
index f2dfec8..833e011 100644
--- a/drivers/tty/serial/8250.c
+++ b/drivers/tty/serial/8250.c
@@ -509,6 +509,8 @@ static void io_serial_out(struct uart_port *p, int offset, int value)
outb(value, p->iobase + offset);
}
+static int serial8250_default_handle_irq(struct uart_port *port);
+
static void set_io_from_upio(struct uart_port *p)
{
struct uart_8250_port *up =
@@ -557,6 +559,7 @@ static void set_io_from_upio(struct uart_port *p)
}
/* Remember loaded iotype */
up->cur_iotype = p->iotype;
+ p->handle_irq = serial8250_default_handle_irq;
}
static void
@@ -1621,6 +1624,28 @@ static void serial8250_handle_port(struct uart_8250_port *up)
spin_unlock_irqrestore(&up->port.lock, flags);
}
+int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
+{
+ struct uart_8250_port *up =
+ container_of(port, struct uart_8250_port, port);
+
+ if (!(iir & UART_IIR_NO_INT)) {
+ serial8250_handle_port(up);
+ return 1;
+ }
+
+ return 0;
+}
+
+static int serial8250_default_handle_irq(struct uart_port *port)
+{
+ struct uart_8250_port *up =
+ container_of(port, struct uart_8250_port, port);
+ unsigned int iir = serial_in(up, UART_IIR);
+
+ return serial8250_handle_irq(port, iir);
+}
+
/*
* This is the serial driver's interrupt routine.
*
@@ -1648,13 +1673,12 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id)
l = i->head;
do {
struct uart_8250_port *up;
- unsigned int iir;
+ struct uart_port *port;
up = list_entry(l, struct uart_8250_port, list);
+ port = &up->port;
- iir = serial_in(up, UART_IIR);
- if (!(iir & UART_IIR_NO_INT)) {
- serial8250_handle_port(up);
+ if (port->handle_irq(port)) {
handled = 1;
@@ -3048,6 +3072,10 @@ int __init early_serial_setup(struct uart_port *port)
p->serial_in = port->serial_in;
if (port->serial_out)
p->serial_out = port->serial_out;
+ if (port->handle_irq)
+ p->handle_irq = port->handle_irq;
+ else
+ p->handle_irq = serial8250_default_handle_irq;
return 0;
}
@@ -3116,6 +3144,7 @@ static int __devinit serial8250_probe(struct platform_device *dev)
port.type = p->type;
port.serial_in = p->serial_in;
port.serial_out = p->serial_out;
+ port.handle_irq = p->handle_irq;
port.set_termios = p->set_termios;
port.pm = p->pm;
port.dev = &dev->dev;
@@ -3281,6 +3310,8 @@ int serial8250_register_port(struct uart_port *port)
uart->port.serial_in = port->serial_in;
if (port->serial_out)
uart->port.serial_out = port->serial_out;
+ if (port->handle_irq)
+ uart->port.handle_irq = port->handle_irq;
/* Possibly override set_termios call */
if (port->set_termios)
uart->port.set_termios = port->set_termios;
diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h
index 97f5b45..1f05bbe 100644
--- a/include/linux/serial_8250.h
+++ b/include/linux/serial_8250.h
@@ -35,6 +35,7 @@ struct plat_serial8250_port {
void (*set_termios)(struct uart_port *,
struct ktermios *new,
struct ktermios *old);
+ int (*handle_irq)(struct uart_port *);
void (*pm)(struct uart_port *, unsigned int state,
unsigned old);
};
@@ -80,6 +81,7 @@ extern void serial8250_do_set_termios(struct uart_port *port,
struct ktermios *termios, struct ktermios *old);
extern void serial8250_do_pm(struct uart_port *port, unsigned int state,
unsigned int oldstate);
+int serial8250_handle_irq(struct uart_port *port, unsigned int iir);
extern void serial8250_set_isa_configurator(void (*v)
(int port, struct uart_port *up,
--
1.7.7
next prev parent reply other threads:[~2011-10-26 12:13 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-26 11:42 [GIT PATCH] TTY/serial driver patches for 3.2 Greg KH
2011-10-26 12:12 ` [PATCH 01/79] tty/powerpc: introduce the ePAPR embedded hypervisor byte channel driver Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 02/79] drivers/tty/synclink: remove double comment Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 03/79] TTY: serial, remove BTM from wait_until_sent Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 04/79] TTY: msm_serial, remove unneeded console set Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 05/79] TTY: serial, remove tasklet for tty_wakeup Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 06/79] TTY: ami_serial, remove BTM from wait_until_sent Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 07/79] TTY: remove tty_locked Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 08/79] TTY: mxser+cyclades remove wait_until_sent debug code Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 09/79] serial:blackfin: Correct coding style in bfin serial driver Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 10/79] serial:blackfin: rename Blackfin serial driver to bfin_uart.c Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 11/79] tty: clearify structure initializer in notify_write() Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 12/79] serial:bfin_uart: Put TX IRQ in individual platform resource Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 13/79] serial: samsung: Add unified interrupt handler for s3c64xx and later SoC's Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 14/79] ARM: SAMSUNG: Remove uart irq handling from plaform code Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 15/79] tty: serial: allow ports to override the irq handler Greg Kroah-Hartman
2011-10-26 12:12 ` Greg Kroah-Hartman [this message]
2011-10-26 12:12 ` [PATCH 17/79] mips: msp71xx/serial: convert to pr_foo() helpers Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 18/79] mips: msp71xx/serial: add workaround for DW UART Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 19/79] tty: serial8250: remove UPIO_DWAPB{,32} Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 20/79] tty: serial8250: add helpers for the DesignWare 8250 Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 21/79] tty: of_serial: add support " Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 22/79] Revert "tty: of_serial: add support for the DesignWare 8250" Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 23/79] Revert "tty: serial8250: add helpers " Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 24/79] serial/imx: support to handle break character Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 25/79] atmel_serial: RS485: receiving enabled when sending data Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 26/79] tty: Add support serial for EXYNOS4212 SoC Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 27/79] jsm: remove remaining flip buffer code Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 28/79] jsm: remove buggy write queue Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 29/79] jsm: print byte we are dequeing Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 30/79] TTY: serial, use ASYNCB_CLOSING in uart_close Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 31/79] TTY: serial, move locking " Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 32/79] TTY: define tty_wait_until_sent_from_close Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 33/79] TTY: use tty_wait_until_sent_from_close in tty_port_close_start Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 34/79] TTY: use tty_wait_until_sent_from_close in other drivers Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 35/79] hsu: add runtime pm support Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 36/79] n_gsm: update TODO list Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 37/79] n_gsm: Send CLD command on exit Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 38/79] max3110: wake up fixes Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 39/79] x86/mrst: Add platform data for Max3110 devices Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 40/79] max3110: add sysrq support Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 41/79] max3110: Fix up port->tty backreferencing Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 42/79] tty/powerpc: fix build break with ehv_bytechan.c on allyesconfig Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 43/79] tty: 8250: export serial8250_handle_irq Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 44/79] tty: add a DesignWare 8250 driver Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 45/79] serial: pxa: work around for errata #20 Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 46/79] TTY: serial: Move mutex_unlock in uart_close function Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 47/79] TTY: serial, remove dead code from 68328 Greg Kroah-Hartman
2011-10-26 12:26 ` Geert Uytterhoeven
2011-10-26 12:12 ` [PATCH 48/79] TTY: serial, fix includes in some drivers Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 49/79] cris: fix a build error in drivers/tty/serial/crisv10.c Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 50/79] serial: Support the EFR-register of XR1715x uarts Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 51/79] cris: lower the printk level in cris serial driver Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 52/79] TTY: serial, move 68360 driver to staging Greg Kroah-Hartman
2011-10-26 12:27 ` Geert Uytterhoeven
2011-10-26 12:12 ` [PATCH 53/79] keyboard: Do not include <linux/irq.> Greg Kroah-Hartman
2011-10-26 12:12 ` [PATCH 54/79] serial: mfd: Initconst section fixes Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 55/79] serial-core: power up uart port early before we do set_termios when resuming Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 56/79] TTY: irq: Remove IRQF_DISABLED Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 57/79] drivers/tty: don't use the byte channel handle as a parameter in ehv_bytechan.c Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 58/79] tty/n_gsm: fix bug in tiocmset Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 59/79] 8250: ratelimit LSR safety check engaged warning Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 60/79] tty/n_gsm: fix a bug in gsm_dlci_data_output (adaption = 2 case) Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 61/79] tty/n_gsm: avoid fifo overflow in gsm_dlci_data_output Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 62/79] TTY: snyclinkmp: forever loop in tx_load_dma_buffer() Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 63/79] hvc_console: display printk messages on console Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 64/79] tty: Support compat_ioctl get/set termios_locked Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 65/79] parport_pc: release IO region properly if unsupported ITE887x card is found Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 66/79] h8300: drivers/serial/Kconfig was moved Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 67/79] 8250_pci: Fix kernel panic when pch_uart is disabled Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 68/79] TTY: drop driver reference in tty_open fail path Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 69/79] TTY: make tty_add_file non-failing Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 70/79] TTY: pty, release tty in all ptmx_open fail paths Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 71/79] TTY: call tty_driver_lookup_tty unconditionally Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 72/79] tty/serial: RS485 bindings for device tree Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 73/79] tty/serial: atmel_serial: change platform_data variable name Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 74/79] tty/serial: atmel_serial: whitespace and braces modifications Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 75/79] tty/serial: atmel_serial: auto-enumerate ports Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 76/79] tty/serial: atmel_serial: add device tree support Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 77/79] Revert "TTY: call tty_driver_lookup_tty unconditionally" Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 78/79] tty/serial: atmel_serial: bootconsole removed from auto-enumerates Greg Kroah-Hartman
2011-10-26 12:13 ` [PATCH 79/79] TTY: serial_core: Fix crash if DCD drop during suspend Greg Kroah-Hartman
2011-10-26 13:18 ` [GIT PATCH] TTY/serial driver patches for 3.2 Linus Torvalds
2011-10-26 13:34 ` Greg KH
2011-10-26 14:16 ` Domenico Andreoli
2011-10-26 21:38 ` Jiri Kosina
2011-10-26 15:01 ` Nicolas Ferre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1319631204-23262-16-git-send-email-gregkh@suse.de \
--to=gregkh@suse.de \
--cc=jamie@jamieiles.com \
--cc=linux-serial@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).