Message ID | 20180314131657.GA1554@lst.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
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
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
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
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
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
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 --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);