blob: 7673d9d5bdda5f5b66b45afb6cf2681357f02d97 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2018
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37*
38* Filename:
39* ---------
40* mer_service_task.h
41*
42* Project:
43* --------
44* MERTOS
45*
46* Description:
47* ------------
48* Declare data structures and functions for tasks.
49*
50* Author:
51* -------
52 * -------
53*
54*****************************************************************************/
55
56#ifndef _MER_SERVICE_TASK_H_
57#define _MER_SERVICE_TASK_H_
58
59#include "mer_service_list.h"
60#include "mer_service_types.h"
61#include "mer_kernel_config_public.h"
62
63
64#define MER_SERVICE_TASK_GET_TASKID_BYINDEX(tindex) &mer_kernel_task_info_table[tindex]
65#define MER_SERVICE_TASK_GET_TASKID_BYNAME(tname) MER_SERVICE_TASK_GET_TASKID_BYINDEX(TINDEX_##tname)
66
67#define MER_SERVICE_TASK_NAME_LEN 60
68
69typedef enum
70{
71 MER_SERVICE_TYPE_TASK = 0,
72 MER_SERVICE_TYPE_DPC = 1,
73 MER_SERVICE_TYPE_NONE,
74} mer_service_job_type;
75
76typedef enum
77{
78 MER_SERVICE_WAIT = 1,
79 MER_SERVICE_RUN = 2,
80 MER_SERVICE_NO_ACTIVATE = 3,
81 MER_SERVICE_SUSPEND_BEGIN = 4,
82 MER_SERVICE_QUEUE_SUSPEND = 5,
83 MER_SERVICE_EVENT_SUSPEND = 6,
84 MER_SERVICE_SLEEP_SUSPEND = 7,
85 MER_SERVICE_SEMA_SUSPEND = 8,
86 MER_SERVICE_ENHMUTEX_SUSPEND = 9,
87 MER_SERVICE_SUSPEND_END = 10,
88} mer_service_task_state;
89
90typedef void(*mer_service_task_main_func)(void);
91typedef void(*mer_service_task_init_func)(void);
92
93struct _mer_service_mail_queue;
94typedef struct _mer_service_mail_queue *mer_service_mq_id;
95
96struct _mer_service_sync_enhanced_mutex;
97typedef struct _mer_service_sync_enhanced_mutex *mer_service_sync_enhanced_mutex_id;
98
99typedef struct
100{
101 mer_mem_ptr stack_ptr;
102 mer_uint32 affinity_mask;
103 mer_char name[MER_SERVICE_TASK_NAME_LEN];
104 mer_service_task_state state;
105 mer_uint8 job_index;
106 mer_service_job_type job_type;
107 mer_uint32 context;
108 mer_mem_ptr stack_end;
109 mer_service_task_main_func func_main;
110 mer_uint32 last_execution_vpe;
111 mer_uint32 stack_size;
112 mer_service_mq_id mq;
113 mer_service_sync_enhanced_mutex_id wait_enhmutex;
114 mer_service_dlist owned_enhmutex_dlist;
115 mer_uint8 inheritor_task_index;
116 mer_uint8 priority;
117 mer_service_task_init_func func_init;
118 mer_mem_ptr reset_stack_ptr;
119 mer_uint32 initial_affinity_mask;
120 mer_uint32 suspend_max_delay;
121} mer_service_task_cb;
122typedef mer_service_task_cb *mer_service_task_id;
123
124extern mer_service_task_cb mer_kernel_task_info_table[];
125
126void mer_service_task_init();
127
128MER_STATUS mer_service_task_create
129(
130 mer_service_task_state state,
131 mer_uint32 priority,
132 mer_uint32 stack_size,
133 mer_mem_ptr stack_ptr
134);
135
136void mer_service_task_show(mer_service_task_id taskid);
137
138
139// DPC
140typedef void(*mer_service_dpc_func)(void);
141
142typedef struct
143{
144 mer_mem_ptr stack_ptr;
145 mer_uint32 affinity_mask;
146 mer_char name[MER_SERVICE_TASK_NAME_LEN];
147 mer_service_task_state state;
148 mer_uint8 job_index;
149 mer_service_job_type job_type;
150 mer_uint32 context;
151 mer_mem_ptr stack_end;
152 mer_service_dpc_func func_handle;
153 mer_uint32 last_execution_vpe;
154 mer_uint32 priority;
155 mer_uint32 invoke_count;
156 mer_uint32 stack_size;
157 mer_uint8 next_dpc[MIPS_HW_VPE_NUM];
158 mer_uint8 prev_dpc[MIPS_HW_VPE_NUM];
159 mer_uint32 initial_affinity_mask;
160} mer_service_dpc_cb;
161typedef mer_service_dpc_cb *mer_service_dpc_id;
162
163void mer_service_dpc_show(mer_service_dpc_id dpcid);
164
165#endif /* _MER_SERVICE_TASK_H_ */