1 /* 2 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef BASE_STARTUP_INITLITE_STAGE_H 17 #define BASE_STARTUP_INITLITE_STAGE_H 18 19 #include "init_sync.h" 20 #include <sys/ioctl.h> 21 #include <unistd.h> 22 23 #ifdef __cplusplus 24 #if __cplusplus 25 extern "C" { 26 #endif 27 #endif 28 29 typedef enum { 30 QS_STAGE1 = 1, /* 1: start from stage1, 0 is already called in kernel process */ 31 QS_STAGE2, /* system init stage No 2 */ 32 QS_STAGE3, /* system init stage No 3 */ 33 QS_STAGE_LIMIT 34 } QuickstartStage; 35 36 typedef enum { 37 QS_NOTIFY = QS_STAGE_LIMIT, /* quickstart notify */ 38 QS_LISTEN, /* quickstart listen */ 39 QS_CTL_LIMIT 40 } QuickstartConctrl; 41 42 typedef struct { 43 unsigned int events; 44 unsigned int wait; 45 } QuickstartListenArgs; 46 47 #define QUICKSTART_IOC_MAGIC 'T' 48 #define QUICKSTART_NOTIFY _IO(QUICKSTART_IOC_MAGIC, QS_NOTIFY) 49 #define QUICKSTART_LISTEN _IOR(QUICKSTART_IOC_MAGIC, QS_LISTEN, QuickstartListenArgs) 50 #define QUICKSTART_STAGE(x) _IO(QUICKSTART_IOC_MAGIC, (x)) 51 52 #define QUICKSTART_NODE "/dev/quickstart" 53 54 /* Simple sample Usage: 55 * INIT PROCESS 56 * SystemInitStage(QS_STAGE1)----(1)fork----> key APP 57 * |(2) |(3) 58 * InitListen<-------------------(4)---------- NotifyInit 59 * |(5) 60 * SystemInitStage(QS_STAGE2)----(6)fork---------------------> other APP 61 * |... 62 * InitStageFinished 63 */ 64 65 /* 66 * Listen the events of a specific pid process by Init process. 67 * Only be called by Init process. 68 * eventMask: There needs to be a consensus between the listener and the notifier. 69 */ 70 extern int InitListen(unsigned long eventMask, unsigned int wait); 71 72 /* 73 * Trigger the SystemInit stage. 74 * Only be called by Init process. 75 */ 76 extern int SystemInitStage(QuickstartStage stage); 77 78 /* 79 * InitStage finished. 80 * Only be called by Init process. 81 */ 82 extern int InitStageFinished(void); 83 84 /* 85 * Listen event and trigger the SystemInit stage. 86 * Only be called by Init process. 87 */ 88 extern void TriggerStage(unsigned int event, unsigned int wait, QuickstartStage stagelevel); 89 #ifdef __cplusplus 90 #if __cplusplus 91 } 92 #endif 93 #endif 94 95 #endif // BASE_STARTUP_INITLITE_STAGE_H 96