Lines Matching full:ctlr

98 	struct mvs_controller *ctlr = device_get_softc(dev);  in mvs_attach()  local
104 ctlr->dev = dev; in mvs_attach()
110 ctlr->channels = mvs_ids[i].ports; in mvs_attach()
111 ctlr->quirks = mvs_ids[i].quirks; in mvs_attach()
112 ctlr->ccc = 0; in mvs_attach()
114 device_get_unit(dev), "ccc", &ctlr->ccc); in mvs_attach()
115 ctlr->cccc = 8; in mvs_attach()
117 device_get_unit(dev), "cccc", &ctlr->cccc); in mvs_attach()
118 if (ctlr->ccc == 0 || ctlr->cccc == 0) { in mvs_attach()
119 ctlr->ccc = 0; in mvs_attach()
120 ctlr->cccc = 0; in mvs_attach()
122 if (ctlr->ccc > 100000) in mvs_attach()
123 ctlr->ccc = 100000; in mvs_attach()
126 ((ctlr->quirks & MVS_Q_GENI) ? "I" : in mvs_attach()
127 ((ctlr->quirks & MVS_Q_GENII) ? "II" : "IIe")), in mvs_attach()
128 ctlr->channels, in mvs_attach()
129 ((ctlr->quirks & MVS_Q_GENI) ? "1.5" : "3"), in mvs_attach()
130 ((ctlr->quirks & MVS_Q_GENI) ? in mvs_attach()
132 ((ctlr->quirks & MVS_Q_GENIIE) ? in mvs_attach()
134 mtx_init(&ctlr->mtx, "MVS controller lock", NULL, MTX_DEF); in mvs_attach()
136 ctlr->r_rid = PCIR_BAR(0); in mvs_attach()
137 if (!(ctlr->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in mvs_attach()
138 &ctlr->r_rid, RF_ACTIVE))) in mvs_attach()
141 ctlr->sc_iomem.rm_start = rman_get_start(ctlr->r_mem); in mvs_attach()
142 ctlr->sc_iomem.rm_end = rman_get_end(ctlr->r_mem); in mvs_attach()
143 ctlr->sc_iomem.rm_type = RMAN_ARRAY; in mvs_attach()
144 ctlr->sc_iomem.rm_descr = "I/O memory addresses"; in mvs_attach()
145 if ((error = rman_init(&ctlr->sc_iomem)) != 0) { in mvs_attach()
146 bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem); in mvs_attach()
149 if ((error = rman_manage_region(&ctlr->sc_iomem, in mvs_attach()
150 rman_get_start(ctlr->r_mem), rman_get_end(ctlr->r_mem))) != 0) { in mvs_attach()
151 bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem); in mvs_attach()
152 rman_fini(&ctlr->sc_iomem); in mvs_attach()
159 bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem); in mvs_attach()
160 rman_fini(&ctlr->sc_iomem); in mvs_attach()
164 for (unit = 0; unit < ctlr->channels; unit++) { in mvs_attach()
178 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_detach() local
187 if (ctlr->irq.r_irq) { in mvs_detach()
188 bus_teardown_intr(dev, ctlr->irq.r_irq, in mvs_detach()
189 ctlr->irq.handle); in mvs_detach()
191 ctlr->irq.r_irq_rid, ctlr->irq.r_irq); in mvs_detach()
195 rman_fini(&ctlr->sc_iomem); in mvs_detach()
196 if (ctlr->r_mem) in mvs_detach()
197 bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem); in mvs_detach()
198 mtx_destroy(&ctlr->mtx); in mvs_detach()
205 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_ctlr_setup() local
206 int i, ccc = ctlr->ccc, cccc = ctlr->cccc, ccim = 0; in mvs_ctlr_setup()
209 ATA_OUTL(ctlr->r_mem, CHIP_MIM, 0x00000000); in mvs_ctlr_setup()
211 ATA_OUTL(ctlr->r_mem, CHIP_PCIIM, 0x00000000); in mvs_ctlr_setup()
213 ATA_OUTL(ctlr->r_mem, CHIP_PCIIC, 0x00000000); in mvs_ctlr_setup()
217 ctlr->ccc, ctlr->cccc); in mvs_ctlr_setup()
221 if (ctlr->channels > 4 && (ctlr->quirks & MVS_Q_GENI) == 0) { in mvs_ctlr_setup()
222 ATA_OUTL(ctlr->r_mem, CHIP_ICT, cccc); in mvs_ctlr_setup()
223 ATA_OUTL(ctlr->r_mem, CHIP_ITT, ccc); in mvs_ctlr_setup()
224 ATA_OUTL(ctlr->r_mem, CHIP_ICC, ~CHIP_ICC_ALL_PORTS); in mvs_ctlr_setup()
230 for (i = 0; i < ctlr->channels / 4; i++) { in mvs_ctlr_setup()
232 ATA_OUTL(ctlr->r_mem, HC_BASE(i) + HC_ICT, cccc); in mvs_ctlr_setup()
233 ATA_OUTL(ctlr->r_mem, HC_BASE(i) + HC_ITT, ccc); in mvs_ctlr_setup()
237 ATA_OUTL(ctlr->r_mem, HC_BASE(i) + HC_IC, 0x00000000); in mvs_ctlr_setup()
240 ctlr->gmim = (ccim ? ccim : (IC_DONE_HC0 | IC_DONE_HC1)) | in mvs_ctlr_setup()
242 ctlr->mim = ctlr->gmim | ctlr->pmim; in mvs_ctlr_setup()
243 ATA_OUTL(ctlr->r_mem, CHIP_MIM, ctlr->mim); in mvs_ctlr_setup()
245 ATA_OUTL(ctlr->r_mem, CHIP_PCIIM, 0x007fffff); in mvs_ctlr_setup()
252 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_edma() local
256 if (ctlr->ccc == 0) in mvs_edma()
259 mtx_lock(&ctlr->mtx); in mvs_edma()
261 ctlr->pmim |= bit; in mvs_edma()
263 ctlr->pmim &= ~bit; in mvs_edma()
264 ctlr->mim = ctlr->gmim | ctlr->pmim; in mvs_edma()
265 if (!ctlr->msia) in mvs_edma()
266 ATA_OUTL(ctlr->r_mem, CHIP_MIM, ctlr->mim); in mvs_edma()
267 mtx_unlock(&ctlr->mtx); in mvs_edma()
273 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_suspend() local
277 ATA_OUTL(ctlr->r_mem, CHIP_MIM, 0x00000000); in mvs_suspend()
279 ATA_OUTL(ctlr->r_mem, CHIP_PCIIM, 0x00000000); in mvs_suspend()
294 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_setup_interrupt() local
307 ctlr->msi = msi; in mvs_setup_interrupt()
309 ctlr->irq.r_irq_rid = msi ? 1 : 0; in mvs_setup_interrupt()
310 if (!(ctlr->irq.r_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, in mvs_setup_interrupt()
311 &ctlr->irq.r_irq_rid, RF_SHAREABLE | RF_ACTIVE))) { in mvs_setup_interrupt()
315 if ((bus_setup_intr(dev, ctlr->irq.r_irq, ATA_INTR_FLAGS, NULL, in mvs_setup_interrupt()
316 mvs_intr, ctlr, &ctlr->irq.handle))) { in mvs_setup_interrupt()
319 ctlr->irq.r_irq_rid, ctlr->irq.r_irq); in mvs_setup_interrupt()
320 ctlr->irq.r_irq = NULL; in mvs_setup_interrupt()
332 struct mvs_controller *ctlr = data; in mvs_intr() local
338 ic = ATA_INL(ctlr->r_mem, CHIP_MIC); in mvs_intr()
339 if (ctlr->msi) { in mvs_intr()
341 mtx_lock(&ctlr->mtx); in mvs_intr()
342 ATA_OUTL(ctlr->r_mem, CHIP_MIM, 0); in mvs_intr()
343 ctlr->msia = 1; /* Deny MIM update during processing. */ in mvs_intr()
344 mtx_unlock(&ctlr->mtx); in mvs_intr()
349 ATA_OUTL(ctlr->r_mem, CHIP_ICC, ~CHIP_ICC_ALL_PORTS); in mvs_intr()
350 for (p = 0; p < ctlr->channels; p++) { in mvs_intr()
371 ATA_OUTL(ctlr->r_mem, HC_BASE(p == 4) + HC_IC, ~aic); in mvs_intr()
376 (function = ctlr->interrupt[p].function)) { in mvs_intr()
377 arg.arg = ctlr->interrupt[p].argument; in mvs_intr()
382 if (ctlr->msi) { in mvs_intr()
384 mtx_lock(&ctlr->mtx); in mvs_intr()
385 ctlr->msia = 0; /* Allow MIM update. */ in mvs_intr()
386 ATA_OUTL(ctlr->r_mem, CHIP_MIM, ctlr->mim); in mvs_intr()
387 mtx_unlock(&ctlr->mtx); in mvs_intr()
396 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_alloc_resource() local
404 st = rman_get_start(ctlr->r_mem); in mvs_alloc_resource()
405 res = rman_reserve_resource(&ctlr->sc_iomem, st + offset, in mvs_alloc_resource()
410 bsh = rman_get_bushandle(ctlr->r_mem); in mvs_alloc_resource()
411 bst = rman_get_bustag(ctlr->r_mem); in mvs_alloc_resource()
419 res = ctlr->irq.r_irq; in mvs_alloc_resource()
446 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_setup_intr() local
453 ctlr->interrupt[unit].function = function; in mvs_setup_intr()
454 ctlr->interrupt[unit].argument = argument; in mvs_setup_intr()
462 struct mvs_controller *ctlr = device_get_softc(dev); in mvs_teardown_intr() local
465 ctlr->interrupt[unit].function = NULL; in mvs_teardown_intr()
466 ctlr->interrupt[unit].argument = NULL; in mvs_teardown_intr()