m68k/scsi: wd33c93 driver cleanups
Subsystems (2)
cover m68k/scsi: wd33c93 driver cleanups
Hi all,
Here's a series of easter eggs for the m68k wd33c93 SCSI drivers:
- [01] scsi: wd33c93 - Kill empty wd33c93_release()
- [02] m68k/scsi: a2091 - Reindentation
- [03] m68k/scsi: gvp11 - Reindentation
- [04] m68k/scsi: mvme147 - Reindentation
- [05] m68k/scsi: a3000 - Reindentation
- [06] m68k/scsi: a2091 - Use shost_priv() and kill ugly HDATA() macro
- [07] m68k/scsi: gvp11 - Use shost_priv() and kill ugly HDATA() macro
- [08] m68k/scsi: mvme147 - Use shost_priv() and kill ugly HDATA() macro
- [09] m68k/scsi: a3000 - Use shost_priv() and kill ugly HDATA() macro
- [10] m68k/scsi: a2091 - Kill ugly DMA() macro
- [11] m68k/scsi: gvp11 - Kill ugly DMA() macro
- [12] m68k/scsi: a3000 - Kill ugly DMA() macro
- [13] m68k/scsi: mvme147 - Kill static global mvme147_host
- [14] m68k/scsi: a3000 - Kill static global a3000_host
- [15] m68k/scsi: gvp11 - Extract check_wd33c93()
- [16] m68k/scsi: a2091 - Kill a2091_scsiregs typedef
- [17] m68k/scsi: gvp11 - Kill gvp11_scsiregs typedef
- [18] m68k/scsi: a3000 - Kill a3000_scsiregs typedef
- [19] m68k/scsi: mvme147 - Kill obsolete HOSTS_C logic
- [20] m68k: amiga - A2091/A590 SCSI zorro_driver conversion
- [21] m68k: amiga - GVP Series II SCSI zorro_driver conversion
This series consists of 3 parts:
- Easter egg 01 is a trivial cleanup for the wd33c93 core,
- Easter eggs 02-19 do various cleanups for the m68k wd33c93 SCSI drivers,
- Easter eggs 20 and 21 convert the A2091/A590 and GVP Series II SCSI drivers to proper new-style Zorro drivers.
drivers/scsi/a2091.c | 389 +++++++++++++++++--------------- drivers/scsi/a2091.h | 46 ++-- drivers/scsi/a3000.c | 301 +++++++++++++------------ drivers/scsi/a3000.h | 50 ++-- drivers/scsi/gvp11.c | 573 +++++++++++++++++++++++++----------------------- drivers/scsi/gvp11.h | 49 ++--- drivers/scsi/mvme147.c | 178 ++++++++-------- drivers/scsi/mvme147.h | 4 +- drivers/scsi/wd33c93.c | 6 - drivers/scsi/wd33c93.h | 1 - 10 files changed, 820 insertions(+), 777 deletions(-)
Unfortunately I do not have the hardware, so none of this has been actually tested. Especially easter eggs 20 and 21 are non-trivial and could use some testing.
Question: If approved, should this go in through the SCSI tree, or can I take it via the m68k tree?
I have another series of easter eggs to convert all drivers for built-in Amiga hardware to proper platform drivers, but the A3000 SCSI part depends on this series.
Thanks for your comments!
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
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
PATCH 1/21 scsi: wd33c93 - Kill empty wd33c93_release()
wd33c93_release() has been empty since ages, and sgiwd93.c no longer calls it since its conversion to a proper platform driver 2 years ago. Also remove the callers in the m68k wd33c93 shims.
--- drivers/scsi/a2091.c | 2 -- drivers/scsi/a3000.c | 2 -- drivers/scsi/gvp11.c | 2 -- drivers/scsi/mvme147.c | 2 -- drivers/scsi/wd33c93.c | 6 ------ drivers/scsi/wd33c93.h | 1 - 6 files changed, 0 insertions(+), 15 deletions(-)
drivers/scsi/a2091.c +0 -2
@@ -192,7 +192,6 @@ static int __init a2091_detect(struct scsi_host_template *tpnt) unregister:scsi_unregister (instance); -wd33c93_release (); release:release_mem_region (address,256 ); }
@@ -241,7 +240,6 @@ static int a2091_release(struct Scsi_Host *instance)DMA (instance)->CNTR =0 ;release_mem_region (ZTWO_PADDR (instance->base),256 );free_irq (IRQ_AMIGA_PORTS , instance); -wd33c93_release ();#endif return 1 ; }
drivers/scsi/a3000.c +0 -2
@@ -192,7 +192,6 @@ static int __init a3000_detect(struct scsi_host_template *tpnt)return 1 ; fail_irq: -wd33c93_release ();scsi_unregister (a3000_host); fail_register:release_mem_region (0xDD0000 ,256 );
@@ -236,7 +235,6 @@ static struct scsi_host_template driver_template = {static int a3000_release (struct Scsi_Host *instance) { -wd33c93_release ();DMA (instance)->CNTR =0 ;release_mem_region (0xDD0000 ,256 );free_irq (IRQ_AMIGA_PORTS , a3000_intr);
drivers/scsi/gvp11.c +0 -2
@@ -338,7 +338,6 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) unregister:scsi_unregister (instance); -wd33c93_release (); release:release_mem_region (address,256 ); }
@@ -391,7 +390,6 @@ int gvp11_release(struct Scsi_Host *instance)DMA (instance)->CNTR =0 ;release_mem_region (ZTWO_PADDR (instance->base),256 );free_irq (IRQ_AMIGA_PORTS , instance); -wd33c93_release ();#endif return 1 ; }
drivers/scsi/mvme147.c +0 -2
@@ -108,7 +108,6 @@ int mvme147_detect(struct scsi_host_template *tpnt) err_free_irq:free_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr); err_unregister: -wd33c93_release ();scsi_unregister (mvme147_host); err_out:return 0 ;
@@ -155,7 +154,6 @@ int mvme147_release(struct Scsi_Host *instance) {#ifdef MODULE /* XXX Make sure DMA is stopped! */ -wd33c93_release ();free_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr);free_irq (MVME147_IRQ_SCSI_DMA , mvme147_intr);#endif
drivers/scsi/wd33c93.c +0 -6
@@ -2224,14 +2224,8 @@ wd33c93_proc_info(struct Scsi_Host *instance, char *buf, char **start, off_t off } -void -wd33c93_release (void ) -{ -} -EXPORT_SYMBOL (wd33c93_host_reset);EXPORT_SYMBOL (wd33c93_init); -EXPORT_SYMBOL (wd33c93_release);EXPORT_SYMBOL (wd33c93_abort);EXPORT_SYMBOL (wd33c93_queuecommand);EXPORT_SYMBOL (wd33c93_intr);
drivers/scsi/wd33c93.h +0 -1
@@ -348,6 +348,5 @@ int wd33c93_queuecommand (struct scsi_cmnd *cmd,void wd33c93_intr (struct Scsi_Host *instance);int wd33c93_proc_info (struct Scsi_Host *,char *,char **,off_t ,int ,int );int wd33c93_host_reset (struct scsi_cmnd *); -void wd33c93_release (void );#endif /* WD33C93_H */
Signature · 1 line
1.6.0.4
PATCH 2/21 m68k/scsi: a2091 - Reindentation
--- drivers/scsi/a2091.c | 299 +++++++++++++++++++++++++------------------------- drivers/scsi/a2091.h | 42 ++++---- 2 files changed, 171 insertions(+), 170 deletions(-)
drivers/scsi/a2091.c +150 -149
@@ -18,185 +18,186 @@#include "wd33c93.h" #include "a2091.h" -#include <linux/stat.h> +#include <linux/stat.h> -#define DMA (ptr) ((a2091_scsiregs *)((ptr)->base)) -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) + +#define DMA (ptr) ((a2091_scsiregs *)((ptr)->base)) +#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))static int a2091_release (struct Scsi_Host *instance); -static irqreturn_t a2091_intr (int irq,void *_instance) +static irqreturn_t a2091_intr (int irq,void *_instance) { -unsigned long flags; -unsigned int status; -struct Scsi_Host *instance = (struct Scsi_Host *)_instance; - - status =DMA (instance)->ISTR; -if (!(status & (ISTR_INT_F |ISTR_INT_P )) || !(status &ISTR_INTS )) -return IRQ_NONE ; - -spin_lock_irqsave (instance->host_lock, flags); -wd33c93_intr (instance); -spin_unlock_irqrestore (instance->host_lock, flags); -return IRQ_HANDLED ; +unsigned long flags; +unsigned int status; +struct Scsi_Host *instance = (struct Scsi_Host *)_instance; + + status =DMA (instance)->ISTR; +if (!(status & (ISTR_INT_F |ISTR_INT_P )) || !(status &ISTR_INTS )) +return IRQ_NONE ; + +spin_lock_irqsave (instance->host_lock, flags); +wd33c93_intr (instance); +spin_unlock_irqrestore (instance->host_lock, flags); +return IRQ_HANDLED ; }static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { -unsigned short cntr =CNTR_PDMD |CNTR_INTEN ; -unsigned long addr =virt_to_bus (cmd->SCp.ptr); -struct Scsi_Host *instance = cmd->device->host; - -/* don't allow DMA if the physical address is bad */ -if (addr &A2091_XFER_MASK ) - { -HDATA (instance)->dma_bounce_len = (cmd->SCp.this_residual +511 ) - & ~0x1ff ; -HDATA (instance)->dma_bounce_buffer = -kmalloc (HDATA (instance)->dma_bounce_len,GFP_KERNEL ); - -/* can't allocate memory; use PIO */ -if (!HDATA (instance)->dma_bounce_buffer) { -HDATA (instance)->dma_bounce_len =0 ; -return 1 ; - } - -/* get the physical address of the bounce buffer */ - addr =virt_to_bus (HDATA (instance)->dma_bounce_buffer); +unsigned short cntr =CNTR_PDMD |CNTR_INTEN ; +unsigned long addr =virt_to_bus (cmd->SCp.ptr); +struct Scsi_Host *instance = cmd->device->host; -/* the bounce buffer may not be in the first 16M of physmem */ +/* don't allow DMA if the physical address is bad */ if (addr &A2091_XFER_MASK ) { -/* we could use chipmem... maybe later */ -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; -return 1 ; - } - -if (!dir_in) { -/* copy to bounce buffer for a write */ -memcpy (HDATA (instance)->dma_bounce_buffer, - cmd->SCp.ptr, cmd->SCp.this_residual); +HDATA (instance)->dma_bounce_len = + (cmd->SCp.this_residual +511 ) & ~0x1ff ; +HDATA (instance)->dma_bounce_buffer = +kmalloc (HDATA (instance)->dma_bounce_len,GFP_KERNEL ); + +/* can't allocate memory; use PIO */ +if (!HDATA (instance)->dma_bounce_buffer) { +HDATA (instance)->dma_bounce_len =0 ; +return 1 ; + } + +/* get the physical address of the bounce buffer */ + addr =virt_to_bus (HDATA (instance)->dma_bounce_buffer); + +/* the bounce buffer may not be in the first 16M of physmem */ +if (addr &A2091_XFER_MASK ) { +/* we could use chipmem... maybe later */ +kfree (HDATA (instance)->dma_bounce_buffer); +HDATA (instance)->dma_bounce_buffer =NULL ; +HDATA (instance)->dma_bounce_len =0 ; +return 1 ; + } + +if (!dir_in) { +/* copy to bounce buffer for a write */ +memcpy (HDATA (instance)->dma_bounce_buffer, + cmd->SCp.ptr, cmd->SCp.this_residual); + } } - } -/* setup dma direction */ -if (!dir_in) - cntr |=CNTR_DDIR ; +/* setup dma direction */ +if (!dir_in) + cntr |=CNTR_DDIR ; -/* remember direction */ -HDATA (cmd->device->host)->dma_dir = dir_in; +/* remember direction */ +HDATA (cmd->device->host)->dma_dir = dir_in; -DMA (cmd->device->host)->CNTR = cntr; +DMA (cmd->device->host)->CNTR = cntr; -/* setup DMA *physical* address */ -DMA (cmd->device->host)->ACR = addr; +/* setup DMA *physical* address */ +DMA (cmd->device->host)->ACR = addr; -if (dir_in){ -/* invalidate any cache */ -cache_clear (addr, cmd->SCp.this_residual); - }else { -/* push any dirty cache */ -cache_push (addr, cmd->SCp.this_residual); - } -/* start DMA */ -DMA (cmd->device->host)->ST_DMA =1 ; +if (dir_in) { +/* invalidate any cache */ +cache_clear (addr, cmd->SCp.this_residual); + }else { +/* push any dirty cache */ +cache_push (addr, cmd->SCp.this_residual); + } +/* start DMA */ +DMA (cmd->device->host)->ST_DMA =1 ; -/* return success */ -return 0 ; +/* return success */ +return 0 ; }static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt, -int status) +int status) { -/* disable SCSI interrupts */ -unsigned short cntr =CNTR_PDMD ; - -if (!HDATA (instance)->dma_dir) - cntr |=CNTR_DDIR ; - -/* disable SCSI interrupts */ -DMA (instance)->CNTR = cntr; - -/* flush if we were reading */ -if (HDATA (instance)->dma_dir) { -DMA (instance)->FLUSH =1 ; -while (!(DMA (instance)->ISTR &ISTR_FE_FLG )) - ; - } - -/* clear a possible interrupt */ -DMA (instance)->CINT =1 ; - -/* stop DMA */ -DMA (instance)->SP_DMA =1 ; - -/* restore the CONTROL bits (minus the direction flag) */ -DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; - -/* copy from a bounce buffer, if necessary */ -if (status &&HDATA (instance)->dma_bounce_buffer) { -if (HDATA (instance)->dma_dir ) -memcpy (SCpnt->SCp.ptr, -HDATA (instance)->dma_bounce_buffer, - SCpnt->SCp.this_residual); -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; - } +/* disable SCSI interrupts */ +unsigned short cntr =CNTR_PDMD ; + +if (!HDATA (instance)->dma_dir) + cntr |=CNTR_DDIR ; + +/* disable SCSI interrupts */ +DMA (instance)->CNTR = cntr; + +/* flush if we were reading */ +if (HDATA (instance)->dma_dir) { +DMA (instance)->FLUSH =1 ; +while (!(DMA (instance)->ISTR &ISTR_FE_FLG )) + ; + } + +/* clear a possible interrupt */ +DMA (instance)->CINT =1 ; + +/* stop DMA */ +DMA (instance)->SP_DMA =1 ; + +/* restore the CONTROL bits (minus the direction flag) */ +DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; + +/* copy from a bounce buffer, if necessary */ +if (status &&HDATA (instance)->dma_bounce_buffer) { +if (HDATA (instance)->dma_dir) +memcpy (SCpnt->SCp.ptr, +HDATA (instance)->dma_bounce_buffer, + SCpnt->SCp.this_residual); +kfree (HDATA (instance)->dma_bounce_buffer); +HDATA (instance)->dma_bounce_buffer =NULL ; +HDATA (instance)->dma_bounce_len =0 ; + } }static int __init a2091_detect (struct scsi_host_template *tpnt) { -static unsigned char called =0 ; -struct Scsi_Host *instance; -unsigned long address; -struct zorro_dev *z =NULL ; -wd33c93_regs regs; -int num_a2091 =0 ; - -if (!MACH_IS_AMIGA || called) -return 0 ; - called =1 ; - - tpnt->proc_name ="A2091" ; - tpnt->proc_info = &wd33c93_proc_info; - -while ((z =zorro_find_device (ZORRO_WILDCARD , z))) { -if (z->id !=ZORRO_PROD_CBM_A590_A2091_1 && - z->id !=ZORRO_PROD_CBM_A590_A2091_2 ) -continue ; - address = z->resource.start; -if (!request_mem_region (address,256 ,"wd33c93" )) -continue ; - - instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (instance ==NULL ) - goto release; - instance->base =ZTWO_VADDR (address); - instance->irq =IRQ_AMIGA_PORTS ; - instance->unique_id = z->slotaddr; -DMA (instance)->DAWR =DAWR_A2091 ; - regs.SASR = &(DMA (instance)->SASR); - regs.SCMD = &(DMA (instance)->SCMD); -HDATA (instance)->no_sync =0xff ; -HDATA (instance)->fast =0 ; -HDATA (instance)->dma_mode =CTRL_DMA ; -wd33c93_init (instance, regs, dma_setup, dma_stop,WD33C93_FS_8_10 ); -if (request_irq (IRQ_AMIGA_PORTS , a2091_intr,IRQF_SHARED ,"A2091 SCSI" , - instance)) - goto unregister; -DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; - num_a2091++; -continue ; +static unsigned char called =0 ; +struct Scsi_Host *instance; +unsigned long address; +struct zorro_dev *z =NULL ; +wd33c93_regs regs; +int num_a2091 =0 ; + +if (!MACH_IS_AMIGA || called) +return 0 ; + called =1 ; + + tpnt->proc_name ="A2091" ; + tpnt->proc_info = &wd33c93_proc_info; + +while ((z =zorro_find_device (ZORRO_WILDCARD , z))) { +if (z->id !=ZORRO_PROD_CBM_A590_A2091_1 && + z->id !=ZORRO_PROD_CBM_A590_A2091_2 ) +continue ; + address = z->resource.start; +if (!request_mem_region (address,256 ,"wd33c93" )) +continue ; + + instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); +if (instance ==NULL ) + goto release; + instance->base =ZTWO_VADDR (address); + instance->irq =IRQ_AMIGA_PORTS ; + instance->unique_id = z->slotaddr; +DMA (instance)->DAWR =DAWR_A2091 ; + regs.SASR = &(DMA (instance)->SASR); + regs.SCMD = &(DMA (instance)->SCMD); +HDATA (instance)->no_sync =0xff ; +HDATA (instance)->fast =0 ; +HDATA (instance)->dma_mode =CTRL_DMA ; +wd33c93_init (instance, regs, dma_setup, dma_stop, +WD33C93_FS_8_10 ); +if (request_irq (IRQ_AMIGA_PORTS , a2091_intr,IRQF_SHARED , +"A2091 SCSI" , instance)) + goto unregister; +DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; + num_a2091++; +continue ; unregister: -scsi_unregister (instance); +scsi_unregister (instance); release: -release_mem_region (address,256 ); - } +release_mem_region (address,256 ); + } -return num_a2091; +return num_a2091; }static int a2091_bus_reset (struct scsi_cmnd *cmd)
drivers/scsi/a2091.h +21 -21
59 lines not on this page · raw message
Signature · 1 line
1.6.0.4
PATCH 3/21 m68k/scsi: gvp11 - Reindentation
--- drivers/scsi/gvp11.c | 562 +++++++++++++++++++++++++------------------------- drivers/scsi/gvp11.h | 36 ++-- 2 files changed, 301 insertions(+), 297 deletions(-)
drivers/scsi/gvp11.c +283 -279
@@ -18,331 +18,335 @@#include "wd33c93.h" #include "gvp11.h" -#include <linux/stat.h> +#include <linux/stat.h> -#define DMA (ptr) ((gvp11_scsiregs *)((ptr)->base)) -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) -static irqreturn_t gvp11_intr (int irq,void *_instance) +#define DMA (ptr) ((gvp11_scsiregs *)((ptr)->base)) +#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) + +static irqreturn_t gvp11_intr (int irq,void *_instance) { -unsigned long flags; -unsigned int status; -struct Scsi_Host *instance = (struct Scsi_Host *)_instance; - - status =DMA (instance)->CNTR; -if (!(status &GVP11_DMAC_INT_PENDING )) -return IRQ_NONE ; - -spin_lock_irqsave (instance->host_lock, flags); -wd33c93_intr (instance); -spin_unlock_irqrestore (instance->host_lock, flags); -return IRQ_HANDLED ; +unsigned long flags; +unsigned int status; +struct Scsi_Host *instance = (struct Scsi_Host *)_instance; + + status =DMA (instance)->CNTR; +if (!(status &GVP11_DMAC_INT_PENDING )) +return IRQ_NONE ; + +spin_lock_irqsave (instance->host_lock, flags); +wd33c93_intr (instance); +spin_unlock_irqrestore (instance->host_lock, flags); +return IRQ_HANDLED ; }static int gvp11_xfer_mask =0 ; -void gvp11_setup (char *str,int *ints) +void gvp11_setup (char *str,int *ints) { - gvp11_xfer_mask = ints[1 ]; + gvp11_xfer_mask = ints[1 ]; }static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { -unsigned short cntr =GVP11_DMAC_INT_ENABLE ; -unsigned long addr =virt_to_bus (cmd->SCp.ptr); -int bank_mask; -static int scsi_alloc_out_of_range =0 ; - -/* use bounce buffer if the physical address is bad */ -if (addr &HDATA (cmd->device->host)->dma_xfer_mask) - { -HDATA (cmd->device->host)->dma_bounce_len = (cmd->SCp.this_residual +511 ) - & ~0x1ff ; - -if ( !scsi_alloc_out_of_range ) { -HDATA (cmd->device->host)->dma_bounce_buffer = -kmalloc (HDATA (cmd->device->host)->dma_bounce_len,GFP_KERNEL ); -HDATA (cmd->device->host)->dma_buffer_pool =BUF_SCSI_ALLOCED ; - } +unsigned short cntr =GVP11_DMAC_INT_ENABLE ; +unsigned long addr =virt_to_bus (cmd->SCp.ptr); +int bank_mask; +static int scsi_alloc_out_of_range =0 ; -if (scsi_alloc_out_of_range || - !HDATA (cmd->device->host)->dma_bounce_buffer) { -HDATA (cmd->device->host)->dma_bounce_buffer = -amiga_chip_alloc (HDATA (cmd->device->host)->dma_bounce_len, -"GVP II SCSI Bounce Buffer" ); +/* use bounce buffer if the physical address is bad */ +if (addr &HDATA (cmd->device->host)->dma_xfer_mask) { +HDATA (cmd->device->host)->dma_bounce_len = + (cmd->SCp.this_residual +511 ) & ~0x1ff ; + +if (!scsi_alloc_out_of_range) { +HDATA (cmd->device->host)->dma_bounce_buffer = +kmalloc (HDATA (cmd->device->host)->dma_bounce_len, +GFP_KERNEL ); +HDATA (cmd->device->host)->dma_buffer_pool = +BUF_SCSI_ALLOCED ; + } -if (!HDATA (cmd->device->host)->dma_bounce_buffer) - { -HDATA (cmd->device->host)->dma_bounce_len =0 ; -return 1 ; - } +if (scsi_alloc_out_of_range || + !HDATA (cmd->device->host)->dma_bounce_buffer) { +HDATA (cmd->device->host)->dma_bounce_buffer = +amiga_chip_alloc (HDATA (cmd->device->host)->dma_bounce_len, +"GVP II SCSI Bounce Buffer" ); -HDATA (cmd->device->host)->dma_buffer_pool =BUF_CHIP_ALLOCED ; - } +if (!HDATA (cmd->device->host)->dma_bounce_buffer) { +HDATA (cmd->device->host)->dma_bounce_len =0 ; +return 1 ; + } -/* check if the address of the bounce buffer is OK */ - addr =virt_to_bus (HDATA (cmd->device->host)->dma_bounce_buffer); +HDATA (cmd->device->host)->dma_buffer_pool = +BUF_CHIP_ALLOCED ; + } -if (addr &HDATA (cmd->device->host)->dma_xfer_mask) { -/* fall back to Chip RAM if address out of range */ -if (HDATA (cmd->device->host)->dma_buffer_pool ==BUF_SCSI_ALLOCED ) { -kfree (HDATA (cmd->device->host)->dma_bounce_buffer); - scsi_alloc_out_of_range =1 ; - }else { -amiga_chip_free (HDATA (cmd->device->host)->dma_bounce_buffer); - } - -HDATA (cmd->device->host)->dma_bounce_buffer = -amiga_chip_alloc (HDATA (cmd->device->host)->dma_bounce_len, -"GVP II SCSI Bounce Buffer" ); - -if (!HDATA (cmd->device->host)->dma_bounce_buffer) - { -HDATA (cmd->device->host)->dma_bounce_len =0 ; -return 1 ; - } - - addr =virt_to_bus (HDATA (cmd->device->host)->dma_bounce_buffer); -HDATA (cmd->device->host)->dma_buffer_pool =BUF_CHIP_ALLOCED ; - } - -if (!dir_in) { -/* copy to bounce buffer for a write */ -memcpy (HDATA (cmd->device->host)->dma_bounce_buffer, - cmd->SCp.ptr, cmd->SCp.this_residual); +/* check if the address of the bounce buffer is OK */ + addr =virt_to_bus (HDATA (cmd->device->host)->dma_bounce_buffer); + +if (addr &HDATA (cmd->device->host)->dma_xfer_mask) { +/* fall back to Chip RAM if address out of range */ +if (HDATA (cmd->device->host)->dma_buffer_pool == +BUF_SCSI_ALLOCED ) { +kfree (HDATA (cmd->device->host)->dma_bounce_buffer); + scsi_alloc_out_of_range =1 ; + }else { +amiga_chip_free (HDATA (cmd->device->host)->dma_bounce_buffer); + } + +HDATA (cmd->device->host)->dma_bounce_buffer = +amiga_chip_alloc (HDATA (cmd->device->host)->dma_bounce_len, +"GVP II SCSI Bounce Buffer" ); + +if (!HDATA (cmd->device->host)->dma_bounce_buffer) { +HDATA (cmd->device->host)->dma_bounce_len =0 ; +return 1 ; + } + + addr =virt_to_bus (HDATA (cmd->device->host)->dma_bounce_buffer); +HDATA (cmd->device->host)->dma_buffer_pool = +BUF_CHIP_ALLOCED ; + } + +if (!dir_in) { +/* copy to bounce buffer for a write */ +memcpy (HDATA (cmd->device->host)->dma_bounce_buffer, + cmd->SCp.ptr, cmd->SCp.this_residual); + } } - } -/* setup dma direction */ -if (!dir_in) - cntr |=GVP11_DMAC_DIR_WRITE ; +/* setup dma direction */ +if (!dir_in) + cntr |=GVP11_DMAC_DIR_WRITE ; -HDATA (cmd->device->host)->dma_dir = dir_in; -DMA (cmd->device->host)->CNTR = cntr; +HDATA (cmd->device->host)->dma_dir = dir_in; +DMA (cmd->device->host)->CNTR = cntr; -/* setup DMA *physical* address */ -DMA (cmd->device->host)->ACR = addr; +/* setup DMA *physical* address */ +DMA (cmd->device->host)->ACR = addr; -if (dir_in) -/* invalidate any cache */ -cache_clear (addr, cmd->SCp.this_residual); -else -/* push any dirty cache */ -cache_push (addr, cmd->SCp.this_residual); +if (dir_in) { +/* invalidate any cache */ +cache_clear (addr, cmd->SCp.this_residual); + }else { +/* push any dirty cache */ +cache_push (addr, cmd->SCp.this_residual); + } -if ((bank_mask = (~HDATA (cmd->device->host)->dma_xfer_mask >>18 ) &0x01c0 )) -DMA (cmd->device->host)->BANK = bank_mask & (addr >>18 ); +if ((bank_mask = (~HDATA (cmd->device->host)->dma_xfer_mask >>18 ) &0x01c0 )) +DMA (cmd->device->host)->BANK = bank_mask & (addr >>18 ); -/* start DMA */ -DMA (cmd->device->host)->ST_DMA =1 ; +/* start DMA */ +DMA (cmd->device->host)->ST_DMA =1 ; -/* return success */ -return 0 ; +/* return success */ +return 0 ; }static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { -/* stop DMA */ -DMA (instance)->SP_DMA =1 ; -/* remove write bit from CONTROL bits */ -DMA (instance)->CNTR =GVP11_DMAC_INT_ENABLE ; - -/* copy from a bounce buffer, if necessary */ -if (status &&HDATA (instance)->dma_bounce_buffer) { -if (HDATA (instance)->dma_dir && SCpnt) -memcpy (SCpnt->SCp.ptr, -HDATA (instance)->dma_bounce_buffer, - SCpnt->SCp.this_residual); - -if (HDATA (instance)->dma_buffer_pool ==BUF_SCSI_ALLOCED ) -kfree (HDATA (instance)->dma_bounce_buffer); -else -amiga_chip_free (HDATA (instance)->dma_bounce_buffer); - -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; - } +/* stop DMA */ +DMA (instance)->SP_DMA =1 ; +/* remove write bit from CONTROL bits */ +DMA (instance)->CNTR =GVP11_DMAC_INT_ENABLE ; + +/* copy from a bounce buffer, if necessary */ +if (status &&HDATA (instance)->dma_bounce_buffer) { +if (HDATA (instance)->dma_dir && SCpnt) +memcpy (SCpnt->SCp.ptr, +HDATA (instance)->dma_bounce_buffer, + SCpnt->SCp.this_residual); + +if (HDATA (instance)->dma_buffer_pool ==BUF_SCSI_ALLOCED ) +kfree (HDATA (instance)->dma_bounce_buffer); +else +amiga_chip_free (HDATA (instance)->dma_bounce_buffer); + +HDATA (instance)->dma_bounce_buffer =NULL ; +HDATA (instance)->dma_bounce_len =0 ; + } }#define CHECK_WD33C93 int __init gvp11_detect (struct scsi_host_template *tpnt) { -static unsigned char called =0 ; -struct Scsi_Host *instance; -unsigned long address; -unsigned int epc; -struct zorro_dev *z =NULL ; -unsigned int default_dma_xfer_mask; -wd33c93_regs regs; -int num_gvp11 =0 ; +static unsigned char called =0 ; +struct Scsi_Host *instance; +unsigned long address; +unsigned int epc; +struct zorro_dev *z =NULL ; +unsigned int default_dma_xfer_mask; +wd33c93_regs regs; +int num_gvp11 =0 ;#ifdef CHECK_WD33C93 -volatile unsigned char *sasr_3393, *scmd_3393; -unsigned char save_sasr; -unsigned char q, qq; +volatile unsigned char *sasr_3393, *scmd_3393; +unsigned char save_sasr; +unsigned char q, qq;#endif -if (!MACH_IS_AMIGA || called) -return 0 ; - called =1 ; - - tpnt->proc_name ="GVP11" ; - tpnt->proc_info = &wd33c93_proc_info; - -while ((z =zorro_find_device (ZORRO_WILDCARD , z))) { -/* -* This should (hopefully) be the correct way to identify -* all the different GVP SCSI controllers (except for the -* SERIES I though). -*/ - -if (z->id ==ZORRO_PROD_GVP_COMBO_030_R3_SCSI || - z->id ==ZORRO_PROD_GVP_SERIES_II ) - default_dma_xfer_mask = ~0x00ffffff ; -else if (z->id ==ZORRO_PROD_GVP_GFORCE_030_SCSI || - z->id ==ZORRO_PROD_GVP_A530_SCSI || - z->id ==ZORRO_PROD_GVP_COMBO_030_R4_SCSI ) - default_dma_xfer_mask = ~0x01ffffff ; -else if (z->id ==ZORRO_PROD_GVP_A1291 || - z->id ==ZORRO_PROD_GVP_GFORCE_040_SCSI_1 ) - default_dma_xfer_mask = ~0x07ffffff ; -else -continue ; - -/* -* Rumors state that some GVP ram boards use the same product -* code as the SCSI controllers. Therefore if the board-size -* is not 64KB we asume it is a ram board and bail out. -*/ -if (z->resource.end-z->resource.start !=0xffff ) -continue ; - - address = z->resource.start; -if (!request_mem_region (address,256 ,"wd33c93" )) -continue ; +if (!MACH_IS_AMIGA || called) +return 0 ; + called =1 ; + + tpnt->proc_name ="GVP11" ; + tpnt->proc_info = &wd33c93_proc_info; + +while ((z =zorro_find_device (ZORRO_WILDCARD , z))) { +/* +* This should (hopefully) be the correct way to identify +* all the different GVP SCSI controllers (except for the +* SERIES I though). +*/ + +if (z->id ==ZORRO_PROD_GVP_COMBO_030_R3_SCSI || + z->id ==ZORRO_PROD_GVP_SERIES_II ) + default_dma_xfer_mask = ~0x00ffffff ; +else if (z->id ==ZORRO_PROD_GVP_GFORCE_030_SCSI || + z->id ==ZORRO_PROD_GVP_A530_SCSI || + z->id ==ZORRO_PROD_GVP_COMBO_030_R4_SCSI ) + default_dma_xfer_mask = ~0x01ffffff ; +else if (z->id ==ZORRO_PROD_GVP_A1291 || + z->id ==ZORRO_PROD_GVP_GFORCE_040_SCSI_1 ) + default_dma_xfer_mask = ~0x07ffffff ; +else +continue ; + +/* +* Rumors state that some GVP ram boards use the same product +* code as the SCSI controllers. Therefore if the board-size +* is not 64KB we asume it is a ram board and bail out. +*/ +if (z->resource.end - z->resource.start !=0xffff ) +continue ; + + address = z->resource.start; +if (!request_mem_region (address,256 ,"wd33c93" )) +continue ;#ifdef CHECK_WD33C93 -/* -* These darn GVP boards are a problem - it can be tough to tell -* whether or not they include a SCSI controller. This is the -* ultimate Yet-Another-GVP-Detection-Hack in that it actually -* probes for a WD33c93 chip: If we find one, it's extremely -* likely that this card supports SCSI, regardless of Product_ -* Code, Board_Size, etc. -*/ - -/* Get pointers to the presumed register locations and save contents */ - - sasr_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR (address)))->SASR); - scmd_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR (address)))->SCMD); - save_sasr = *sasr_3393; - -/* First test the AuxStatus Reg */ - - q = *sasr_3393;/* read it */ -if (q &0x08 )/* bit 3 should always be clear */ - goto release; - *sasr_3393 =WD_AUXILIARY_STATUS ;/* setup indirect address */ -if (*sasr_3393 ==WD_AUXILIARY_STATUS ) {/* shouldn't retain the write */ - *sasr_3393 = save_sasr;/* Oops - restore this byte */ - goto release; +/* +* These darn GVP boards are a problem - it can be tough to tell +* whether or not they include a SCSI controller. This is the +* ultimate Yet-Another-GVP-Detection-Hack in that it actually +* probes for a WD33c93 chip: If we find one, it's extremely +* likely that this card supports SCSI, regardless of Product_ +* Code, Board_Size, etc. +*/ + +/* Get pointers to the presumed register locations and save contents */ + + sasr_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR (address)))->SASR); + scmd_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR (address)))->SCMD); + save_sasr = *sasr_3393; + +/* First test the AuxStatus Reg */ + + q = *sasr_3393;/* read it */ +if (q &0x08 )/* bit 3 should always be clear */ + goto release; + *sasr_3393 =WD_AUXILIARY_STATUS ;/* setup indirect address */ +if (*sasr_3393 ==WD_AUXILIARY_STATUS ) {/* shouldn't retain the write */ + *sasr_3393 = save_sasr;/* Oops - restore this byte */ + goto release; } -if (*sasr_3393 != q) {/* should still read the same */ - *sasr_3393 = save_sasr;/* Oops - restore this byte */ - goto release; +if (*sasr_3393 != q) {/* should still read the same */ + *sasr_3393 = save_sasr;/* Oops - restore this byte */ + goto release; } -if (*scmd_3393 != q)/* and so should the image at 0x1f */ - goto release; - - -/* Ok, we probably have a wd33c93, but let's check a few other places -* for good measure. Make sure that this works for both 'A and 'B -* chip versions. -*/ - - *sasr_3393 =WD_SCSI_STATUS ; - q = *scmd_3393; - *sasr_3393 =WD_SCSI_STATUS ; - *scmd_3393 = ~q; - *sasr_3393 =WD_SCSI_STATUS ; - qq = *scmd_3393; - *sasr_3393 =WD_SCSI_STATUS ; - *scmd_3393 = q; -if (qq != q)/* should be read only */ - goto release; - *sasr_3393 =0x1e ;/* this register is unimplemented */ - q = *scmd_3393; - *sasr_3393 =0x1e ; - *scmd_3393 = ~q; - *sasr_3393 =0x1e ; - qq = *scmd_3393; - *sasr_3393 =0x1e ; - *scmd_3393 = q; -if (qq != q || qq !=0xff )/* should be read only, all 1's */ - goto release; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - q = *scmd_3393; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - *scmd_3393 = ~q; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - qq = *scmd_3393; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - *scmd_3393 = q; -if (qq != (~q &0xff ))/* should be read/write */ - goto release; +if (*scmd_3393 != q)/* and so should the image at 0x1f */ + goto release; + +/* +* Ok, we probably have a wd33c93, but let's check a few other places +* for good measure. Make sure that this works for both 'A and 'B +* chip versions. +*/ + + *sasr_3393 =WD_SCSI_STATUS ; + q = *scmd_3393; + *sasr_3393 =WD_SCSI_STATUS ; + *scmd_3393 = ~q; + *sasr_3393 =WD_SCSI_STATUS ; + qq = *scmd_3393; + *sasr_3393 =WD_SCSI_STATUS ; + *scmd_3393 = q; +if (qq != q)/* should be read only */ + goto release; + *sasr_3393 =0x1e ;/* this register is unimplemented */ + q = *scmd_3393; + *sasr_3393 =0x1e ; + *scmd_3393 = ~q; + *sasr_3393 =0x1e ; + qq = *scmd_3393; + *sasr_3393 =0x1e ; + *scmd_3393 = q; +if (qq != q || qq !=0xff )/* should be read only, all 1's */ + goto release; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + q = *scmd_3393; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + *scmd_3393 = ~q; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + qq = *scmd_3393; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + *scmd_3393 = q; +if (qq != (~q &0xff ))/* should be read/write */ + goto release;#endif - instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (instance ==NULL ) - goto release; - instance->base =ZTWO_VADDR (address); - instance->irq =IRQ_AMIGA_PORTS ; - instance->unique_id = z->slotaddr; - -if (gvp11_xfer_mask) -HDATA (instance)->dma_xfer_mask = gvp11_xfer_mask; -else -HDATA (instance)->dma_xfer_mask = default_dma_xfer_mask; - - -DMA (instance)->secret2 =1 ; -DMA (instance)->secret1 =0 ; -DMA (instance)->secret3 =15 ; -while (DMA (instance)->CNTR &GVP11_DMAC_BUSY ) ; -DMA (instance)->CNTR =0 ; - -DMA (instance)->BANK =0 ; - - epc = *(unsigned short *)(ZTWO_VADDR (address) +0x8000 ); - -/* -* Check for 14MHz SCSI clock -*/ - regs.SASR = &(DMA (instance)->SASR); - regs.SCMD = &(DMA (instance)->SCMD); -HDATA (instance)->no_sync =0xff ; -HDATA (instance)->fast =0 ; -HDATA (instance)->dma_mode =CTRL_DMA ; -wd33c93_init (instance, regs, dma_setup, dma_stop, - (epc &GVP_SCSICLKMASK ) ?WD33C93_FS_8_10 - :WD33C93_FS_12_15 ); - -if (request_irq (IRQ_AMIGA_PORTS , gvp11_intr,IRQF_SHARED ,"GVP11 SCSI" , - instance)) - goto unregister; -DMA (instance)->CNTR =GVP11_DMAC_INT_ENABLE ; - num_gvp11++; -continue ; + instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); +if (instance ==NULL ) + goto release; + instance->base =ZTWO_VADDR (address); + instance->irq =IRQ_AMIGA_PORTS ; + instance->unique_id = z->slotaddr; + +if (gvp11_xfer_mask) +HDATA (instance)->dma_xfer_mask = gvp11_xfer_mask; +else +HDATA (instance)->dma_xfer_mask = default_dma_xfer_mask; + +DMA (instance)->secret2 =1 ; +DMA (instance)->secret1 =0 ; +DMA (instance)->secret3 =15 ; +while (DMA (instance)->CNTR &GVP11_DMAC_BUSY ) + ; +DMA (instance)->CNTR =0 ; + +DMA (instance)->BANK =0 ; + + epc = *(unsigned short *)(ZTWO_VADDR (address) +0x8000 ); + +/* +* Check for 14MHz SCSI clock +*/ + regs.SASR = &(DMA (instance)->SASR); + regs.SCMD = &(DMA (instance)->SCMD); +HDATA (instance)->no_sync =0xff ; +HDATA (instance)->fast =0 ; +HDATA (instance)->dma_mode =CTRL_DMA ; +wd33c93_init (instance, regs, dma_setup, dma_stop, + (epc &GVP_SCSICLKMASK ) ?WD33C93_FS_8_10 + :WD33C93_FS_12_15 ); + +if (request_irq (IRQ_AMIGA_PORTS , gvp11_intr,IRQF_SHARED , +"GVP11 SCSI" , instance)) + goto unregister; +DMA (instance)->CNTR =GVP11_DMAC_INT_ENABLE ; + num_gvp11++; +continue ; unregister: -scsi_unregister (instance); +scsi_unregister (instance); release: -release_mem_region (address,256 ); - } +release_mem_region (address,256 ); + } -return num_gvp11; +return num_gvp11; }static int gvp11_bus_reset (struct scsi_cmnd *cmd)
@@ -387,11 +391,11 @@ static struct scsi_host_template driver_template = {int gvp11_release (struct Scsi_Host *instance) {#ifdef MODULE -DMA (instance)->CNTR =0 ; -release_mem_region (ZTWO_PADDR (instance->base),256 ); -free_irq (IRQ_AMIGA_PORTS , instance); +DMA (instance)->CNTR =0 ; +release_mem_region (ZTWO_PADDR (instance->base),256 ); +free_irq (IRQ_AMIGA_PORTS , instance);#endif -return 1 ; +return 1 ; }MODULE_LICENSE ("GPL" );
drivers/scsi/gvp11.h +18 -18
@@ -15,11 +15,11 @@ int gvp11_detect(struct scsi_host_template *);int gvp11_release (struct Scsi_Host *);#ifndef CMD_PER_LUN -#define CMD_PER_LUN 2 +#define CMD_PER_LUN 2#endif #ifndef CAN_QUEUE -#define CAN_QUEUE 16 +#define CAN_QUEUE 16#endif #ifndef HOSTS_C
@@ -28,24 +28,24 @@ int gvp11_release(struct Scsi_Host *);* if the transfer address ANDed with this results in a non-zero * result, then we can't use DMA. */ -#define GVP11_XFER_MASK (0xff000001) +#define GVP11_XFER_MASK (0xff000001)typedef struct { -unsigned char pad1[64 ]; -volatile unsigned short CNTR; -unsigned char pad2[31 ]; -volatile unsigned char SASR; -unsigned char pad3; -volatile unsigned char SCMD; -unsigned char pad4[4 ]; -volatile unsigned short BANK; -unsigned char pad5[6 ]; -volatile unsigned long ACR; -volatile unsigned short secret1;/* store 0 here */ -volatile unsigned short ST_DMA; -volatile unsigned short SP_DMA; -volatile unsigned short secret2;/* store 1 here */ -volatile unsigned short secret3;/* store 15 here */ +unsigned char pad1[64 ]; +volatile unsigned short CNTR; +unsigned char pad2[31 ]; +volatile unsigned char SASR; +unsigned char pad3; +volatile unsigned char SCMD; +unsigned char pad4[4 ]; +volatile unsigned short BANK; +unsigned char pad5[6 ]; +volatile unsigned long ACR; +volatile unsigned short secret1;/* store 0 here */ +volatile unsigned short ST_DMA; +volatile unsigned short SP_DMA; +volatile unsigned short secret2;/* store 1 here */ +volatile unsigned short secret3;/* store 15 here */ }gvp11_scsiregs ;/* bits in CNTR */
Signature · 1 line
1.6.0.4
PATCH 4/21 m68k/scsi: mvme147 - Reindentation
--- drivers/scsi/mvme147.c | 166 ++++++++++++++++++++++++----------------------- drivers/scsi/mvme147.h | 4 +- 2 files changed, 87 insertions(+), 83 deletions(-)
drivers/scsi/mvme147.c +85 -81
@@ -13,111 +13,115 @@#include "wd33c93.h" #include "mvme147.h" -#include <linux/stat.h> +#include <linux/stat.h> -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) + +#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))static struct Scsi_Host *mvme147_host =NULL ; -static irqreturn_t mvme147_intr (int irq,void *dummy) +static irqreturn_t mvme147_intr (int irq,void *dummy) { -if (irq ==MVME147_IRQ_SCSI_PORT ) -wd33c93_intr (mvme147_host); -else - m147_pcc->dma_intr =0x89 ;/* Ack and enable ints */ -return IRQ_HANDLED ; +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 (struct scsi_cmnd *cmd,int dir_in) { -unsigned char flags =0x01 ; -unsigned long addr =virt_to_bus (cmd->SCp.ptr); - -/* setup dma direction */ -if (!dir_in) - flags |=0x04 ; - -/* remember direction */ -HDATA (mvme147_host)->dma_dir = dir_in; - -if (dir_in) -/* invalidate any cache */ -cache_clear (addr, cmd->SCp.this_residual); -else -/* push any dirty cache */ -cache_push (addr, cmd->SCp.this_residual); - -/* start DMA */ - m147_pcc->dma_bcr = cmd->SCp.this_residual | (1 <<24 ); - m147_pcc->dma_dadr = addr; - m147_pcc->dma_cntrl = flags; - -/* return success */ -return 0 ; +unsigned char flags =0x01 ; +unsigned long addr =virt_to_bus (cmd->SCp.ptr); + +/* setup dma direction */ +if (!dir_in) + flags |=0x04 ; + +/* remember direction */ +HDATA (mvme147_host)->dma_dir = dir_in; + +if (dir_in) { +/* invalidate any cache */ +cache_clear (addr, cmd->SCp.this_residual); + }else { +/* push any dirty cache */ +cache_push (addr, cmd->SCp.this_residual); + } + +/* start DMA */ + m147_pcc->dma_bcr = cmd->SCp.this_residual | (1 <<24 ); + m147_pcc->dma_dadr = addr; + m147_pcc->dma_cntrl = flags; + +/* return success */ +return 0 ; }static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt, -int status) +int status) { - m147_pcc->dma_cntrl =0 ; + m147_pcc->dma_cntrl =0 ; }int mvme147_detect (struct scsi_host_template *tpnt) { -static unsigned char called =0 ; -wd33c93_regs regs; - -if (!MACH_IS_MVME147 || called) -return 0 ; - called++; - - tpnt->proc_name ="MVME147" ; - tpnt->proc_info = &wd33c93_proc_info; - - mvme147_host =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (!mvme147_host) - goto err_out; - - mvme147_host->base =0xfffe4000 ; - mvme147_host->irq =MVME147_IRQ_SCSI_PORT ; - regs.SASR = (volatile unsigned char *)0xfffe4000 ; - regs.SCMD = (volatile unsigned char *)0xfffe4001 ; -HDATA (mvme147_host)->no_sync =0xff ; -HDATA (mvme147_host)->fast =0 ; -HDATA (mvme147_host)->dma_mode =CTRL_DMA ; -wd33c93_init (mvme147_host, regs, dma_setup, dma_stop,WD33C93_FS_8_10 ); - -if (request_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr,0 ,"MVME147 SCSI PORT" , mvme147_intr)) - goto err_unregister; -if (request_irq (MVME147_IRQ_SCSI_DMA , mvme147_intr,0 ,"MVME147 SCSI DMA" , mvme147_intr)) - goto err_free_irq; +static unsigned char called =0 ; +wd33c93_regs regs; + +if (!MACH_IS_MVME147 || called) +return 0 ; + called++; + + tpnt->proc_name ="MVME147" ; + tpnt->proc_info = &wd33c93_proc_info; + + mvme147_host =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); +if (!mvme147_host) + goto err_out; + + mvme147_host->base =0xfffe4000 ; + mvme147_host->irq =MVME147_IRQ_SCSI_PORT ; + regs.SASR = (volatile unsigned char *)0xfffe4000 ; + regs.SCMD = (volatile unsigned char *)0xfffe4001 ; +HDATA (mvme147_host)->no_sync =0xff ; +HDATA (mvme147_host)->fast =0 ; +HDATA (mvme147_host)->dma_mode =CTRL_DMA ; +wd33c93_init (mvme147_host, regs, dma_setup, dma_stop,WD33C93_FS_8_10 ); + +if (request_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr,0 , +"MVME147 SCSI PORT" , mvme147_intr)) + goto err_unregister; +if (request_irq (MVME147_IRQ_SCSI_DMA , mvme147_intr,0 , +"MVME147 SCSI DMA" , mvme147_intr)) + goto err_free_irq;#if 0 /* Disabled; causes problems booting */ - m147_pcc->scsi_interrupt =0x10 ;/* Assert SCSI bus reset */ -udelay (100 ); - m147_pcc->scsi_interrupt =0x00 ;/* Negate SCSI bus reset */ -udelay (2000 ); - m147_pcc->scsi_interrupt =0x40 ;/* Clear bus reset interrupt */ + m147_pcc->scsi_interrupt =0x10 ;/* Assert SCSI bus reset */ +udelay (100 ); + m147_pcc->scsi_interrupt =0x00 ;/* Negate SCSI bus reset */ +udelay (2000 ); + m147_pcc->scsi_interrupt =0x40 ;/* Clear bus reset interrupt */ #endif - m147_pcc->scsi_interrupt =0x09 ;/* Enable interrupt */ + m147_pcc->scsi_interrupt =0x09 ;/* Enable interrupt */ - m147_pcc->dma_cntrl =0x00 ;/* ensure DMA is stopped */ - m147_pcc->dma_intr =0x89 ;/* Ack and enable ints */ + m147_pcc->dma_cntrl =0x00 ;/* ensure DMA is stopped */ + m147_pcc->dma_intr =0x89 ;/* Ack and enable ints */ -return 1 ; +return 1 ; - err_free_irq: -free_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr); - err_unregister: -scsi_unregister (mvme147_host); - err_out: -return 0 ; +err_free_irq: +free_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr); +err_unregister: +scsi_unregister (mvme147_host); +err_out: +return 0 ; }static int mvme147_bus_reset (struct scsi_cmnd *cmd) {/* FIXME perform bus-specific reset */ -/* FIXME 2: kill this function, and let midlayer fallback to +/* FIXME 2: kill this function, and let midlayer fallback to the same result, calling wd33c93_host_reset() */ spin_lock_irq (cmd->device->host->host_lock);
@@ -153,9 +157,9 @@ static struct scsi_host_template driver_template = {int mvme147_release (struct Scsi_Host *instance) {#ifdef MODULE -/* XXX Make sure DMA is stopped! */ -free_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr); -free_irq (MVME147_IRQ_SCSI_DMA , mvme147_intr); +/* 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 ; +return 1 ; }
drivers/scsi/mvme147.h +2 -2
@@ -14,11 +14,11 @@ int mvme147_detect(struct scsi_host_template *);int mvme147_release (struct Scsi_Host *);#ifndef CMD_PER_LUN -#define CMD_PER_LUN 2 +#define CMD_PER_LUN 2#endif #ifndef CAN_QUEUE -#define CAN_QUEUE 16 +#define CAN_QUEUE 16#endif #endif /* MVME147_H */
Signature · 1 line
1.6.0.4
PATCH 5/21 m68k/scsi: a3000 - Reindentation
--- drivers/scsi/a3000.c | 280 +++++++++++++++++++++++++------------------------- drivers/scsi/a3000.h | 46 ++++---- 2 files changed, 163 insertions(+), 163 deletions(-)
drivers/scsi/a3000.c +140 -140
@@ -18,26 +18,26 @@#include "wd33c93.h" #include "a3000.h" -#include <linux/stat.h> +#include <linux/stat.h> -#define DMA (ptr) ((a3000_scsiregs *)((ptr)->base)) -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) + +#define DMA (ptr) ((a3000_scsiregs *)((ptr)->base)) +#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))static struct Scsi_Host *a3000_host =NULL ;static int a3000_release (struct Scsi_Host *instance); -static irqreturn_t a3000_intr (int irq,void *dummy) +static irqreturn_t a3000_intr (int irq,void *dummy) {unsigned long flags;unsigned int status =DMA (a3000_host)->ISTR;if (!(status &ISTR_INT_P ))return IRQ_NONE ; -if (status &ISTR_INTS ) - { +if (status &ISTR_INTS ) {spin_lock_irqsave (a3000_host->host_lock, flags); -wd33c93_intr (a3000_host); +wd33c93_intr (a3000_host);spin_unlock_irqrestore (a3000_host->host_lock, flags);return IRQ_HANDLED ; }
@@ -47,161 +47,161 @@ static irqreturn_t a3000_intr (int irq, void *dummy)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { -unsigned short cntr =CNTR_PDMD |CNTR_INTEN ; -unsigned long addr =virt_to_bus (cmd->SCp.ptr); - -/* -* if the physical address has the wrong alignment, or if -* physical address is bad, or if it is a write and at the -* end of a physical memory chunk, then allocate a bounce -* buffer -*/ -if (addr &A3000_XFER_MASK ) - { -HDATA (a3000_host)->dma_bounce_len = (cmd->SCp.this_residual +511 ) - & ~0x1ff ; -HDATA (a3000_host)->dma_bounce_buffer = -kmalloc (HDATA (a3000_host)->dma_bounce_len,GFP_KERNEL ); - -/* can't allocate memory; use PIO */ -if (!HDATA (a3000_host)->dma_bounce_buffer) { -HDATA (a3000_host)->dma_bounce_len =0 ; -return 1 ; - } - -if (!dir_in) { -/* copy to bounce buffer for a write */ -memcpy (HDATA (a3000_host)->dma_bounce_buffer, - cmd->SCp.ptr, cmd->SCp.this_residual); +unsigned short cntr =CNTR_PDMD |CNTR_INTEN ; +unsigned long addr =virt_to_bus (cmd->SCp.ptr); + +/* +* if the physical address has the wrong alignment, or if +* physical address is bad, or if it is a write and at the +* end of a physical memory chunk, then allocate a bounce +* buffer +*/ +if (addr &A3000_XFER_MASK ) { +HDATA (a3000_host)->dma_bounce_len = + (cmd->SCp.this_residual +511 ) & ~0x1ff ; +HDATA (a3000_host)->dma_bounce_buffer = +kmalloc (HDATA (a3000_host)->dma_bounce_len,GFP_KERNEL ); + +/* can't allocate memory; use PIO */ +if (!HDATA (a3000_host)->dma_bounce_buffer) { +HDATA (a3000_host)->dma_bounce_len =0 ; +return 1 ; + } + +if (!dir_in) { +/* copy to bounce buffer for a write */ +memcpy (HDATA (a3000_host)->dma_bounce_buffer, + cmd->SCp.ptr, cmd->SCp.this_residual); + } + + addr =virt_to_bus (HDATA (a3000_host)->dma_bounce_buffer); } - addr =virt_to_bus (HDATA (a3000_host)->dma_bounce_buffer); - } - -/* setup dma direction */ -if (!dir_in) - cntr |=CNTR_DDIR ; +/* setup dma direction */ +if (!dir_in) + cntr |=CNTR_DDIR ; -/* remember direction */ -HDATA (a3000_host)->dma_dir = dir_in; +/* remember direction */ +HDATA (a3000_host)->dma_dir = dir_in; -DMA (a3000_host)->CNTR = cntr; +DMA (a3000_host)->CNTR = cntr; -/* setup DMA *physical* address */ -DMA (a3000_host)->ACR = addr; +/* setup DMA *physical* address */ +DMA (a3000_host)->ACR = addr; -if (dir_in) -/* invalidate any cache */ -cache_clear (addr, cmd->SCp.this_residual); -else -/* push any dirty cache */ -cache_push (addr, cmd->SCp.this_residual); +if (dir_in) { +/* invalidate any cache */ +cache_clear (addr, cmd->SCp.this_residual); + }else { +/* push any dirty cache */ +cache_push (addr, cmd->SCp.this_residual); + } -/* start DMA */ -mb ();/* make sure setup is completed */ -DMA (a3000_host)->ST_DMA =1 ; -mb ();/* make sure DMA has started before next IO */ +/* start DMA */ +mb ();/* make sure setup is completed */ +DMA (a3000_host)->ST_DMA =1 ; +mb ();/* make sure DMA has started before next IO */ -/* return success */ -return 0 ; +/* return success */ +return 0 ; }static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { -/* disable SCSI interrupts */ -unsigned short cntr =CNTR_PDMD ; - -if (!HDATA (instance)->dma_dir) - cntr |=CNTR_DDIR ; - -DMA (instance)->CNTR = cntr; -mb ();/* make sure CNTR is updated before next IO */ - -/* flush if we were reading */ -if (HDATA (instance)->dma_dir) { -DMA (instance)->FLUSH =1 ; -mb ();/* don't allow prefetch */ -while (!(DMA (instance)->ISTR &ISTR_FE_FLG )) -barrier (); -mb ();/* no IO until FLUSH is done */ - } - -/* clear a possible interrupt */ -/* I think that this CINT is only necessary if you are -* using the terminal count features. HM 7 Mar 1994 -*/ -DMA (instance)->CINT =1 ; - -/* stop DMA */ -DMA (instance)->SP_DMA =1 ; -mb ();/* make sure DMA is stopped before next IO */ - -/* restore the CONTROL bits (minus the direction flag) */ -DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; -mb ();/* make sure CNTR is updated before next IO */ - -/* copy from a bounce buffer, if necessary */ -if (status &&HDATA (instance)->dma_bounce_buffer) { -if (SCpnt) { -if (HDATA (instance)->dma_dir && SCpnt) -memcpy (SCpnt->SCp.ptr, -HDATA (instance)->dma_bounce_buffer, - SCpnt->SCp.this_residual); -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; - }else { -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; +/* disable SCSI interrupts */ +unsigned short cntr =CNTR_PDMD ; + +if (!HDATA (instance)->dma_dir) + cntr |=CNTR_DDIR ; + +DMA (instance)->CNTR = cntr; +mb ();/* make sure CNTR is updated before next IO */ + +/* flush if we were reading */ +if (HDATA (instance)->dma_dir) { +DMA (instance)->FLUSH =1 ; +mb ();/* don't allow prefetch */ +while (!(DMA (instance)->ISTR &ISTR_FE_FLG )) +barrier (); +mb ();/* no IO until FLUSH is done */ + } + +/* clear a possible interrupt */ +/* I think that this CINT is only necessary if you are +* using the terminal count features. HM 7 Mar 1994 +*/ +DMA (instance)->CINT =1 ; + +/* stop DMA */ +DMA (instance)->SP_DMA =1 ; +mb ();/* make sure DMA is stopped before next IO */ + +/* restore the CONTROL bits (minus the direction flag) */ +DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; +mb ();/* make sure CNTR is updated before next IO */ + +/* copy from a bounce buffer, if necessary */ +if (status &&HDATA (instance)->dma_bounce_buffer) { +if (SCpnt) { +if (HDATA (instance)->dma_dir && SCpnt) +memcpy (SCpnt->SCp.ptr, +HDATA (instance)->dma_bounce_buffer, + SCpnt->SCp.this_residual); +kfree (HDATA (instance)->dma_bounce_buffer); +HDATA (instance)->dma_bounce_buffer =NULL ; +HDATA (instance)->dma_bounce_len =0 ; + }else { +kfree (HDATA (instance)->dma_bounce_buffer); +HDATA (instance)->dma_bounce_buffer =NULL ; +HDATA (instance)->dma_bounce_len =0 ; + } } - } }static int __init a3000_detect (struct scsi_host_template *tpnt) { -wd33c93_regs regs; - -if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT (A3000_SCSI )) -return 0 ; -if (!request_mem_region (0xDD0000 ,256 ,"wd33c93" )) -return 0 ; - - tpnt->proc_name ="A3000" ; - tpnt->proc_info = &wd33c93_proc_info; - - a3000_host =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (a3000_host ==NULL ) - goto fail_register; - - a3000_host->base =ZTWO_VADDR (0xDD0000 ); - a3000_host->irq =IRQ_AMIGA_PORTS ; -DMA (a3000_host)->DAWR =DAWR_A3000 ; - regs.SASR = &(DMA (a3000_host)->SASR); - regs.SCMD = &(DMA (a3000_host)->SCMD); -HDATA (a3000_host)->no_sync =0xff ; -HDATA (a3000_host)->fast =0 ; -HDATA (a3000_host)->dma_mode =CTRL_DMA ; -wd33c93_init (a3000_host, regs, dma_setup, dma_stop,WD33C93_FS_12_15 ); -if (request_irq (IRQ_AMIGA_PORTS , a3000_intr,IRQF_SHARED ,"A3000 SCSI" , - a3000_intr)) - goto fail_irq; -DMA (a3000_host)->CNTR =CNTR_PDMD |CNTR_INTEN ; - -return 1 ; +wd33c93_regs regs; + +if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT (A3000_SCSI )) +return 0 ; +if (!request_mem_region (0xDD0000 ,256 ,"wd33c93" )) +return 0 ; + + tpnt->proc_name ="A3000" ; + tpnt->proc_info = &wd33c93_proc_info; + + a3000_host =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); +if (a3000_host ==NULL ) + goto fail_register; + + a3000_host->base =ZTWO_VADDR (0xDD0000 ); + a3000_host->irq =IRQ_AMIGA_PORTS ; +DMA (a3000_host)->DAWR =DAWR_A3000 ; + regs.SASR = &(DMA (a3000_host)->SASR); + regs.SCMD = &(DMA (a3000_host)->SCMD); +HDATA (a3000_host)->no_sync =0xff ; +HDATA (a3000_host)->fast =0 ; +HDATA (a3000_host)->dma_mode =CTRL_DMA ; +wd33c93_init (a3000_host, regs, dma_setup, dma_stop,WD33C93_FS_12_15 ); +if (request_irq (IRQ_AMIGA_PORTS , a3000_intr,IRQF_SHARED ,"A3000 SCSI" , + a3000_intr)) + goto fail_irq; +DMA (a3000_host)->CNTR =CNTR_PDMD |CNTR_INTEN ; + +return 1 ; fail_irq: -scsi_unregister (a3000_host); +scsi_unregister (a3000_host); fail_register: -release_mem_region (0xDD0000 ,256 ); -return 0 ; +release_mem_region (0xDD0000 ,256 ); +return 0 ; }static int a3000_bus_reset (struct scsi_cmnd *cmd) {/* FIXME perform bus-specific reset */ - +/* FIXME 2: kill this entire function, which should cause mid-layer to call wd33c93_host_reset anyway? */
@@ -235,10 +235,10 @@ static struct scsi_host_template driver_template = {static int a3000_release (struct Scsi_Host *instance) { -DMA (instance)->CNTR =0 ; -release_mem_region (0xDD0000 ,256 ); -free_irq (IRQ_AMIGA_PORTS , a3000_intr); -return 1 ; +DMA (instance)->CNTR =0 ; +release_mem_region (0xDD0000 ,256 ); +free_irq (IRQ_AMIGA_PORTS , a3000_intr); +return 1 ; }MODULE_LICENSE ("GPL" );
drivers/scsi/a3000.h +23 -23
63 lines not on this page · raw message
Signature · 1 line
1.6.0.4
PATCH 6/21 m68k/scsi: a2091 - Use shost_priv() and kill ugly HDATA() macro
--- drivers/scsi/a2091.c | 56 +++++++++++++++++++++++++------------------------ 1 files changed, 29 insertions(+), 27 deletions(-)
drivers/scsi/a2091.c +29 -27
@@ -22,7 +22,6 @@#define DMA (ptr) ((a2091_scsiregs *)((ptr)->base)) -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))static int a2091_release (struct Scsi_Host *instance);
@@ -44,39 +43,39 @@ static irqreturn_t a2091_intr(int irq, void *_instance)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { +struct Scsi_Host *instance = cmd->device->host; +struct WD33C93_hostdata *hdata =shost_priv (instance);unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr); -struct Scsi_Host *instance = cmd->device->host;/* don't allow DMA if the physical address is bad */ if (addr &A2091_XFER_MASK ) { -HDATA (instance)->dma_bounce_len = - (cmd->SCp.this_residual +511 ) & ~0x1ff ; -HDATA (instance)->dma_bounce_buffer = -kmalloc (HDATA (instance)->dma_bounce_len,GFP_KERNEL ); + hdata->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ; + hdata->dma_bounce_buffer =kmalloc (hdata->dma_bounce_len, +GFP_KERNEL );/* can't allocate memory; use PIO */ -if (!HDATA (instance)->dma_bounce_buffer) { -HDATA (instance)->dma_bounce_len =0 ; +if (!hdata->dma_bounce_buffer) { + hdata->dma_bounce_len =0 ;return 1 ; }/* get the physical address of the bounce buffer */ - addr =virt_to_bus (HDATA (instance)->dma_bounce_buffer); + addr =virt_to_bus (hdata->dma_bounce_buffer);/* the bounce buffer may not be in the first 16M of physmem */ if (addr &A2091_XFER_MASK ) {/* we could use chipmem... maybe later */ -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; +kfree (hdata->dma_bounce_buffer); + hdata->dma_bounce_buffer =NULL ; + hdata->dma_bounce_len =0 ;return 1 ; }if (!dir_in) {/* copy to bounce buffer for a write */ -memcpy (HDATA (instance)->dma_bounce_buffer, - cmd->SCp.ptr, cmd->SCp.this_residual); +memcpy (hdata->dma_bounce_buffer, cmd->SCp.ptr, + cmd->SCp.this_residual); } }
@@ -85,7 +84,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) cntr |=CNTR_DDIR ;/* remember direction */ -HDATA (cmd->device->host)->dma_dir = dir_in; + hdata->dma_dir = dir_in;DMA (cmd->device->host)->CNTR = cntr;
@@ -109,17 +108,19 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { +struct WD33C93_hostdata *hdata =shost_priv (instance); +/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ; -if (!HDATA (instance)->dma_dir) +if (!hdata->dma_dir) cntr |=CNTR_DDIR ;/* disable SCSI interrupts */ DMA (instance)->CNTR = cntr;/* flush if we were reading */ -if (HDATA (instance)->dma_dir) { +if (hdata->dma_dir) {DMA (instance)->FLUSH =1 ;while (!(DMA (instance)->ISTR &ISTR_FE_FLG )) ;
@@ -135,14 +136,13 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ;/* copy from a bounce buffer, if necessary */ -if (status &&HDATA (instance)->dma_bounce_buffer) { -if (HDATA (instance)->dma_dir) -memcpy (SCpnt->SCp.ptr, -HDATA (instance)->dma_bounce_buffer, +if (status && hdata->dma_bounce_buffer) { +if (hdata->dma_dir) +memcpy (SCpnt->SCp.ptr, hdata->dma_bounce_buffer, SCpnt->SCp.this_residual); -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; +kfree (hdata->dma_bounce_buffer); + hdata->dma_bounce_buffer =NULL ; + hdata->dma_bounce_len =0 ; } }
@@ -153,6 +153,7 @@ static int __init a2091_detect(struct scsi_host_template *tpnt)unsigned long address;struct zorro_dev *z =NULL ;wd33c93_regs regs; +struct WD33C93_hostdata *hdata;int num_a2091 =0 ;if (!MACH_IS_AMIGA || called)
@@ -179,9 +180,10 @@ static int __init a2091_detect(struct scsi_host_template *tpnt)DMA (instance)->DAWR =DAWR_A2091 ; regs.SASR = &(DMA (instance)->SASR); regs.SCMD = &(DMA (instance)->SCMD); -HDATA (instance)->no_sync =0xff ; -HDATA (instance)->fast =0 ; -HDATA (instance)->dma_mode =CTRL_DMA ; + hdata =shost_priv (instance); + 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(IRQ_AMIGA_PORTS, a2091_intr, IRQF_SHARED,
Signature · 1 line
1.6.0.4
PATCH 7/21 m68k/scsi: gvp11 - Use shost_priv() and kill ugly HDATA() macro
--- drivers/scsi/gvp11.c | 93 ++++++++++++++++++++++++------------------------- 1 files changed, 46 insertions(+), 47 deletions(-)
drivers/scsi/gvp11.c +46 -47
@@ -22,7 +22,6 @@#define DMA (ptr) ((gvp11_scsiregs *)((ptr)->base)) -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))static irqreturn_t gvp11_intr (int irq,void *_instance) {
@@ -49,70 +48,66 @@ void gvp11_setup(char *str, int *ints)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { +struct Scsi_Host *instance = cmd->device->host; +struct WD33C93_hostdata *hdata =shost_priv (instance);unsigned short cntr =GVP11_DMAC_INT_ENABLE ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);int bank_mask;static int scsi_alloc_out_of_range =0 ;/* use bounce buffer if the physical address is bad */ -if (addr &HDATA (cmd->device->host)->dma_xfer_mask) { -HDATA (cmd->device->host)->dma_bounce_len = - (cmd->SCp.this_residual +511 ) & ~0x1ff ; +if (addr & hdata->dma_xfer_mask) { + hdata->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ;if (!scsi_alloc_out_of_range) { -HDATA (cmd->device->host)->dma_bounce_buffer = -kmalloc (HDATA (cmd->device->host)->dma_bounce_len, -GFP_KERNEL ); -HDATA (cmd->device->host)->dma_buffer_pool = -BUF_SCSI_ALLOCED ; + hdata->dma_bounce_buffer = +kmalloc (hdata->dma_bounce_len,GFP_KERNEL ); + hdata->dma_buffer_pool =BUF_SCSI_ALLOCED ; }if (scsi_alloc_out_of_range || - !HDATA (cmd->device->host)->dma_bounce_buffer) { -HDATA (cmd->device->host)->dma_bounce_buffer = -amiga_chip_alloc (HDATA (cmd->device->host)->dma_bounce_len, + !hdata->dma_bounce_buffer) { + hdata->dma_bounce_buffer = +amiga_chip_alloc (hdata->dma_bounce_len,"GVP II SCSI Bounce Buffer" ); -if (!HDATA (cmd->device->host)->dma_bounce_buffer) { -HDATA (cmd->device->host)->dma_bounce_len =0 ; +if (!hdata->dma_bounce_buffer) { + hdata->dma_bounce_len =0 ;return 1 ; } -HDATA (cmd->device->host)->dma_buffer_pool = -BUF_CHIP_ALLOCED ; + hdata->dma_buffer_pool =BUF_CHIP_ALLOCED ; }/* check if the address of the bounce buffer is OK */ - addr =virt_to_bus (HDATA (cmd->device->host)->dma_bounce_buffer); + addr =virt_to_bus (hdata->dma_bounce_buffer); -if (addr &HDATA (cmd->device->host)->dma_xfer_mask) { +if (addr & hdata->dma_xfer_mask) {/* fall back to Chip RAM if address out of range */ -if (HDATA (cmd->device->host)->dma_buffer_pool == -BUF_SCSI_ALLOCED ) { -kfree (HDATA (cmd->device->host)->dma_bounce_buffer); +if (hdata->dma_buffer_pool ==BUF_SCSI_ALLOCED ) { +kfree (hdata->dma_bounce_buffer); scsi_alloc_out_of_range =1 ; }else { -amiga_chip_free (HDATA (cmd->device->host)->dma_bounce_buffer); +amiga_chip_free (hdata->dma_bounce_buffer); } -HDATA (cmd->device->host)->dma_bounce_buffer = -amiga_chip_alloc (HDATA (cmd->device->host)->dma_bounce_len, + hdata->dma_bounce_buffer = +amiga_chip_alloc (hdata->dma_bounce_len,"GVP II SCSI Bounce Buffer" ); -if (!HDATA (cmd->device->host)->dma_bounce_buffer) { -HDATA (cmd->device->host)->dma_bounce_len =0 ; +if (!hdata->dma_bounce_buffer) { + hdata->dma_bounce_len =0 ;return 1 ; } - addr =virt_to_bus (HDATA (cmd->device->host)->dma_bounce_buffer); -HDATA (cmd->device->host)->dma_buffer_pool = -BUF_CHIP_ALLOCED ; + addr =virt_to_bus (hdata->dma_bounce_buffer); + hdata->dma_buffer_pool =BUF_CHIP_ALLOCED ; }if (!dir_in) {/* copy to bounce buffer for a write */ -memcpy (HDATA (cmd->device->host)->dma_bounce_buffer, - cmd->SCp.ptr, cmd->SCp.this_residual); +memcpy (hdata->dma_bounce_buffer, cmd->SCp.ptr, + cmd->SCp.this_residual); } }
@@ -120,7 +115,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)if (!dir_in) cntr |=GVP11_DMAC_DIR_WRITE ; -HDATA (cmd->device->host)->dma_dir = dir_in; + hdata->dma_dir = dir_in;DMA (cmd->device->host)->CNTR = cntr;/* setup DMA *physical* address */
@@ -134,7 +129,8 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)cache_push (addr, cmd->SCp.this_residual); } -if ((bank_mask = (~HDATA (cmd->device->host)->dma_xfer_mask >>18 ) &0x01c0 )) + bank_mask = (~hdata->dma_xfer_mask >>18 ) &0x01c0 ; +if (bank_mask)DMA (cmd->device->host)->BANK = bank_mask & (addr >>18 );/* start DMA */
@@ -147,25 +143,26 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { +struct WD33C93_hostdata *hdata =shost_priv (instance); +/* stop DMA */ DMA (instance)->SP_DMA =1 ;/* remove write bit from CONTROL bits */ DMA (instance)->CNTR =GVP11_DMAC_INT_ENABLE ;/* copy from a bounce buffer, if necessary */ -if (status &&HDATA (instance)->dma_bounce_buffer) { -if (HDATA (instance)->dma_dir && SCpnt) -memcpy (SCpnt->SCp.ptr, -HDATA (instance)->dma_bounce_buffer, +if (status && hdata->dma_bounce_buffer) { +if (hdata->dma_dir && SCpnt) +memcpy (SCpnt->SCp.ptr, hdata->dma_bounce_buffer, SCpnt->SCp.this_residual); -if (HDATA (instance)->dma_buffer_pool ==BUF_SCSI_ALLOCED ) -kfree (HDATA (instance)->dma_bounce_buffer); +if (hdata->dma_buffer_pool ==BUF_SCSI_ALLOCED ) +kfree (hdata->dma_bounce_buffer);else -amiga_chip_free (HDATA (instance)->dma_bounce_buffer); +amiga_chip_free (hdata->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; + hdata->dma_bounce_buffer =NULL ; + hdata->dma_bounce_len =0 ; } }
@@ -179,6 +176,7 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)unsigned int epc;struct zorro_dev *z =NULL ;unsigned int default_dma_xfer_mask; +struct WD33C93_hostdata *hdata;wd33c93_regs regs;int num_gvp11 =0 ;#ifdef CHECK_WD33C93
@@ -305,10 +303,11 @@ int __init gvp11_detect(struct scsi_host_template *tpnt) instance->irq =IRQ_AMIGA_PORTS ; instance->unique_id = z->slotaddr; + hdata =shost_priv (instance);if (gvp11_xfer_mask) -HDATA (instance)->dma_xfer_mask = gvp11_xfer_mask; + hdata->dma_xfer_mask = gvp11_xfer_mask;else -HDATA (instance)->dma_xfer_mask = default_dma_xfer_mask; + hdata->dma_xfer_mask = default_dma_xfer_mask;DMA (instance)->secret2 =1 ;DMA (instance)->secret1 =0 ;
@@ -326,9 +325,9 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)*/ regs.SASR = &(DMA (instance)->SASR); regs.SCMD = &(DMA (instance)->SCMD); -HDATA (instance)->no_sync =0xff ; -HDATA (instance)->fast =0 ; -HDATA (instance)->dma_mode =CTRL_DMA ; + hdata->no_sync =0xff ; + hdata->fast =0 ; + hdata->dma_mode =CTRL_DMA ;wd33c93_init (instance, regs, dma_setup, dma_stop, (epc &GVP_SCSICLKMASK ) ?WD33C93_FS_8_10 :WD33C93_FS_12_15 );
Signature · 1 line
1.6.0.4
PATCH 8/21 m68k/scsi: mvme147 - Use shost_priv() and kill ugly HDATA() macro
--- drivers/scsi/mvme147.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-)
drivers/scsi/mvme147.c +7 -6
@@ -16,8 +16,6 @@#include <linux/stat.h> -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata)) -static struct Scsi_Host *mvme147_host =NULL ;static irqreturn_t mvme147_intr (int irq,void *dummy)
@@ -31,6 +29,7 @@ static irqreturn_t mvme147_intr(int irq, void *dummy)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { +struct WD33C93_hostdata *hdata =shost_priv (mvme147_host);unsigned char flags =0x01 ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -39,7 +38,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) flags |=0x04 ;/* remember direction */ -HDATA (mvme147_host)->dma_dir = dir_in; + hdata->dma_dir = dir_in;if (dir_in) {/* invalidate any cache */
@@ -68,6 +67,7 @@ int mvme147_detect(struct scsi_host_template *tpnt) {static unsigned char called =0 ;wd33c93_regs regs; +struct WD33C93_hostdata *hdata;if (!MACH_IS_MVME147 || called)return 0 ;
@@ -84,9 +84,10 @@ int mvme147_detect(struct scsi_host_template *tpnt) mvme147_host->irq =MVME147_IRQ_SCSI_PORT ; regs.SASR = (volatile unsigned char *)0xfffe4000 ; regs.SCMD = (volatile unsigned char *)0xfffe4001 ; -HDATA (mvme147_host)->no_sync =0xff ; -HDATA (mvme147_host)->fast =0 ; -HDATA (mvme147_host)->dma_mode =CTRL_DMA ; + hdata =shost_priv (mvme147_host); + hdata->no_sync =0xff ; + hdata->fast =0 ; + hdata->dma_mode =CTRL_DMA ;wd33c93_init (mvme147_host, regs, dma_setup, dma_stop,WD33C93_FS_8_10 ); if (request_irq(MVME147_IRQ_SCSI_PORT, mvme147_intr, 0,
Signature · 1 line
1.6.0.4
PATCH 9/21 m68k/scsi: a3000 - Use shost_priv() and kill ugly HDATA() macro
--- drivers/scsi/a3000.c | 53 ++++++++++++++++++++++++++----------------------- 1 files changed, 28 insertions(+), 25 deletions(-)
drivers/scsi/a3000.c +28 -25
@@ -22,7 +22,6 @@#define DMA (ptr) ((a3000_scsiregs *)((ptr)->base)) -#define HDATA (ptr) ((struct WD33C93_hostdata *)((ptr)->hostdata))static struct Scsi_Host *a3000_host =NULL ;
@@ -47,6 +46,7 @@ static irqreturn_t a3000_intr(int irq, void *dummy)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { +struct WD33C93_hostdata *hdata =shost_priv (a3000_host);unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -57,24 +57,23 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)* buffer */ if (addr &A3000_XFER_MASK ) { -HDATA (a3000_host)->dma_bounce_len = - (cmd->SCp.this_residual +511 ) & ~0x1ff ; -HDATA (a3000_host)->dma_bounce_buffer = -kmalloc (HDATA (a3000_host)->dma_bounce_len,GFP_KERNEL ); + hdata->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ; + hdata->dma_bounce_buffer =kmalloc (hdata->dma_bounce_len, +GFP_KERNEL );/* can't allocate memory; use PIO */ -if (!HDATA (a3000_host)->dma_bounce_buffer) { -HDATA (a3000_host)->dma_bounce_len =0 ; +if (!hdata->dma_bounce_buffer) { + hdata->dma_bounce_len =0 ;return 1 ; }if (!dir_in) {/* copy to bounce buffer for a write */ -memcpy (HDATA (a3000_host)->dma_bounce_buffer, - cmd->SCp.ptr, cmd->SCp.this_residual); +memcpy (hdata->dma_bounce_buffer, cmd->SCp.ptr, + cmd->SCp.this_residual); } - addr =virt_to_bus (HDATA (a3000_host)->dma_bounce_buffer); + addr =virt_to_bus (hdata->dma_bounce_buffer); }/* setup dma direction */
@@ -82,7 +81,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) cntr |=CNTR_DDIR ;/* remember direction */ -HDATA (a3000_host)->dma_dir = dir_in; + hdata->dma_dir = dir_in;DMA (a3000_host)->CNTR = cntr;
@@ -109,17 +108,19 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { +struct WD33C93_hostdata *hdata =shost_priv (instance); +/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ; -if (!HDATA (instance)->dma_dir) +if (!hdata->dma_dir) cntr |=CNTR_DDIR ;DMA (instance)->CNTR = cntr;mb ();/* make sure CNTR is updated before next IO */ /* flush if we were reading */ -if (HDATA (instance)->dma_dir) { +if (hdata->dma_dir) {DMA (instance)->FLUSH =1 ;mb ();/* don't allow prefetch */ while (!(DMA (instance)->ISTR &ISTR_FE_FLG ))
@@ -142,19 +143,19 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,mb ();/* make sure CNTR is updated before next IO */ /* copy from a bounce buffer, if necessary */ -if (status &&HDATA (instance)->dma_bounce_buffer) { +if (status && hdata->dma_bounce_buffer) {if (SCpnt) { -if (HDATA (instance)->dma_dir && SCpnt) +if (hdata->dma_dir && SCpnt)memcpy (SCpnt->SCp.ptr, -HDATA (instance)->dma_bounce_buffer, + hdata->dma_bounce_buffer, SCpnt->SCp.this_residual); -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; +kfree (hdata->dma_bounce_buffer); + hdata->dma_bounce_buffer =NULL ; + hdata->dma_bounce_len =0 ; }else { -kfree (HDATA (instance)->dma_bounce_buffer); -HDATA (instance)->dma_bounce_buffer =NULL ; -HDATA (instance)->dma_bounce_len =0 ; +kfree (hdata->dma_bounce_buffer); + hdata->dma_bounce_buffer =NULL ; + hdata->dma_bounce_len =0 ; } } }
@@ -162,6 +163,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,static int __init a3000_detect (struct scsi_host_template *tpnt) {wd33c93_regs regs; +struct WD33C93_hostdata *hdata;if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT (A3000_SCSI ))return 0 ;
@@ -180,9 +182,10 @@ static int __init a3000_detect(struct scsi_host_template *tpnt)DMA (a3000_host)->DAWR =DAWR_A3000 ; regs.SASR = &(DMA (a3000_host)->SASR); regs.SCMD = &(DMA (a3000_host)->SCMD); -HDATA (a3000_host)->no_sync =0xff ; -HDATA (a3000_host)->fast =0 ; -HDATA (a3000_host)->dma_mode =CTRL_DMA ; + hdata =shost_priv (a3000_host); + hdata->no_sync =0xff ; + hdata->fast =0 ; + hdata->dma_mode =CTRL_DMA ;wd33c93_init (a3000_host, regs, dma_setup, dma_stop,WD33C93_FS_12_15 );if (request_irq (IRQ_AMIGA_PORTS , a3000_intr,IRQF_SHARED ,"A3000 SCSI" , a3000_intr))
Signature · 1 line
1.6.0.4
PATCH 10/21 m68k/scsi: a2091 - Kill ugly DMA() macro
--- drivers/scsi/a2091.c | 48 ++++++++++++++++++++++++++---------------------- 1 files changed, 26 insertions(+), 22 deletions(-)
drivers/scsi/a2091.c +26 -22
@@ -21,17 +21,15 @@#include <linux/stat.h> -#define DMA (ptr) ((a2091_scsiregs *)((ptr)->base)) -static int a2091_release (struct Scsi_Host *instance); -static irqreturn_t a2091_intr (int irq,void *_instance) +static irqreturn_t a2091_intr (int irq,void *data) { +struct Scsi_Host *instance = data; +a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base); +unsigned int status = regs->ISTR;unsigned long flags; -unsigned int status; -struct Scsi_Host *instance = (struct Scsi_Host *)_instance; - status =DMA (instance)->ISTR;if (!(status & (ISTR_INT_F |ISTR_INT_P )) || !(status &ISTR_INTS ))return IRQ_NONE ;
@@ -45,6 +43,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) {struct Scsi_Host *instance = cmd->device->host;struct WD33C93_hostdata *hdata =shost_priv (instance); +a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base);unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -86,10 +85,10 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)/* remember direction */ hdata->dma_dir = dir_in; -DMA (cmd->device->host)->CNTR = cntr; + regs->CNTR = cntr;/* setup DMA *physical* address */ -DMA (cmd->device->host)->ACR = addr; + regs->ACR = addr;if (dir_in) {/* invalidate any cache */
@@ -99,7 +98,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)cache_push (addr, cmd->SCp.this_residual); }/* start DMA */ -DMA (cmd->device->host)->ST_DMA =1 ; + regs->ST_DMA =1 ;/* return success */ return 0 ;
@@ -109,6 +108,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, int status) {struct WD33C93_hostdata *hdata =shost_priv (instance); +a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base);/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ;
@@ -117,23 +117,23 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, cntr |=CNTR_DDIR ;/* disable SCSI interrupts */ -DMA (instance)->CNTR = cntr; + regs->CNTR = cntr;/* flush if we were reading */ if (hdata->dma_dir) { -DMA (instance)->FLUSH =1 ; -while (!(DMA (instance)->ISTR &ISTR_FE_FLG )) + regs->FLUSH =1 ; +while (!(regs->ISTR &ISTR_FE_FLG )) ; }/* clear a possible interrupt */ -DMA (instance)->CINT =1 ; + regs->CINT =1 ;/* stop DMA */ -DMA (instance)->SP_DMA =1 ; + regs->SP_DMA =1 ;/* restore the CONTROL bits (minus the direction flag) */ -DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; + regs->CNTR =CNTR_PDMD |CNTR_INTEN ;/* copy from a bounce buffer, if necessary */ if (status && hdata->dma_bounce_buffer) {
@@ -152,7 +152,8 @@ static int __init a2091_detect(struct scsi_host_template *tpnt)struct Scsi_Host *instance;unsigned long address;struct zorro_dev *z =NULL ; -wd33c93_regs regs; +wd33c93_regs wdregs; +a2091_scsiregs *regs;struct WD33C93_hostdata *hdata;int num_a2091 =0 ;
@@ -177,19 +178,20 @@ static int __init a2091_detect(struct scsi_host_template *tpnt) instance->base =ZTWO_VADDR (address); instance->irq =IRQ_AMIGA_PORTS ; instance->unique_id = z->slotaddr; -DMA (instance)->DAWR =DAWR_A2091 ; - regs.SASR = &(DMA (instance)->SASR); - regs.SCMD = &(DMA (instance)->SCMD); + regs = (a2091_scsiregs *)(instance->base); + regs->DAWR =DAWR_A2091 ; + wdregs.SASR = ®s->SASR; + wdregs.SCMD = ®s->SCMD; hdata =shost_priv (instance); hdata->no_sync =0xff ; hdata->fast =0 ; hdata->dma_mode =CTRL_DMA ; -wd33c93_init (instance, regs, dma_setup, dma_stop, +wd33c93_init (instance, wdregs, dma_setup, dma_stop,WD33C93_FS_8_10 );if (request_irq (IRQ_AMIGA_PORTS , a2091_intr,IRQF_SHARED ,"A2091 SCSI" , instance)) goto unregister; -DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; + regs->CNTR =CNTR_PDMD |CNTR_INTEN ; num_a2091++;continue ;
@@ -240,7 +242,9 @@ static struct scsi_host_template driver_template = {static int a2091_release (struct Scsi_Host *instance) {#ifdef MODULE -DMA (instance)->CNTR =0 ; +a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base); + + regs->CNTR =0 ;release_mem_region (ZTWO_PADDR (instance->base),256 );free_irq (IRQ_AMIGA_PORTS , instance);#endif
Signature · 1 line
1.6.0.4
PATCH 11/21 m68k/scsi: gvp11 - Kill ugly DMA() macro
--- drivers/scsi/gvp11.c | 52 ++++++++++++++++++++++++++----------------------- 1 files changed, 28 insertions(+), 24 deletions(-)
drivers/scsi/gvp11.c +28 -24
@@ -21,15 +21,13 @@#include <linux/stat.h> -#define DMA (ptr) ((gvp11_scsiregs *)((ptr)->base)) - -static irqreturn_t gvp11_intr (int irq,void *_instance) +static irqreturn_t gvp11_intr (int irq,void *data) { +struct Scsi_Host *instance = data; +gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base); +unsigned int status = regs->CNTR;unsigned long flags; -unsigned int status; -struct Scsi_Host *instance = (struct Scsi_Host *)_instance; - status =DMA (instance)->CNTR;if (!(status &GVP11_DMAC_INT_PENDING ))return IRQ_NONE ;
@@ -50,6 +48,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) {struct Scsi_Host *instance = cmd->device->host;struct WD33C93_hostdata *hdata =shost_priv (instance); +gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base);unsigned short cntr =GVP11_DMAC_INT_ENABLE ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);int bank_mask;
@@ -116,10 +115,10 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) cntr |=GVP11_DMAC_DIR_WRITE ; hdata->dma_dir = dir_in; -DMA (cmd->device->host)->CNTR = cntr; + regs->CNTR = cntr;/* setup DMA *physical* address */ -DMA (cmd->device->host)->ACR = addr; + regs->ACR = addr;if (dir_in) {/* invalidate any cache */
@@ -131,10 +130,10 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) bank_mask = (~hdata->dma_xfer_mask >>18 ) &0x01c0 ;if (bank_mask) -DMA (cmd->device->host)->BANK = bank_mask & (addr >>18 ); + regs->BANK = bank_mask & (addr >>18 );/* start DMA */ -DMA (cmd->device->host)->ST_DMA =1 ; + regs->ST_DMA =1 ;/* return success */ return 0 ;
@@ -143,12 +142,13 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { +gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base);struct WD33C93_hostdata *hdata =shost_priv (instance);/* stop DMA */ -DMA (instance)->SP_DMA =1 ; + regs->SP_DMA =1 ;/* remove write bit from CONTROL bits */ -DMA (instance)->CNTR =GVP11_DMAC_INT_ENABLE ; + regs->CNTR =GVP11_DMAC_INT_ENABLE ;/* copy from a bounce buffer, if necessary */ if (status && hdata->dma_bounce_buffer) {
@@ -177,7 +177,8 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)struct zorro_dev *z =NULL ;unsigned int default_dma_xfer_mask;struct WD33C93_hostdata *hdata; -wd33c93_regs regs; +gvp11_scsiregs *regs; +wd33c93_regs wdregs;int num_gvp11 =0 ;#ifdef CHECK_WD33C93 volatile unsigned char *sasr_3393, *scmd_3393;
@@ -309,33 +310,34 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)else hdata->dma_xfer_mask = default_dma_xfer_mask; -DMA (instance)->secret2 =1 ; -DMA (instance)->secret1 =0 ; -DMA (instance)->secret3 =15 ; -while (DMA (instance)->CNTR &GVP11_DMAC_BUSY ) + regs = (gvp11_scsiregs *)(instance->base); + regs->secret2 =1 ; + regs->secret1 =0 ; + regs->secret3 =15 ; +while (regs->CNTR &GVP11_DMAC_BUSY ) ; -DMA (instance)->CNTR =0 ; + regs->CNTR =0 ; -DMA (instance)->BANK =0 ; + regs->BANK =0 ; epc = *(unsigned short *)(ZTWO_VADDR (address) +0x8000 );/* * Check for 14MHz SCSI clock */ - regs.SASR = &(DMA (instance)->SASR); - regs.SCMD = &(DMA (instance)->SCMD); + wdregs.SASR = ®s->SASR; + wdregs.SCMD = ®s->SCMD; hdata->no_sync =0xff ; hdata->fast =0 ; hdata->dma_mode =CTRL_DMA ; -wd33c93_init (instance, regs, dma_setup, dma_stop, +wd33c93_init (instance, wdregs, dma_setup, dma_stop, (epc &GVP_SCSICLKMASK ) ?WD33C93_FS_8_10 :WD33C93_FS_12_15 );if (request_irq (IRQ_AMIGA_PORTS , gvp11_intr,IRQF_SHARED ,"GVP11 SCSI" , instance)) goto unregister; -DMA (instance)->CNTR =GVP11_DMAC_INT_ENABLE ; + regs->CNTR =GVP11_DMAC_INT_ENABLE ; num_gvp11++;continue ;
@@ -390,7 +392,9 @@ static struct scsi_host_template driver_template = {int gvp11_release (struct Scsi_Host *instance) {#ifdef MODULE -DMA (instance)->CNTR =0 ; +gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base); + + regs->CNTR =0 ;release_mem_region (ZTWO_PADDR (instance->base),256 );free_irq (IRQ_AMIGA_PORTS , instance);#endif
Signature · 1 line
1.6.0.4
PATCH 12/21 m68k/scsi: a3000 - Kill ugly DMA() macro
--- drivers/scsi/a3000.c | 44 +++++++++++++++++++++++++------------------- 1 files changed, 25 insertions(+), 19 deletions(-)
drivers/scsi/a3000.c +25 -19
@@ -21,16 +21,15 @@#include <linux/stat.h> -#define DMA (ptr) ((a3000_scsiregs *)((ptr)->base)) -static struct Scsi_Host *a3000_host =NULL ;static int a3000_release (struct Scsi_Host *instance);static irqreturn_t a3000_intr (int irq,void *dummy) { +a3000_scsiregs *regs = (a3000_scsiregs *)(a3000_host->base); +unsigned int status = regs->ISTR;unsigned long flags; -unsigned int status =DMA (a3000_host)->ISTR;if (!(status &ISTR_INT_P ))return IRQ_NONE ;
@@ -47,6 +46,7 @@ static irqreturn_t a3000_intr(int irq, void *dummy)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) {struct WD33C93_hostdata *hdata =shost_priv (a3000_host); +a3000_scsiregs *regs = (a3000_scsiregs *)(a3000_host->base);unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -83,10 +83,10 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)/* remember direction */ hdata->dma_dir = dir_in; -DMA (a3000_host)->CNTR = cntr; + regs->CNTR = cntr;/* setup DMA *physical* address */ -DMA (a3000_host)->ACR = addr; + regs->ACR = addr;if (dir_in) {/* invalidate any cache */
@@ -98,7 +98,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)/* start DMA */ mb ();/* make sure setup is completed */ -DMA (a3000_host)->ST_DMA =1 ; + regs->ST_DMA =1 ;mb ();/* make sure DMA has started before next IO */ /* return success */
@@ -109,6 +109,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, int status) {struct WD33C93_hostdata *hdata =shost_priv (instance); +a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base);/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ;
@@ -116,14 +117,14 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,if (!hdata->dma_dir) cntr |=CNTR_DDIR ; -DMA (instance)->CNTR = cntr; + regs->CNTR = cntr;mb ();/* make sure CNTR is updated before next IO */ /* flush if we were reading */ if (hdata->dma_dir) { -DMA (instance)->FLUSH =1 ; + regs->FLUSH =1 ;mb ();/* don't allow prefetch */ -while (!(DMA (instance)->ISTR &ISTR_FE_FLG )) +while (!(regs->ISTR &ISTR_FE_FLG ))barrier ();mb ();/* no IO until FLUSH is done */ }
@@ -132,14 +133,14 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,/* I think that this CINT is only necessary if you are * using the terminal count features. HM 7 Mar 1994 */ -DMA (instance)->CINT =1 ; + regs->CINT =1 ;/* stop DMA */ -DMA (instance)->SP_DMA =1 ; + regs->SP_DMA =1 ;mb ();/* make sure DMA is stopped before next IO */ /* restore the CONTROL bits (minus the direction flag) */ -DMA (instance)->CNTR =CNTR_PDMD |CNTR_INTEN ; + regs->CNTR =CNTR_PDMD |CNTR_INTEN ;mb ();/* make sure CNTR is updated before next IO */ /* copy from a bounce buffer, if necessary */
@@ -162,7 +163,8 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,static int __init a3000_detect (struct scsi_host_template *tpnt) { -wd33c93_regs regs; +wd33c93_regs wdregs; +a3000_scsiregs *regs;struct WD33C93_hostdata *hdata;if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT (A3000_SCSI ))
@@ -179,18 +181,20 @@ static int __init a3000_detect(struct scsi_host_template *tpnt) a3000_host->base =ZTWO_VADDR (0xDD0000 ); a3000_host->irq =IRQ_AMIGA_PORTS ; -DMA (a3000_host)->DAWR =DAWR_A3000 ; - regs.SASR = &(DMA (a3000_host)->SASR); - regs.SCMD = &(DMA (a3000_host)->SCMD); + regs = (a3000_scsiregs *)(a3000_host->base); + regs->DAWR =DAWR_A3000 ; + wdregs.SASR = ®s->SASR; + wdregs.SCMD = ®s->SCMD; hdata =shost_priv (a3000_host); hdata->no_sync =0xff ; hdata->fast =0 ; hdata->dma_mode =CTRL_DMA ; -wd33c93_init (a3000_host, regs, dma_setup, dma_stop,WD33C93_FS_12_15 ); +wd33c93_init (a3000_host, wdregs, dma_setup, dma_stop, +WD33C93_FS_12_15 );if (request_irq (IRQ_AMIGA_PORTS , a3000_intr,IRQF_SHARED ,"A3000 SCSI" , a3000_intr)) goto fail_irq; -DMA (a3000_host)->CNTR =CNTR_PDMD |CNTR_INTEN ; + regs->CNTR =CNTR_PDMD |CNTR_INTEN ;return 1 ;
@@ -238,7 +242,9 @@ static struct scsi_host_template driver_template = {static int a3000_release (struct Scsi_Host *instance) { -DMA (instance)->CNTR =0 ; +a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base); + + regs->CNTR =0 ;release_mem_region (0xDD0000 ,256 );free_irq (IRQ_AMIGA_PORTS , a3000_intr);return 1 ;
Signature · 1 line
1.6.0.4
PATCH 13/21 m68k/scsi: mvme147 - Kill static global mvme147_host
--- drivers/scsi/mvme147.c | 30 ++++++++++++++++-------------- 1 files changed, 16 insertions(+), 14 deletions(-)
drivers/scsi/mvme147.c +16 -14
@@ -16,12 +16,12 @@#include <linux/stat.h> -static struct Scsi_Host *mvme147_host =NULL ; - -static irqreturn_t mvme147_intr (int irq,void *dummy) +static irqreturn_t mvme147_intr (int irq,void *data) { +struct Scsi_Host *instance = data; +if (irq ==MVME147_IRQ_SCSI_PORT ) -wd33c93_intr (mvme147_host); +wd33c93_intr (instance);else m147_pcc->dma_intr =0x89 ;/* Ack and enable ints */ return IRQ_HANDLED ;
@@ -29,7 +29,8 @@ static irqreturn_t mvme147_intr(int irq, void *dummy)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { -struct WD33C93_hostdata *hdata =shost_priv (mvme147_host); +struct Scsi_Host *instance = cmd->device->host; +struct WD33C93_hostdata *hdata =shost_priv (instance);unsigned char flags =0x01 ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -66,6 +67,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,int mvme147_detect (struct scsi_host_template *tpnt) {static unsigned char called =0 ; +struct Scsi_Host *instance;wd33c93_regs regs;struct WD33C93_hostdata *hdata;
@@ -76,25 +78,25 @@ int mvme147_detect(struct scsi_host_template *tpnt) tpnt->proc_name ="MVME147" ; tpnt->proc_info = &wd33c93_proc_info; - mvme147_host =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (!mvme147_host) + instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); +if (!instance) goto err_out; - mvme147_host->base =0xfffe4000 ; - mvme147_host->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 (mvme147_host); + hdata =shost_priv (instance); hdata->no_sync =0xff ; hdata->fast =0 ; hdata->dma_mode =CTRL_DMA ; -wd33c93_init (mvme147_host, regs, dma_setup, dma_stop,WD33C93_FS_8_10 ); +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" , mvme147_intr)) +"MVME147 SCSI PORT" , instance)) goto err_unregister;if (request_irq (MVME147_IRQ_SCSI_DMA , mvme147_intr,0 , -"MVME147 SCSI DMA" , mvme147_intr)) +"MVME147 SCSI DMA" , instance)) goto err_free_irq;#if 0 /* Disabled; causes problems booting */ m147_pcc->scsi_interrupt =0x10 ;/* Assert SCSI bus reset */
@@ -113,7 +115,7 @@ int mvme147_detect(struct scsi_host_template *tpnt) err_free_irq:free_irq (MVME147_IRQ_SCSI_PORT , mvme147_intr); err_unregister: -scsi_unregister (mvme147_host); +scsi_unregister (instance); err_out:return 0 ; }
Signature · 1 line
1.6.0.4
PATCH 14/21 m68k/scsi: a3000 - Kill static global a3000_host
--- drivers/scsi/a3000.c | 38 +++++++++++++++++++------------------- 1 files changed, 19 insertions(+), 19 deletions(-)
drivers/scsi/a3000.c +19 -19
@@ -21,22 +21,21 @@#include <linux/stat.h> -static struct Scsi_Host *a3000_host =NULL ; -static int a3000_release (struct Scsi_Host *instance); -static irqreturn_t a3000_intr (int irq,void *dummy) +static irqreturn_t a3000_intr (int irq,void *data) { -a3000_scsiregs *regs = (a3000_scsiregs *)(a3000_host->base); +struct Scsi_Host *instance = data; +a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base);unsigned int status = regs->ISTR;unsigned long flags;if (!(status &ISTR_INT_P ))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); +spin_lock_irqsave (instance->host_lock, flags); +wd33c93_intr (instance); +spin_unlock_irqrestore (instance->host_lock, flags);return IRQ_HANDLED ; }printk ("Non-serviced A3000 SCSI-interrupt? ISTR = %02x\n" , status);
@@ -45,8 +44,9 @@ static irqreturn_t a3000_intr(int irq, void *dummy)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) { -struct WD33C93_hostdata *hdata =shost_priv (a3000_host); -a3000_scsiregs *regs = (a3000_scsiregs *)(a3000_host->base); +struct Scsi_Host *instance = cmd->device->host; +struct WD33C93_hostdata *hdata =shost_priv (instance); +a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base);unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -163,6 +163,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,static int __init a3000_detect (struct scsi_host_template *tpnt) { +struct Scsi_Host *instance;wd33c93_regs wdregs;a3000_scsiregs *regs;struct WD33C93_hostdata *hdata;
@@ -175,31 +176,30 @@ static int __init a3000_detect(struct scsi_host_template *tpnt) tpnt->proc_name ="A3000" ; tpnt->proc_info = &wd33c93_proc_info; - a3000_host =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (a3000_host ==NULL ) + instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); +if (instance ==NULL ) goto fail_register; - a3000_host->base =ZTWO_VADDR (0xDD0000 ); - a3000_host->irq =IRQ_AMIGA_PORTS ; - regs = (a3000_scsiregs *)(a3000_host->base); + instance->base =ZTWO_VADDR (0xDD0000 ); + instance->irq =IRQ_AMIGA_PORTS ; + regs = (a3000_scsiregs *)(instance->base); regs->DAWR =DAWR_A3000 ; wdregs.SASR = ®s->SASR; wdregs.SCMD = ®s->SCMD; - hdata =shost_priv (a3000_host); + hdata =shost_priv (instance); hdata->no_sync =0xff ; hdata->fast =0 ; hdata->dma_mode =CTRL_DMA ; -wd33c93_init (a3000_host, wdregs, dma_setup, dma_stop, -WD33C93_FS_12_15 ); +wd33c93_init (instance, wdregs, dma_setup, dma_stop,WD33C93_FS_12_15 );if (request_irq (IRQ_AMIGA_PORTS , a3000_intr,IRQF_SHARED ,"A3000 SCSI" , - a3000_intr)) + instance)) goto fail_irq; regs->CNTR =CNTR_PDMD |CNTR_INTEN ;return 1 ; fail_irq: -scsi_unregister (a3000_host); +scsi_unregister (instance); fail_register:release_mem_region (0xDD0000 ,256 );return 0 ;
Signature · 1 line
1.6.0.4
PATCH 15/21 m68k/scsi: gvp11 - Extract check_wd33c93()
--- drivers/scsi/gvp11.c | 160 ++++++++++++++++++++++++++------------------------ 1 files changed, 83 insertions(+), 77 deletions(-)
drivers/scsi/gvp11.c +83 -77
@@ -21,6 +21,8 @@#include <linux/stat.h> +#define CHECK_WD33C93 +static irqreturn_t gvp11_intr (int irq,void *data) {struct Scsi_Host *instance = data;
@@ -166,7 +168,85 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, } } -#define CHECK_WD33C93 +static int __init check_wd33c93 (gvp11_scsiregs *regs) +{ +#ifdef CHECK_WD33C93 +volatile unsigned char *sasr_3393, *scmd_3393; +unsigned char save_sasr; +unsigned char q, qq; + +/* +* These darn GVP boards are a problem - it can be tough to tell +* whether or not they include a SCSI controller. This is the +* ultimate Yet-Another-GVP-Detection-Hack in that it actually +* probes for a WD33c93 chip: If we find one, it's extremely +* likely that this card supports SCSI, regardless of Product_ +* Code, Board_Size, etc. +*/ + +/* Get pointers to the presumed register locations and save contents */ + + sasr_3393 = ®s->SASR; + scmd_3393 = ®s->SCMD; + save_sasr = *sasr_3393; + +/* First test the AuxStatus Reg */ + + q = *sasr_3393;/* read it */ +if (q &0x08 )/* bit 3 should always be clear */ +return -ENODEV ; + *sasr_3393 =WD_AUXILIARY_STATUS ;/* setup indirect address */ +if (*sasr_3393 ==WD_AUXILIARY_STATUS ) {/* shouldn't retain the write */ + *sasr_3393 = save_sasr;/* Oops - restore this byte */ +return -ENODEV ; + } +if (*sasr_3393 != q) {/* should still read the same */ + *sasr_3393 = save_sasr;/* Oops - restore this byte */ +return -ENODEV ; + } +if (*scmd_3393 != q)/* and so should the image at 0x1f */ +return -ENODEV ; + +/* +* Ok, we probably have a wd33c93, but let's check a few other places +* for good measure. Make sure that this works for both 'A and 'B +* chip versions. +*/ + + *sasr_3393 =WD_SCSI_STATUS ; + q = *scmd_3393; + *sasr_3393 =WD_SCSI_STATUS ; + *scmd_3393 = ~q; + *sasr_3393 =WD_SCSI_STATUS ; + qq = *scmd_3393; + *sasr_3393 =WD_SCSI_STATUS ; + *scmd_3393 = q; +if (qq != q)/* should be read only */ +return -ENODEV ; + *sasr_3393 =0x1e ;/* this register is unimplemented */ + q = *scmd_3393; + *sasr_3393 =0x1e ; + *scmd_3393 = ~q; + *sasr_3393 =0x1e ; + qq = *scmd_3393; + *sasr_3393 =0x1e ; + *scmd_3393 = q; +if (qq != q || qq !=0xff )/* should be read only, all 1's */ +return -ENODEV ; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + q = *scmd_3393; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + *scmd_3393 = ~q; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + qq = *scmd_3393; + *sasr_3393 =WD_TIMEOUT_PERIOD ; + *scmd_3393 = q; +if (qq != (~q &0xff ))/* should be read/write */ +return -ENODEV ; +#endif /* CHECK_WD33C93 */ + +return 0 ; +}int __init gvp11_detect (struct scsi_host_template *tpnt) {
@@ -180,11 +260,6 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)gvp11_scsiregs *regs;wd33c93_regs wdregs;int num_gvp11 =0 ; -#ifdef CHECK_WD33C93 -volatile unsigned char *sasr_3393, *scmd_3393; -unsigned char save_sasr; -unsigned char q, qq; -#endif if (!MACH_IS_AMIGA || called)return 0 ;
@@ -225,77 +300,9 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)if (!request_mem_region (address,256 ,"wd33c93" ))continue ; -#ifdef CHECK_WD33C93 - -/* -* These darn GVP boards are a problem - it can be tough to tell -* whether or not they include a SCSI controller. This is the -* ultimate Yet-Another-GVP-Detection-Hack in that it actually -* probes for a WD33c93 chip: If we find one, it's extremely -* likely that this card supports SCSI, regardless of Product_ -* Code, Board_Size, etc. -*/ - -/* Get pointers to the presumed register locations and save contents */ - - sasr_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR (address)))->SASR); - scmd_3393 = &(((gvp11_scsiregs *)(ZTWO_VADDR (address)))->SCMD); - save_sasr = *sasr_3393; - -/* First test the AuxStatus Reg */ - - q = *sasr_3393;/* read it */ -if (q &0x08 )/* bit 3 should always be clear */ - goto release; - *sasr_3393 =WD_AUXILIARY_STATUS ;/* setup indirect address */ -if (*sasr_3393 ==WD_AUXILIARY_STATUS ) {/* shouldn't retain the write */ - *sasr_3393 = save_sasr;/* Oops - restore this byte */ - goto release; - } -if (*sasr_3393 != q) {/* should still read the same */ - *sasr_3393 = save_sasr;/* Oops - restore this byte */ - goto release; - } -if (*scmd_3393 != q)/* and so should the image at 0x1f */ - goto release; - -/* -* Ok, we probably have a wd33c93, but let's check a few other places -* for good measure. Make sure that this works for both 'A and 'B -* chip versions. -*/ - - *sasr_3393 =WD_SCSI_STATUS ; - q = *scmd_3393; - *sasr_3393 =WD_SCSI_STATUS ; - *scmd_3393 = ~q; - *sasr_3393 =WD_SCSI_STATUS ; - qq = *scmd_3393; - *sasr_3393 =WD_SCSI_STATUS ; - *scmd_3393 = q; -if (qq != q)/* should be read only */ - goto release; - *sasr_3393 =0x1e ;/* this register is unimplemented */ - q = *scmd_3393; - *sasr_3393 =0x1e ; - *scmd_3393 = ~q; - *sasr_3393 =0x1e ; - qq = *scmd_3393; - *sasr_3393 =0x1e ; - *scmd_3393 = q; -if (qq != q || qq !=0xff )/* should be read only, all 1's */ + regs = (gvp11_scsiregs *)(ZTWO_VADDR (address)); +if (check_wd33c93 (regs)) goto release; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - q = *scmd_3393; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - *scmd_3393 = ~q; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - qq = *scmd_3393; - *sasr_3393 =WD_TIMEOUT_PERIOD ; - *scmd_3393 = q; -if (qq != (~q &0xff ))/* should be read/write */ - goto release; -#endif instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata ));if (instance ==NULL )
@@ -310,7 +317,6 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)else hdata->dma_xfer_mask = default_dma_xfer_mask; - regs = (gvp11_scsiregs *)(instance->base); regs->secret2 =1 ; regs->secret1 =0 ; regs->secret3 =15 ;
Signature · 1 line
1.6.0.4
PATCH 16/21 m68k/scsi: a2091 - Kill a2091_scsiregs typedef
--- drivers/scsi/a2091.c | 12 ++++++------ drivers/scsi/a2091.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-)
drivers/scsi/a2091.c +6 -6
@@ -26,7 +26,7 @@ static int a2091_release(struct Scsi_Host *instance);static irqreturn_t a2091_intr (int irq,void *data) {struct Scsi_Host *instance = data; -a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base); +struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base);unsigned int status = regs->ISTR;unsigned long flags;
@@ -43,7 +43,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) {struct Scsi_Host *instance = cmd->device->host;struct WD33C93_hostdata *hdata =shost_priv (instance); -a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base); +struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base);unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -108,7 +108,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, int status) {struct WD33C93_hostdata *hdata =shost_priv (instance); -a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base); +struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base);/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ;
@@ -153,7 +153,7 @@ static int __init a2091_detect(struct scsi_host_template *tpnt)unsigned long address;struct zorro_dev *z =NULL ;wd33c93_regs wdregs; -a2091_scsiregs *regs; +struct a2091_scsiregs *regs;struct WD33C93_hostdata *hdata;int num_a2091 =0 ;
@@ -178,7 +178,7 @@ static int __init a2091_detect(struct scsi_host_template *tpnt) instance->base =ZTWO_VADDR (address); instance->irq =IRQ_AMIGA_PORTS ; instance->unique_id = z->slotaddr; - regs = (a2091_scsiregs *)(instance->base); + regs = (struct a2091_scsiregs *)(instance->base); regs->DAWR =DAWR_A2091 ; wdregs.SASR = ®s->SASR; wdregs.SCMD = ®s->SCMD;
@@ -242,7 +242,7 @@ static struct scsi_host_template driver_template = {static int a2091_release (struct Scsi_Host *instance) {#ifdef MODULE -a2091_scsiregs *regs = (a2091_scsiregs *)(instance->base); +struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base); regs->CNTR =0 ;release_mem_region (ZTWO_PADDR (instance->base),256 );
drivers/scsi/a2091.h +2 -2
@@ -25,7 +25,7 @@*/ #define A2091_XFER_MASK (0xff000001) -typedef struct { +struct a2091_scsiregs {unsigned char pad1[64 ];volatile unsigned short ISTR;volatile unsigned short CNTR;
@@ -44,7 +44,7 @@ typedef struct {volatile unsigned short CINT ;unsigned char pad7[2 ];volatile unsigned short FLUSH ; -} a2091_scsiregs; +};#define DAWR_A2091 (3)
Signature · 1 line
1.6.0.4
PATCH 17/21 m68k/scsi: gvp11 - Kill gvp11_scsiregs typedef
--- drivers/scsi/gvp11.c | 14 +++++++------- drivers/scsi/gvp11.h | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-)
drivers/scsi/gvp11.c +7 -7
@@ -26,7 +26,7 @@static irqreturn_t gvp11_intr (int irq,void *data) {struct Scsi_Host *instance = data; -gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base); +struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base);unsigned int status = regs->CNTR;unsigned long flags;
@@ -50,7 +50,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) {struct Scsi_Host *instance = cmd->device->host;struct WD33C93_hostdata *hdata =shost_priv (instance); -gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base); +struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base);unsigned short cntr =GVP11_DMAC_INT_ENABLE ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);int bank_mask;
@@ -144,7 +144,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { -gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base); +struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base);struct WD33C93_hostdata *hdata =shost_priv (instance);/* stop DMA */
@@ -168,7 +168,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, } } -static int __init check_wd33c93 (gvp11_scsiregs *regs) +static int __init check_wd33c93 (struct gvp11_scsiregs *regs) {#ifdef CHECK_WD33C93 volatile unsigned char *sasr_3393, *scmd_3393;
@@ -257,7 +257,7 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)struct zorro_dev *z =NULL ;unsigned int default_dma_xfer_mask;struct WD33C93_hostdata *hdata; -gvp11_scsiregs *regs; +struct gvp11_scsiregs *regs;wd33c93_regs wdregs;int num_gvp11 =0 ;
@@ -300,7 +300,7 @@ int __init gvp11_detect(struct scsi_host_template *tpnt)if (!request_mem_region (address,256 ,"wd33c93" ))continue ; - regs = (gvp11_scsiregs *)(ZTWO_VADDR (address)); + regs = (struct gvp11_scsiregs *)(ZTWO_VADDR (address));if (check_wd33c93 (regs)) goto release;
@@ -398,7 +398,7 @@ static struct scsi_host_template driver_template = {int gvp11_release (struct Scsi_Host *instance) {#ifdef MODULE -gvp11_scsiregs *regs = (gvp11_scsiregs *)(instance->base); +struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base); regs->CNTR =0 ;release_mem_region (ZTWO_PADDR (instance->base),256 );
drivers/scsi/gvp11.h +2 -2
@@ -30,7 +30,7 @@ int gvp11_release(struct Scsi_Host *);*/ #define GVP11_XFER_MASK (0xff000001) -typedef struct { +struct gvp11_scsiregs {unsigned char pad1[64 ];volatile unsigned short CNTR;unsigned char pad2[31 ];
@@ -46,7 +46,7 @@ typedef struct {volatile unsigned short SP_DMA ;volatile unsigned short secret2;/* store 1 here */ volatile unsigned short secret3;/* store 15 here */ -} gvp11_scsiregs; +};/* bits in CNTR */ #define GVP11_DMAC_BUSY (1<<0)
Signature · 1 line
1.6.0.4
PATCH 18/21 m68k/scsi: a3000 - Kill a3000_scsiregs typedef
--- drivers/scsi/a3000.c | 12 ++++++------ drivers/scsi/a3000.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-)
drivers/scsi/a3000.c +6 -6
@@ -26,7 +26,7 @@ static int a3000_release(struct Scsi_Host *instance);static irqreturn_t a3000_intr (int irq,void *data) {struct Scsi_Host *instance = data; -a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base); +struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base);unsigned int status = regs->ISTR;unsigned long flags;
@@ -46,7 +46,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) {struct Scsi_Host *instance = cmd->device->host;struct WD33C93_hostdata *hdata =shost_priv (instance); -a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base); +struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base);unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -109,7 +109,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, int status) {struct WD33C93_hostdata *hdata =shost_priv (instance); -a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base); +struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base);/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ;
@@ -165,7 +165,7 @@ static int __init a3000_detect(struct scsi_host_template *tpnt) {struct Scsi_Host *instance;wd33c93_regs wdregs; -a3000_scsiregs *regs; +struct a3000_scsiregs *regs;struct WD33C93_hostdata *hdata;if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT (A3000_SCSI ))
@@ -182,7 +182,7 @@ static int __init a3000_detect(struct scsi_host_template *tpnt) instance->base =ZTWO_VADDR (0xDD0000 ); instance->irq =IRQ_AMIGA_PORTS ; - regs = (a3000_scsiregs *)(instance->base); + regs = (struct a3000_scsiregs *)(instance->base); regs->DAWR =DAWR_A3000 ; wdregs.SASR = ®s->SASR; wdregs.SCMD = ®s->SCMD;
@@ -242,7 +242,7 @@ static struct scsi_host_template driver_template = {static int a3000_release (struct Scsi_Host *instance) { -a3000_scsiregs *regs = (a3000_scsiregs *)(instance->base); +struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base); regs->CNTR =0 ;release_mem_region (0xDD0000 ,256 );
drivers/scsi/a3000.h +2 -2
@@ -25,7 +25,7 @@*/ #define A3000_XFER_MASK (0x00000003) -typedef struct { +struct a3000_scsiregs {unsigned char pad1[2 ];volatile unsigned short DAWR;volatile unsigned int WTC;
@@ -46,7 +46,7 @@ typedef struct {volatile unsigned char SASR ;unsigned char pad9;volatile unsigned char SCMD ; -} a3000_scsiregs; +};#define DAWR_A3000 (3)
Signature · 1 line
1.6.0.4
PATCH 19/21 m68k/scsi: mvme147 - Kill obsolete HOSTS_C logic
Kill the obsolete HOSTS_C define and the related double inclusion of mvme147.h
--- drivers/scsi/mvme147.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-)
drivers/scsi/mvme147.c +0 -3
@@ -134,9 +134,6 @@ static int mvme147_bus_reset(struct scsi_cmnd *cmd)return SUCCESS ; } -#define HOSTS_C - -#include "mvme147.h" static struct scsi_host_template driver_template = { .proc_name ="MVME147" ,
Signature · 1 line
1.6.0.4
PATCH 20/21 m68k: amiga - A2091/A590 SCSI zorro_driver conversion
--- drivers/scsi/a2091.c | 184 +++++++++++++++++++++++++++---------------------- 1 files changed, 101 insertions(+), 83 deletions(-)
drivers/scsi/a2091.c +101 -83
@@ -1,27 +1,19 @@#include <linux/types.h> -#include <linux/mm.h> -#include <linux/blkdev.h> #include <linux/init.h> #include <linux/interrupt.h> +#include <linux/mm.h> +#include <linux/spinlock.h> +#include <linux/zorro.h> -#include <asm/setup.h> #include <asm/page.h> #include <asm/pgtable.h> #include <asm/amigaints.h> #include <asm/amigahw.h> -#include <linux/zorro.h> -#include <asm/irq.h> -#include <linux/spinlock.h> #include "scsi.h" -#include <scsi/scsi_host.h> #include "wd33c93.h" #include "a2091.h" -#include <linux/stat.h> - - -static int a2091_release (struct Scsi_Host *instance);static irqreturn_t a2091_intr (int irq,void *data) {
@@ -146,85 +138,27 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, } } -static int __init a2091_detect (struct scsi_host_template *tpnt) -{ -static unsigned char called =0 ; -struct Scsi_Host *instance; -unsigned long address; -struct zorro_dev *z =NULL ; -wd33c93_regs wdregs; -struct a2091_scsiregs *regs; -struct WD33C93_hostdata *hdata; -int num_a2091 =0 ; - -if (!MACH_IS_AMIGA || called) -return 0 ; - called =1 ; - - tpnt->proc_name ="A2091" ; - tpnt->proc_info = &wd33c93_proc_info; - -while ((z =zorro_find_device (ZORRO_WILDCARD , z))) { -if (z->id !=ZORRO_PROD_CBM_A590_A2091_1 && - z->id !=ZORRO_PROD_CBM_A590_A2091_2 ) -continue ; - address = z->resource.start; -if (!request_mem_region (address,256 ,"wd33c93" )) -continue ; - - instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (instance ==NULL ) - goto release; - instance->base =ZTWO_VADDR (address); - instance->irq =IRQ_AMIGA_PORTS ; - instance->unique_id = z->slotaddr; - regs = (struct a2091_scsiregs *)(instance->base); - regs->DAWR =DAWR_A2091 ; - wdregs.SASR = ®s->SASR; - wdregs.SCMD = ®s->SCMD; - hdata =shost_priv (instance); - hdata->no_sync =0xff ; - hdata->fast =0 ; - hdata->dma_mode =CTRL_DMA ; -wd33c93_init (instance, wdregs, dma_setup, dma_stop, -WD33C93_FS_8_10 ); -if (request_irq (IRQ_AMIGA_PORTS , a2091_intr,IRQF_SHARED , -"A2091 SCSI" , instance)) - goto unregister; - regs->CNTR =CNTR_PDMD |CNTR_INTEN ; - num_a2091++; -continue ; - -unregister: -scsi_unregister (instance); -release: -release_mem_region (address,256 ); - } - -return num_a2091; -} -static int a2091_bus_reset (struct scsi_cmnd *cmd) { +struct Scsi_Host *instance = cmd->device->host; +/* FIXME perform bus-specific reset */ /* FIXME 2: kill this function, and let midlayer fall back to the same action, calling wd33c93_host_reset() */ -spin_lock_irq (cmd->device->host->host_lock); +spin_lock_irq (instance->host_lock);wd33c93_host_reset (cmd); -spin_unlock_irq (cmd->device->host->host_lock); +spin_unlock_irq (instance->host_lock);return SUCCESS ; } -#define HOSTS_C - -static struct scsi_host_template driver_template = { - .proc_name ="A2901" , +static struct scsi_host_template a2091_scsi_template = { + .module =THIS_MODULE , .name ="Commodore A2091/A590 SCSI" , - .detect = a2091_detect, - .release = a2091_release, + .proc_info = wd33c93_proc_info, + .proc_name ="A2901" , .queuecommand = wd33c93_queuecommand, .eh_abort_handler = wd33c93_abort, .eh_bus_reset_handler = a2091_bus_reset,
@@ -236,19 +170,103 @@ static struct scsi_host_template driver_template = { .use_clustering = DISABLE_CLUSTERING }; +static int __devinit a2091_probe (struct zorro_dev *z, +const struct zorro_device_id *ent) +{ +struct Scsi_Host *instance; +int error; +struct a2091_scsiregs *regs; +wd33c93_regs wdregs; +struct WD33C93_hostdata *hdata; -#include "scsi_module.c" +if (!request_mem_region (z->resource.start,256 ,"wd33c93" )) +return -EBUSY ; -static int a2091_release (struct Scsi_Host *instance) + instance =scsi_host_alloc (&a2091_scsi_template, +sizeof (struct WD33C93_hostdata )); +if (!instance) { + error = -ENOMEM ; + goto fail_alloc; + } + + instance->base =ZTWO_VADDR (z->resource.start); + instance->irq =IRQ_AMIGA_PORTS ; + instance->unique_id = z->slotaddr; + + regs = (struct a2091_scsiregs *)(instance->base); + regs->DAWR =DAWR_A2091 ; + + wdregs.SASR = ®s->SASR; + wdregs.SCMD = ®s->SCMD; + + hdata =shost_priv (instance); + hdata->no_sync =0xff ; + hdata->fast =0 ; + hdata->dma_mode =CTRL_DMA ; + +wd33c93_init (instance, wdregs, dma_setup, dma_stop,WD33C93_FS_8_10 ); + error =request_irq (IRQ_AMIGA_PORTS , a2091_intr,IRQF_SHARED , +"A2091 SCSI" , instance); +if (error) + goto fail_irq; + + regs->CNTR =CNTR_PDMD |CNTR_INTEN ; + + error =scsi_add_host (instance,NULL ); +if (error) + goto fail_host; + +zorro_set_drvdata (z, instance); + +scsi_scan_host (instance); +return 0 ; + +fail_host: +free_irq (IRQ_AMIGA_PORTS , instance); +fail_irq: +scsi_host_put (instance); +fail_alloc: +release_mem_region (z->resource.start,256 ); +return error; +} + +static void __devexit a2091_remove(struct zorro_dev *z) { -#ifdef MODULE +struct Scsi_Host *instance =zorro_get_drvdata (z);struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base); regs->CNTR =0 ; -release_mem_region (ZTWO_PADDR (instance->base),256 ); +scsi_remove_host (instance);free_irq (IRQ_AMIGA_PORTS , instance); -#endif -return 1 ; +scsi_host_put (instance); +release_mem_region (z->resource.start,256 ); +} + +static struct zorro_device_id a2091_zorro_tbl[]__devinitdata = { + {ZORRO_PROD_CBM_A590_A2091_1 }, + {ZORRO_PROD_CBM_A590_A2091_2 }, + {0 } +}; +MODULE_DEVICE_TABLE (zorro, a2091_zorro_tbl); + +static struct zorro_driver a2091_driver = { + .name ="a2091" , + .id_table = a2091_zorro_tbl, + .probe = a2091_probe, + .remove =__devexit_p (a2091_remove), +}; + +static int __init a2091_init (void ) +{ +return zorro_register_driver (&a2091_driver); +} +module_init (a2091_init); + +static void __exit a2091_exit(void) +{ +zorro_unregister_driver (&a2091_driver); } +module_exit (a2091_exit); +MODULE_DESCRIPTION ("Commodore A2091/A590 SCSI" );MODULE_LICENSE ("GPL" );
Signature · 1 line
1.6.0.4
PATCH 21/21 m68k: amiga - GVP Series II SCSI zorro_driver conversion
--- drivers/scsi/gvp11.c | 296 ++++++++++++++++++++++++++------------------------ drivers/scsi/gvp11.h | 7 - 2 files changed, 155 insertions(+), 148 deletions(-)
drivers/scsi/gvp11.c +155 -141
@@ -1,25 +1,19 @@#include <linux/types.h> -#include <linux/mm.h> -#include <linux/blkdev.h> #include <linux/init.h> #include <linux/interrupt.h> +#include <linux/mm.h> +#include <linux/spinlock.h> +#include <linux/zorro.h> -#include <asm/setup.h> #include <asm/page.h> #include <asm/pgtable.h> #include <asm/amigaints.h> #include <asm/amigahw.h> -#include <linux/zorro.h> -#include <asm/irq.h> -#include <linux/spinlock.h> #include "scsi.h" -#include <scsi/scsi_host.h> #include "wd33c93.h" #include "gvp11.h" -#include <linux/stat.h> -#define CHECK_WD33C93
@@ -168,7 +162,40 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, } } -static int __init check_wd33c93 (struct gvp11_scsiregs *regs) +static int gvp11_bus_reset (struct scsi_cmnd *cmd) +{ +struct Scsi_Host *instance = cmd->device->host; + +/* FIXME perform bus-specific reset */ + +/* FIXME 2: shouldn't we no-op this function (return +FAILED), and fall back to host reset function, +wd33c93_host_reset ? */ + +spin_lock_irq (instance->host_lock); +wd33c93_host_reset (cmd); +spin_unlock_irq (instance->host_lock); + +return SUCCESS ; +} + +static struct scsi_host_template gvp11_scsi_template = { + .module =THIS_MODULE , + .name ="GVP Series II SCSI" , + .proc_info = wd33c93_proc_info, + .proc_name ="GVP11" , + .queuecommand = wd33c93_queuecommand, + .eh_abort_handler = wd33c93_abort, + .eh_bus_reset_handler = gvp11_bus_reset, + .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 =DISABLE_CLUSTERING +}; + +static int __devinit check_wd33c93 (struct gvp11_scsiregs *regs) {#ifdef CHECK_WD33C93 volatile unsigned char *sasr_3393, *scmd_3393;
@@ -248,163 +275,150 @@ static int __init check_wd33c93(struct gvp11_scsiregs *regs)return 0 ; } -int __init gvp11_detect (struct scsi_host_template *tpnt) +static int __devinit gvp11_probe (struct zorro_dev *z, +const struct zorro_device_id *ent) { -static unsigned char called =0 ;struct Scsi_Host *instance;unsigned long address; +int error;unsigned int epc; -struct zorro_dev *z =NULL ;unsigned int default_dma_xfer_mask;struct WD33C93_hostdata *hdata;struct gvp11_scsiregs *regs;wd33c93_regs wdregs; -int num_gvp11 =0 ; - -if (!MACH_IS_AMIGA || called) -return 0 ; - called =1 ; - - tpnt->proc_name ="GVP11" ; - tpnt->proc_info = &wd33c93_proc_info; - -while ((z =zorro_find_device (ZORRO_WILDCARD , z))) { -/* -* This should (hopefully) be the correct way to identify -* all the different GVP SCSI controllers (except for the -* SERIES I though). -*/ - -if (z->id ==ZORRO_PROD_GVP_COMBO_030_R3_SCSI || - z->id ==ZORRO_PROD_GVP_SERIES_II ) - default_dma_xfer_mask = ~0x00ffffff ; -else if (z->id ==ZORRO_PROD_GVP_GFORCE_030_SCSI || - z->id ==ZORRO_PROD_GVP_A530_SCSI || - z->id ==ZORRO_PROD_GVP_COMBO_030_R4_SCSI ) - default_dma_xfer_mask = ~0x01ffffff ; -else if (z->id ==ZORRO_PROD_GVP_A1291 || - z->id ==ZORRO_PROD_GVP_GFORCE_040_SCSI_1 ) - default_dma_xfer_mask = ~0x07ffffff ; -else -continue ; - -/* -* Rumors state that some GVP ram boards use the same product -* code as the SCSI controllers. Therefore if the board-size -* is not 64KB we asume it is a ram board and bail out. -*/ -if (z->resource.end - z->resource.start !=0xffff ) -continue ; - - address = z->resource.start; -if (!request_mem_region (address,256 ,"wd33c93" )) -continue ; - - regs = (struct gvp11_scsiregs *)(ZTWO_VADDR (address)); -if (check_wd33c93 (regs)) - goto release; - - instance =scsi_register (tpnt,sizeof (struct WD33C93_hostdata )); -if (instance ==NULL ) - goto release; - instance->base =ZTWO_VADDR (address); - instance->irq =IRQ_AMIGA_PORTS ; - instance->unique_id = z->slotaddr; - - hdata =shost_priv (instance); -if (gvp11_xfer_mask) - hdata->dma_xfer_mask = gvp11_xfer_mask; -else - hdata->dma_xfer_mask = default_dma_xfer_mask; - - regs->secret2 =1 ; - regs->secret1 =0 ; - regs->secret3 =15 ; -while (regs->CNTR &GVP11_DMAC_BUSY ) - ; - regs->CNTR =0 ; - - regs->BANK =0 ; - - epc = *(unsigned short *)(ZTWO_VADDR (address) +0x8000 ); - -/* -* Check for 14MHz SCSI clock -*/ - wdregs.SASR = ®s->SASR; - wdregs.SCMD = ®s->SCMD; - hdata->no_sync =0xff ; - hdata->fast =0 ; - hdata->dma_mode =CTRL_DMA ; -wd33c93_init (instance, wdregs, dma_setup, dma_stop, - (epc &GVP_SCSICLKMASK ) ?WD33C93_FS_8_10 - :WD33C93_FS_12_15 ); - -if (request_irq (IRQ_AMIGA_PORTS , gvp11_intr,IRQF_SHARED , -"GVP11 SCSI" , instance)) - goto unregister; - regs->CNTR =GVP11_DMAC_INT_ENABLE ; - num_gvp11++; -continue ; - -unregister: -scsi_unregister (instance); -release: -release_mem_region (address,256 ); + + default_dma_xfer_mask = ent->driver_data; + +/* +* Rumors state that some GVP ram boards use the same product +* code as the SCSI controllers. Therefore if the board-size +* is not 64KB we asume it is a ram board and bail out. +*/ +if (zorro_resource_len (z) !=0x10000 ) +return -ENODEV ; + + address = z->resource.start; +if (!request_mem_region (address,256 ,"wd33c93" )) +return -EBUSY ; + + regs = (struct gvp11_scsiregs *)(ZTWO_VADDR (address)); + + error =check_wd33c93 (regs); +if (error) + goto fail_check_or_alloc; + + instance =scsi_host_alloc (&gvp11_scsi_template, +sizeof (struct WD33C93_hostdata )); +if (!instance) { + error = -ENOMEM ; + goto fail_check_or_alloc; } -return num_gvp11; -} + instance->base = (unsigned long )regs; + instance->irq =IRQ_AMIGA_PORTS ; + instance->unique_id = z->slotaddr; -static int gvp11_bus_reset (struct scsi_cmnd *cmd) -{ -/* FIXME perform bus-specific reset */ + regs->secret2 =1 ; + regs->secret1 =0 ; + regs->secret3 =15 ; +while (regs->CNTR &GVP11_DMAC_BUSY ) + ; + regs->CNTR =0 ; + regs->BANK =0 ; -/* FIXME 2: shouldn't we no-op this function (return -FAILED), and fall back to host reset function, -wd33c93_host_reset ? */ + wdregs.SASR = ®s->SASR; + wdregs.SCMD = ®s->SCMD; -spin_lock_irq (cmd->device->host->host_lock); -wd33c93_host_reset (cmd); -spin_unlock_irq (cmd->device->host->host_lock); + hdata =shost_priv (instance); +if (gvp11_xfer_mask) + hdata->dma_xfer_mask = gvp11_xfer_mask; +else + hdata->dma_xfer_mask = default_dma_xfer_mask; -return SUCCESS ; -} + hdata->no_sync =0xff ; + hdata->fast =0 ; + hdata->dma_mode =CTRL_DMA ; +/* +* Check for 14MHz SCSI clock +*/ + epc = *(unsigned short *)(ZTWO_VADDR (address) +0x8000 ); +wd33c93_init (instance, wdregs, dma_setup, dma_stop, + (epc &GVP_SCSICLKMASK ) ?WD33C93_FS_8_10 + :WD33C93_FS_12_15 ); -#define HOSTS_C + error =request_irq (IRQ_AMIGA_PORTS , gvp11_intr,IRQF_SHARED , +"GVP11 SCSI" , instance); +if (error) + goto fail_irq; -#include "gvp11.h" + regs->CNTR =GVP11_DMAC_INT_ENABLE ; -static struct scsi_host_template driver_template = { - .proc_name ="GVP11" , - .name ="GVP Series II SCSI" , - .detect = gvp11_detect, - .release = gvp11_release, - .queuecommand = wd33c93_queuecommand, - .eh_abort_handler = wd33c93_abort, - .eh_bus_reset_handler = gvp11_bus_reset, - .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 =DISABLE_CLUSTERING -}; + error =scsi_add_host (instance,NULL ); +if (error) + goto fail_host; +zorro_set_drvdata (z, instance); +scsi_scan_host (instance); +return 0 ; -#include "scsi_module.c" +fail_host: +free_irq (IRQ_AMIGA_PORTS , instance); +fail_irq: +scsi_host_put (instance); +fail_check_or_alloc: +release_mem_region (address,256 ); +return error; +} -int gvp11_release (struct Scsi_Host *instance) +static void __devexit gvp11_remove(struct zorro_dev *z) { -#ifdef MODULE +struct Scsi_Host *instance =zorro_get_drvdata (z);struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base); regs->CNTR =0 ; -release_mem_region (ZTWO_PADDR (instance->base),256 ); +scsi_remove_host (instance);free_irq (IRQ_AMIGA_PORTS , instance); -#endif -return 1 ; +scsi_host_put (instance); +release_mem_region (z->resource.start,256 ); +} + +/* +* This should (hopefully) be the correct way to identify +* all the different GVP SCSI controllers (except for the +* SERIES I though). +*/ + +static struct zorro_device_id gvp11_zorro_tbl[]__devinitdata = { + {ZORRO_PROD_GVP_COMBO_030_R3_SCSI , ~0x00ffffff }, + {ZORRO_PROD_GVP_SERIES_II , ~0x00ffffff }, + {ZORRO_PROD_GVP_GFORCE_030_SCSI , ~0x01ffffff }, + {ZORRO_PROD_GVP_A530_SCSI , ~0x01ffffff }, + {ZORRO_PROD_GVP_COMBO_030_R4_SCSI , ~0x01ffffff }, + {ZORRO_PROD_GVP_A1291 , ~0x07ffffff }, + {ZORRO_PROD_GVP_GFORCE_040_SCSI_1 , ~0x07ffffff }, + {0 } +}; +MODULE_DEVICE_TABLE (zorro, gvp11_zorro_tbl); + +static struct zorro_driver gvp11_driver = { + .name ="gvp11" , + .id_table = gvp11_zorro_tbl, + .probe = gvp11_probe, + .remove =__devexit_p (gvp11_remove), +}; + +static int __init gvp11_init (void ) +{ +return zorro_register_driver (&gvp11_driver); +} +module_init (gvp11_init); + +static void __exit gvp11_exit(void) +{ +zorro_unregister_driver (&gvp11_driver); } +module_exit (gvp11_exit); +MODULE_DESCRIPTION ("GVP Series II SCSI" );MODULE_LICENSE ("GPL" );
drivers/scsi/gvp11.h +0 -7
@@ -11,9 +11,6 @@#include <linux/types.h> -int gvp11_detect (struct scsi_host_template *); -int gvp11_release (struct Scsi_Host *); -#ifndef CMD_PER_LUN #define CMD_PER_LUN 2#endif
@@ -22,8 +19,6 @@ int gvp11_release(struct Scsi_Host *);#define CAN_QUEUE 16#endif -#ifndef HOSTS_C -/* * if the transfer address ANDed with this results in a non-zero * result, then we can't use DMA.
@@ -54,6 +49,4 @@ struct gvp11_scsiregs {#define GVP11_DMAC_INT_ENABLE (1<<3)#define GVP11_DMAC_DIR_WRITE (1<<4) -#endif /* else def HOSTS_C */ -#endif /* GVP11_H */
Signature · 1 line
1.6.0.4
Re: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
In reply to Geert UytterhoevenInstead of abusing the ScsiHost base field I'd prefer if you stick a properly typed pointer into the device specific host data.
Re: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
In reply to Geert UytterhoevenInstead of abusing the ScsiHost base field I'd prefer if you stick a properly typed pointer into the device specific host data.
Re: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
Quoted 1 line · Christoph Hellwig
Instead of abusing the ScsiHost base field I'd prefer if you stick
I wouldn't call it abuse: it's a (MM)IO base address anyway. But I see that field was indeed marked `legacy crap' in an otherwise innocent looking
commit to split the SCSI include files... by you ;-)
Quoted 1 line
a properly typed pointer into the device specific host data.
You mean shost_priv()? That field already contains a pointer to the struct WD33C93_hostdata.
But I'll create a new a2091_hostdata struct that contains both the WD33C93_hostdata and the a2091_scsiregs pointer (and do the same for gvp11.c and a3000.c). It's a bit similar to what sgiwd93.c does, albeit that one also uses the legacy base field.
Thx!
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
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
Re: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
Quoted 10 lines · Geert Uytterhoeven
Quoted 1 line · Christoph Hellwig
Instead of abusing the ScsiHost base field I'd prefer if you stick
I wouldn't call it abuse: it's a (MM)IO base address anyway. But I see that field was indeed marked `legacy crap' in an otherwise innocent looking
commit to split the SCSI include files... by you ;-)Quoted 1 line
a properly typed pointer into the device specific host data.
Quoted 7 lines
You mean
shost_priv()? That field already contains a pointer to the structWD33C93_hostdata.But I'll create a new
a2091_hostdatastruct that contains both theWD33C93_hostdataand thea2091_scsiregspointer (and do the same forgvp11.canda3000.c). It's a bit similar to whatsgiwd93.cdoes, albeit that one also uses the legacy base field.
As I want to avoid introducing bugs by respinning the complicated parts (the zorro
driver and platform driver conversion patches), I made this change on top of the 2
whole patch series.
A2091 part:
Quoted 1 line
From
946570304749544236059dcc65e85e9370e2d745Mon Sep 17 00:00:00 2001
From: Geert Uytterhoeven <[email protected]>
Date: Mon, 12 Apr 2010 21:55:03 +0200
Subject: [PATCH] m68k/scsi: a2091 - Do not use legacy Scsi_Host.base
--- drivers/scsi/a2091.c | 75 +++++++++++++++++++++++++++---------------------- 1 files changed, 41 insertions(+), 34 deletions(-)
drivers/scsi/a2091.c +26 -19
@@ -16,11 +16,16 @@#include "a2091.h" +struct a2091_hostdata { +struct WD33C93_hostdata wh; +struct a2091_scsiregs *regs; +}; +static irqreturn_t a2091_intr (int irq,void *data) {struct Scsi_Host *instance = data; -struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base); -unsigned int status = regs->ISTR; +struct a2091_hostdata *hdata =shost_priv (instance); +unsigned int status = hdata->regs->ISTR;unsigned long flags;if (!(status & (ISTR_INT_F |ISTR_INT_P )) || !(status &ISTR_INTS ))
@@ -35,38 +40,39 @@ static irqreturn_t a2091_intr(int irq, void *data)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) {struct Scsi_Host *instance = cmd->device->host; -struct WD33C93_hostdata *hdata =shost_priv (instance); -struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base); +struct a2091_hostdata *hdata =shost_priv (instance); +struct WD33C93_hostdata *wh = &hdata->wh; +struct a2091_scsiregs *regs = hdata->regs;unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);/* don't allow DMA if the physical address is bad */ if (addr &A2091_XFER_MASK ) { - hdata->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ; - hdata->dma_bounce_buffer =kmalloc (hdata->dma_bounce_len, -GFP_KERNEL ); + wh->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ; + wh->dma_bounce_buffer =kmalloc (wh->dma_bounce_len, +GFP_KERNEL );/* can't allocate memory; use PIO */ -if (!hdata->dma_bounce_buffer) { - hdata->dma_bounce_len =0 ; +if (!wh->dma_bounce_buffer) { + wh->dma_bounce_len =0 ;return 1 ; }/* get the physical address of the bounce buffer */ - addr =virt_to_bus (hdata->dma_bounce_buffer); + addr =virt_to_bus (wh->dma_bounce_buffer);/* the bounce buffer may not be in the first 16M of physmem */ if (addr &A2091_XFER_MASK ) {/* we could use chipmem... maybe later */ -kfree (hdata->dma_bounce_buffer); - hdata->dma_bounce_buffer =NULL ; - hdata->dma_bounce_len =0 ; +kfree (wh->dma_bounce_buffer); + wh->dma_bounce_buffer =NULL ; + wh->dma_bounce_len =0 ;return 1 ; }if (!dir_in) {/* copy to bounce buffer for a write */ -memcpy (hdata->dma_bounce_buffer, cmd->SCp.ptr, +memcpy (wh->dma_bounce_buffer, cmd->SCp.ptr, cmd->SCp.this_residual); } }
@@ -76,7 +82,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) cntr |=CNTR_DDIR ;/* remember direction */ - hdata->dma_dir = dir_in; + wh->dma_dir = dir_in; regs->CNTR = cntr;
@@ -100,20 +106,21 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { -struct WD33C93_hostdata *hdata =shost_priv (instance); -struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base); +struct a2091_hostdata *hdata =shost_priv (instance); +struct WD33C93_hostdata *wh = &hdata->wh; +struct a2091_scsiregs *regs = hdata->regs;/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ; -if (!hdata->dma_dir) +if (!wh->dma_dir) cntr |=CNTR_DDIR ;/* disable SCSI interrupts */ regs->CNTR = cntr;/* flush if we were reading */ -if (hdata->dma_dir) { +if (wh->dma_dir) { regs->FLUSH =1 ;while (!(regs->ISTR &ISTR_FE_FLG )) ;
@@ -129,13 +136,13 @@ static void dma_stop(struct Scsi_Host *instance,
struct scsi_cmnd *SCpnt,
regs->CNTR = CNTR_PDMD | CNTR_INTEN;
/* copy from a bounce buffer, if necessary */
- if (status && hdata->dma_bounce_buffer) {
- if (hdata->dma_dir)
- memcpy(SCpnt->SCp.ptr, hdata->dma_bounce_buffer,
+ if (status && wh->dma_bounce_buffer) {
+ if (wh->dma_dir)
+ memcpy(SCpnt->SCp.ptr, wh->dma_bounce_buffer,
SCpnt->SCp.this_residual);
- kfree(hdata->dma_bounce_buffer);
- hdata->dma_bounce_buffer = NULL;
- hdata->dma_bounce_len = 0;
+ kfree(wh->dma_bounce_buffer);
+ wh->dma_bounce_buffer = NULL;
+ wh->dma_bounce_len = 0;
}
}
@@ -178,32 +185,32 @@ static int __devinit a2091_probe(struct zorro_dev *z,
int error;
struct a2091_scsiregs *regs;
wd33c93_regs wdregs;
- struct WD33C93_hostdata *hdata;
+ struct a2091_hostdata *hdata;
if (!request_mem_region(z->resource.start, 256, "wd33c93"))
return -EBUSY;
instance = scsi_host_alloc(&a2091_scsi_template,
- sizeof(struct WD33C93_hostdata));
+ sizeof(struct a2091_hostdata));
if (!instance) {
error = -ENOMEM;
goto fail_alloc;
}
- instance->base = ZTWO_VADDR(z->resource.start);
instance->irq = IRQ_AMIGA_PORTS;
instance->unique_id = z->slotaddr;
- regs = (struct a2091_scsiregs *)(instance->base);
+ regs = (struct a2091_scsiregs *)ZTWO_VADDR(z->resource.start);
regs->DAWR = DAWR_A2091;
wdregs.SASR = ®s->SASR;
wdregs.SCMD = ®s->SCMD;
hdata = shost_priv(instance);
- hdata->no_sync = 0xff;
- hdata->fast = 0;
- hdata->dma_mode = CTRL_DMA;
+ hdata->wh.no_sync = 0xff;
+ hdata->wh.fast = 0;
+ hdata->wh.dma_mode = CTRL_DMA;
+ hdata->regs = regs;
wd33c93_init(instance, wdregs, dma_setup, dma_stop, WD33C93_FS_8_10); error = request_irq(IRQ_AMIGA_PORTS, a2091_intr, IRQF_SHARED,
@@ -234,9 +241,9 @@ fail_alloc:
static void __devexit a2091_remove(struct zorro_dev *z)
{
struct Scsi_Host *instance = zorro_get_drvdata(z);
- struct a2091_scsiregs *regs = (struct a2091_scsiregs *)(instance->base);
+ struct a2091_hostdata *hdata = shost_priv(instance);
- regs->CNTR = 0;
+ hdata->regs->CNTR = 0;
scsi_remove_host(instance);
free_irq(IRQ_AMIGA_PORTS, instance);
scsi_host_put(instance);
Signature · 14 lines
1.6.0.4
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
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 TorvaldsRe: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
Quoted 19 lines · Geert Uytterhoeven
Quoted 10 lines · Geert Uytterhoeven
Quoted 1 line · Christoph Hellwig
Instead of abusing the ScsiHost base field I'd prefer if you stick
I wouldn't call it abuse: it's a (MM)IO base address anyway. But I see that field was indeed marked `legacy crap' in an otherwise innocent looking
commit to split the SCSI include files... by you ;-)Quoted 1 line
a properly typed pointer into the device specific host data.
Quoted 7 lines
You mean
shost_priv()? That field already contains a pointer to the structWD33C93_hostdata.But I'll create a new
a2091_hostdatastruct that contains both theWD33C93_hostdataand thea2091_scsiregspointer (and do the same forgvp11.canda3000.c). It's a bit similar to whatsgiwd93.cdoes, albeit that one also uses the legacy base field.
Quoted 5 lines
As I want to avoid introducing bugs by respinning the complicated parts (the zorro
driver and platform driver conversion patches), I made this change on top of the 2
whole patch series.
GVP II part:
Quoted 1 line
From
60f48c686a1014cd3f5722a2180fb8b759a3a59cMon Sep 17 00:00:00 2001
From: Geert Uytterhoeven <[email protected]>
Date: Mon, 12 Apr 2010 21:55:25 +0200
Subject: [PATCH] m68k/scsi: gvp11 - Do not use legacy Scsi_Host.base
--- drivers/scsi/gvp11.c | 105 ++++++++++++++++++++++++++----------------------- 1 files changed, 56 insertions(+), 49 deletions(-)
drivers/scsi/gvp11.c +38 -31
@@ -18,11 +18,16 @@#define CHECK_WD33C93 +struct gvp11_hostdata { +struct WD33C93_hostdata wh; +struct gvp11_scsiregs *regs; +}; +static irqreturn_t gvp11_intr (int irq,void *data) {struct Scsi_Host *instance = data; -struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base); -unsigned int status = regs->CNTR; +struct gvp11_hostdata *hdata =shost_priv (instance); +unsigned int status = hdata->regs->CNTR;unsigned long flags;if (!(status &GVP11_DMAC_INT_PENDING ))
@@ -44,65 +49,66 @@ void gvp11_setup(char *str, int *ints)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) {struct Scsi_Host *instance = cmd->device->host; -struct WD33C93_hostdata *hdata =shost_priv (instance); -struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base); +struct gvp11_hostdata *hdata =shost_priv (instance); +struct WD33C93_hostdata *wh = &hdata->wh; +struct gvp11_scsiregs *regs = hdata->regs;unsigned short cntr =GVP11_DMAC_INT_ENABLE ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);int bank_mask;static int scsi_alloc_out_of_range =0 ;/* use bounce buffer if the physical address is bad */ -if (addr & hdata->dma_xfer_mask) { - hdata->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ; +if (addr & wh->dma_xfer_mask) { + wh->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ;if (!scsi_alloc_out_of_range) { - hdata->dma_bounce_buffer = -kmalloc (hdata->dma_bounce_len,GFP_KERNEL ); - hdata->dma_buffer_pool =BUF_SCSI_ALLOCED ; + wh->dma_bounce_buffer = +kmalloc (wh->dma_bounce_len,GFP_KERNEL ); + wh->dma_buffer_pool =BUF_SCSI_ALLOCED ; }if (scsi_alloc_out_of_range || - !hdata->dma_bounce_buffer) { - hdata->dma_bounce_buffer = -amiga_chip_alloc (hdata->dma_bounce_len, + !wh->dma_bounce_buffer) { + wh->dma_bounce_buffer = +amiga_chip_alloc (wh->dma_bounce_len,"GVP II SCSI Bounce Buffer" ); -if (!hdata->dma_bounce_buffer) { - hdata->dma_bounce_len =0 ; +if (!wh->dma_bounce_buffer) { + wh->dma_bounce_len =0 ;return 1 ; } - hdata->dma_buffer_pool =BUF_CHIP_ALLOCED ; + wh->dma_buffer_pool =BUF_CHIP_ALLOCED ; }/* check if the address of the bounce buffer is OK */ - addr =virt_to_bus (hdata->dma_bounce_buffer); + addr =virt_to_bus (wh->dma_bounce_buffer); -if (addr & hdata->dma_xfer_mask) { +if (addr & wh->dma_xfer_mask) {/* fall back to Chip RAM if address out of range */ -if (hdata->dma_buffer_pool ==BUF_SCSI_ALLOCED ) { -kfree (hdata->dma_bounce_buffer); +if (wh->dma_buffer_pool ==BUF_SCSI_ALLOCED ) { +kfree (wh->dma_bounce_buffer); scsi_alloc_out_of_range =1 ; }else { -amiga_chip_free (hdata->dma_bounce_buffer); +amiga_chip_free (wh->dma_bounce_buffer); } - hdata->dma_bounce_buffer = -amiga_chip_alloc (hdata->dma_bounce_len, + wh->dma_bounce_buffer = +amiga_chip_alloc (wh->dma_bounce_len,"GVP II SCSI Bounce Buffer" ); -if (!hdata->dma_bounce_buffer) { - hdata->dma_bounce_len =0 ; +if (!wh->dma_bounce_buffer) { + wh->dma_bounce_len =0 ;return 1 ; } - addr =virt_to_bus (hdata->dma_bounce_buffer); - hdata->dma_buffer_pool =BUF_CHIP_ALLOCED ; + addr =virt_to_bus (wh->dma_bounce_buffer); + wh->dma_buffer_pool =BUF_CHIP_ALLOCED ; }if (!dir_in) {/* copy to bounce buffer for a write */ -memcpy (hdata->dma_bounce_buffer, cmd->SCp.ptr, +memcpy (wh->dma_bounce_buffer, cmd->SCp.ptr, cmd->SCp.this_residual); } }
@@ -111,7 +117,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)if (!dir_in) cntr |=GVP11_DMAC_DIR_WRITE ; - hdata->dma_dir = dir_in; + wh->dma_dir = dir_in; regs->CNTR = cntr;/* setup DMA *physical* address */
@@ -125,7 +131,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)cache_push (addr, cmd->SCp.this_residual); } - bank_mask = (~hdata->dma_xfer_mask >>18 ) &0x01c0 ; + bank_mask = (~wh->dma_xfer_mask >>18 ) &0x01c0 ;if (bank_mask) regs->BANK = bank_mask & (addr >>18 );
@@ -139,8 +145,9 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { -struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base); -struct WD33C93_hostdata *hdata =shost_priv (instance); +struct gvp11_hostdata *hdata =shost_priv (instance); +struct WD33C93_hostdata *wh = &hdata->wh; +struct gvp11_scsiregs *regs = hdata->regs;/* stop DMA */ regs->SP_DMA =1 ;
@@ -148,18 +155,18 @@ static void dma_stop(struct Scsi_Host *instance,
struct scsi_cmnd *SCpnt,
regs->CNTR = GVP11_DMAC_INT_ENABLE;
/* copy from a bounce buffer, if necessary */
- if (status && hdata->dma_bounce_buffer) {
- if (hdata->dma_dir && SCpnt)
- memcpy(SCpnt->SCp.ptr, hdata->dma_bounce_buffer,
+ if (status && wh->dma_bounce_buffer) {
+ if (wh->dma_dir && SCpnt)
+ memcpy(SCpnt->SCp.ptr, wh->dma_bounce_buffer,
SCpnt->SCp.this_residual);
- if (hdata->dma_buffer_pool == BUF_SCSI_ALLOCED)
- kfree(hdata->dma_bounce_buffer);
+ if (wh->dma_buffer_pool == BUF_SCSI_ALLOCED)
+ kfree(wh->dma_bounce_buffer);
else
- amiga_chip_free(hdata->dma_bounce_buffer);
+ amiga_chip_free(wh->dma_bounce_buffer);
- hdata->dma_bounce_buffer = NULL;
- hdata->dma_bounce_len = 0;
+ wh->dma_bounce_buffer = NULL;
+ wh->dma_bounce_len = 0;
}
}
@@ -284,7 +291,7 @@ static int __devinit gvp11_probe(struct zorro_dev *z,
int error;
unsigned int epc;
unsigned int default_dma_xfer_mask;
- struct WD33C93_hostdata *hdata;
+ struct gvp11_hostdata *hdata;
struct gvp11_scsiregs *regs;
wd33c93_regs wdregs;
@@ -309,13 +316,12 @@ static int __devinit gvp11_probe(struct zorro_dev *z,
goto fail_check_or_alloc;
instance = scsi_host_alloc(&gvp11_scsi_template,
- sizeof(struct WD33C93_hostdata));
+ sizeof(struct gvp11_hostdata));
if (!instance) {
error = -ENOMEM;
goto fail_check_or_alloc;
}
- instance->base = (unsigned long)regs;
instance->irq = IRQ_AMIGA_PORTS;
instance->unique_id = z->slotaddr;
@@ -332,13 +338,14 @@ static int __devinit gvp11_probe(struct zorro_dev *z,
hdata = shost_priv(instance);
if (gvp11_xfer_mask)
- hdata->dma_xfer_mask = gvp11_xfer_mask;
+ hdata->wh.dma_xfer_mask = gvp11_xfer_mask;
else
- hdata->dma_xfer_mask = default_dma_xfer_mask;
+ hdata->wh.dma_xfer_mask = default_dma_xfer_mask;
- hdata->no_sync = 0xff;
- hdata->fast = 0;
- hdata->dma_mode = CTRL_DMA;
+ hdata->wh.no_sync = 0xff;
+ hdata->wh.fast = 0;
+ hdata->wh.dma_mode = CTRL_DMA;
+ hdata->regs = regs;
/*
* Check for 14MHz SCSI clock
@@ -375,9 +382,9 @@ fail_check_or_alloc:
static void __devexit gvp11_remove(struct zorro_dev *z) {
struct Scsi_Host *instance = zorro_get_drvdata(z);
- struct gvp11_scsiregs *regs = (struct gvp11_scsiregs *)(instance->base);
+ struct gvp11_hostdata *hdata = shost_priv(instance);
- regs->CNTR = 0;
+ hdata->regs->CNTR = 0;
scsi_remove_host(instance);
free_irq(IRQ_AMIGA_PORTS, instance);
scsi_host_put(instance);
Signature · 12 lines
1.6.0.4
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
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 TorvaldsRe: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
Quoted 20 lines · Geert Uytterhoeven
Quoted 19 lines · Geert Uytterhoeven
Quoted 17 lines · Geert Uytterhoeven
Quoted 1 line · Christoph Hellwig
Instead of abusing the ScsiHost base field I'd prefer if you stick
I wouldn't call it abuse: it's a (MM)IO base address anyway. But I see that field was indeed marked `legacy crap' in an otherwise innocent looking
commit to split the SCSI include files... by you ;-)Quoted 1 line
a properly typed pointer into the device specific host data.
You mean
shost_priv()? That field already contains a pointer to the structWD33C93_hostdata.But I'll create a new
a2091_hostdatastruct that contains both theWD33C93_hostdataand thea2091_scsiregspointer (and do the same forgvp11.canda3000.c). It's a bit similar to whatsgiwd93.cdoes, albeit that one also uses the legacy base field.
Quoted 5 lines
Quoted 5 lines
As I want to avoid introducing bugs by respinning the complicated parts (the zorro
driver and platform driver conversion patches), I made this change on top of the 2
whole patch series.
A3000 part (on top of today's Amiga platform conversion patch series)
Quoted 1 line
From
6dca8f7534f9db10613b7034b895c0f56a433d07Mon Sep 17 00:00:00 2001
From: Geert Uytterhoeven <[email protected]>
Date: Mon, 12 Apr 2010 21:55:15 +0200
Subject: [PATCH] m68k/scsi: a3000 - Do not use legacy Scsi_Host.base
--- drivers/scsi/a3000.c | 76 +++++++++++++++++++++++++++----------------------- 1 files changed, 41 insertions(+), 35 deletions(-)
drivers/scsi/a3000.c +23 -16
@@ -17,11 +17,16 @@#include "a3000.h" +struct a3000_hostdata { +struct WD33C93_hostdata wh; +struct a3000_scsiregs *regs; +}; +static irqreturn_t a3000_intr (int irq,void *data) {struct Scsi_Host *instance = data; -struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base); -unsigned int status = regs->ISTR; +struct a3000_hostdata *hdata =shost_priv (instance); +unsigned int status = hdata->regs->ISTR;unsigned long flags;if (!(status &ISTR_INT_P ))
@@ -39,8 +44,9 @@ static irqreturn_t a3000_intr(int irq, void *data)static int dma_setup (struct scsi_cmnd *cmd,int dir_in) {struct Scsi_Host *instance = cmd->device->host; -struct WD33C93_hostdata *hdata =shost_priv (instance); -struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base); +struct a3000_hostdata *hdata =shost_priv (instance); +struct WD33C93_hostdata *wh = &hdata->wh; +struct a3000_scsiregs *regs = hdata->regs;unsigned short cntr =CNTR_PDMD |CNTR_INTEN ;unsigned long addr =virt_to_bus (cmd->SCp.ptr);
@@ -51,23 +57,23 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)* buffer */ if (addr &A3000_XFER_MASK ) { - hdata->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ; - hdata->dma_bounce_buffer =kmalloc (hdata->dma_bounce_len, -GFP_KERNEL ); + wh->dma_bounce_len = (cmd->SCp.this_residual +511 ) & ~0x1ff ; + wh->dma_bounce_buffer =kmalloc (wh->dma_bounce_len, +GFP_KERNEL );/* can't allocate memory; use PIO */ -if (!hdata->dma_bounce_buffer) { - hdata->dma_bounce_len =0 ; +if (!wh->dma_bounce_buffer) { + wh->dma_bounce_len =0 ;return 1 ; }if (!dir_in) {/* copy to bounce buffer for a write */ -memcpy (hdata->dma_bounce_buffer, cmd->SCp.ptr, +memcpy (wh->dma_bounce_buffer, cmd->SCp.ptr, cmd->SCp.this_residual); } - addr =virt_to_bus (hdata->dma_bounce_buffer); + addr =virt_to_bus (wh->dma_bounce_buffer); }/* setup dma direction */
@@ -75,7 +81,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in) cntr |=CNTR_DDIR ;/* remember direction */ - hdata->dma_dir = dir_in; + wh->dma_dir = dir_in; regs->CNTR = cntr;
@@ -102,20 +108,21 @@ static int dma_setup(struct scsi_cmnd *cmd, int dir_in)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { -struct WD33C93_hostdata *hdata =shost_priv (instance); -struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base); +struct a3000_hostdata *hdata =shost_priv (instance); +struct WD33C93_hostdata *wh = &hdata->wh; +struct a3000_scsiregs *regs = hdata->regs;/* disable SCSI interrupts */ unsigned short cntr =CNTR_PDMD ; -if (!hdata->dma_dir) +if (!wh->dma_dir) cntr |=CNTR_DDIR ; regs->CNTR = cntr;mb ();/* make sure CNTR is updated before next IO */ /* flush if we were reading */ -if (hdata->dma_dir) { +if (wh->dma_dir) { regs->FLUSH =1 ;mb ();/* don't allow prefetch */ while (!(regs->ISTR &ISTR_FE_FLG ))
@@ -138,19 +145,18 @@ static void dma_stop(struct Scsi_Host *instance,
struct scsi_cmnd *SCpnt,
mb(); /* make sure CNTR is updated before next IO */
/* copy from a bounce buffer, if necessary */
- if (status && hdata->dma_bounce_buffer) {
+ if (status && wh->dma_bounce_buffer) {
if (SCpnt) {
- if (hdata->dma_dir && SCpnt)
- memcpy(SCpnt->SCp.ptr,
- hdata->dma_bounce_buffer,
+ if (wh->dma_dir && SCpnt)
+ memcpy(SCpnt->SCp.ptr, wh->dma_bounce_buffer,
SCpnt->SCp.this_residual);
- kfree(hdata->dma_bounce_buffer);
- hdata->dma_bounce_buffer = NULL;
- hdata->dma_bounce_len = 0;
+ kfree(wh->dma_bounce_buffer);
+ wh->dma_bounce_buffer = NULL;
+ wh->dma_bounce_len = 0;
} else {
- kfree(hdata->dma_bounce_buffer);
- hdata->dma_bounce_buffer = NULL;
- hdata->dma_bounce_len = 0;
+ kfree(wh->dma_bounce_buffer);
+ wh->dma_bounce_buffer = NULL;
+ wh->dma_bounce_len = 0;
}
}
}
@@ -194,7 +200,7 @@ static int __init amiga_a3000_scsi_probe(struct platform_device *pdev)
int error;
struct a3000_scsiregs *regs;
wd33c93_regs wdregs;
- struct WD33C93_hostdata *hdata;
+ struct a3000_hostdata *hdata;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res)
@@ -204,25 +210,25 @@ static int __init amiga_a3000_scsi_probe(struct platform_device *pdev)
return -EBUSY;
instance = scsi_host_alloc(&amiga_a3000_scsi_template,
- sizeof(struct WD33C93_hostdata));
+ sizeof(struct a3000_hostdata));
if (!instance) {
error = -ENOMEM;
goto fail_alloc;
}
- instance->base = ZTWO_VADDR(res->start);
instance->irq = IRQ_AMIGA_PORTS;
- regs = (struct a3000_scsiregs *)(instance->base);
+ regs = (struct a3000_scsiregs *)ZTWO_VADDR(res->start);
regs->DAWR = DAWR_A3000;
wdregs.SASR = ®s->SASR;
wdregs.SCMD = ®s->SCMD;
hdata = shost_priv(instance);
- hdata->no_sync = 0xff;
- hdata->fast = 0;
- hdata->dma_mode = CTRL_DMA;
+ hdata->wh.no_sync = 0xff;
+ hdata->wh.fast = 0;
+ hdata->wh.dma_mode = CTRL_DMA;
+ hdata->regs = regs;
wd33c93_init(instance, wdregs, dma_setup, dma_stop, WD33C93_FS_12_15); error = request_irq(IRQ_AMIGA_PORTS, a3000_intr, IRQF_SHARED,
@@ -253,10 +259,10 @@ fail_alloc:
static int __exit amiga_a3000_scsi_remove(struct platform_device *pdev) {
struct Scsi_Host *instance = platform_get_drvdata(pdev);
- struct a3000_scsiregs *regs = (struct a3000_scsiregs *)(instance->base);
+ struct a3000_hostdata *hdata = shost_priv(instance);
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- regs->CNTR = 0;
+ hdata->regs->CNTR = 0;
scsi_remove_host(instance);
free_irq(IRQ_AMIGA_PORTS, instance);
scsi_host_put(instance);
Signature · 12 lines
1.6.0.4
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
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 TorvaldsPATCH 1/1 SCSI: sgiwd93: remove use of legacy base field of host struct
---
Build tested only - I don't have a test system at hand atm.
drivers/scsi/sgiwd93.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-)
drivers/scsi/sgiwd93.c +4 -6
@@ -36,6 +36,7 @@ struct ip22_hostdata {dma_addr_t dma;void *cpu;struct device *dev; +struct hpc3_scsiregs *hregs; };#define host_to_hostdata (host) ((struct ip22_hostdata *)((host)->hostdata))
@@ -103,8 +104,7 @@ void fill_hpc_entries(struct ip22_hostdata *hd, struct scsi_cmnd *cmd, int din)static int dma_setup (struct scsi_cmnd *cmd,int datainp) {struct ip22_hostdata *hdata =host_to_hostdata (cmd->device->host); -struct hpc3_scsiregs *hregs = - (struct hpc3_scsiregs *) cmd->device->host->base; +struct hpc3_scsiregs *hregs = hdata->hregs;pr_debug ("dma_setup: datainp<%d> hcp<%p> " , datainp, hdata->cpu);
@@ -137,7 +137,7 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, int status) {struct ip22_hostdata *hdata =host_to_hostdata (instance); -struct hpc3_scsiregs *hregs; +struct hpc3_scsiregs *hregs = hdata->hregs;if (!SCpnt)return ;
@@ -145,8 +145,6 @@ static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt,if (SCpnt->SCp.ptr ==NULL || SCpnt->SCp.this_residual ==0 )return ; - hregs = (struct hpc3_scsiregs *) SCpnt->device->host->base; -pr_debug ("dma_stop: status<%d> " , status);/* First stop the HPC and flush it's FIFO. */
@@ -244,10 +242,10 @@ static int __devinit sgiwd93_probe(struct platform_device *pdev) goto out; } - host->base = (unsigned long ) hregs; host->irq = irq; hdata =host_to_hostdata (host); + hdata->hregs = hregs; hdata->dev = &pdev->dev; hdata->cpu =dma_alloc_noncoherent (&pdev->dev,HPC_DMA_SIZE , &hdata->dma,GFP_KERNEL );
PATCH 1/1 SCSI: sgiwd93: Convert to use shost_priv()
The driver had its own similar macro and still one open-coded reference to ->hostdata. Use shost_priv() everywhere for consistency.
---
Build tested only - I don't have a test system at hand atm.
The previous patch was missing a Signed-off-by: line, feel free to add it.
drivers/scsi/sgiwd93.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-)
drivers/scsi/sgiwd93.c +4 -6
@@ -39,8 +39,6 @@ struct ip22_hostdata {struct hpc3_scsiregs *hregs; }; -#define host_to_hostdata (host) ((struct ip22_hostdata *)((host)->hostdata)) -struct hpc_chunk {struct hpc_dma_desc desc;u32 _padding;/* align to quadword boundary */
@@ -103,7 +101,7 @@ void fill_hpc_entries(struct ip22_hostdata *hd, struct scsi_cmnd *cmd, int din)static int dma_setup (struct scsi_cmnd *cmd,int datainp) { -struct ip22_hostdata *hdata =host_to_hostdata (cmd->device->host); +struct ip22_hostdata *hdata =shost_priv (cmd->device->host);struct hpc3_scsiregs *hregs = hdata->hregs;pr_debug ("dma_setup: datainp<%d> hcp<%p> " , datainp, hdata->cpu);
@@ -136,7 +134,7 @@ static int dma_setup(struct scsi_cmnd *cmd, int datainp)static void dma_stop (struct Scsi_Host *instance,struct scsi_cmnd *SCpnt,int status) { -struct ip22_hostdata *hdata =host_to_hostdata (instance); +struct ip22_hostdata *hdata =shost_priv (instance);struct hpc3_scsiregs *hregs = hdata->hregs;if (!SCpnt)
@@ -244,7 +242,7 @@ static int __devinit sgiwd93_probe(struct platform_device *pdev) host->irq = irq; - hdata =host_to_hostdata (host); + hdata =shost_priv (host); hdata->hregs = hregs; hdata->dev = &pdev->dev; hdata->cpu = dma_alloc_noncoherent(&pdev->dev, HPC_DMA_SIZE,
@@ -298,7 +296,7 @@ out: static int __exit sgiwd93_remove(struct platform_device *pdev) {struct Scsi_Host *host =platform_get_drvdata (pdev); -struct ip22_hostdata *hdata = (struct ip22_hostdata *) host->hostdata; +struct ip22_hostdata *hdata =shost_priv (host);struct sgiwd93_platform_data *pd = pdev->dev.platform_data;scsi_remove_host (host);
Re: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
In reply to Geert UytterhoevenQuoted 19 lines · Geert Uytterhoeven
Quoted 10 lines · Geert Uytterhoeven
Quoted 1 line · Christoph Hellwig
Instead of abusing the ScsiHost base field I'd prefer if you stick
I wouldn't call it abuse: it's a (MM)IO base address anyway. But I see that field was indeed marked `legacy crap' in an otherwise innocent looking
commit to split the SCSI include files... by you ;-)Quoted 1 line
a properly typed pointer into the device specific host data.
Quoted 7 lines
You mean
shost_priv()? That field already contains a pointer to the structWD33C93_hostdata.But I'll create a new
a2091_hostdatastruct that contains both theWD33C93_hostdataand thea2091_scsiregspointer (and do the same forgvp11.canda3000.c). It's a bit similar to whatsgiwd93.cdoes, albeit that one also uses the legacy base field.
Quoted 7 lines
As I want to avoid introducing bugs by respinning the complicated parts (the zorro
driver and platform driver conversion patches), I made this change on top of the 2
whole patch series.A2091 part:
I've applied up to 10/21 which should make it easier, but this patch refuses to apply:
patch: **** malformed patch at line 230: struct scsi_cmnd *SCpnt,
could you respin the remaining patches so they'll actually apply?
Thanks,
James
Re: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
Quoted 26 lines · James Bottomley
Quoted 25 lines · Geert Uytterhoeven
Quoted 10 lines · Geert Uytterhoeven
Quoted 1 line · Christoph Hellwig
Instead of abusing the ScsiHost base field I'd prefer if you stick
I wouldn't call it abuse: it's a (MM)IO base address anyway. But I see that field was indeed marked `legacy crap' in an otherwise innocent looking
commit to split the SCSI include files... by you ;-)Quoted 1 line
a properly typed pointer into the device specific host data.
Quoted 7 lines
You mean
shost_priv()? That field already contains a pointer to the structWD33C93_hostdata.But I'll create a new
a2091_hostdatastruct that contains both theWD33C93_hostdataand thea2091_scsiregspointer (and do the same forgvp11.canda3000.c). It's a bit similar to whatsgiwd93.cdoes, albeit that one also uses the legacy base field.As I want to avoid introducing bugs by respinning the complicated parts (the zorro
driver and platform driver conversion patches), I made this change on top of the 2
whole patch series.
Quoted 3 lines
Quoted 1 line
A2091 part:
I've applied up to 10/21 which should make it easier, but this patch
Thanks a lot! (I saw they showed up in linux-next, which is good!)
Quoted 3 lines
refuses to apply:
patch: **** malformed patch at line 230: struct
scsi_cmnd*SCpnt,
Bummer. I sent those manually from gmail using copy-'n-paste from gedit, which _used_
to work fine w.r.t. whitespace and line breaks. Oh well, they broke it :-(
Quoted 1 line
could you respin the remaining patches so they'll actually apply?
The remaining 11-21/21 from the original series had been sent using git-send-email, so they should apply fine.
I'll resend the other 3 using git-send-email, too. The first 2 should apply fine on top
of the series of 21.
The third won't apply as it depends on the Amiga platform rework, but we can sort that out later. Or I can just take care of it myself, if you approve?
Thanks again!
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
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
Re: [PATCH 10/21] m68k/scsi: a2091 - Kill ugly DMA() macro
Quoted 43 lines · Geert Uytterhoeven
Quoted 26 lines · James Bottomley
Quoted 25 lines · Geert Uytterhoeven
Quoted 10 lines · Geert Uytterhoeven
Quoted 1 line · Christoph Hellwig
Instead of abusing the ScsiHost base field I'd prefer if you stick
I wouldn't call it abuse: it's a (MM)IO base address anyway. But I see that field was indeed marked `legacy crap' in an otherwise innocent looking
commit to split the SCSI include files... by you ;-)Quoted 1 line
a properly typed pointer into the device specific host data.
Quoted 7 lines
You mean
shost_priv()? That field already contains a pointer to the structWD33C93_hostdata.But I'll create a new
a2091_hostdatastruct that contains both theWD33C93_hostdataand thea2091_scsiregspointer (and do the same forgvp11.canda3000.c). It's a bit similar to whatsgiwd93.cdoes, albeit that one also uses the legacy base field.As I want to avoid introducing bugs by respinning the complicated parts (the zorro
driver and platform driver conversion patches), I made this change on top of the 2
whole patch series.Quoted 3 lines
Quoted 1 line
A2091 part:
I've applied up to 10/21 which should make it easier, but this patch
Thanks a lot! (I saw they showed up in linux-next, which is good!)
Quoted 3 lines
refuses to apply:
patch: **** malformed patch at line 230: struct
scsi_cmnd*SCpnt,Bummer. I sent those manually from gmail using copy-'n-paste from gedit, which _used_
to work fine w.r.t. whitespace and line breaks. Oh well, they broke it :-(Quoted 1 line
could you respin the remaining patches so they'll actually apply?
Quoted 8 lines
The remaining 11-21/21 from the original series had been sent using git-send-email, so they should apply fine.
I'll resend the other 3 using git-send-email, too. The first 2 should apply fine on top
of the series of 21.
The third won't apply as it depends on the Amiga platform rework, but we can sort that out later. Or I can just take care of it myself, if you approve?
For your convenience, I also put all of them (except for the third one) in a for-scsi branch
(you already applied the first 10 commits on that branch):
The following changes since commit cea0d767c29669bf89f86e4aee46ef462d2ebae8:
Linus Torvalds (1):
Merge branch 'hwmon-for-linus' ofgit://git.kernel.org/.../jdelvare/staging
are available in the git repository at:
master.kernel.org:/pub/scm/linux/kernel/git/geert/linux-m68k.git for-scsi
Geert Uytterhoeven (23):
scsi: wd33c93 - Kill empty wd33c93_release() m68k/scsi: a2091 - Reindentation
m68k/scsi: gvp11 - Reindentation
m68k/scsi: mvme147 - Reindentation
m68k/scsi: a3000 - Reindentation
m68k/scsi: a2091 - Use shost_priv() and kill ugly HDATA() macro m68k/scsi: gvp11 - Use shost_priv() and kill ugly HDATA() macro m68k/scsi: mvme147 - Use shost_priv() and kill ugly HDATA() macro m68k/scsi: a3000 - Use shost_priv() and kill ugly HDATA() macro m68k/scsi: a2091 - Kill ugly DMA() macro
m68k/scsi: gvp11 - Kill ugly DMA() macro
m68k/scsi: a3000 - Kill ugly DMA() macro
m68k/scsi: mvme147 - Kill static global mvme147_host m68k/scsi: a3000 - Kill static global a3000_host m68k/scsi: gvp11 - Extract check_wd33c93()
m68k/scsi: a2091 - Kill a2091_scsiregs typedef m68k/scsi: gvp11 - Kill gvp11_scsiregs typedef m68k/scsi: a3000 - Kill a3000_scsiregs typedef m68k/scsi: mvme147 - Kill obsolete HOSTS_C logic
m68k: amiga - A2091/A590 SCSI zorro_driver conversion
m68k: amiga - GVP Series II SCSI zorro_driver conversion m68k/scsi: a2091 - Do not use legacy Scsi_Host.base m68k/scsi: gvp11 - Do not use legacy Scsi_Host.base
drivers/scsi/a2091.c | 398 ++++++++++++++++++--------------- drivers/scsi/a2091.h | 46 ++-- drivers/scsi/a3000.c | 301 +++++++++++++------------ drivers/scsi/a3000.h | 50 ++-- drivers/scsi/gvp11.c | 582 +++++++++++++++++++++++++----------------------- drivers/scsi/gvp11.h | 49 ++--- drivers/scsi/mvme147.c | 178 ++++++++-------- drivers/scsi/mvme147.h | 4 +- drivers/scsi/wd33c93.c | 6 - drivers/scsi/wd33c93.h | 1 - 10 files changed, 836 insertions(+), 779 deletions(-)
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
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