diff mbox

[10/12] scsi: remove the mvme147 driver

Message ID 20180314131657.GA1554@lst.de (mailing list archive)
State Superseded
Headers show

Commit Message

Christoph Hellwig March 14, 2018, 1:16 p.m. UTC
On Wed, Mar 14, 2018 at 12:56:31PM +0100, John Paul Adrian Glaubitz wrote:
> Ah, bummer. I wanted to keep the MVME drivers but I never managed to get them ported to the new SCSI layer.
> 
> Anyone out there who could help me with that?

Here is how a trivial conversion should look like.  Probably doesn't
even compile as-is but might be a good starting point:

---
From e1a863426652c4db3254187c14ed718e78f3033d Mon Sep 17 00:00:00 2001
From: Christoph Hellwig <hch@lst.de>
Date: Wed, 14 Mar 2018 14:13:00 +0100
Subject: mvme147: stop using scsi_module.c

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/scsi/mvme147.c | 109 ++++++++++++++++++++++++++-----------------------
 1 file changed, 58 insertions(+), 51 deletions(-)

Comments

Geert Uytterhoeven March 14, 2018, 1:25 p.m. UTC | #1
Hi Christoph,

On Wed, Mar 14, 2018 at 2:16 PM, Christoph Hellwig <hch@lst.de> wrote:
> On Wed, Mar 14, 2018 at 12:56:31PM +0100, John Paul Adrian Glaubitz wrote:
>> Ah, bummer. I wanted to keep the MVME drivers but I never managed to get them ported to the new SCSI layer.
>>
>> Anyone out there who could help me with that?
>
> Here is how a trivial conversion should look like.  Probably doesn't
> even compile as-is but might be a good starting point:

Thanks a lot!
IIRC, the Australian Navy may keep their MVME boxes running until close to
Y2038.

Adrian: Do you have hardware to test this?

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
Hannes Reinecke March 14, 2018, 3:26 p.m. UTC | #2
On 03/14/2018 02:25 PM, Geert Uytterhoeven wrote:
> Hi Christoph,
> 
> On Wed, Mar 14, 2018 at 2:16 PM, Christoph Hellwig <hch@lst.de> wrote:
>> On Wed, Mar 14, 2018 at 12:56:31PM +0100, John Paul Adrian Glaubitz wrote:
>>> Ah, bummer. I wanted to keep the MVME drivers but I never managed to get them ported to the new SCSI layer.
>>>
>>> Anyone out there who could help me with that?
>>
>> Here is how a trivial conversion should look like.  Probably doesn't
>> even compile as-is but might be a good starting point:
> 
> Thanks a lot!
> IIRC, the Australian Navy may keep their MVME boxes running until close to
> Y2038.
> 
But surely not updating them to 4.17 or later?

Cheers,

Hannes
Geert Uytterhoeven March 14, 2018, 3:42 p.m. UTC | #3
Hi Hannes,

On Wed, Mar 14, 2018 at 4:26 PM, Hannes Reinecke <hare@suse.de> wrote:
> On 03/14/2018 02:25 PM, Geert Uytterhoeven wrote:
>> On Wed, Mar 14, 2018 at 2:16 PM, Christoph Hellwig <hch@lst.de> wrote:
>>> On Wed, Mar 14, 2018 at 12:56:31PM +0100, John Paul Adrian Glaubitz wrote:
>>>> Ah, bummer. I wanted to keep the MVME drivers but I never managed to get them ported to the new SCSI layer.
>>>>
>>>> Anyone out there who could help me with that?
>>>
>>> Here is how a trivial conversion should look like.  Probably doesn't
>>> even compile as-is but might be a good starting point:
>>
>> Thanks a lot!
>> IIRC, the Australian Navy may keep their MVME boxes running until close to
>> Y2038.
>>
> But surely not updating them to 4.17 or later?

I don't know. Perhaps to prolong life until after Y2038 ;-)

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
Martin K. Petersen March 14, 2018, 3:58 p.m. UTC | #4
Geert,

>>> IIRC, the Australian Navy may keep their MVME boxes running until
>>> close to Y2038.
>>>
>> But surely not updating them to 4.17 or later?
>
> I don't know. Perhaps to prolong life until after Y2038 ;-)

I'm happy to keep things in the tree if they are:

      1) maintained and tested
      2) actively used
      3) not blocking removal of legacy interfaces
Geert Uytterhoeven March 14, 2018, 5:57 p.m. UTC | #5
Hi Martin,

On Wed, Mar 14, 2018 at 4:58 PM, Martin K. Petersen
<martin.petersen@oracle.com> wrote:
>>>> IIRC, the Australian Navy may keep their MVME boxes running until
>>>> close to Y2038.
>>>>
>>> But surely not updating them to 4.17 or later?
>>
>> I don't know. Perhaps to prolong life until after Y2038 ;-)
>
> I'm happy to keep things in the tree if they are:
>
>       1) maintained and tested
>       2) actively used
>       3) not blocking removal of legacy interfaces

I'm aware and I do understand.

Lets wait for Adrian...

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
Thomas Bogendoerfer March 16, 2018, 1:08 p.m. UTC | #6
On Wed, 14 Mar 2018 11:58:25 -0400
"Martin K. Petersen" <martin.petersen@oracle.com> wrote:

> I'm happy to keep things in the tree if they are:
> 
>       1) maintained and tested
>       2) actively used
>       3) not blocking removal of legacy interfaces

I own a MVME147, so if needed I could get it out of the closet and fix the driver for it.

Thomas.
diff mbox

Patch

diff --git a/drivers/scsi/mvme147.c b/drivers/scsi/mvme147.c
index e6b2b681fda3..f8d8d9de394d 100644
--- a/drivers/scsi/mvme147.c
+++ b/drivers/scsi/mvme147.c
@@ -3,6 +3,9 @@ 
 #include <linux/mm.h>
 #include <linux/blkdev.h>
 #include <linux/interrupt.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
 
 #include <asm/page.h>
 #include <asm/pgtable.h>
@@ -14,9 +17,6 @@ 
 #include "wd33c93.h"
 #include "mvme147.h"
 
-#include <linux/stat.h>
-
-
 static irqreturn_t mvme147_intr(int irq, void *data)
 {
 	struct Scsi_Host *instance = data;
@@ -65,40 +65,57 @@  static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,
 	m147_pcc->dma_cntrl = 0;
 }
 
-int mvme147_detect(struct scsi_host_template *tpnt)
+static struct scsi_host_template mvme147_host_template = {
+	.module			= THIS_MODULE,
+	.proc_name		= "MVME147",
+	.name			= "MVME147 built-in SCSI",
+	.queuecommand		= wd33c93_queuecommand,
+	.eh_abort_handler	= wd33c93_abort,
+	.eh_host_reset_handler	= wd33c93_host_reset,
+	.show_info		= wd33c93_show_info,
+	.write_info		= wd33c93_write_info,
+	.can_queue		= CAN_QUEUE,
+	.this_id		= 7,
+	.sg_tablesize		= SG_ALL,
+	.cmd_per_lun		= CMD_PER_LUN,
+	.use_clustering		= ENABLE_CLUSTERING
+};
+
+static struct Scsi_Host *mvme147_shost;
+
+static int __init mvme147_init(void)
 {
-	static unsigned char called = 0;
-	struct Scsi_Host *instance;
 	wd33c93_regs regs;
 	struct WD33C93_hostdata *hdata;
+	int error = -ENOMEM;
 
-	if (!MACH_IS_MVME147 || called)
+	if (!MACH_IS_MVME147)
 		return 0;
-	called++;
 
-	tpnt->proc_name = "MVME147";
-	tpnt->show_info = wd33c93_show_info,
-	tpnt->write_info = wd33c93_write_info,
-
-	instance = scsi_register(tpnt, sizeof(struct WD33C93_hostdata));
-	if (!instance)
+	mvme147_shost = scsi_host_alloc(&mvme147_host_template,
+			sizeof(struct WD33C93_hostdata));
+	if (!mvme147_shost)
 		goto err_out;
+	mvme147_shost->base = 0xfffe4000;
+	mvme147_shost->irq = MVME147_IRQ_SCSI_PORT;
 
-	instance->base = 0xfffe4000;
-	instance->irq = MVME147_IRQ_SCSI_PORT;
 	regs.SASR = (volatile unsigned char *)0xfffe4000;
 	regs.SCMD = (volatile unsigned char *)0xfffe4001;
-	hdata = shost_priv(instance);
+
+	hdata = shost_priv(mvme147_shost);
 	hdata->no_sync = 0xff;
 	hdata->fast = 0;
 	hdata->dma_mode = CTRL_DMA;
-	wd33c93_init(instance, regs, dma_setup, dma_stop, WD33C93_FS_8_10);
 
-	if (request_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr, 0,
-			"MVME147 SCSI PORT", instance))
+	wd33c93_init(mvme147_shost, regs, dma_setup, dma_stop, WD33C93_FS_8_10);
+
+	error = request_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr, 0,
+			"MVME147 SCSI PORT", mvme147_shost);
+	if (error)
 		goto err_unregister;
-	if (request_irq(MVME147_IRQ_SCSI_DMA, mvme147_intr, 0,
-			"MVME147 SCSI DMA", instance))
+	error = request_irq(MVME147_IRQ_SCSI_DMA, mvme147_intr, 0,
+			"MVME147 SCSI DMA", mvme147_shost);
+	if (error)
 		goto err_free_irq;
 #if 0	/* Disabled; causes problems booting */
 	m147_pcc->scsi_interrupt = 0x10;	/* Assert SCSI bus reset */
@@ -111,41 +128,31 @@  int mvme147_detect(struct scsi_host_template *tpnt)
 
 	m147_pcc->dma_cntrl = 0x00;	/* ensure DMA is stopped */
 	m147_pcc->dma_intr = 0x89;	/* Ack and enable ints */
-
-	return 1;
+		
+	error = scsi_add_host(mvme147_shost, NULL);
+	if (error)
+		goto err_free_irq;
+	scsi_scan_host(mvme147_shost);
+	return 0;
 
 err_free_irq:
-	free_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr);
+	free_irq(MVME147_IRQ_SCSI_PORT, mvme147_shost);
 err_unregister:
-	scsi_unregister(instance);
+	scsi_host_put(mvme147_shost);
 err_out:
-	return 0;
+	return error;
 }
 
-static struct scsi_host_template driver_template = {
-	.proc_name		= "MVME147",
-	.name			= "MVME147 built-in SCSI",
-	.detect			= mvme147_detect,
-	.release		= mvme147_release,
-	.queuecommand		= wd33c93_queuecommand,
-	.eh_abort_handler	= wd33c93_abort,
-	.eh_host_reset_handler	= wd33c93_host_reset,
-	.can_queue		= CAN_QUEUE,
-	.this_id		= 7,
-	.sg_tablesize		= SG_ALL,
-	.cmd_per_lun		= CMD_PER_LUN,
-	.use_clustering		= ENABLE_CLUSTERING
-};
-
-
-#include "scsi_module.c"
-
-int mvme147_release(struct Scsi_Host *instance)
+static void __exit mvme147_exit(void)
 {
-#ifdef MODULE
+	scsi_remove_host(mvme147_shost);
+
 	/* XXX Make sure DMA is stopped! */
-	free_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr);
-	free_irq(MVME147_IRQ_SCSI_DMA, mvme147_intr);
-#endif
-	return 1;
+	free_irq(MVME147_IRQ_SCSI_PORT, mvme147_shost);
+	free_irq(MVME147_IRQ_SCSI_DMA, mvme147_shost);
+
+	scsi_host_put(mvme147_shost);
 }
+
+module_init(mvme147_init);
+module_exit(mvme147_exit);