linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Geert Uytterhoeven <geert@linux-m68k.org>
To: Linus Torvalds <torvalds@transmeta.com>
Cc: Linux Kernel Development <linux-kernel@vger.kernel.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>
Subject: [PATCH] M68k IRQ API updates [19/20]
Date: Mon, 12 May 2003 11:54:45 +0200	[thread overview]
Message-ID: <200305120954.h4C9sjL0001063@callisto.of.borg> (raw)

M68k SCSI drivers: Update to the new irq API (from Roman Zippel and me) [19/20]

--- linux-2.5.69/drivers/scsi/53c7xx.c	Mon May  5 10:31:51 2003
+++ linux-m68k-2.5.69/drivers/scsi/53c7xx.c	Fri May  9 10:21:34 2003
@@ -322,7 +322,7 @@
 static void abnormal_finished (struct NCR53c7x0_cmd *cmd, int result);
 static int disable (struct Scsi_Host *host);
 static int NCR53c7xx_run_tests (struct Scsi_Host *host);
-static void NCR53c7x0_intr(int irq, void *dev_id, struct pt_regs * regs);
+static irqreturn_t NCR53c7x0_intr(int irq, void *dev_id, struct pt_regs * regs);
 static void NCR53c7x0_intfly (struct Scsi_Host *host);
 static int ncr_halt (struct Scsi_Host *host);
 static void intr_phase_mismatch (struct Scsi_Host *host, struct NCR53c7x0_cmd 
@@ -4226,7 +4226,7 @@
 }
 
 /*
- * Function : static void NCR53c7x0_intr (int irq, void *dev_id, struct pt_regs * regs)
+ * Function : static irqreturn_t NCR53c7x0_intr (int irq, void *dev_id, struct pt_regs * regs)
  *
  * Purpose : handle NCR53c7x0 interrupts for all NCR devices sharing
  *	the same IRQ line.  
@@ -4239,14 +4239,16 @@
  * script interrupt handler will call back to this function.
  */
 
-static void 
-NCR53c7x0_intr (int irq, void *dev_id, struct pt_regs * regs) {
+static irqreturn_t
+NCR53c7x0_intr (int irq, void *dev_id, struct pt_regs * regs)
+{
     NCR53c7x0_local_declare();
     struct Scsi_Host *host;			/* Host we are looking at */
     unsigned char istat; 			/* Values of interrupt regs */
     struct NCR53c7x0_hostdata *hostdata;	/* host->hostdata[0] */
     struct NCR53c7x0_cmd *cmd;			/* command which halted */
     u32 *dsa;					/* DSA */
+    int handled = 0;
 
 #ifdef NCR_DEBUG
     char buf[80];				/* Debugging sprintf buffer */
@@ -4263,6 +4265,7 @@
      */
 
     while ((istat = NCR53c7x0_read8(hostdata->istat)) & (ISTAT_SIP|ISTAT_DIP)) {
+	handled = 1;
 	hostdata->dsp_changed = 0;
 	hostdata->dstat_valid = 0;
     	hostdata->state = STATE_HALTED;
@@ -4347,6 +4350,7 @@
 	    }
 	}
     }
+    return IRQ_HANDLED;
 }
 
 
--- linux-2.5.69/drivers/scsi/a2091.c	Sun May 11 12:15:02 2003
+++ linux-m68k-2.5.69/drivers/scsi/a2091.c	Fri May  9 10:21:34 2003
@@ -28,11 +28,13 @@
 static struct Scsi_Host *first_instance = NULL;
 static Scsi_Host_Template *a2091_template;
 
-static void a2091_intr (int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t a2091_intr (int irq, void *dummy, struct pt_regs *fp)
 {
     unsigned long flags;
     unsigned int status;
     struct Scsi_Host *instance;
+    int handled = 0;
+
     for (instance = first_instance; instance &&
 	 instance->hostt == a2091_template; instance = instance->next)
     {
@@ -44,8 +46,10 @@
 		spin_lock_irqsave(&instance->host_lock, flags);
 		wd33c93_intr (instance);
 		spin_unlock_irqrestore(&instance->host_lock, flags);
+		handled = 1;
 	}
     }
+    return IRQ_RETVAL(handled);
 }
 
 static int dma_setup (Scsi_Cmnd *cmd, int dir_in)
--- linux-2.5.69/drivers/scsi/a3000.c	Sun May 11 12:15:02 2003
+++ linux-m68k-2.5.69/drivers/scsi/a3000.c	Fri May  9 10:21:34 2003
@@ -27,21 +27,22 @@
 
 static struct Scsi_Host *a3000_host = NULL;
 
-static void a3000_intr (int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t a3000_intr (int irq, void *dummy, struct pt_regs *fp)
 {
 	unsigned long flags;
 	unsigned int status = DMA(a3000_host)->ISTR;
 
 	if (!(status & ISTR_INT_P))
-		return;
+		return IRQ_NONE;
 	if (status & ISTR_INTS)
 	{
 		spin_lock_irqsave(&a3000_host->host_lock, flags);
 		wd33c93_intr (a3000_host);
 		spin_unlock_irqrestore(&a3000_host->host_lock, flags);
-	} else
-		printk("Non-serviced A3000 SCSI-interrupt? ISTR = %02x\n",
-		       status);
+		return IRQ_HANDLED;
+	}
+	printk("Non-serviced A3000 SCSI-interrupt? ISTR = %02x\n", status);
+	return IRQ_NONE;
 }
 
 static int dma_setup (Scsi_Cmnd *cmd, int dir_in)
--- linux-2.5.69/drivers/scsi/atari_NCR5380.c	Tue Mar 25 10:06:51 2003
+++ linux-m68k-2.5.69/drivers/scsi/atari_NCR5380.c	Fri May  9 10:21:34 2003
@@ -1267,10 +1267,10 @@
  *
  */
 
-static void NCR5380_intr (int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t NCR5380_intr (int irq, void *dev_id, struct pt_regs *regs)
 {
     struct Scsi_Host *instance = first_instance;
-    int done = 1;
+    int done = 1, handled = 0;
     unsigned char basr;
 
     INT_PRINTK("scsi%d: NCR5380 irq triggered\n", HOSTNO);
@@ -1329,6 +1329,7 @@
 		(void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
 	    }
 	} /* if !(SELECTION || PARITY) */
+	handled = 1;
     } /* BASR & IRQ */
     else {
 	printk(KERN_NOTICE "scsi%d: interrupt without IRQ bit set in BASR, "
@@ -1342,6 +1343,7 @@
 	/* Put a call to NCR5380_main() on the queue... */
 	queue_main();
     }
+    return IRQ_RETVAL(handled);
 }
 
 #ifdef NCR5380_STATS
--- linux-2.5.69/drivers/scsi/atari_dma_emul.c	Mon Feb 19 10:04:52 2001
+++ linux-m68k-2.5.69/drivers/scsi/atari_dma_emul.c	Fri May  9 10:21:34 2003
@@ -138,7 +138,7 @@
  *    increased with one.
  */
 
-static void hades_dma_emulator(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t hades_dma_emulator(int irq, void *dummy, struct pt_regs *fp)
 {
 	unsigned long dma_base;
 	register unsigned long dma_cnt asm ("d3");
@@ -166,7 +166,7 @@
 	if ((tt_scsi_dma.dma_ctrl & 2) == 0)
 	{
 		atari_enable_irq(IRQ_TT_MFP_SCSI);
-		return;
+		return IRQ_HANDLED;
 	}
 
 	if (dma_cnt == 0)
@@ -174,7 +174,7 @@
 		printk(KERN_NOTICE "DMA emulation: count is zero.\n");
 		tt_scsi_dma.dma_ctrl &= 0xfd;	/* DMA ready. */
 		atari_enable_irq(IRQ_TT_MFP_SCSI);
-		return;
+		return IRQ_HANDLED;
 	}
 
 	/*
@@ -338,7 +338,7 @@
 
 	atari_enable_irq(IRQ_TT_MFP_SCSI);
 
-	return;
+	return IRQ_HANDLED;
 
 scsi_bus_error:
 	/*
--- linux-2.5.69/drivers/scsi/atari_scsi.c	Tue Mar 25 10:06:51 2003
+++ linux-m68k-2.5.69/drivers/scsi/atari_scsi.c	Fri May  9 10:21:34 2003
@@ -195,8 +195,8 @@
 static unsigned long atari_dma_xfer_len( unsigned long wanted_len,
                                          Scsi_Cmnd *cmd, int write_flag );
 #endif
-static void scsi_tt_intr( int irq, void *dummy, struct pt_regs *fp);
-static void scsi_falcon_intr( int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t scsi_tt_intr( int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t scsi_falcon_intr( int irq, void *dummy, struct pt_regs *fp);
 static void falcon_release_lock_if_possible( struct NCR5380_hostdata *
                                              hostdata );
 static void falcon_get_lock( void );
@@ -315,7 +315,7 @@
 #endif
 
 
-static void scsi_tt_intr (int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t scsi_tt_intr (int irq, void *dummy, struct pt_regs *fp)
 {
 #ifdef REAL_DMA
 	int dma_stat;
@@ -403,10 +403,11 @@
 	/* To be sure the int is not masked */
 	atari_enable_irq( IRQ_TT_MFP_SCSI );
 #endif
+	return IRQ_HANDLED;
 }
 
 
-static void scsi_falcon_intr (int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t scsi_falcon_intr (int irq, void *dummy, struct pt_regs *fp)
 {
 #ifdef REAL_DMA
 	int dma_stat;
@@ -463,6 +464,7 @@
 #endif /* REAL_DMA */
 
 	NCR5380_intr (0, 0, 0);
+	return IRQ_HANDLED;
 }
 
 
--- linux-2.5.69/drivers/scsi/gvp11.c	Sun May 11 12:15:02 2003
+++ linux-m68k-2.5.69/drivers/scsi/gvp11.c	Fri May  9 10:21:34 2003
@@ -28,11 +28,12 @@
 static struct Scsi_Host *first_instance = NULL;
 static Scsi_Host_Template *gvp11_template;
 
-static void gvp11_intr (int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t gvp11_intr (int irq, void *dummy, struct pt_regs *fp)
 {
     unsigned long flags;
     unsigned int status;
     struct Scsi_Host *instance;
+    int handled = 0;
 
     for (instance = first_instance; instance &&
 	 instance->hostt == gvp11_template; instance = instance->next)
@@ -44,7 +45,9 @@
 	spin_lock_irqsave(&instance->host_lock, flags);
 	wd33c93_intr (instance);
 	spin_unlock_irqrestore(&instance->host_lock, flags);
+	handled = 1;
     }
+    return IRQ_RETVAL(handled);
 }
 
 static int gvp11_xfer_mask = 0;
--- linux-2.5.69/drivers/scsi/mac_NCR5380.c	Tue Mar 25 10:06:53 2003
+++ linux-m68k-2.5.69/drivers/scsi/mac_NCR5380.c	Fri May  9 10:21:35 2003
@@ -1274,7 +1274,7 @@
 static void NCR5380_intr (int irq, void *dev_id, struct pt_regs *regs)
 {
     struct Scsi_Host *instance = first_instance;
-    int done = 1;
+    int done = 1, handled = 0;
     unsigned char basr;
 
     INT_PRINTK("scsi%d: NCR5380 irq triggered\n", HOSTNO);
@@ -1333,6 +1333,7 @@
 		(void) NCR5380_read(RESET_PARITY_INTERRUPT_REG);
 	    }
 	} /* if !(SELECTION || PARITY) */
+	handled = 1;
     } /* BASR & IRQ */
     else {
 	printk(KERN_NOTICE "scsi%d: interrupt without IRQ bit set in BASR, "
@@ -1346,6 +1347,7 @@
 	/* Put a call to NCR5380_main() on the queue... */
 	queue_main();
     }
+    return IRQ_RETVAL(handled);
 }
 
 #ifdef NCR5380_STATS
--- linux-2.5.69/drivers/scsi/mac_esp.c	Thu Jan  2 12:54:42 2003
+++ linux-m68k-2.5.69/drivers/scsi/mac_esp.c	Fri May  9 10:21:35 2003
@@ -142,9 +142,10 @@
 	mac_esp_intr(irq, dev_id, pregs);
 }
 
-void fake_drq(int irq, void *dev_id, struct pt_regs *pregs)
+irqreturn_t fake_drq(int irq, void *dev_id, struct pt_regs *pregs)
 {
 	printk("mac_esp: got drq\n");
+	return IRQ_HANDLED;
 }
 
 #define DRIVER_SETUP
--- linux-2.5.69/drivers/scsi/mvme147.c	Sun May 11 12:15:02 2003
+++ linux-m68k-2.5.69/drivers/scsi/mvme147.c	Fri May  9 10:21:35 2003
@@ -21,12 +21,13 @@
 
 static struct Scsi_Host *mvme147_host = NULL;
 
-static void mvme147_intr (int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t mvme147_intr (int irq, void *dummy, struct pt_regs *fp)
 {
     if (irq == MVME147_IRQ_SCSI_PORT)
 	wd33c93_intr (mvme147_host);
     else
 	m147_pcc->dma_intr = 0x89;	/* Ack and enable ints */
+    return IRQ_HANDLED;
 }
 
 static int dma_setup (Scsi_Cmnd *cmd, int dir_in)
--- linux-2.5.69/drivers/scsi/sun3_NCR5380.c	Tue Mar 25 10:06:53 2003
+++ linux-m68k-2.5.69/drivers/scsi/sun3_NCR5380.c	Fri May  9 10:21:35 2003
@@ -1255,10 +1255,10 @@
  *
  */
 
-static void NCR5380_intr (int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t NCR5380_intr (int irq, void *dev_id, struct pt_regs *regs)
 {
     struct Scsi_Host *instance = first_instance;
-    int done = 1;
+    int done = 1, handled = 0;
     unsigned char basr;
 
     INT_PRINTK("scsi%d: NCR5380 irq triggered\n", HOSTNO);
@@ -1320,6 +1320,7 @@
 #endif
 	    }
 	} /* if !(SELECTION || PARITY) */
+	handled = 1;
     } /* BASR & IRQ */
     else {
 
@@ -1337,6 +1338,7 @@
 	/* Put a call to NCR5380_main() on the queue... */
 	queue_main();
     }
+    return IRQ_RETVAL(handled);
 }
 
 #ifdef NCR5380_STATS
--- linux-2.5.69/drivers/scsi/sun3_scsi.c	Mon May  5 10:32:03 2003
+++ linux-m68k-2.5.69/drivers/scsi/sun3_scsi.c	Fri May  9 10:21:35 2003
@@ -102,7 +102,7 @@
 #define	ENABLE_IRQ()	enable_irq( IRQ_SUN3_SCSI ); 
 
 
-static void scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp);
 static inline unsigned char sun3scsi_read(int reg);
 static inline void sun3scsi_write(int reg, int value);
 
@@ -373,9 +373,10 @@
 // safe bits for the CSR
 #define CSR_GOOD 0x060f
 
-static void scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp)
 {
 	unsigned short csr = dregs->csr;
+	int handled = 0;
 
 	if(csr & ~CSR_GOOD) {
 		if(csr & CSR_DMA_BUSERR) {
@@ -385,10 +386,15 @@
 		if(csr & CSR_DMA_CONFLICT) {
 			printk("scsi%d: dma conflict\n", default_instance->host_no);
 		}
+		handled = 1;
 	}
 
-	if(csr & (CSR_SDB_INT | CSR_DMA_INT))
+	if(csr & (CSR_SDB_INT | CSR_DMA_INT)) {
 		NCR5380_intr(irq, dummy, fp);
+		handled = 1;
+	}
+
+	return IRQ_RETVAL(handled);
 }
 
 /*
--- linux-2.5.69/drivers/scsi/sun3_scsi_vme.c	Mon May  5 10:32:03 2003
+++ linux-m68k-2.5.69/drivers/scsi/sun3_scsi_vme.c	Fri May  9 10:21:35 2003
@@ -67,7 +67,7 @@
 #define ENABLE_IRQ()
 
 
-static void scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp);
 static inline unsigned char sun3scsi_read(int reg);
 static inline void sun3scsi_write(int reg, int value);
 
@@ -342,9 +342,10 @@
 // safe bits for the CSR
 #define CSR_GOOD 0x060f
 
-static void scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t scsi_sun3_intr(int irq, void *dummy, struct pt_regs *fp)
 {
 	unsigned short csr = dregs->csr;
+	int handled = 0;
 
 	dregs->csr &= ~CSR_DMA_ENABLE;
 
@@ -368,10 +369,15 @@
 		if(csr & CSR_DMA_CONFLICT) {
 			printk("scsi%d: dma conflict\n", default_instance->host_no);
 		}
+		handled = 1;
 	}
 
-	if(csr & (CSR_SDB_INT | CSR_DMA_INT))
+	if(csr & (CSR_SDB_INT | CSR_DMA_INT)) {
 		NCR5380_intr(irq, dummy, fp);
+		handled = 1;
+	}
+
+	return IRQ_RETVAL(handled);
 }
 
 /*

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

                 reply	other threads:[~2003-05-12  9:55 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=200305120954.h4C9sjL0001063@callisto.of.borg \
    --to=geert@linux-m68k.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@transmeta.com \
    /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).