79831aa1b974d3980237318ec7b079d080b9a6ab
[staging/basesystem.git] / service / system / task_manager / server / include / system_service / tskm_local_type.h
1 /*
2  * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 /**
17  * @file tskm_local_type.h
18  * @brief \~english localtype of tskm
19  */
20 /** @addtogroup BaseSystem
21  *  @{
22  */
23 /** @addtogroup system_service
24  *  @ingroup BaseSystem
25  *  @{
26  */
27 /** @addtogroup task_manager
28  *  @ingroup system_service
29  *  @{
30  */
31 #ifndef TASK_MANAGER_SERVER_INCLUDE_SYSTEM_SERVICE_TSKM_LOCAL_TYPE_H_
32 #define TASK_MANAGER_SERVER_INCLUDE_SYSTEM_SERVICE_TSKM_LOCAL_TYPE_H_
33
34
35 #include <stdint.h>
36 #include <sys/types.h>
37 #include <native_service/frameworkunified_types.h>
38 #include "system_service/INI_API.hpp"
39 #include "system_service/tskm_type.h"
40
41 //==================================================
42 //  Configuration
43 //==================================================
44
45 #if 1
46 #define TSKM_CFG_WAIT_SHUTDOWN 10000
47 #else
48 #define TSKM_CFG_WAIT_SHUTDOWN 1      // Handy for test
49 #warning TSKM_CFG_WAIT_SHUTDOWN is temorary
50 #endif
51
52 #define TSKM_CFG_TOUCH_TIMEOUT     2  // TOUCH time-out
53
54 //==================================================
55 //  Task manager internal
56 //==================================================
57 // State
58 #define TSKM_ST_ACCOFF      0x01000000U   // ACC-OFF (Default) No transition here
59 #define TSKM_ST_ACCON       0x02000000U   // ACC-ON
60 #define TSKM_ST_WAKEUP      0x02010000U   // Gradual startup
61 #define TSKM_ST_RUNNING     0x02020000U   // Running (Startup completed)
62 #define TSKM_ST_DOWN        0x02040000U   // Gradual Terminating
63
64 typedef uint32_t TSKM_STATE_t;
65 #define TSKM_STATE_MASK0    0xFF000000U
66 #define TSKM_STATE_MASK1    0xFFFF0000U
67 #define TSKM_STATE_MASK2    0xFFFFFF00U
68 #define TSKM_STATE_MASK3    0xFFFFFFFFU
69
70 // Global step IDs for gradual starting
71 typedef uint32_t TSKM_GLOBAL_STEP_t;
72 #define TSKM_GSTEP_NONE        0x00000000U  //
73 #define TSKM_GSTEP_BUPCHK      0x00000001U
74
75 // Local step
76 typedef uint32_t TSKM_LOCAL_STEP_t;
77 #define TSKM_LSTEP_LAST   0xFFFFFFF0U   // Executing to end of local steps
78 #define TSKM_LSTEP_SHM    0xFFFFFFF1U   // Creating shared memory
79 #define TSKM_LSTEP_BUPCHK 0xFFFFFFF2U   // Checking backup memory
80 #define TSKM_LSTEP_ALL    0xFFFFFFF3U   // Executing all user definitions
81
82 /************************************************************
83  *  Structure of gradual startup/termination structure
84     (When this structure is modified, structure of parsexml is also changed)
85  *************************************************************/
86 // Structure of request for services
87 typedef struct {
88   TSKM_SVCID_t svcId;           // Service ID
89   TSKM_LOCAL_STEP_t localStep;  // Local step number
90 } TSKM_GSTEP_REQ_INFO_t;
91
92 // Structure of gradual startup/termination
93 typedef struct {
94   uint32_t gstepId;
95
96   // List of executing services
97   uint32_t execSvcNum;
98   TSKM_SVCID_t* execSvcIdList;
99
100   // List of request
101   uint32_t reqNum;
102   TSKM_GSTEP_REQ_INFO_t* reqList;
103
104   // Event completion wait conditions
105   uint64_t nextTransCond;
106 } TSKM_GSTEP_t;
107
108 typedef struct {
109   uint32_t gstepIdx;            // Step index
110   uint32_t gstepNum;            // Step number
111   TSKM_GSTEP_t* gstep;          // Gradual startup/termination info
112   uint64_t compState;           // Status of receiving for Event completion notification
113 } TSKM_GSTEP_CTX_t;
114
115 //********* Non-volatile management information ****************
116
117 #define TSKM_NV_STRUCT_VERSION  "v000"  // Compatible version of non-volatile management structure 
118 #define TSKM_SVC_RESERVE_MAX    (8)     // Maximum number of reserved services to startup
119
120 #define TSKM_NV_SIZE_ALL     (512)
121 #define TSKM_NV_SIZE_HEADER   (32)
122 #define TSKM_NV_SIZE_FOOTER   (32)
123 #define TSKM_NV_SIZE_BODY   (TSKM_NV_SIZE_ALL - TSKM_NV_SIZE_HEADER - TSKM_NV_SIZE_FOOTER)
124
125 // Header
126 typedef struct {
127   char version[5];
128 } TSKM_NV_HEADER_t;
129
130 // Footer
131 typedef struct {
132   uint32_t checkSum;
133 } TSKM_NV_FOOTER_t;
134
135 // Body
136 typedef struct {
137   uint8_t rsvSvcNum;                            // Number of reserved services
138   TSKM_SVCID_t rsvSvcs[TSKM_SVC_RESERVE_MAX];   // List of services
139 } TSKM_NV_BODY_t;
140
141 // Non-volatile storage info
142 typedef struct {
143   TSKM_NV_HEADER_t header;
144   uint8_t rsvHeader[TSKM_NV_SIZE_HEADER - sizeof(TSKM_NV_HEADER_t)];
145   TSKM_NV_BODY_t body;
146   uint8_t rsvBody[TSKM_NV_SIZE_BODY - sizeof(TSKM_NV_BODY_t)];
147   uint8_t rsvFooter[TSKM_NV_SIZE_FOOTER - sizeof(TSKM_NV_FOOTER_t)];
148   TSKM_NV_FOOTER_t footer;
149 } TSKM_NV_INFO_t;
150
151 // Internal event
152 typedef enum {
153   TSKM_EV_NOP,                  // Do nothing
154   // TSKM->PRI
155   TSKM_EV_PRI_REQ_WAKEUP,       // Startup request
156   TSKM_EV_PRI_REQ_DOWN,         // Termination request
157   TSKM_EV_PRI_REQ_TOUCH,
158   TSKM_EV_PRI_REQ_DEBUGDUMP,    // DebugDump request
159   TSKM_EV_PRI_REP_LOWMEM,       // LowMemory detection request
160
161   // PRI->TSKM(SVC)
162   TSKM_EV_PRI_REP_WAKEUP_COMP,  // Notification of event completion at startup
163   TSKM_EV_PRI_REP_DOWN_COMP,    // Notification of event completion at termination
164   TSKM_EV_PRI_REP_CONNECT,      // Connecting
165   TSKM_EV_PRI_REP_DISCONNECT,   // Disconnecting
166   TSKM_EV_PRI_RES_WAKEUP,       // Response to startup request
167   TSKM_EV_PRI_RES_DOWN,         // Response to termination request
168   TSKM_EV_PRI_RES_DEBUGDUMP,    // Response to DebugDump request
169   TSKM_EV_PRI_REQ_EXIT,         // Response to terminating request
170
171   // SVC->TSKM
172   TSKM_EV_SVC_REP_TERM,         // Termination of service
173
174   // APL->TSKM
175   TSKM_EV_API_REQ_REBOOT,       // Reboot system
176   TSKM_EV_API_REQ_SVC_CTL,      // Startup service
177   TSKM_EV_API_REQ_SVC_DISABLE,  // Prohibit starting service
178
179   // Internal message
180   TSKM_EV_LCL_REQ_STOP,         // Termination request
181   TSKM_EV_LCL_CHG_SVC_STATE,    // State Change of service
182   TSKM_EV_LCL_REQ_SDUMP,        // Dump of service list
183   TSKM_EV_LCL_REP_TIMEOUT,      // Occured Timeout
184   TSKM_EV_LCL_REP_POLLING,      // Polling request
185   TSKM_EV_LCL_REP_LOWMEM,       // Notification of LowMemory detection
186   TSKM_EV_LCL_REQ_TRANS_STEP,   // Gradual transitioning request
187 } TSKM_EVENT_t;
188
189 #define TSKM_EV_BOOTINFO_SIZE    sizeof(T_SS_SM_START_DataStructType)
190 #define TSKM_EV_EXTBOOTINFO_SIZE sizeof(T_SS_SM_START_ExtDataStructType)
191
192 typedef struct {
193   TSKM_SVCID_t svcId;
194   TSKM_LOCAL_STEP_t localStep;
195   char bootInfo[TSKM_EV_BOOTINFO_SIZE];
196   char extBootInfo[TSKM_EV_EXTBOOTINFO_SIZE];
197   TSKM_BOOL_t isDynamic;  // Nonresident task?
198 } TSKM_EV_PRI_REQ_WAKEUP_PRM_t;
199
200 typedef struct {
201   TSKM_LOCAL_STEP_t localStep;
202 } TSKM_EV_PRI_REQ_DOWN_PRM_t;
203
204 // PRI->TSKM
205 typedef struct {
206   uint64_t compId;
207 } TSKM_EV_PRI_REP_WAKEUP_COMP_PRM_t;
208
209 typedef struct {
210   uint64_t compId;
211 } TSKM_EV_PRI_REP_DOWN_COMP_PRM_t;
212
213 typedef struct {
214   int connFd;
215 } TSKM_EV_PRI_REP_CONNECT_PRM_t;
216
217 typedef struct {
218   TSKM_BOOL_t isLast;
219   TSKM_BOOL_t isShmDone;
220   TSKM_BOOL_t isStepDone;
221 } TSKM_EV_PRI_RES_WAKEUP_PRM_t;
222
223 typedef struct {
224   TSKM_BOOL_t isLast;
225 } TSKM_EV_PRI_RES_DOWN_PRM_t;
226
227 #define TSKM_EV_DEBUGDUMP_SIZE 4096
228
229 typedef struct {
230   char dumpMsg[TSKM_EV_DEBUGDUMP_SIZE];
231 } TSKM_EV_PRI_EX_RES_DEBUGDUMP_PRM_t;
232
233 // APL->TSKM
234
235 // Internal message
236 typedef struct {
237   TSKM_SVCID_t svcId;
238 } TSKM_EV_LCL_CHG_SVC_STATE_PRM_t;
239
240 // The structure must be on a stack
241 typedef struct _TSKM_EVENT_INFO_t {
242   TSKM_EVENT_t event;
243   TSKM_ERR_t errCode;
244   pid_t fromPid;
245   TSKM_BOOL_t hasExtend;
246   uint32_t extendSize;
247   void *extendPrm;
248   union {
249     // TSKM->PRI
250     TSKM_EV_PRI_REQ_WAKEUP_PRM_t reqWakeup;
251     TSKM_EV_PRI_REQ_DOWN_PRM_t reqDown;
252
253     // PRI->TSKM
254     TSKM_EV_PRI_REP_WAKEUP_COMP_PRM_t repWakeupComp;
255     TSKM_EV_PRI_REP_DOWN_COMP_PRM_t repDownComp;
256     TSKM_EV_PRI_REP_CONNECT_PRM_t repConnect;
257     TSKM_EV_PRI_RES_WAKEUP_PRM_t resWakeup;
258     TSKM_EV_PRI_RES_DOWN_PRM_t resDown;
259
260     // Internal message
261     TSKM_EV_LCL_CHG_SVC_STATE_PRM_t chgSvc;
262   } prm;
263   _TSKM_EVENT_INFO_t() {
264     event = TSKM_EV_NOP;
265     errCode = TSKM_E_OK;
266     fromPid = 0;
267     hasExtend = TSKM_FALSE;
268     extendSize = 0;
269     extendPrm = NULL;
270   }
271   ~_TSKM_EVENT_INFO_t() {
272     if (hasExtend && !extendPrm) {
273       free(extendPrm);
274     }
275   }
276 } TSKM_EVENT_INFO_t;
277
278 typedef enum {
279   TSKM_DATAINIT_REQ = 800,
280   TSKM_DATAINIT_RESP,
281   TSKM_TRANS_STEP_REQ
282 } TSKM_PROTCOL_t;
283
284 #endif  // TASK_MANAGER_SERVER_INCLUDE_SYSTEM_SERVICE_TSKM_LOCAL_TYPE_H_
285 /** @}*/
286 /** @}*/
287 /** @}*/