Lines Matching refs:chan

84 	return chan_dev->chan;  in dev_to_dma_chan()
90 struct dma_chan *chan; in memcpy_count_show() local
96 chan = dev_to_dma_chan(dev); in memcpy_count_show()
97 if (chan) { in memcpy_count_show()
99 count += per_cpu_ptr(chan->local, i)->memcpy_count; in memcpy_count_show()
112 struct dma_chan *chan; in bytes_transferred_show() local
118 chan = dev_to_dma_chan(dev); in bytes_transferred_show()
119 if (chan) { in bytes_transferred_show()
121 count += per_cpu_ptr(chan->local, i)->bytes_transferred; in bytes_transferred_show()
134 struct dma_chan *chan; in in_use_show() local
138 chan = dev_to_dma_chan(dev); in in_use_show()
139 if (chan) in in_use_show()
140 err = sprintf(buf, "%d\n", chan->client_count); in in_use_show()
192 static struct module *dma_chan_to_owner(struct dma_chan *chan) in dma_chan_to_owner() argument
194 return chan->device->dev->driver->owner; in dma_chan_to_owner()
203 static void balance_ref_count(struct dma_chan *chan) in balance_ref_count() argument
205 struct module *owner = dma_chan_to_owner(chan); in balance_ref_count()
207 while (chan->client_count < dmaengine_ref_count) { in balance_ref_count()
209 chan->client_count++; in balance_ref_count()
219 static int dma_chan_get(struct dma_chan *chan) in dma_chan_get() argument
221 struct module *owner = dma_chan_to_owner(chan); in dma_chan_get()
225 if (chan->client_count) { in dma_chan_get()
234 if (chan->device->device_alloc_chan_resources) { in dma_chan_get()
235 ret = chan->device->device_alloc_chan_resources(chan); in dma_chan_get()
240 if (!dma_has_cap(DMA_PRIVATE, chan->device->cap_mask)) in dma_chan_get()
241 balance_ref_count(chan); in dma_chan_get()
244 chan->client_count++; in dma_chan_get()
258 static void dma_chan_put(struct dma_chan *chan) in dma_chan_put() argument
261 if (!chan->client_count) in dma_chan_put()
264 chan->client_count--; in dma_chan_put()
265 module_put(dma_chan_to_owner(chan)); in dma_chan_put()
268 if (!chan->client_count && chan->device->device_free_chan_resources) in dma_chan_put()
269 chan->device->device_free_chan_resources(chan); in dma_chan_put()
272 enum dma_status dma_sync_wait(struct dma_chan *chan, dma_cookie_t cookie) in dma_sync_wait() argument
277 dma_async_issue_pending(chan); in dma_sync_wait()
279 status = dma_async_is_tx_complete(chan, cookie, NULL, NULL); in dma_sync_wait()
303 struct dma_chan *chan; member
350 return this_cpu_read(channel_table[tx_type]->chan); in dma_find_channel()
360 struct dma_chan *chan; in dma_issue_pending_all() local
366 list_for_each_entry(chan, &device->channels, device_node) in dma_issue_pending_all()
367 if (chan->client_count) in dma_issue_pending_all()
368 device->device_issue_pending(chan); in dma_issue_pending_all()
377 static bool dma_chan_is_local(struct dma_chan *chan, int cpu) in dma_chan_is_local() argument
379 int node = dev_to_node(chan->device->dev); in dma_chan_is_local()
396 struct dma_chan *chan; in min_chan() local
404 list_for_each_entry(chan, &device->channels, device_node) { in min_chan()
405 if (!chan->client_count) in min_chan()
407 if (!min || chan->table_count < min->table_count) in min_chan()
408 min = chan; in min_chan()
410 if (dma_chan_is_local(chan, cpu)) in min_chan()
412 chan->table_count < localmin->table_count) in min_chan()
413 localmin = chan; in min_chan()
417 chan = localmin ? localmin : min; in min_chan()
419 if (chan) in min_chan()
420 chan->table_count++; in min_chan()
422 return chan; in min_chan()
435 struct dma_chan *chan; in dma_channel_rebalance() local
443 per_cpu_ptr(channel_table[cap], cpu)->chan = NULL; in dma_channel_rebalance()
448 list_for_each_entry(chan, &device->channels, device_node) in dma_channel_rebalance()
449 chan->table_count = 0; in dma_channel_rebalance()
459 chan = min_chan(cap, cpu); in dma_channel_rebalance()
460 per_cpu_ptr(channel_table[cap], cpu)->chan = chan; in dma_channel_rebalance()
464 int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps) in dma_get_slave_caps() argument
468 if (!chan || !caps) in dma_get_slave_caps()
471 device = chan->device; in dma_get_slave_caps()
505 struct dma_chan *chan; in private_candidate() local
515 list_for_each_entry(chan, &dev->channels, device_node) { in private_candidate()
517 if (chan->client_count) in private_candidate()
521 list_for_each_entry(chan, &dev->channels, device_node) { in private_candidate()
522 if (chan->client_count) { in private_candidate()
524 __func__, dma_chan_name(chan)); in private_candidate()
527 if (fn && !fn(chan, fn_param)) { in private_candidate()
529 __func__, dma_chan_name(chan)); in private_candidate()
532 return chan; in private_candidate()
542 struct dma_chan *dma_get_slave_channel(struct dma_chan *chan) in dma_get_slave_channel() argument
549 if (chan->client_count == 0) { in dma_get_slave_channel()
550 err = dma_chan_get(chan); in dma_get_slave_channel()
553 __func__, dma_chan_name(chan), err); in dma_get_slave_channel()
555 chan = NULL; in dma_get_slave_channel()
560 return chan; in dma_get_slave_channel()
567 struct dma_chan *chan; in dma_get_any_slave_channel() local
576 chan = private_candidate(&mask, device, NULL, NULL); in dma_get_any_slave_channel()
577 if (chan) { in dma_get_any_slave_channel()
580 err = dma_chan_get(chan); in dma_get_any_slave_channel()
583 __func__, dma_chan_name(chan), err); in dma_get_any_slave_channel()
584 chan = NULL; in dma_get_any_slave_channel()
592 return chan; in dma_get_any_slave_channel()
608 struct dma_chan *chan = NULL; in __dma_request_channel() local
614 chan = private_candidate(mask, device, fn, fn_param); in __dma_request_channel()
615 if (chan) { in __dma_request_channel()
623 err = dma_chan_get(chan); in __dma_request_channel()
627 __func__, dma_chan_name(chan)); in __dma_request_channel()
631 __func__, dma_chan_name(chan), err); in __dma_request_channel()
636 chan = NULL; in __dma_request_channel()
643 chan ? "success" : "fail", in __dma_request_channel()
644 chan ? dma_chan_name(chan) : NULL); in __dma_request_channel()
646 return chan; in __dma_request_channel()
689 void dma_release_channel(struct dma_chan *chan) in dma_release_channel() argument
692 WARN_ONCE(chan->client_count != 1, in dma_release_channel()
693 "chan reference count %d != 1\n", chan->client_count); in dma_release_channel()
694 dma_chan_put(chan); in dma_release_channel()
696 if (--chan->device->privatecnt == 0) in dma_release_channel()
697 dma_cap_clear(DMA_PRIVATE, chan->device->cap_mask); in dma_release_channel()
708 struct dma_chan *chan; in dmaengine_get() local
718 list_for_each_entry(chan, &device->channels, device_node) { in dmaengine_get()
719 err = dma_chan_get(chan); in dmaengine_get()
726 __func__, dma_chan_name(chan), err); in dmaengine_get()
746 struct dma_chan *chan; in dmaengine_put() local
755 list_for_each_entry(chan, &device->channels, device_node) in dmaengine_put()
756 dma_chan_put(chan); in dmaengine_put()
822 struct dma_chan* chan; in dma_async_device_register() local
870 list_for_each_entry(chan, &device->channels, device_node) { in dma_async_device_register()
872 chan->local = alloc_percpu(typeof(*chan->local)); in dma_async_device_register()
873 if (chan->local == NULL) in dma_async_device_register()
875 chan->dev = kzalloc(sizeof(*chan->dev), GFP_KERNEL); in dma_async_device_register()
876 if (chan->dev == NULL) { in dma_async_device_register()
877 free_percpu(chan->local); in dma_async_device_register()
878 chan->local = NULL; in dma_async_device_register()
882 chan->chan_id = chancnt++; in dma_async_device_register()
883 chan->dev->device.class = &dma_devclass; in dma_async_device_register()
884 chan->dev->device.parent = device->dev; in dma_async_device_register()
885 chan->dev->chan = chan; in dma_async_device_register()
886 chan->dev->idr_ref = idr_ref; in dma_async_device_register()
887 chan->dev->dev_id = device->dev_id; in dma_async_device_register()
889 dev_set_name(&chan->dev->device, "dma%dchan%d", in dma_async_device_register()
890 device->dev_id, chan->chan_id); in dma_async_device_register()
892 rc = device_register(&chan->dev->device); in dma_async_device_register()
894 free_percpu(chan->local); in dma_async_device_register()
895 chan->local = NULL; in dma_async_device_register()
896 kfree(chan->dev); in dma_async_device_register()
900 chan->client_count = 0; in dma_async_device_register()
907 list_for_each_entry(chan, &device->channels, device_node) { in dma_async_device_register()
911 if (dma_chan_get(chan) == -ENODEV) { in dma_async_device_register()
939 list_for_each_entry(chan, &device->channels, device_node) { in dma_async_device_register()
940 if (chan->local == NULL) in dma_async_device_register()
943 chan->dev->chan = NULL; in dma_async_device_register()
945 device_unregister(&chan->dev->device); in dma_async_device_register()
946 free_percpu(chan->local); in dma_async_device_register()
961 struct dma_chan *chan; in dma_async_device_unregister() local
968 list_for_each_entry(chan, &device->channels, device_node) { in dma_async_device_unregister()
969 WARN_ONCE(chan->client_count, in dma_async_device_unregister()
971 __func__, chan->client_count); in dma_async_device_unregister()
973 chan->dev->chan = NULL; in dma_async_device_unregister()
975 device_unregister(&chan->dev->device); in dma_async_device_unregister()
976 free_percpu(chan->local); in dma_async_device_unregister()
1111 struct dma_chan *chan) in dma_async_tx_descriptor_init() argument
1113 tx->chan = chan; in dma_async_tx_descriptor_init()
1139 return dma_sync_wait(tx->chan, tx->cookie); in dma_wait_for_async_tx()
1151 struct dma_chan *chan; in dma_run_dependencies() local
1158 chan = dep->chan; in dma_run_dependencies()
1168 if (dep_next && dep_next->chan == chan) in dma_run_dependencies()
1177 chan->device->device_issue_pending(chan); in dma_run_dependencies()