Lines Matching refs:c_node

200 	struct drm_exynos_ipp_cmd_node *c_node;  in ipp_find_drv_by_handle()  local
214 list_for_each_entry(c_node, &ippdrv->cmd_list, list) { in ipp_find_drv_by_handle()
215 if (c_node->property.prop_id == prop_id) { in ipp_find_drv_by_handle()
328 struct drm_exynos_ipp_cmd_node *c_node; in exynos_drm_ipp_set_property() local
355 c_node = ipp_find_obj(&ctx->prop_idr, &ctx->prop_lock, prop_id); in exynos_drm_ipp_set_property()
357 if (!c_node || c_node->filp != file) { in exynos_drm_ipp_set_property()
362 if (c_node->state != IPP_STATE_STOP) { in exynos_drm_ipp_set_property()
367 c_node->property = *property; in exynos_drm_ipp_set_property()
380 c_node = kzalloc(sizeof(*c_node), GFP_KERNEL); in exynos_drm_ipp_set_property()
381 if (!c_node) in exynos_drm_ipp_set_property()
384 ret = ipp_create_id(&ctx->prop_idr, &ctx->prop_lock, c_node); in exynos_drm_ipp_set_property()
395 c_node->property = *property; in exynos_drm_ipp_set_property()
396 c_node->state = IPP_STATE_IDLE; in exynos_drm_ipp_set_property()
397 c_node->filp = file; in exynos_drm_ipp_set_property()
399 c_node->start_work = ipp_create_cmd_work(); in exynos_drm_ipp_set_property()
400 if (IS_ERR(c_node->start_work)) { in exynos_drm_ipp_set_property()
402 ret = PTR_ERR(c_node->start_work); in exynos_drm_ipp_set_property()
406 c_node->stop_work = ipp_create_cmd_work(); in exynos_drm_ipp_set_property()
407 if (IS_ERR(c_node->stop_work)) { in exynos_drm_ipp_set_property()
409 ret = PTR_ERR(c_node->stop_work); in exynos_drm_ipp_set_property()
413 c_node->event_work = ipp_create_event_work(); in exynos_drm_ipp_set_property()
414 if (IS_ERR(c_node->event_work)) { in exynos_drm_ipp_set_property()
416 ret = PTR_ERR(c_node->event_work); in exynos_drm_ipp_set_property()
420 mutex_init(&c_node->lock); in exynos_drm_ipp_set_property()
421 mutex_init(&c_node->mem_lock); in exynos_drm_ipp_set_property()
422 mutex_init(&c_node->event_lock); in exynos_drm_ipp_set_property()
424 init_completion(&c_node->start_complete); in exynos_drm_ipp_set_property()
425 init_completion(&c_node->stop_complete); in exynos_drm_ipp_set_property()
428 INIT_LIST_HEAD(&c_node->mem_list[i]); in exynos_drm_ipp_set_property()
430 INIT_LIST_HEAD(&c_node->event_list); in exynos_drm_ipp_set_property()
432 list_add_tail(&c_node->list, &ippdrv->cmd_list); in exynos_drm_ipp_set_property()
442 kfree(c_node->stop_work); in exynos_drm_ipp_set_property()
444 kfree(c_node->start_work); in exynos_drm_ipp_set_property()
448 kfree(c_node); in exynos_drm_ipp_set_property()
454 struct drm_exynos_ipp_cmd_node *c_node) in ipp_validate_mem_node() argument
462 ipp_cfg = &c_node->property.config[m_node->ops_id]; in ipp_validate_mem_node()
494 c_node->filp); in ipp_validate_mem_node()
516 struct drm_exynos_ipp_cmd_node *c_node, in ipp_put_mem_node() argument
535 c_node->filp); in ipp_put_mem_node()
546 struct drm_exynos_ipp_cmd_node *c_node, in ipp_get_mem_node() argument
576 qbuf->handle[i], c_node->filp); in ipp_get_mem_node()
579 ipp_put_mem_node(drm_dev, c_node, m_node); in ipp_get_mem_node()
590 mutex_lock(&c_node->mem_lock); in ipp_get_mem_node()
591 if (ipp_validate_mem_node(drm_dev, m_node, c_node)) { in ipp_get_mem_node()
592 ipp_put_mem_node(drm_dev, c_node, m_node); in ipp_get_mem_node()
593 mutex_unlock(&c_node->mem_lock); in ipp_get_mem_node()
596 list_add_tail(&m_node->list, &c_node->mem_list[qbuf->ops_id]); in ipp_get_mem_node()
597 mutex_unlock(&c_node->mem_lock); in ipp_get_mem_node()
603 struct drm_exynos_ipp_cmd_node *c_node, int ops) in ipp_clean_mem_nodes() argument
606 struct list_head *head = &c_node->mem_list[ops]; in ipp_clean_mem_nodes()
608 mutex_lock(&c_node->mem_lock); in ipp_clean_mem_nodes()
613 ret = ipp_put_mem_node(drm_dev, c_node, m_node); in ipp_clean_mem_nodes()
618 mutex_unlock(&c_node->mem_lock); in ipp_clean_mem_nodes()
627 struct drm_exynos_ipp_cmd_node *c_node, in ipp_get_event() argument
638 c_node->filp->event_space += sizeof(e->event); in ipp_get_event()
650 e->base.file_priv = c_node->filp; in ipp_get_event()
652 mutex_lock(&c_node->event_lock); in ipp_get_event()
653 list_add_tail(&e->base.link, &c_node->event_list); in ipp_get_event()
654 mutex_unlock(&c_node->event_lock); in ipp_get_event()
659 static void ipp_put_event(struct drm_exynos_ipp_cmd_node *c_node, in ipp_put_event() argument
665 mutex_lock(&c_node->event_lock); in ipp_put_event()
666 list_for_each_entry_safe(e, te, &c_node->event_list, base.link) { in ipp_put_event()
691 mutex_unlock(&c_node->event_lock); in ipp_put_event()
696 struct drm_exynos_ipp_cmd_node *c_node) in ipp_clean_cmd_node() argument
701 cancel_work_sync(&c_node->start_work->work); in ipp_clean_cmd_node()
702 cancel_work_sync(&c_node->stop_work->work); in ipp_clean_cmd_node()
703 cancel_work_sync(&c_node->event_work->work); in ipp_clean_cmd_node()
706 ipp_put_event(c_node, NULL); in ipp_clean_cmd_node()
709 ipp_clean_mem_nodes(ctx->subdrv.drm_dev, c_node, i); in ipp_clean_cmd_node()
712 list_del(&c_node->list); in ipp_clean_cmd_node()
715 c_node->property.prop_id); in ipp_clean_cmd_node()
718 mutex_destroy(&c_node->lock); in ipp_clean_cmd_node()
719 mutex_destroy(&c_node->mem_lock); in ipp_clean_cmd_node()
720 mutex_destroy(&c_node->event_lock); in ipp_clean_cmd_node()
723 kfree(c_node->start_work); in ipp_clean_cmd_node()
724 kfree(c_node->stop_work); in ipp_clean_cmd_node()
725 kfree(c_node->event_work); in ipp_clean_cmd_node()
726 kfree(c_node); in ipp_clean_cmd_node()
729 static bool ipp_check_mem_list(struct drm_exynos_ipp_cmd_node *c_node) in ipp_check_mem_list() argument
731 switch (c_node->property.cmd) { in ipp_check_mem_list()
733 return !list_empty(&c_node->mem_list[EXYNOS_DRM_OPS_DST]); in ipp_check_mem_list()
735 return !list_empty(&c_node->mem_list[EXYNOS_DRM_OPS_SRC]); in ipp_check_mem_list()
738 return !list_empty(&c_node->mem_list[EXYNOS_DRM_OPS_SRC]) && in ipp_check_mem_list()
739 !list_empty(&c_node->mem_list[EXYNOS_DRM_OPS_DST]); in ipp_check_mem_list()
744 *ipp_find_mem_node(struct drm_exynos_ipp_cmd_node *c_node, in ipp_find_mem_node() argument
754 head = &c_node->mem_list[qbuf->ops_id]; in ipp_find_mem_node()
769 struct drm_exynos_ipp_cmd_node *c_node, in ipp_set_mem_node() argument
807 struct drm_exynos_ipp_cmd_node *c_node) in ipp_handle_cmd_work() argument
812 cmd_work->c_node = c_node; in ipp_handle_cmd_work()
817 struct drm_exynos_ipp_cmd_node *c_node, in ipp_queue_buf_with_run() argument
838 property = &c_node->property; in ipp_queue_buf_with_run()
840 if (c_node->state != IPP_STATE_START) { in ipp_queue_buf_with_run()
845 mutex_lock(&c_node->mem_lock); in ipp_queue_buf_with_run()
846 if (!ipp_check_mem_list(c_node)) { in ipp_queue_buf_with_run()
847 mutex_unlock(&c_node->mem_lock); in ipp_queue_buf_with_run()
857 struct drm_exynos_ipp_cmd_work *cmd_work = c_node->start_work; in ipp_queue_buf_with_run()
860 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in ipp_queue_buf_with_run()
862 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_queue_buf_with_run()
864 mutex_unlock(&c_node->mem_lock); in ipp_queue_buf_with_run()
869 mutex_unlock(&c_node->mem_lock); in ipp_queue_buf_with_run()
875 struct drm_exynos_ipp_cmd_node *c_node, in ipp_clean_queue_buf() argument
881 mutex_lock(&c_node->mem_lock); in ipp_clean_queue_buf()
883 &c_node->mem_list[qbuf->ops_id], list) { in ipp_clean_queue_buf()
886 ipp_put_mem_node(drm_dev, c_node, m_node); in ipp_clean_queue_buf()
888 mutex_unlock(&c_node->mem_lock); in ipp_clean_queue_buf()
898 struct drm_exynos_ipp_cmd_node *c_node; in exynos_drm_ipp_queue_buf() local
917 c_node = ipp_find_obj(&ctx->prop_idr, &ctx->prop_lock, in exynos_drm_ipp_queue_buf()
919 if (!c_node || c_node->filp != file) { in exynos_drm_ipp_queue_buf()
928 m_node = ipp_get_mem_node(drm_dev, c_node, qbuf); in exynos_drm_ipp_queue_buf()
941 ret = ipp_get_event(drm_dev, c_node, qbuf); in exynos_drm_ipp_queue_buf()
951 ret = ipp_queue_buf_with_run(dev, c_node, m_node, qbuf); in exynos_drm_ipp_queue_buf()
959 mutex_lock(&c_node->lock); in exynos_drm_ipp_queue_buf()
963 ipp_put_event(c_node, qbuf); in exynos_drm_ipp_queue_buf()
965 ipp_clean_queue_buf(drm_dev, c_node, qbuf); in exynos_drm_ipp_queue_buf()
967 mutex_unlock(&c_node->lock); in exynos_drm_ipp_queue_buf()
979 ipp_clean_queue_buf(drm_dev, c_node, qbuf); in exynos_drm_ipp_queue_buf()
1031 struct drm_exynos_ipp_cmd_node *c_node; in exynos_drm_ipp_cmd_ctrl() local
1052 c_node = ipp_find_obj(&ctx->prop_idr, &ctx->prop_lock, in exynos_drm_ipp_cmd_ctrl()
1054 if (!c_node || c_node->filp != file) { in exynos_drm_ipp_cmd_ctrl()
1060 c_node->state)) { in exynos_drm_ipp_cmd_ctrl()
1070 c_node->state = IPP_STATE_START; in exynos_drm_ipp_cmd_ctrl()
1072 cmd_work = c_node->start_work; in exynos_drm_ipp_cmd_ctrl()
1074 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1077 cmd_work = c_node->stop_work; in exynos_drm_ipp_cmd_ctrl()
1079 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1081 if (!wait_for_completion_timeout(&c_node->stop_complete, in exynos_drm_ipp_cmd_ctrl()
1084 c_node->property.prop_id); in exynos_drm_ipp_cmd_ctrl()
1087 c_node->state = IPP_STATE_STOP; in exynos_drm_ipp_cmd_ctrl()
1090 ipp_clean_cmd_node(ctx, c_node); in exynos_drm_ipp_cmd_ctrl()
1097 cmd_work = c_node->stop_work; in exynos_drm_ipp_cmd_ctrl()
1099 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1101 if (!wait_for_completion_timeout(&c_node->stop_complete, in exynos_drm_ipp_cmd_ctrl()
1104 c_node->property.prop_id); in exynos_drm_ipp_cmd_ctrl()
1107 c_node->state = IPP_STATE_STOP; in exynos_drm_ipp_cmd_ctrl()
1110 c_node->state = IPP_STATE_START; in exynos_drm_ipp_cmd_ctrl()
1111 cmd_work = c_node->start_work; in exynos_drm_ipp_cmd_ctrl()
1113 ipp_handle_cmd_work(dev, ippdrv, cmd_work, c_node); in exynos_drm_ipp_cmd_ctrl()
1203 struct drm_exynos_ipp_cmd_node *c_node) in ipp_start_property() argument
1206 struct drm_exynos_ipp_property *property = &c_node->property; in ipp_start_property()
1213 ippdrv->c_node = c_node; in ipp_start_property()
1215 mutex_lock(&c_node->mem_lock); in ipp_start_property()
1216 if (!ipp_check_mem_list(c_node)) { in ipp_start_property()
1226 ippdrv->c_node = NULL; in ipp_start_property()
1235 head = &c_node->mem_list[i]; in ipp_start_property()
1242 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1251 head = &c_node->mem_list[EXYNOS_DRM_OPS_DST]; in ipp_start_property()
1254 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1263 head = &c_node->mem_list[EXYNOS_DRM_OPS_SRC]; in ipp_start_property()
1266 ret = ipp_set_mem_node(ippdrv, c_node, m_node); in ipp_start_property()
1278 mutex_unlock(&c_node->mem_lock); in ipp_start_property()
1287 ippdrv->c_node = NULL; in ipp_start_property()
1295 mutex_unlock(&c_node->mem_lock); in ipp_start_property()
1296 ippdrv->c_node = NULL; in ipp_start_property()
1302 struct drm_exynos_ipp_cmd_node *c_node) in ipp_stop_property() argument
1304 struct drm_exynos_ipp_property *property = &c_node->property; in ipp_stop_property()
1317 ipp_clean_mem_nodes(drm_dev, c_node, i); in ipp_stop_property()
1320 ipp_clean_mem_nodes(drm_dev, c_node, EXYNOS_DRM_OPS_DST); in ipp_stop_property()
1323 ipp_clean_mem_nodes(drm_dev, c_node, EXYNOS_DRM_OPS_SRC); in ipp_stop_property()
1338 struct drm_exynos_ipp_cmd_node *c_node; in ipp_sched_cmd() local
1348 c_node = cmd_work->c_node; in ipp_sched_cmd()
1349 if (!c_node) { in ipp_sched_cmd()
1354 mutex_lock(&c_node->lock); in ipp_sched_cmd()
1356 property = &c_node->property; in ipp_sched_cmd()
1361 ret = ipp_start_property(ippdrv, c_node); in ipp_sched_cmd()
1364 c_node->property.prop_id); in ipp_sched_cmd()
1376 (&c_node->start_complete, msecs_to_jiffies(200))) { in ipp_sched_cmd()
1378 c_node->property.prop_id); in ipp_sched_cmd()
1386 c_node); in ipp_sched_cmd()
1392 complete(&c_node->stop_complete); in ipp_sched_cmd()
1402 mutex_unlock(&c_node->lock); in ipp_sched_cmd()
1406 struct drm_exynos_ipp_cmd_node *c_node, int *buf_id) in ipp_send_event() argument
1409 struct drm_exynos_ipp_property *property = &c_node->property; in ipp_send_event()
1432 mutex_lock(&c_node->event_lock); in ipp_send_event()
1433 if (list_empty(&c_node->event_list)) { in ipp_send_event()
1439 mutex_lock(&c_node->mem_lock); in ipp_send_event()
1440 if (!ipp_check_mem_list(c_node)) { in ipp_send_event()
1451 head = &c_node->mem_list[i]; in ipp_send_event()
1460 ret = ipp_put_mem_node(drm_dev, c_node, m_node); in ipp_send_event()
1472 m_node = ipp_find_mem_node(c_node, &qbuf); in ipp_send_event()
1481 ret = ipp_put_mem_node(drm_dev, c_node, m_node); in ipp_send_event()
1487 head = &c_node->mem_list[EXYNOS_DRM_OPS_SRC]; in ipp_send_event()
1494 ret = ipp_put_mem_node(drm_dev, c_node, m_node); in ipp_send_event()
1503 mutex_unlock(&c_node->mem_lock); in ipp_send_event()
1515 e = list_first_entry(&c_node->event_list, in ipp_send_event()
1532 mutex_unlock(&c_node->event_lock); in ipp_send_event()
1540 mutex_unlock(&c_node->mem_lock); in ipp_send_event()
1542 mutex_unlock(&c_node->event_lock); in ipp_send_event()
1551 struct drm_exynos_ipp_cmd_node *c_node; in ipp_sched_event() local
1567 c_node = ippdrv->c_node; in ipp_sched_event()
1568 if (!c_node) { in ipp_sched_event()
1579 if (c_node->state != IPP_STATE_START) { in ipp_sched_event()
1581 c_node->state, c_node->property.prop_id); in ipp_sched_event()
1585 ret = ipp_send_event(ippdrv, c_node, event_work->buf_id); in ipp_sched_event()
1592 if (ipp_is_m2m_cmd(c_node->property.cmd)) in ipp_sched_event()
1593 complete(&c_node->start_complete); in ipp_sched_event()
1681 struct drm_exynos_ipp_cmd_node *c_node, *tc_node; in ipp_subdrv_close() local
1686 list_for_each_entry_safe(c_node, tc_node, in ipp_subdrv_close()
1691 if (c_node->filp == file) { in ipp_subdrv_close()
1698 if (c_node->state == IPP_STATE_START) { in ipp_subdrv_close()
1700 c_node); in ipp_subdrv_close()
1701 c_node->state = IPP_STATE_STOP; in ipp_subdrv_close()
1705 ipp_clean_cmd_node(ctx, c_node); in ipp_subdrv_close()