• Home
  • Raw
  • Download

Lines Matching +full:module +full:- +full:instance

1 // SPDX-License-Identifier: GPL-2.0-only
10 #include <linux/module.h>
28 struct Scsi_Host *instance = data; in a3000_intr() local
29 struct a3000_hostdata *hdata = shost_priv(instance); in a3000_intr()
30 unsigned int status = hdata->regs->ISTR; in a3000_intr()
36 spin_lock_irqsave(instance->host_lock, flags); in a3000_intr()
37 wd33c93_intr(instance); in a3000_intr()
38 spin_unlock_irqrestore(instance->host_lock, flags); in a3000_intr()
41 pr_warn("Non-serviced A3000 SCSI-interrupt? ISTR = %02x\n", status); in a3000_intr()
47 struct Scsi_Host *instance = cmd->device->host; in dma_setup() local
48 struct a3000_hostdata *hdata = shost_priv(instance); in dma_setup()
49 struct WD33C93_hostdata *wh = &hdata->wh; in dma_setup()
50 struct a3000_scsiregs *regs = hdata->regs; in dma_setup()
52 unsigned long addr = virt_to_bus(cmd->SCp.ptr); in dma_setup()
61 wh->dma_bounce_len = (cmd->SCp.this_residual + 511) & ~0x1ff; in dma_setup()
62 wh->dma_bounce_buffer = kmalloc(wh->dma_bounce_len, in dma_setup()
66 if (!wh->dma_bounce_buffer) { in dma_setup()
67 wh->dma_bounce_len = 0; in dma_setup()
73 memcpy(wh->dma_bounce_buffer, cmd->SCp.ptr, in dma_setup()
74 cmd->SCp.this_residual); in dma_setup()
77 addr = virt_to_bus(wh->dma_bounce_buffer); in dma_setup()
85 wh->dma_dir = dir_in; in dma_setup()
87 regs->CNTR = cntr; in dma_setup()
90 regs->ACR = addr; in dma_setup()
94 cache_clear(addr, cmd->SCp.this_residual); in dma_setup()
97 cache_push(addr, cmd->SCp.this_residual); in dma_setup()
102 regs->ST_DMA = 1; in dma_setup()
109 static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, in dma_stop() argument
112 struct a3000_hostdata *hdata = shost_priv(instance); in dma_stop()
113 struct WD33C93_hostdata *wh = &hdata->wh; in dma_stop()
114 struct a3000_scsiregs *regs = hdata->regs; in dma_stop()
119 if (!wh->dma_dir) in dma_stop()
122 regs->CNTR = cntr; in dma_stop()
126 if (wh->dma_dir) { in dma_stop()
127 regs->FLUSH = 1; in dma_stop()
129 while (!(regs->ISTR & ISTR_FE_FLG)) in dma_stop()
138 regs->CINT = 1; in dma_stop()
141 regs->SP_DMA = 1; in dma_stop()
145 regs->CNTR = CNTR_PDMD | CNTR_INTEN; in dma_stop()
149 if (status && wh->dma_bounce_buffer) { in dma_stop()
151 if (wh->dma_dir && SCpnt) in dma_stop()
152 memcpy(SCpnt->SCp.ptr, wh->dma_bounce_buffer, in dma_stop()
153 SCpnt->SCp.this_residual); in dma_stop()
154 kfree(wh->dma_bounce_buffer); in dma_stop()
155 wh->dma_bounce_buffer = NULL; in dma_stop()
156 wh->dma_bounce_len = 0; in dma_stop()
158 kfree(wh->dma_bounce_buffer); in dma_stop()
159 wh->dma_bounce_buffer = NULL; in dma_stop()
160 wh->dma_bounce_len = 0; in dma_stop()
166 .module = THIS_MODULE,
167 .name = "Amiga 3000 built-in SCSI",
183 struct Scsi_Host *instance; in amiga_a3000_scsi_probe() local
191 return -ENODEV; in amiga_a3000_scsi_probe()
193 if (!request_mem_region(res->start, resource_size(res), "wd33c93")) in amiga_a3000_scsi_probe()
194 return -EBUSY; in amiga_a3000_scsi_probe()
196 instance = scsi_host_alloc(&amiga_a3000_scsi_template, in amiga_a3000_scsi_probe()
198 if (!instance) { in amiga_a3000_scsi_probe()
199 error = -ENOMEM; in amiga_a3000_scsi_probe()
203 instance->irq = IRQ_AMIGA_PORTS; in amiga_a3000_scsi_probe()
205 regs = ZTWO_VADDR(res->start); in amiga_a3000_scsi_probe()
206 regs->DAWR = DAWR_A3000; in amiga_a3000_scsi_probe()
208 wdregs.SASR = &regs->SASR; in amiga_a3000_scsi_probe()
209 wdregs.SCMD = &regs->SCMD; in amiga_a3000_scsi_probe()
211 hdata = shost_priv(instance); in amiga_a3000_scsi_probe()
212 hdata->wh.no_sync = 0xff; in amiga_a3000_scsi_probe()
213 hdata->wh.fast = 0; in amiga_a3000_scsi_probe()
214 hdata->wh.dma_mode = CTRL_DMA; in amiga_a3000_scsi_probe()
215 hdata->regs = regs; in amiga_a3000_scsi_probe()
217 wd33c93_init(instance, wdregs, dma_setup, dma_stop, WD33C93_FS_12_15); in amiga_a3000_scsi_probe()
219 "A3000 SCSI", instance); in amiga_a3000_scsi_probe()
223 regs->CNTR = CNTR_PDMD | CNTR_INTEN; in amiga_a3000_scsi_probe()
225 error = scsi_add_host(instance, NULL); in amiga_a3000_scsi_probe()
229 platform_set_drvdata(pdev, instance); in amiga_a3000_scsi_probe()
231 scsi_scan_host(instance); in amiga_a3000_scsi_probe()
235 free_irq(IRQ_AMIGA_PORTS, instance); in amiga_a3000_scsi_probe()
237 scsi_host_put(instance); in amiga_a3000_scsi_probe()
239 release_mem_region(res->start, resource_size(res)); in amiga_a3000_scsi_probe()
245 struct Scsi_Host *instance = platform_get_drvdata(pdev); in amiga_a3000_scsi_remove() local
246 struct a3000_hostdata *hdata = shost_priv(instance); in amiga_a3000_scsi_remove()
249 hdata->regs->CNTR = 0; in amiga_a3000_scsi_remove()
250 scsi_remove_host(instance); in amiga_a3000_scsi_remove()
251 free_irq(IRQ_AMIGA_PORTS, instance); in amiga_a3000_scsi_remove()
252 scsi_host_put(instance); in amiga_a3000_scsi_remove()
253 release_mem_region(res->start, resource_size(res)); in amiga_a3000_scsi_remove()
260 .name = "amiga-a3000-scsi",
266 MODULE_DESCRIPTION("Amiga 3000 built-in SCSI");
268 MODULE_ALIAS("platform:amiga-a3000-scsi");