Home | History | Annotate | Download | only in mscp

Lines Matching refs:mi

110 #define	READ_SA		(bus_space_read_2(mi->mi_iot, mi->mi_sah, 0))
111 #define READ_IP (bus_space_read_2(mi->mi_iot, mi->mi_iph, 0))
112 #define WRITE_IP(x) bus_space_write_2(mi->mi_iot, mi->mi_iph, 0, (x))
113 #define WRITE_SW(x) bus_space_write_2(mi->mi_iot, mi->mi_swh, 0, (x))
121 mscp_free_workitems(struct mscp_softc *mi)
125 while (!SLIST_EMPTY(&mi->mi_freelist)) {
126 mw = SLIST_FIRST(&mi->mi_freelist);
127 SLIST_REMOVE_HEAD(&mi->mi_freelist, mw_list);
140 mscp_waitstep(struct mscp_softc *mi, int mask, int result)
178 struct mscp_softc *mi = device_private(self);
184 mi->mi_dev = self;
185 mi->mi_mc = ma->ma_mc;
186 mi->mi_me = NULL;
187 mi->mi_type = ma->ma_type;
188 mi->mi_uda = ma->ma_uda;
189 mi->mi_dmat = ma->ma_dmat;
190 mi->mi_dmam = ma->ma_dmam;
191 mi->mi_iot = ma->ma_iot;
192 mi->mi_iph = ma->ma_iph;
193 mi->mi_sah = ma->ma_sah;
194 mi->mi_swh = ma->ma_swh;
195 mi->mi_ivec = ma->ma_ivec;
196 mi->mi_adapnr = ma->ma_adapnr;
197 mi->mi_ctlrnr = ma->ma_ctlrnr;
198 *ma->ma_softc = mi;
200 mutex_init(&mi->mi_mtx, MUTEX_DEFAULT, IPL_VM);
201 SLIST_INIT(&mi->mi_freelist);
203 error = workqueue_create(&mi->mi_wq, "mscp_wq", mscp_worker, NULL,
206 aprint_error_dev(mi->mi_dev, "could not create workqueue");
215 SLIST_INSERT_HEAD(&mi->mi_freelist, mw, mw_list);
222 mi->mi_cmd.mri_size = NCMD;
223 mi->mi_cmd.mri_desc = mi->mi_uda->mp_ca.ca_cmddsc;
224 mi->mi_cmd.mri_ring = mi->mi_uda->mp_cmd;
225 mi->mi_rsp.mri_size = NRSP;
226 mi->mi_rsp.mri_desc = mi->mi_uda->mp_ca.ca_rspdsc;
227 mi->mi_rsp.mri_ring = mi->mi_uda->mp_rsp;
228 bufq_alloc(&mi->mi_resq, "fcfs", 0);
230 if (mscp_init(mi)) {
231 aprint_error_dev(mi->mi_dev, "can't init, controller hung\n");
235 mi->mi_mxiuse |= (1 << i);
236 if (bus_dmamap_create(mi->mi_dmat, (64*1024), 16, (64*1024),
237 0, BUS_DMA_NOWAIT, &mi->mi_xi[i].mxi_dmam)) {
248 mi->mi_me = &ra_device;
255 mi->mi_me = &mt_device;
263 mp = mscp_getcp(mi, MSCP_DONTWAIT);
273 i = bus_space_read_2(mi->mi_iot, mi->mi_iph, 0);
280 device_xname(mi->mi_dev));
322 mi->mi_ierr = 3;
343 device_xname(mi->mi_dev), mp->mscp_unit);
351 aprint_error_dev(mi->mi_dev,
366 mscp_init(struct mscp_softc *mi)
377 mi->mi_cmd.mri_next = 0;
378 mi->mi_rsp.mri_next = 0;
380 mi->mi_flags |= MSC_IGNOREINTR;
382 if ((mi->mi_type & MSCPBUS_KDB) == 0)
385 status = mscp_waitstep(mi, MP_STEP1, MP_STEP1);/* Wait to it wakes up */
389 (*mi->mi_mc->mc_saerror)(device_parent(mi->mi_dev), 0);
395 MP_IE | (mi->mi_ivec >> 2));
396 status = mscp_waitstep(mi, STEP1MASK, STEP1GOOD);
398 (*mi->mi_mc->mc_saerror)(device_parent(mi->mi_dev), 0);
403 WRITE_SW(((mi->mi_dmam->dm_segs[0].ds_addr & 0xffff) +
406 status = mscp_waitstep(mi, STEP2MASK, STEP2GOOD(mi->mi_ivec >> 2));
408 (*mi->mi_mc->mc_saerror)(device_parent(mi->mi_dev), 0);
413 WRITE_SW((mi->mi_dmam->dm_segs[0].ds_addr >> 16));
414 status = mscp_waitstep(mi, STEP3MASK, STEP3GOOD);
416 (*mi->mi_mc->mc_saerror)(device_parent(mi->mi_dev), 0);
423 if (mi->mi_type & MSCPBUS_UDA) {
426 device_xname(mi->mi_dev), BURST);
430 mscp_initds(mi);
431 mi->mi_flags &= ~MSC_IGNOREINTR;
437 mi->mi_credits = MSCP_MINCREDITS + 1;
438 mp = mscp_getcp(mi, MSCP_DONTWAIT);
440 mi->mi_credits = 0;
452 if (((volatile int)mi->mi_flags & MSC_READY) != 0)
461 aprint_error_dev(mi->mi_dev, "couldn't set ctlr characteristics, sa=%x\n", j);
471 mscp_initds(struct mscp_softc *mi)
473 struct mscp_pack *ud = mi->mi_uda;
479 (mi->mi_dmam->dm_segs[0].ds_addr +
486 (mi->mi_dmam->dm_segs[0].ds_addr +
490 if (mi->mi_type & MSCPBUS_TAPE)
498 mscp_intr(struct mscp_softc *mi)
500 struct mscp_pack *ud = mi->mi_uda;
502 if (mi->mi_flags & MSC_IGNOREINTR)
509 mscp_dorsp(mi);
513 MSCP_DOCMD(mi);
519 if (bufq_peek(mi->mi_resq))
520 mscp_kickaway(mi);
547 struct mscp_softc *mi = device_private(usc);
550 bufq_put(mi->mi_resq, bp);
551 mscp_kickaway(mi);
557 mscp_kickaway(struct mscp_softc *mi)
563 while ((bp = bufq_peek(mi->mi_resq)) != NULL) {
568 if ((mp = mscp_getcp(mi, MSCP_DONTWAIT)) == NULL) {
569 if (mi->mi_credits > MSCP_MINCREDITS)
571 device_xname(device_parent(mi->mi_dev)));
579 if ((next = (ffs(mi->mi_mxiuse) - 1)) < 0)
581 mi->mi_mxiuse &= ~(1 << next);
582 if (mi->mi_xi[next].mxi_inuse)
590 mi->mi_xi[next].mxi_bp = bp;
591 mi->mi_xi[next].mxi_mp = mp;
592 mi->mi_xi[next].mxi_inuse = 1;
594 (*mi->mi_me->me_fillin)(bp, mp);
595 (*mi->mi_mc->mc_go)(device_parent(mi->mi_dev),
596 &mi->mi_xi[next]);
597 (void)bufq_get(mi->mi_resq);
602 mi, struct mscp_xi *mxi)
855 mscp_decodeerror(const char *name, struct mscp *mp, struct mscp_softc *mi)
863 if (((mp->mscp_event & M_ST_MASK) == 11) && (mi->mi_ierr++ < 3))