xref: /aosp_15_r20/system/chre/platform/embos/init.cc (revision 84e339476a462649f82315436d70fd732297a399)
1*84e33947SAndroid Build Coastguard Worker /*
2*84e33947SAndroid Build Coastguard Worker  * Copyright (C) 2022 The Android Open Source Project
3*84e33947SAndroid Build Coastguard Worker  *
4*84e33947SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*84e33947SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*84e33947SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*84e33947SAndroid Build Coastguard Worker  *
8*84e33947SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*84e33947SAndroid Build Coastguard Worker  *
10*84e33947SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*84e33947SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*84e33947SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*84e33947SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*84e33947SAndroid Build Coastguard Worker  * limitations under the License.
15*84e33947SAndroid Build Coastguard Worker  */
16*84e33947SAndroid Build Coastguard Worker 
17*84e33947SAndroid Build Coastguard Worker #include "chre/core/init.h"
18*84e33947SAndroid Build Coastguard Worker #include "chre/core/event_loop_manager.h"
19*84e33947SAndroid Build Coastguard Worker #include "chre/core/static_nanoapps.h"
20*84e33947SAndroid Build Coastguard Worker #include "chre/embos/init.h"
21*84e33947SAndroid Build Coastguard Worker 
22*84e33947SAndroid Build Coastguard Worker #include "RTOS.h"
23*84e33947SAndroid Build Coastguard Worker 
24*84e33947SAndroid Build Coastguard Worker namespace {
25*84e33947SAndroid Build Coastguard Worker 
26*84e33947SAndroid Build Coastguard Worker constexpr char kChreTaskName[] = "CHRE";
27*84e33947SAndroid Build Coastguard Worker constexpr size_t kChreTaskNameLen = sizeof(kChreTaskName) - 1;
28*84e33947SAndroid Build Coastguard Worker 
29*84e33947SAndroid Build Coastguard Worker // The CHRE task priority was requested to be between the sub_task (prio=60),
30*84e33947SAndroid Build Coastguard Worker // and the main task (prio=100).
31*84e33947SAndroid Build Coastguard Worker constexpr OS_PRIO kChreTaskPriority = 80;
32*84e33947SAndroid Build Coastguard Worker 
33*84e33947SAndroid Build Coastguard Worker // Stack for the CHRE task of size 8KB (2048 * sizeof(uint32_t)).
34*84e33947SAndroid Build Coastguard Worker constexpr size_t kChreTaskStackDepth = 2048;
35*84e33947SAndroid Build Coastguard Worker OS_STACKPTR uint32_t gChreTaskStack[kChreTaskStackDepth];
36*84e33947SAndroid Build Coastguard Worker 
37*84e33947SAndroid Build Coastguard Worker OS_TASK gChreTcb;
38*84e33947SAndroid Build Coastguard Worker 
chreThreadEntry()39*84e33947SAndroid Build Coastguard Worker void chreThreadEntry() {
40*84e33947SAndroid Build Coastguard Worker   chre::init();
41*84e33947SAndroid Build Coastguard Worker   chre::EventLoopManagerSingleton::get()->lateInit();
42*84e33947SAndroid Build Coastguard Worker   chre::loadStaticNanoapps();
43*84e33947SAndroid Build Coastguard Worker 
44*84e33947SAndroid Build Coastguard Worker   chre::EventLoopManagerSingleton::get()->getEventLoop().run();
45*84e33947SAndroid Build Coastguard Worker 
46*84e33947SAndroid Build Coastguard Worker   // we only get here if the CHRE EventLoop exited
47*84e33947SAndroid Build Coastguard Worker   chre::deinit();
48*84e33947SAndroid Build Coastguard Worker }
49*84e33947SAndroid Build Coastguard Worker 
50*84e33947SAndroid Build Coastguard Worker }  // anonymous namespace
51*84e33947SAndroid Build Coastguard Worker 
chreEmbosInit()52*84e33947SAndroid Build Coastguard Worker void chreEmbosInit() {
53*84e33947SAndroid Build Coastguard Worker   OS_CREATETASK(&gChreTcb, kChreTaskName, chreThreadEntry, kChreTaskPriority,
54*84e33947SAndroid Build Coastguard Worker                 gChreTaskStack);
55*84e33947SAndroid Build Coastguard Worker }
56*84e33947SAndroid Build Coastguard Worker 
chreEmbosDeinit()57*84e33947SAndroid Build Coastguard Worker void chreEmbosDeinit() {
58*84e33947SAndroid Build Coastguard Worker   if (OS_IsTask(&gChreTcb)) {
59*84e33947SAndroid Build Coastguard Worker     chre::EventLoopManagerSingleton::get()->getEventLoop().stop();
60*84e33947SAndroid Build Coastguard Worker   }
61*84e33947SAndroid Build Coastguard Worker }
62*84e33947SAndroid Build Coastguard Worker 
getChreTaskName()63*84e33947SAndroid Build Coastguard Worker const char *getChreTaskName() {
64*84e33947SAndroid Build Coastguard Worker   return kChreTaskName;
65*84e33947SAndroid Build Coastguard Worker }
66*84e33947SAndroid Build Coastguard Worker 
getChreTaskNameLen()67*84e33947SAndroid Build Coastguard Worker size_t getChreTaskNameLen() {
68*84e33947SAndroid Build Coastguard Worker   return kChreTaskNameLen;
69*84e33947SAndroid Build Coastguard Worker }
70