Lines Matching refs:chan
140 softdma_next_desc(struct softdma_channel *chan, uint32_t curidx) in softdma_next_desc() argument
143 return ((curidx + 1) % chan->descs_num); in softdma_next_desc()
206 struct softdma_channel *chan; in softdma_intr() local
213 chan = &sc->channels[0]; in softdma_intr()
227 chan->run = 1; in softdma_intr()
228 wakeup(chan); in softdma_intr()
297 softdma_process_tx(struct softdma_channel *chan, struct softdma_desc *desc) in softdma_process_tx() argument
308 sc = chan->sc; in softdma_process_tx()
393 softdma_process_rx(struct softdma_channel *chan, struct softdma_desc *desc) in softdma_process_rx() argument
406 sc = chan->sc; in softdma_process_rx()
486 softdma_process_descriptors(struct softdma_channel *chan, in softdma_process_descriptors() argument
495 sc = chan->sc; in softdma_process_descriptors()
497 xchan = chan->xchan; in softdma_process_descriptors()
499 desc = &chan->descs[chan->idx_tail]; in softdma_process_descriptors()
507 ret = softdma_process_tx(chan, desc); in softdma_process_descriptors()
509 ret = softdma_process_rx(chan, desc); in softdma_process_descriptors()
528 atomic_subtract_int(&chan->descs_used_count, 1); in softdma_process_descriptors()
537 chan->idx_tail = softdma_next_desc(chan, chan->idx_tail); in softdma_process_descriptors()
550 struct softdma_channel *chan; in softdma_worker() local
553 chan = arg; in softdma_worker()
555 sc = chan->sc; in softdma_worker()
558 mtx_lock(&chan->mtx); in softdma_worker()
561 mtx_sleep(chan, &chan->mtx, 0, "softdma_wait", hz / 2); in softdma_worker()
562 } while (chan->run == 0); in softdma_worker()
567 softdma_process_descriptors(chan, &status); in softdma_worker()
570 chan->run = 0; in softdma_worker()
571 xdma_callback(chan->xchan, &status); in softdma_worker()
573 mtx_unlock(&chan->mtx); in softdma_worker()
579 softdma_proc_create(struct softdma_channel *chan) in softdma_proc_create() argument
583 sc = chan->sc; in softdma_proc_create()
585 if (chan->p != NULL) { in softdma_proc_create()
590 mtx_init(&chan->mtx, "SoftDMA", NULL, MTX_DEF); in softdma_proc_create()
592 if (kproc_create(softdma_worker, (void *)chan, &chan->p, 0, 0, in softdma_proc_create()
605 struct softdma_channel *chan; in softdma_channel_alloc() local
612 chan = &sc->channels[i]; in softdma_channel_alloc()
613 if (chan->used == 0) { in softdma_channel_alloc()
614 chan->xchan = xchan; in softdma_channel_alloc()
615 xchan->chan = (void *)chan; in softdma_channel_alloc()
617 chan->index = i; in softdma_channel_alloc()
618 chan->idx_head = 0; in softdma_channel_alloc()
619 chan->idx_tail = 0; in softdma_channel_alloc()
620 chan->descs_used_count = 0; in softdma_channel_alloc()
621 chan->descs_num = 1024; in softdma_channel_alloc()
622 chan->sc = sc; in softdma_channel_alloc()
624 if (softdma_proc_create(chan) != 0) { in softdma_channel_alloc()
628 chan->used = 1; in softdma_channel_alloc()
640 struct softdma_channel *chan; in softdma_channel_free() local
645 chan = (struct softdma_channel *)xchan->chan; in softdma_channel_free()
647 if (chan->descs != NULL) { in softdma_channel_free()
648 free(chan->descs, M_DEVBUF); in softdma_channel_free()
651 chan->used = 0; in softdma_channel_free()
659 struct softdma_channel *chan; in softdma_desc_alloc() local
662 chan = (struct softdma_channel *)xchan->chan; in softdma_desc_alloc()
664 nsegments = chan->descs_num; in softdma_desc_alloc()
666 chan->descs = malloc(nsegments * sizeof(struct softdma_desc), in softdma_desc_alloc()
675 struct softdma_channel *chan; in softdma_channel_prep_sg() local
683 chan = (struct softdma_channel *)xchan->chan; in softdma_channel_prep_sg()
692 for (i = 0; i < chan->descs_num; i++) { in softdma_channel_prep_sg()
693 desc = &chan->descs[i]; in softdma_channel_prep_sg()
695 if (i == (chan->descs_num - 1)) { in softdma_channel_prep_sg()
696 desc->next = &chan->descs[0]; in softdma_channel_prep_sg()
698 desc->next = &chan->descs[i+1]; in softdma_channel_prep_sg()
709 struct softdma_channel *chan; in softdma_channel_capacity() local
712 chan = (struct softdma_channel *)xchan->chan; in softdma_channel_capacity()
715 c = (chan->descs_num - chan->descs_used_count - 1); in softdma_channel_capacity()
726 struct softdma_channel *chan; in softdma_channel_submit_sg() local
737 chan = (struct softdma_channel *)xchan->chan; in softdma_channel_submit_sg()
744 desc = &chan->descs[chan->idx_head]; in softdma_channel_submit_sg()
767 tmp = chan->idx_head; in softdma_channel_submit_sg()
768 chan->idx_head = softdma_next_desc(chan, chan->idx_head); in softdma_channel_submit_sg()
769 atomic_add_int(&chan->descs_used_count, 1); in softdma_channel_submit_sg()
778 chan->run = 1; in softdma_channel_submit_sg()
779 wakeup(chan); in softdma_channel_submit_sg()
792 struct softdma_channel *chan; in softdma_channel_request() local
799 chan = (struct softdma_channel *)xchan->chan; in softdma_channel_request()
808 desc = &chan->descs[0]; in softdma_channel_request()
823 struct softdma_channel *chan; in softdma_channel_control() local
828 chan = (struct softdma_channel *)xchan->chan; in softdma_channel_control()