Lines Matching refs:sc

77 altera_sdcard_attach(struct altera_sdcard_softc *sc)  in altera_sdcard_attach()  argument
80 ALTERA_SDCARD_LOCK_INIT(sc); in altera_sdcard_attach()
81 ALTERA_SDCARD_CONDVAR_INIT(sc); in altera_sdcard_attach()
82 sc->as_disk = NULL; in altera_sdcard_attach()
83 bioq_init(&sc->as_bioq); in altera_sdcard_attach()
84 sc->as_currentbio = NULL; in altera_sdcard_attach()
85 sc->as_state = ALTERA_SDCARD_STATE_NOCARD; in altera_sdcard_attach()
86 sc->as_taskqueue = taskqueue_create("altera_sdcardc taskq", M_WAITOK, in altera_sdcard_attach()
87 taskqueue_thread_enqueue, &sc->as_taskqueue); in altera_sdcard_attach()
88 taskqueue_start_threads(&sc->as_taskqueue, 1, PI_DISK, in altera_sdcard_attach()
89 "altera_sdcardc%d taskqueue", sc->as_unit); in altera_sdcard_attach()
90 TIMEOUT_TASK_INIT(sc->as_taskqueue, &sc->as_task, 0, in altera_sdcard_attach()
91 altera_sdcard_task, sc); in altera_sdcard_attach()
98 altera_sdcard_task(sc, 1); in altera_sdcard_attach()
102 altera_sdcard_detach(struct altera_sdcard_softc *sc) in altera_sdcard_detach() argument
105 KASSERT(sc->as_taskqueue != NULL, ("%s: taskqueue not present", in altera_sdcard_detach()
113 ALTERA_SDCARD_LOCK(sc); in altera_sdcard_detach()
114 sc->as_flags |= ALTERA_SDCARD_FLAG_DETACHREQ; in altera_sdcard_detach()
115 while (sc->as_state != ALTERA_SDCARD_STATE_DETACHED) in altera_sdcard_detach()
116 ALTERA_SDCARD_CONDVAR_WAIT(sc); in altera_sdcard_detach()
117 ALTERA_SDCARD_UNLOCK(sc); in altera_sdcard_detach()
124 while (taskqueue_cancel_timeout(sc->as_taskqueue, &sc->as_task, NULL)) in altera_sdcard_detach()
125 taskqueue_drain_timeout(sc->as_taskqueue, &sc->as_task); in altera_sdcard_detach()
131 if (sc->as_disk != NULL) in altera_sdcard_detach()
132 altera_sdcard_disk_remove(sc); in altera_sdcard_detach()
133 KASSERT(bioq_first(&sc->as_bioq) == NULL, in altera_sdcard_detach()
139 taskqueue_free(sc->as_taskqueue); in altera_sdcard_detach()
140 sc->as_taskqueue = NULL; in altera_sdcard_detach()
141 ALTERA_SDCARD_CONDVAR_DESTROY(sc); in altera_sdcard_detach()
142 ALTERA_SDCARD_LOCK_DESTROY(sc); in altera_sdcard_detach()
152 altera_sdcard_nextio(struct altera_sdcard_softc *sc) in altera_sdcard_nextio() argument
156 ALTERA_SDCARD_LOCK_ASSERT(sc); in altera_sdcard_nextio()
157 KASSERT(sc->as_currentbio == NULL, in altera_sdcard_nextio()
160 bp = bioq_takefirst(&sc->as_bioq); in altera_sdcard_nextio()
163 altera_sdcard_io_start(sc, bp); in altera_sdcard_nextio()
164 sc->as_state = ALTERA_SDCARD_STATE_IO; in altera_sdcard_nextio()
168 altera_sdcard_task_nocard(struct altera_sdcard_softc *sc) in altera_sdcard_task_nocard() argument
171 ALTERA_SDCARD_LOCK_ASSERT(sc); in altera_sdcard_task_nocard()
176 if (sc->as_flags & ALTERA_SDCARD_FLAG_DETACHREQ) { in altera_sdcard_task_nocard()
177 sc->as_state = ALTERA_SDCARD_STATE_DETACHED; in altera_sdcard_task_nocard()
184 if (!(altera_sdcard_read_asr(sc) & ALTERA_SDCARD_ASR_CARDPRESENT)) in altera_sdcard_task_nocard()
197 if (altera_sdcard_read_csd(sc) != 0) { in altera_sdcard_task_nocard()
198 sc->as_state = ALTERA_SDCARD_STATE_BADCARD; in altera_sdcard_task_nocard()
205 altera_sdcard_disk_insert(sc); in altera_sdcard_task_nocard()
206 sc->as_state = ALTERA_SDCARD_STATE_IDLE; in altera_sdcard_task_nocard()
210 altera_sdcard_task_badcard(struct altera_sdcard_softc *sc) in altera_sdcard_task_badcard() argument
213 ALTERA_SDCARD_LOCK_ASSERT(sc); in altera_sdcard_task_badcard()
218 if (sc->as_flags & ALTERA_SDCARD_FLAG_DETACHREQ) { in altera_sdcard_task_badcard()
219 sc->as_state = ALTERA_SDCARD_STATE_DETACHED; in altera_sdcard_task_badcard()
227 if (!(altera_sdcard_read_asr(sc) & ALTERA_SDCARD_ASR_CARDPRESENT)) in altera_sdcard_task_badcard()
228 sc->as_state = ALTERA_SDCARD_STATE_NOCARD; in altera_sdcard_task_badcard()
232 altera_sdcard_task_idle(struct altera_sdcard_softc *sc) in altera_sdcard_task_idle() argument
235 ALTERA_SDCARD_LOCK_ASSERT(sc); in altera_sdcard_task_idle()
240 if (sc->as_flags & ALTERA_SDCARD_FLAG_DETACHREQ) { in altera_sdcard_task_idle()
241 sc->as_state = ALTERA_SDCARD_STATE_DETACHED; in altera_sdcard_task_idle()
248 if (!(altera_sdcard_read_asr(sc) & ALTERA_SDCARD_ASR_CARDPRESENT)) { in altera_sdcard_task_idle()
249 altera_sdcard_disk_remove(sc); in altera_sdcard_task_idle()
250 sc->as_state = ALTERA_SDCARD_STATE_NOCARD; in altera_sdcard_task_idle()
255 altera_sdcard_task_io(struct altera_sdcard_softc *sc) in altera_sdcard_task_io() argument
259 ALTERA_SDCARD_LOCK_ASSERT(sc); in altera_sdcard_task_io()
260 KASSERT(sc->as_currentbio != NULL, ("%s: no current I/O", __func__)); in altera_sdcard_task_io()
265 asr = altera_sdcard_read_asr(sc); in altera_sdcard_task_io()
271 altera_sdcard_disk_remove(sc); in altera_sdcard_task_io()
272 if (sc->as_flags & ALTERA_SDCARD_FLAG_DETACHREQ) in altera_sdcard_task_io()
273 sc->as_state = ALTERA_SDCARD_STATE_DETACHED; in altera_sdcard_task_io()
275 sc->as_state = ALTERA_SDCARD_STATE_NOCARD; in altera_sdcard_task_io()
291 if (!altera_sdcard_io_complete(sc, asr)) in altera_sdcard_task_io()
298 if (sc->as_flags & ALTERA_SDCARD_FLAG_DETACHREQ) { in altera_sdcard_task_io()
299 sc->as_state = ALTERA_SDCARD_STATE_DETACHED; in altera_sdcard_task_io()
306 if (bioq_first(&sc->as_bioq) != NULL) { in altera_sdcard_task_io()
307 altera_sdcard_nextio(sc); in altera_sdcard_task_io()
312 sc->as_state = ALTERA_SDCARD_STATE_IDLE; in altera_sdcard_task_io()
316 altera_sdcard_task_rechedule(struct altera_sdcard_softc *sc) in altera_sdcard_task_rechedule() argument
324 switch (sc->as_state) { in altera_sdcard_task_rechedule()
335 if (sc->as_flags & ALTERA_SDCARD_FLAG_IOERROR) in altera_sdcard_task_rechedule()
342 panic("%s: invalid exit state %d", __func__, sc->as_state); in altera_sdcard_task_rechedule()
344 taskqueue_enqueue_timeout(sc->as_taskqueue, &sc->as_task, interval); in altera_sdcard_task_rechedule()
357 struct altera_sdcard_softc *sc; in altera_sdcard_task() local
359 sc = arg; in altera_sdcard_task()
360 KASSERT(sc->as_state != ALTERA_SDCARD_STATE_DETACHED, in altera_sdcard_task()
363 ALTERA_SDCARD_LOCK(sc); in altera_sdcard_task()
364 switch (sc->as_state) { in altera_sdcard_task()
366 altera_sdcard_task_nocard(sc); in altera_sdcard_task()
370 altera_sdcard_task_badcard(sc); in altera_sdcard_task()
374 altera_sdcard_task_idle(sc); in altera_sdcard_task()
378 altera_sdcard_task_io(sc); in altera_sdcard_task()
382 panic("%s: invalid enter state %d", __func__, sc->as_state); in altera_sdcard_task()
390 if (sc->as_state == ALTERA_SDCARD_STATE_DETACHED) in altera_sdcard_task()
391 ALTERA_SDCARD_CONDVAR_SIGNAL(sc); in altera_sdcard_task()
393 altera_sdcard_task_rechedule(sc); in altera_sdcard_task()
394 ALTERA_SDCARD_UNLOCK(sc); in altera_sdcard_task()
398 altera_sdcard_start(struct altera_sdcard_softc *sc) in altera_sdcard_start() argument
401 ALTERA_SDCARD_LOCK_ASSERT(sc); in altera_sdcard_start()
403 KASSERT(sc->as_state == ALTERA_SDCARD_STATE_IDLE, in altera_sdcard_start()
406 taskqueue_cancel_timeout(sc->as_taskqueue, &sc->as_task, NULL); in altera_sdcard_start()
407 altera_sdcard_nextio(sc); in altera_sdcard_start()
409 altera_sdcard_task_io(sc); in altera_sdcard_start()
411 altera_sdcard_task_rechedule(sc); in altera_sdcard_start()