Lines Matching refs:path
14 #include "path.h"
41 avs_path_find_pipeline(struct avs_path *path, u32 template_id)
45 list_for_each_entry(ppl, &path->ppl_list, node)
56 struct avs_path *path;
72 /* Only one variant of given path template may be instantiated at a time. */
73 list_for_each_entry(path, &adev->path_list, node) {
74 if (path->template->owner == template) {
76 return path;
598 dev_err(adev->dev, "path mod %d not found\n", t->mod_id);
606 dev_err(adev->dev, "target path %s:%d not found\n",
779 static int avs_path_init(struct avs_dev *adev, struct avs_path *path,
784 path->owner = adev;
785 path->template = template;
786 path->dma_id = dma_id;
787 INIT_LIST_HEAD(&path->ppl_list);
788 INIT_LIST_HEAD(&path->node);
794 ppl = avs_path_pipeline_create(adev, path, tppl);
798 list_add_tail(&ppl->node, &path->ppl_list);
802 list_add_tail(&path->node, &adev->path_list);
808 static int avs_path_arm(struct avs_dev *adev, struct avs_path *path)
814 list_for_each_entry(ppl, &path->ppl_list, node) {
833 static void avs_path_free_unlocked(struct avs_path *path)
837 spin_lock(&path->owner->path_list_lock);
838 list_del(&path->node);
839 spin_unlock(&path->owner->path_list_lock);
841 list_for_each_entry_safe(ppl, save, &path->ppl_list, node)
842 avs_path_pipeline_free(path->owner, ppl);
844 kfree(path);
850 struct avs_path *path;
853 path = kzalloc(sizeof(*path), GFP_KERNEL);
854 if (!path)
857 ret = avs_path_init(adev, path, template, dma_id);
861 ret = avs_path_arm(adev, path);
865 path->state = AVS_PPL_STATE_INVALID;
866 return path;
868 avs_path_free_unlocked(path);
872 void avs_path_free(struct avs_path *path)
874 struct avs_dev *adev = path->owner;
877 avs_path_free_unlocked(path);
887 struct avs_path *path;
895 /* Serialize path and its components creation. */
900 path = avs_path_create_unlocked(adev, dma_id, variant);
905 return path;
939 int avs_path_bind(struct avs_path *path)
942 struct avs_dev *adev = path->owner;
945 list_for_each_entry(ppl, &path->ppl_list, node) {
963 dev_err(adev->dev, "bind path failed: %d\n", ret);
972 int avs_path_unbind(struct avs_path *path)
975 struct avs_dev *adev = path->owner;
978 list_for_each_entry(ppl, &path->ppl_list, node) {
992 dev_err(adev->dev, "unbind path failed: %d\n", ret);
1001 int avs_path_reset(struct avs_path *path)
1004 struct avs_dev *adev = path->owner;
1007 if (path->state == AVS_PPL_STATE_RESET)
1010 list_for_each_entry(ppl, &path->ppl_list, node) {
1014 dev_err(adev->dev, "reset path failed: %d\n", ret);
1015 path->state = AVS_PPL_STATE_INVALID;
1020 path->state = AVS_PPL_STATE_RESET;
1024 int avs_path_pause(struct avs_path *path)
1027 struct avs_dev *adev = path->owner;
1030 if (path->state == AVS_PPL_STATE_PAUSED)
1033 list_for_each_entry_reverse(ppl, &path->ppl_list, node) {
1037 dev_err(adev->dev, "pause path failed: %d\n", ret);
1038 path->state = AVS_PPL_STATE_INVALID;
1043 path->state = AVS_PPL_STATE_PAUSED;
1047 int avs_path_run(struct avs_path *path, int trigger)
1050 struct avs_dev *adev = path->owner;
1053 if (path->state == AVS_PPL_STATE_RUNNING && trigger == AVS_TPLG_TRIGGER_AUTO)
1056 list_for_each_entry(ppl, &path->ppl_list, node) {
1063 dev_err(adev->dev, "run path failed: %d\n", ret);
1064 path->state = AVS_PPL_STATE_INVALID;
1069 path->state = AVS_PPL_STATE_RUNNING;