xref: /rockchip-linux_mpp/mpp/hal/inc/hal_task.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __HAL_TASK__
18*437bfbebSnyanmisaka #define __HAL_TASK__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "rk_type.h"
21*437bfbebSnyanmisaka #include "mpp_err.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka typedef enum HalTaskStatus_e {
24*437bfbebSnyanmisaka     TASK_IDLE,
25*437bfbebSnyanmisaka     TASK_PROCESSING,
26*437bfbebSnyanmisaka     TASK_PROC_DONE,
27*437bfbebSnyanmisaka     TASK_BUTT,
28*437bfbebSnyanmisaka } HalTaskStatus;
29*437bfbebSnyanmisaka 
30*437bfbebSnyanmisaka typedef void* HalTaskHnd;
31*437bfbebSnyanmisaka typedef void* HalTaskGroup;
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka #ifdef __cplusplus
34*437bfbebSnyanmisaka extern "C" {
35*437bfbebSnyanmisaka #endif
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka /*
38*437bfbebSnyanmisaka  * group init / deinit will be called by hal
39*437bfbebSnyanmisaka  * HalTaskGroup is a group of task list with status
40*437bfbebSnyanmisaka  */
41*437bfbebSnyanmisaka MPP_RET hal_task_group_init(HalTaskGroup *group, RK_S32 stage_cnt,
42*437bfbebSnyanmisaka                             RK_S32 task_cnt, RK_S32 task_size);
43*437bfbebSnyanmisaka MPP_RET hal_task_group_deinit(HalTaskGroup group);
44*437bfbebSnyanmisaka 
45*437bfbebSnyanmisaka /*
46*437bfbebSnyanmisaka  * normal working flow:
47*437bfbebSnyanmisaka  *
48*437bfbebSnyanmisaka  * dec:
49*437bfbebSnyanmisaka  *
50*437bfbebSnyanmisaka  * - codec
51*437bfbebSnyanmisaka  * hal_task_get_hnd(group, idle, hnd)       - dec try get idle task to work
52*437bfbebSnyanmisaka  * hal_task_hnd_set_status(hnd, prepare)    - dec prepare the task
53*437bfbebSnyanmisaka  * codec prepare task
54*437bfbebSnyanmisaka  * hal_task_hnd_set_status(hnd, wait_proc)  - dec send the task to hardware queue
55*437bfbebSnyanmisaka  *
56*437bfbebSnyanmisaka  * - hal
57*437bfbebSnyanmisaka  * hal_task_get_hnd(group, wait_proc, hnd)  - hal get task on wait_proc status
58*437bfbebSnyanmisaka  * hal start task
59*437bfbebSnyanmisaka  * hal_task_set_hnd(hnd, processing)        - hal send task to hardware for process
60*437bfbebSnyanmisaka  * hal wait task done
61*437bfbebSnyanmisaka  * hal_task_set_hnd(hnd, proc_done)         - hal mark task is finished
62*437bfbebSnyanmisaka  *
63*437bfbebSnyanmisaka  * - codec
64*437bfbebSnyanmisaka  * hal_task_get_hnd(group, task_done, hnd)  - codec query the previous finished task
65*437bfbebSnyanmisaka  * codec do error process on task
66*437bfbebSnyanmisaka  * hal_task_set_hnd(hnd, idle)              - codec mark task is idle
67*437bfbebSnyanmisaka  *
68*437bfbebSnyanmisaka  */
69*437bfbebSnyanmisaka MPP_RET hal_task_get_hnd(HalTaskGroup group, RK_S32 status, HalTaskHnd *hnd);
70*437bfbebSnyanmisaka RK_S32  hal_task_get_count(HalTaskGroup group, RK_S32 status);
71*437bfbebSnyanmisaka MPP_RET hal_task_hnd_set_status(HalTaskHnd hnd, RK_S32 status);
72*437bfbebSnyanmisaka MPP_RET hal_task_hnd_set_info(HalTaskHnd hnd, void *task);
73*437bfbebSnyanmisaka MPP_RET hal_task_hnd_get_info(HalTaskHnd hnd, void *task);
74*437bfbebSnyanmisaka void   *hal_task_hnd_get_data(HalTaskHnd hnd);
75*437bfbebSnyanmisaka MPP_RET hal_task_check_empty(HalTaskGroup group, RK_S32 status);
76*437bfbebSnyanmisaka 
77*437bfbebSnyanmisaka #ifdef __cplusplus
78*437bfbebSnyanmisaka }
79*437bfbebSnyanmisaka #endif
80*437bfbebSnyanmisaka 
81*437bfbebSnyanmisaka #endif /*__HAL_TASK__*/
82