diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/acorn/net/ether1.c | 8 | ||||
| -rw-r--r-- | drivers/acorn/net/ether3.c | 9 | ||||
| -rw-r--r-- | drivers/acorn/scsi/acornscsi.c | 10 | ||||
| -rw-r--r-- | drivers/acorn/scsi/cumana_2.c | 4 | ||||
| -rw-r--r-- | drivers/acorn/scsi/eesox.c | 4 | ||||
| -rw-r--r-- | drivers/acorn/scsi/fas216.c | 5 | ||||
| -rw-r--r-- | drivers/acorn/scsi/fas216.h | 4 | ||||
| -rw-r--r-- | drivers/acorn/scsi/powertec.c | 4 | ||||
| -rw-r--r-- | drivers/char/nwbutton.c | 4 | ||||
| -rw-r--r-- | drivers/input/mouse/rpcmouse.c | 4 | ||||
| -rw-r--r-- | drivers/input/serio/ambakmi.c | 6 | ||||
| -rw-r--r-- | drivers/input/serio/rpckbd.c | 8 | ||||
| -rw-r--r-- | drivers/input/serio/sa1111ps2.c | 11 | ||||
| -rw-r--r-- | drivers/pcmcia/sa11xx_core.c | 5 | ||||
| -rw-r--r-- | drivers/serial/21285.c | 16 | ||||
| -rw-r--r-- | drivers/serial/amba.c | 4 | ||||
| -rw-r--r-- | drivers/serial/sa1100.c | 6 |
17 files changed, 73 insertions, 39 deletions
diff --git a/drivers/acorn/net/ether1.c b/drivers/acorn/net/ether1.c index 63f22717fc70..758ff8bb8231 100644 --- a/drivers/acorn/net/ether1.c +++ b/drivers/acorn/net/ether1.c @@ -68,7 +68,7 @@ static unsigned int net_debug = NET_DEBUG; static int ether1_open(struct net_device *dev); static int ether1_sendpacket(struct sk_buff *skb, struct net_device *dev); -static void ether1_interrupt(int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t ether1_interrupt(int irq, void *dev_id, struct pt_regs *regs); static int ether1_close(struct net_device *dev); static struct net_device_stats *ether1_getstats(struct net_device *dev); static void ether1_setmulticastlist(struct net_device *dev); @@ -908,7 +908,7 @@ ether1_recv_done (struct net_device *dev) } while (1); } -static void +static irqreturn_t ether1_interrupt (int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = (struct net_device *)dev_id; @@ -953,7 +953,9 @@ ether1_interrupt (int irq, void *dev_id, struct pt_regs *regs) NORMALIRQS)); } } else - outb (CTRL_ACK, REG_CONTROL); + outb (CTRL_ACK, REG_CONTROL); + + return IRQ_HANDLED; } static int diff --git a/drivers/acorn/net/ether3.c b/drivers/acorn/net/ether3.c index f9af69bd6622..2a2e8f6cc948 100644 --- a/drivers/acorn/net/ether3.c +++ b/drivers/acorn/net/ether3.c @@ -82,7 +82,7 @@ static int ether3_rx(struct net_device *dev, struct dev_priv *priv, unsigned int static void ether3_tx(struct net_device *dev, struct dev_priv *priv); static int ether3_open (struct net_device *dev); static int ether3_sendpacket (struct sk_buff *skb, struct net_device *dev); -static void ether3_interrupt (int irq, void *dev_id, struct pt_regs *regs); +static irqreturn_t ether3_interrupt (int irq, void *dev_id, struct pt_regs *regs); static int ether3_close (struct net_device *dev); static struct net_device_stats *ether3_getstats (struct net_device *dev); static void ether3_setmulticastlist (struct net_device *dev); @@ -576,12 +576,12 @@ ether3_sendpacket(struct sk_buff *skb, struct net_device *dev) return 0; } -static void +static irqreturn_t ether3_interrupt(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = (struct net_device *)dev_id; struct dev_priv *priv; - unsigned int status; + unsigned int status, handled = IRQ_NONE; #if NET_DEBUG > 1 if(net_debug & DEBUG_INT) @@ -595,17 +595,20 @@ ether3_interrupt(int irq, void *dev_id, struct pt_regs *regs) if (status & STAT_INTRX) { ether3_outw(CMD_ACKINTRX | priv->regs.command, REG_COMMAND); ether3_rx(dev, priv, 12); + handled = IRQ_HANDLED; } if (status & STAT_INTTX) { ether3_outw(CMD_ACKINTTX | priv->regs.command, REG_COMMAND); ether3_tx(dev, priv); + handled = IRQ_HANDLED; } #if NET_DEBUG > 1 if(net_debug & DEBUG_INT) printk("done\n"); #endif + return handled; } /* diff --git a/drivers/acorn/scsi/acornscsi.c b/drivers/acorn/scsi/acornscsi.c index 732d577bab4d..01a293ca3bea 100644 --- a/drivers/acorn/scsi/acornscsi.c +++ b/drivers/acorn/scsi/acornscsi.c @@ -2466,18 +2466,14 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq) * dev_id - device specific data (AS_Host structure) * regs - processor registers when interrupt occurred */ -static -void acornscsi_intr(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t +acornscsi_intr(int irq, void *dev_id, struct pt_regs *regs) { AS_Host *host = (AS_Host *)dev_id; intr_ret_t ret; int iostatus; int in_irq = 0; - if (host->scsi.interrupt) - printk("scsi%d: interrupt re-entered\n", host->host->host_no); - host->scsi.interrupt = 1; - do { ret = INTR_IDLE; @@ -2505,7 +2501,7 @@ void acornscsi_intr(int irq, void *dev_id, struct pt_regs *regs) in_irq = 1; } while (ret != INTR_IDLE); - host->scsi.interrupt = 0; + return IRQ_HANDLED; } /*============================================================================================= diff --git a/drivers/acorn/scsi/cumana_2.c b/drivers/acorn/scsi/cumana_2.c index 43a1f6734adb..5afff2f926ad 100644 --- a/drivers/acorn/scsi/cumana_2.c +++ b/drivers/acorn/scsi/cumana_2.c @@ -141,12 +141,12 @@ cumanascsi_2_terminator_ctl(struct Scsi_Host *host, int on_off) * dev_id - user-defined (Scsi_Host structure) * regs - processor registers at interrupt */ -static void +static irqreturn_t cumanascsi_2_intr(int irq, void *dev_id, struct pt_regs *regs) { struct cumanascsi2_info *info = dev_id; - fas216_intr(&info->info); + return fas216_intr(&info->info); } /* Prototype: fasdmatype_t cumanascsi_2_dma_setup(host, SCpnt, direction, min_type) diff --git a/drivers/acorn/scsi/eesox.c b/drivers/acorn/scsi/eesox.c index a3885d8636fd..9496944bca18 100644 --- a/drivers/acorn/scsi/eesox.c +++ b/drivers/acorn/scsi/eesox.c @@ -141,12 +141,12 @@ eesoxscsi_terminator_ctl(struct Scsi_Host *host, int on_off) * dev_id - user-defined (Scsi_Host structure) * regs - processor registers at interrupt */ -static void +static irqreturn_t eesoxscsi_intr(int irq, void *dev_id, struct pt_regs *regs) { struct eesoxscsi_info *info = dev_id; - fas216_intr(&info->info); + return fas216_intr(&info->info); } /* Prototype: fasdmatype_t eesoxscsi_dma_setup(host, SCpnt, direction, min_type) diff --git a/drivers/acorn/scsi/fas216.c b/drivers/acorn/scsi/fas216.c index 978d3d7e1a7f..c1b2f360b142 100644 --- a/drivers/acorn/scsi/fas216.c +++ b/drivers/acorn/scsi/fas216.c @@ -1824,9 +1824,10 @@ static void fas216_bus_reset(FAS216_Info *info) * * Handle interrupts from the interface to progress a command */ -void fas216_intr(FAS216_Info *info) +irqreturn_t fas216_intr(FAS216_Info *info) { unsigned char isr, ssr, stat; + int handled = IRQ_NONE; fas216_checkmagic(info); @@ -1857,7 +1858,9 @@ void fas216_intr(FAS216_Info *info) fas216_log(info, 0, "unknown interrupt received:" " phase %s isr %02X ssr %02X stat %02X", fas216_drv_phase(info), isr, ssr, stat); + handled = IRQ_HANDLED; } + return handled; } static void __fas216_start_command(FAS216_Info *info, Scsi_Cmnd *SCpnt) diff --git a/drivers/acorn/scsi/fas216.h b/drivers/acorn/scsi/fas216.h index 56b7438538df..e1ba80b30281 100644 --- a/drivers/acorn/scsi/fas216.h +++ b/drivers/acorn/scsi/fas216.h @@ -351,11 +351,11 @@ extern int fas216_queue_command (Scsi_Cmnd *, void (*done)(Scsi_Cmnd *)); */ extern int fas216_command (Scsi_Cmnd *); -/* Function: void fas216_intr (FAS216_Info *info) +/* Function: irqreturn_t fas216_intr (FAS216_Info *info) * Purpose : handle interrupts from the interface to progress a command * Params : info - interface to service */ -extern void fas216_intr (FAS216_Info *info); +extern irqreturn_t fas216_intr (FAS216_Info *info); extern void fas216_remove (struct Scsi_Host *instance); diff --git a/drivers/acorn/scsi/powertec.c b/drivers/acorn/scsi/powertec.c index bf76791d6b50..df55dd8e0e7f 100644 --- a/drivers/acorn/scsi/powertec.c +++ b/drivers/acorn/scsi/powertec.c @@ -113,12 +113,12 @@ powertecscsi_terminator_ctl(struct Scsi_Host *host, int on_off) * dev_id - user-defined (Scsi_Host structure) * regs - processor registers at interrupt */ -static void +static irqreturn_t powertecscsi_intr(int irq, void *dev_id, struct pt_regs *regs) { struct powertec_info *info = dev_id; - fas216_intr(&info->info); + return fas216_intr(&info->info); } /* Prototype: fasdmatype_t powertecscsi_dma_setup(host, SCpnt, direction, min_type) diff --git a/drivers/char/nwbutton.c b/drivers/char/nwbutton.c index f73ddbe43f8a..513777e538f6 100644 --- a/drivers/char/nwbutton.c +++ b/drivers/char/nwbutton.c @@ -146,7 +146,7 @@ static void button_sequence_finished (unsigned long parameters) * increments the counter. */ -static void button_handler (int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t button_handler (int irq, void *dev_id, struct pt_regs *regs) { if (button_press_count) { del_timer (&button_timer); @@ -156,6 +156,8 @@ static void button_handler (int irq, void *dev_id, struct pt_regs *regs) button_timer.function = button_sequence_finished; button_timer.expires = (jiffies + bdelay); add_timer (&button_timer); + + return IRQ_HANDLED; } /* diff --git a/drivers/input/mouse/rpcmouse.c b/drivers/input/mouse/rpcmouse.c index c9ba96d3c938..7280f68afcee 100644 --- a/drivers/input/mouse/rpcmouse.c +++ b/drivers/input/mouse/rpcmouse.c @@ -49,7 +49,7 @@ static struct input_dev rpcmouse_dev = { }, }; -static void rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs) { struct input_dev *dev = dev_id; short x, y, dx, dy, b; @@ -74,6 +74,8 @@ static void rpcmouse_irq(int irq, void *dev_id, struct pt_regs *regs) input_report_key(dev, BTN_RIGHT, b & 0x10); input_sync(dev); + + return IRQ_HANDLED; } static int __init rpcmouse_init(void) diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c index 1520791763a8..f4ea4fd13917 100644 --- a/drivers/input/serio/ambakmi.c +++ b/drivers/input/serio/ambakmi.c @@ -35,15 +35,19 @@ struct amba_kmi_port { char phys[16]; }; -static void amba_kmi_int(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t amba_kmi_int(int irq, void *dev_id, struct pt_regs *regs) { struct amba_kmi_port *kmi = dev_id; unsigned int status = __raw_readb(KMIIR); + int handled = IRQ_NONE; while (status & KMIIR_RXINTR) { serio_interrupt(&kmi->io, __raw_readb(KMIDATA), 0, regs); status = __raw_readb(KMIIR); + handled = IRQ_HANDLED; } + + return handled; } static int amba_kmi_write(struct serio *io, unsigned char val) diff --git a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c index 59e5a0f42626..bcd1aa89a827 100644 --- a/drivers/input/serio/rpckbd.c +++ b/drivers/input/serio/rpckbd.c @@ -54,20 +54,24 @@ static int rpckbd_write(struct serio *port, unsigned char val) return 0; } -static void rpckbd_rx(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t rpckbd_rx(int irq, void *dev_id, struct pt_regs *regs) { struct serio *port = dev_id; unsigned int byte; + int handled = IRQ_NONE; while (iomd_readb(IOMD_KCTRL) & (1 << 5)) { byte = iomd_readb(IOMD_KARTRX); serio_interrupt(port, byte, 0, regs); + handled = IRQ_HANDLED; } + return handled; } -static void rpckbd_tx(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t rpckbd_tx(int irq, void *dev_id, struct pt_regs *regs) { + return IRQ_HANDLED; } static int rpckbd_open(struct serio *port) diff --git a/drivers/input/serio/sa1111ps2.c b/drivers/input/serio/sa1111ps2.c index f4c69da7c7bd..bf9adc378a4d 100644 --- a/drivers/input/serio/sa1111ps2.c +++ b/drivers/input/serio/sa1111ps2.c @@ -41,10 +41,11 @@ struct ps2if { * at the most one, but we loop for safety. If there was a * framing error, we have to manually clear the status. */ -static void ps2_rxint(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t ps2_rxint(int irq, void *dev_id, struct pt_regs *regs) { struct ps2if *ps2if = dev_id; unsigned int scancode, flag, status; + int handled = IRQ_NONE; status = sa1111_readl(ps2if->base + SA1111_PS2STAT); while (status & PS2STAT_RXF) { @@ -62,13 +63,17 @@ static void ps2_rxint(int irq, void *dev_id, struct pt_regs *regs) serio_interrupt(&ps2if->io, scancode, flag, regs); status = sa1111_readl(ps2if->base + SA1111_PS2STAT); + + handled = IRQ_HANDLED; } + + return handled; } /* * Completion of ps2 write */ -static void ps2_txint(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t ps2_txint(int irq, void *dev_id, struct pt_regs *regs) { struct ps2if *ps2if = dev_id; unsigned int status; @@ -83,6 +88,8 @@ static void ps2_txint(int irq, void *dev_id, struct pt_regs *regs) ps2if->tail = (ps2if->tail + 1) & (sizeof(ps2if->buf) - 1); } spin_unlock(&ps2if->lock); + + return IRQ_HANDLED; } /* diff --git a/drivers/pcmcia/sa11xx_core.c b/drivers/pcmcia/sa11xx_core.c index 886c3056c924..102203779a22 100644 --- a/drivers/pcmcia/sa11xx_core.c +++ b/drivers/pcmcia/sa11xx_core.c @@ -120,7 +120,6 @@ sa1100_pcmcia_set_mecr(struct sa1100_pcmcia_socket *skt, unsigned int cpu_clock) unsigned long flags; unsigned short speed; unsigned int bs_io, bs_mem, bs_attr; - int i; speed = calc_speed(skt->spd_io, MAX_IO_WIN, SA1100_PCMCIA_IO_ACCESS); bs_io = skt->ops->socket_get_timing(skt, cpu_clock, speed); @@ -324,13 +323,15 @@ static void sa1100_pcmcia_poll_event(unsigned long dummy) * handling code performs scheduling operations which cannot be * executed from within an interrupt context. */ -static void sa1100_pcmcia_interrupt(int irq, void *dev, struct pt_regs *regs) +static irqreturn_t sa1100_pcmcia_interrupt(int irq, void *dev, struct pt_regs *regs) { struct sa1100_pcmcia_socket *skt = dev; DEBUG(3, "%s(): servicing IRQ %d\n", __FUNCTION__, irq); schedule_work(&skt->work); + + return IRQ_HANDLED; } /* sa1100_pcmcia_register_callback() diff --git a/drivers/serial/21285.c b/drivers/serial/21285.c index a5315c3100df..1ed0bfcfa1e4 100644 --- a/drivers/serial/21285.c +++ b/drivers/serial/21285.c @@ -85,7 +85,7 @@ static void serial21285_enable_ms(struct uart_port *port) { } -static void serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *regs) { struct uart_port *port = dev_id; struct tty_struct *tty = port->info->tty; @@ -97,7 +97,7 @@ static void serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *regs) tty->flip.work.func((void *)tty); if (tty->flip.count >= TTY_FLIPBUF_SIZE) { printk(KERN_WARNING "TTY_DONT_FLIP set\n"); - return; + goto out; } } @@ -143,9 +143,12 @@ static void serial21285_rx_chars(int irq, void *dev_id, struct pt_regs *regs) status = *CSR_UARTFLG; } tty_flip_buffer_push(tty); + + out: + return IRQ_HANDLED; } -static void serial21285_tx_chars(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t serial21285_tx_chars(int irq, void *dev_id, struct pt_regs *regs) { struct uart_port *port = dev_id; struct circ_buf *xmit = &port->info->xmit; @@ -155,11 +158,11 @@ static void serial21285_tx_chars(int irq, void *dev_id, struct pt_regs *regs) *CSR_UARTDR = port->x_char; port->icount.tx++; port->x_char = 0; - return; + goto out; } if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { serial21285_stop_tx(port, 0); - return; + goto out; } do { @@ -175,6 +178,9 @@ static void serial21285_tx_chars(int irq, void *dev_id, struct pt_regs *regs) if (uart_circ_empty(xmit)) serial21285_stop_tx(port, 0); + + out: + return IRQ_HANDLED; } static unsigned int serial21285_tx_empty(struct uart_port *port) diff --git a/drivers/serial/amba.c b/drivers/serial/amba.c index 7ffa50b6f00b..34ae5a57b1bf 100644 --- a/drivers/serial/amba.c +++ b/drivers/serial/amba.c @@ -278,7 +278,7 @@ static void ambauart_modem_status(struct uart_port *port) wake_up_interruptible(&uap->port.info->delta_msr_wait); } -static void ambauart_int(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t ambauart_int(int irq, void *dev_id, struct pt_regs *regs) { struct uart_port *port = dev_id; unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT; @@ -302,6 +302,8 @@ static void ambauart_int(int irq, void *dev_id, struct pt_regs *regs) status = UART_GET_INT_STATUS(port); } while (status & (AMBA_UARTIIR_RTIS | AMBA_UARTIIR_RIS | AMBA_UARTIIR_TIS)); + + return IRQ_HANDLED; } static unsigned int ambauart_tx_empty(struct uart_port *port) diff --git a/drivers/serial/sa1100.c b/drivers/serial/sa1100.c index 98e8231ec722..d7765bf8f224 100644 --- a/drivers/serial/sa1100.c +++ b/drivers/serial/sa1100.c @@ -312,7 +312,7 @@ static void sa1100_tx_chars(struct sa1100_port *sport) sa1100_stop_tx(&sport->port, 0); } -static void sa1100_int(int irq, void *dev_id, struct pt_regs *regs) +static irqreturn_t sa1100_int(int irq, void *dev_id, struct pt_regs *regs) { struct sa1100_port *sport = dev_id; unsigned int status, pass_counter = 0; @@ -347,6 +347,8 @@ static void sa1100_int(int irq, void *dev_id, struct pt_regs *regs) ~UTSR0_TFS; } while (status & (UTSR0_TFS | UTSR0_RFS | UTSR0_RID)); spin_unlock(&sport->port.lock); + + return IRQ_HANDLED; } /* @@ -830,7 +832,7 @@ static struct console sa1100_console = { .setup = sa1100_console_setup, .flags = CON_PRINTBUFFER, .index = -1, - .data = sa1100_reg, + .data = &sa1100_reg, }; static int __init sa1100_rs_console_init(void) |
