Lines Matching refs:csdev

35 	struct coresight_device *csdev, *i_csdev;  in coresight_id_match()  local
37 csdev = data; in coresight_id_match()
44 if (i_csdev == csdev || !i_csdev->enable || in coresight_id_match()
49 trace_id = source_ops(csdev)->trace_id(csdev); in coresight_id_match()
59 static int coresight_source_is_unique(struct coresight_device *csdev) in coresight_source_is_unique() argument
61 int trace_id = source_ops(csdev)->trace_id(csdev); in coresight_source_is_unique()
68 csdev, coresight_id_match); in coresight_source_is_unique()
71 static int coresight_find_link_inport(struct coresight_device *csdev) in coresight_find_link_inport() argument
77 parent = container_of(csdev->path_link.next, in coresight_find_link_inport()
82 if (conn->child_dev == csdev) in coresight_find_link_inport()
86 dev_err(&csdev->dev, "couldn't find inport, parent: %s, child: %s\n", in coresight_find_link_inport()
87 dev_name(&parent->dev), dev_name(&csdev->dev)); in coresight_find_link_inport()
92 static int coresight_find_link_outport(struct coresight_device *csdev) in coresight_find_link_outport() argument
98 child = container_of(csdev->path_link.prev, in coresight_find_link_outport()
101 for (i = 0; i < csdev->nr_outport; i++) { in coresight_find_link_outport()
102 conn = &csdev->conns[i]; in coresight_find_link_outport()
107 dev_err(&csdev->dev, "couldn't find outport, parent: %s, child: %s\n", in coresight_find_link_outport()
108 dev_name(&csdev->dev), dev_name(&child->dev)); in coresight_find_link_outport()
113 static int coresight_enable_sink(struct coresight_device *csdev) in coresight_enable_sink() argument
117 if (!csdev->enable) { in coresight_enable_sink()
118 if (sink_ops(csdev)->enable) { in coresight_enable_sink()
119 ret = sink_ops(csdev)->enable(csdev); in coresight_enable_sink()
123 csdev->enable = true; in coresight_enable_sink()
126 atomic_inc(csdev->refcnt); in coresight_enable_sink()
131 static void coresight_disable_sink(struct coresight_device *csdev) in coresight_disable_sink() argument
133 if (atomic_dec_return(csdev->refcnt) == 0) { in coresight_disable_sink()
134 if (sink_ops(csdev)->disable) { in coresight_disable_sink()
135 sink_ops(csdev)->disable(csdev); in coresight_disable_sink()
136 csdev->enable = false; in coresight_disable_sink()
141 static int coresight_enable_link(struct coresight_device *csdev) in coresight_enable_link() argument
147 inport = coresight_find_link_inport(csdev); in coresight_enable_link()
148 outport = coresight_find_link_outport(csdev); in coresight_enable_link()
149 link_subtype = csdev->subtype.link_subtype; in coresight_enable_link()
158 if (atomic_inc_return(&csdev->refcnt[refport]) == 1) { in coresight_enable_link()
159 if (link_ops(csdev)->enable) { in coresight_enable_link()
160 ret = link_ops(csdev)->enable(csdev, inport, outport); in coresight_enable_link()
166 csdev->enable = true; in coresight_enable_link()
171 static void coresight_disable_link(struct coresight_device *csdev) in coresight_disable_link() argument
177 inport = coresight_find_link_inport(csdev); in coresight_disable_link()
178 outport = coresight_find_link_outport(csdev); in coresight_disable_link()
179 link_subtype = csdev->subtype.link_subtype; in coresight_disable_link()
183 nr_conns = csdev->nr_inport; in coresight_disable_link()
186 nr_conns = csdev->nr_outport; in coresight_disable_link()
192 if (atomic_dec_return(&csdev->refcnt[refport]) == 0) { in coresight_disable_link()
193 if (link_ops(csdev)->disable) in coresight_disable_link()
194 link_ops(csdev)->disable(csdev, inport, outport); in coresight_disable_link()
198 if (atomic_read(&csdev->refcnt[i]) != 0) in coresight_disable_link()
201 csdev->enable = false; in coresight_disable_link()
204 static int coresight_enable_source(struct coresight_device *csdev) in coresight_enable_source() argument
208 if (!coresight_source_is_unique(csdev)) { in coresight_enable_source()
209 dev_warn(&csdev->dev, "traceID %d not unique\n", in coresight_enable_source()
210 source_ops(csdev)->trace_id(csdev)); in coresight_enable_source()
214 if (!csdev->enable) { in coresight_enable_source()
215 if (source_ops(csdev)->enable) { in coresight_enable_source()
216 ret = source_ops(csdev)->enable(csdev); in coresight_enable_source()
220 csdev->enable = true; in coresight_enable_source()
223 atomic_inc(csdev->refcnt); in coresight_enable_source()
228 static void coresight_disable_source(struct coresight_device *csdev) in coresight_disable_source() argument
230 if (atomic_dec_return(csdev->refcnt) == 0) { in coresight_disable_source()
231 if (source_ops(csdev)->disable) { in coresight_disable_source()
232 source_ops(csdev)->disable(csdev); in coresight_disable_source()
233 csdev->enable = false; in coresight_disable_source()
304 static int coresight_build_paths(struct coresight_device *csdev, in coresight_build_paths() argument
311 list_add(&csdev->path_link, path); in coresight_build_paths()
313 if ((csdev->type == CORESIGHT_DEV_TYPE_SINK || in coresight_build_paths()
314 csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) && in coresight_build_paths()
315 csdev->activated) { in coresight_build_paths()
321 for (i = 0; i < csdev->nr_outport; i++) { in coresight_build_paths()
322 conn = &csdev->conns[i]; in coresight_build_paths()
329 if (list_first_entry(path, struct coresight_device, path_link) != csdev) in coresight_build_paths()
330 dev_err(&csdev->dev, "wrong device in %s\n", __func__); in coresight_build_paths()
332 list_del(&csdev->path_link); in coresight_build_paths()
337 int coresight_enable(struct coresight_device *csdev) in coresight_enable() argument
343 if (csdev->type != CORESIGHT_DEV_TYPE_SOURCE) { in coresight_enable()
345 dev_err(&csdev->dev, "wrong device type in %s\n", __func__); in coresight_enable()
348 if (csdev->enable) in coresight_enable()
351 if (coresight_build_paths(csdev, &path, true)) { in coresight_enable()
352 dev_err(&csdev->dev, "building path(s) failed\n"); in coresight_enable()
356 if (coresight_enable_source(csdev)) in coresight_enable()
357 dev_err(&csdev->dev, "source enable failed\n"); in coresight_enable()
364 void coresight_disable(struct coresight_device *csdev) in coresight_disable() argument
369 if (csdev->type != CORESIGHT_DEV_TYPE_SOURCE) { in coresight_disable()
370 dev_err(&csdev->dev, "wrong device type in %s\n", __func__); in coresight_disable()
373 if (!csdev->enable) in coresight_disable()
376 coresight_disable_source(csdev); in coresight_disable()
377 if (coresight_build_paths(csdev, &path, false)) in coresight_disable()
378 dev_err(&csdev->dev, "releasing path(s) failed\n"); in coresight_disable()
388 struct coresight_device *csdev = to_coresight_device(dev); in enable_sink_show() local
390 return scnprintf(buf, PAGE_SIZE, "%u\n", (unsigned)csdev->activated); in enable_sink_show()
399 struct coresight_device *csdev = to_coresight_device(dev); in enable_sink_store() local
406 csdev->activated = true; in enable_sink_store()
408 csdev->activated = false; in enable_sink_store()
418 struct coresight_device *csdev = to_coresight_device(dev); in enable_source_show() local
420 return scnprintf(buf, PAGE_SIZE, "%u\n", (unsigned)csdev->enable); in enable_source_show()
429 struct coresight_device *csdev = to_coresight_device(dev); in enable_source_store() local
436 ret = coresight_enable(csdev); in enable_source_store()
440 coresight_disable(csdev); in enable_source_store()
482 struct coresight_device *csdev = to_coresight_device(dev); in coresight_device_release() local
484 kfree(csdev); in coresight_device_release()
491 struct coresight_device *csdev, *i_csdev; in coresight_orphan_match() local
494 csdev = data; in coresight_orphan_match()
498 if (csdev == i_csdev) in coresight_orphan_match()
514 if (!strcmp(dev_name(&csdev->dev), conn->child_name)) { in coresight_orphan_match()
515 conn->child_dev = csdev; in coresight_orphan_match()
532 static void coresight_fixup_orphan_conns(struct coresight_device *csdev) in coresight_fixup_orphan_conns() argument
539 csdev, coresight_orphan_match); in coresight_fixup_orphan_conns()
557 static void coresight_fixup_device_conns(struct coresight_device *csdev) in coresight_fixup_device_conns() argument
563 for (i = 0; i < csdev->nr_outport; i++) { in coresight_fixup_device_conns()
564 conn = &csdev->conns[i]; in coresight_fixup_device_conns()
572 csdev->orphan = true; in coresight_fixup_device_conns()
635 struct coresight_device *csdev; in coresight_register() local
638 csdev = kzalloc(sizeof(*csdev), GFP_KERNEL); in coresight_register()
639 if (!csdev) { in coresight_register()
660 csdev->refcnt = refcnts; in coresight_register()
662 csdev->nr_inport = desc->pdata->nr_inport; in coresight_register()
663 csdev->nr_outport = desc->pdata->nr_outport; in coresight_register()
664 conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL); in coresight_register()
670 for (i = 0; i < csdev->nr_outport; i++) { in coresight_register()
676 csdev->conns = conns; in coresight_register()
678 csdev->type = desc->type; in coresight_register()
679 csdev->subtype = desc->subtype; in coresight_register()
680 csdev->ops = desc->ops; in coresight_register()
681 csdev->orphan = false; in coresight_register()
683 csdev->dev.type = &coresight_dev_type[desc->type]; in coresight_register()
684 csdev->dev.groups = desc->groups; in coresight_register()
685 csdev->dev.parent = desc->dev; in coresight_register()
686 csdev->dev.release = coresight_device_release; in coresight_register()
687 csdev->dev.bus = &coresight_bustype; in coresight_register()
688 dev_set_name(&csdev->dev, "%s", desc->pdata->name); in coresight_register()
690 ret = device_register(&csdev->dev); in coresight_register()
696 coresight_fixup_device_conns(csdev); in coresight_register()
697 coresight_fixup_orphan_conns(csdev); in coresight_register()
701 return csdev; in coresight_register()
708 kfree(csdev); in coresight_register()
714 void coresight_unregister(struct coresight_device *csdev) in coresight_unregister() argument
718 kfree(csdev->conns); in coresight_unregister()
719 device_unregister(&csdev->dev); in coresight_unregister()