• Home
  • Raw
  • Download

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

1 // SPDX-License-Identifier: GPL-2.0-only
9 #include <linux/module.h>
27 struct Scsi_Host *instance = data; in a2091_intr() local
28 struct a2091_hostdata *hdata = shost_priv(instance); in a2091_intr()
29 unsigned int status = hdata->regs->ISTR; in a2091_intr()
35 spin_lock_irqsave(instance->host_lock, flags); in a2091_intr()
36 wd33c93_intr(instance); in a2091_intr()
37 spin_unlock_irqrestore(instance->host_lock, flags); in a2091_intr()
43 struct Scsi_Host *instance = cmd->device->host; in dma_setup() local
44 struct a2091_hostdata *hdata = shost_priv(instance); in dma_setup()
45 struct WD33C93_hostdata *wh = &hdata->wh; in dma_setup()
46 struct a2091_scsiregs *regs = hdata->regs; in dma_setup()
48 unsigned long addr = virt_to_bus(cmd->SCp.ptr); in dma_setup()
52 wh->dma_bounce_len = (cmd->SCp.this_residual + 511) & ~0x1ff; in dma_setup()
53 wh->dma_bounce_buffer = kmalloc(wh->dma_bounce_len, in dma_setup()
57 if (!wh->dma_bounce_buffer) { in dma_setup()
58 wh->dma_bounce_len = 0; in dma_setup()
63 addr = virt_to_bus(wh->dma_bounce_buffer); in dma_setup()
68 kfree(wh->dma_bounce_buffer); in dma_setup()
69 wh->dma_bounce_buffer = NULL; in dma_setup()
70 wh->dma_bounce_len = 0; in dma_setup()
76 memcpy(wh->dma_bounce_buffer, cmd->SCp.ptr, in dma_setup()
77 cmd->SCp.this_residual); in dma_setup()
86 wh->dma_dir = dir_in; in dma_setup()
88 regs->CNTR = cntr; in dma_setup()
91 regs->ACR = addr; in dma_setup()
95 cache_clear(addr, cmd->SCp.this_residual); in dma_setup()
98 cache_push(addr, cmd->SCp.this_residual); in dma_setup()
101 regs->ST_DMA = 1; in dma_setup()
107 static void dma_stop(struct Scsi_Host *instance, struct scsi_cmnd *SCpnt, in dma_stop() argument
110 struct a2091_hostdata *hdata = shost_priv(instance); in dma_stop()
111 struct WD33C93_hostdata *wh = &hdata->wh; in dma_stop()
112 struct a2091_scsiregs *regs = hdata->regs; in dma_stop()
117 if (!wh->dma_dir) in dma_stop()
121 regs->CNTR = cntr; in dma_stop()
124 if (wh->dma_dir) { in dma_stop()
125 regs->FLUSH = 1; in dma_stop()
126 while (!(regs->ISTR & ISTR_FE_FLG)) in dma_stop()
131 regs->CINT = 1; in dma_stop()
134 regs->SP_DMA = 1; in dma_stop()
137 regs->CNTR = CNTR_PDMD | CNTR_INTEN; in dma_stop()
140 if (status && wh->dma_bounce_buffer) { in dma_stop()
141 if (wh->dma_dir) in dma_stop()
142 memcpy(SCpnt->SCp.ptr, wh->dma_bounce_buffer, in dma_stop()
143 SCpnt->SCp.this_residual); in dma_stop()
144 kfree(wh->dma_bounce_buffer); in dma_stop()
145 wh->dma_bounce_buffer = NULL; in dma_stop()
146 wh->dma_bounce_len = 0; in dma_stop()
151 .module = THIS_MODULE,
163 .dma_boundary = PAGE_SIZE - 1,
168 struct Scsi_Host *instance; in a2091_probe() local
174 if (!request_mem_region(z->resource.start, 256, "wd33c93")) in a2091_probe()
175 return -EBUSY; in a2091_probe()
177 instance = scsi_host_alloc(&a2091_scsi_template, in a2091_probe()
179 if (!instance) { in a2091_probe()
180 error = -ENOMEM; in a2091_probe()
184 instance->irq = IRQ_AMIGA_PORTS; in a2091_probe()
185 instance->unique_id = z->slotaddr; in a2091_probe()
187 regs = ZTWO_VADDR(z->resource.start); in a2091_probe()
188 regs->DAWR = DAWR_A2091; in a2091_probe()
190 wdregs.SASR = &regs->SASR; in a2091_probe()
191 wdregs.SCMD = &regs->SCMD; in a2091_probe()
193 hdata = shost_priv(instance); in a2091_probe()
194 hdata->wh.no_sync = 0xff; in a2091_probe()
195 hdata->wh.fast = 0; in a2091_probe()
196 hdata->wh.dma_mode = CTRL_DMA; in a2091_probe()
197 hdata->regs = regs; in a2091_probe()
199 wd33c93_init(instance, wdregs, dma_setup, dma_stop, WD33C93_FS_8_10); in a2091_probe()
201 "A2091 SCSI", instance); in a2091_probe()
205 regs->CNTR = CNTR_PDMD | CNTR_INTEN; in a2091_probe()
207 error = scsi_add_host(instance, NULL); in a2091_probe()
211 zorro_set_drvdata(z, instance); in a2091_probe()
213 scsi_scan_host(instance); in a2091_probe()
217 free_irq(IRQ_AMIGA_PORTS, instance); in a2091_probe()
219 scsi_host_put(instance); in a2091_probe()
221 release_mem_region(z->resource.start, 256); in a2091_probe()
227 struct Scsi_Host *instance = zorro_get_drvdata(z); in a2091_remove() local
228 struct a2091_hostdata *hdata = shost_priv(instance); in a2091_remove()
230 hdata->regs->CNTR = 0; in a2091_remove()
231 scsi_remove_host(instance); in a2091_remove()
232 free_irq(IRQ_AMIGA_PORTS, instance); in a2091_remove()
233 scsi_host_put(instance); in a2091_remove()
234 release_mem_region(z->resource.start, 256); in a2091_remove()