• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Bestechnic (Shanghai) Co., Ltd. All rights reserved.
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 #ifndef __HAL_SLEEP_H__
16 #define __HAL_SLEEP_H__
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #include "plat_types.h"
23 
24 enum HAL_CPU_WAKE_LOCK_USER_T {
25     HAL_CPU_WAKE_LOCK_USER_RTOS,
26     HAL_CPU_WAKE_LOCK_USER_EXTERNAL,
27     HAL_CPU_WAKE_LOCK_USER_AUDIOFLINGER,
28     HAL_CPU_WAKE_LOCK_USER_3,
29     HAL_CPU_WAKE_LOCK_USER_4,
30     HAL_SYS_WAKE_LOCK_USER_TRANSQ,
31     HAL_CPU_WAKE_LOCK_USER_6,
32     HAL_CPU_WAKE_LOCK_USER_7,
33     HAL_CPU_WAKE_LOCK_USER_8,
34     HAL_CPU_WAKE_LOCK_USER_9,
35     HAL_CPU_WAKE_LOCK_USER_10,
36     HAL_CPU_WAKE_LOCK_USER_11,
37     HAL_CPU_WAKE_LOCK_USER_12,
38     HAL_CPU_WAKE_LOCK_USER_13,
39     HAL_CPU_WAKE_LOCK_USER_14,
40     HAL_CPU_WAKE_LOCK_USER_15,
41     HAL_CPU_WAKE_LOCK_USER_16,
42     HAL_CPU_WAKE_LOCK_USER_17,
43     HAL_CPU_WAKE_LOCK_USER_18,
44     HAL_CPU_WAKE_LOCK_USER_19,
45     HAL_CPU_WAKE_LOCK_USER_20,
46     HAL_CPU_WAKE_LOCK_USER_21,
47     HAL_CPU_WAKE_LOCK_USER_22,
48     HAL_CPU_WAKE_LOCK_USER_23,
49     HAL_CPU_WAKE_LOCK_USER_24,
50     HAL_CPU_WAKE_LOCK_USER_25,
51     HAL_CPU_WAKE_LOCK_USER_26,
52     HAL_CPU_WAKE_LOCK_USER_27,
53     HAL_CPU_WAKE_LOCK_USER_28,
54     HAL_CPU_WAKE_LOCK_USER_29,
55     HAL_CPU_WAKE_LOCK_USER_30,
56     HAL_CPU_WAKE_LOCK_USER_31,
57 
58     HAL_CPU_WAKE_LOCK_USER_QTY
59 };
60 
61 enum HAL_SYS_WAKE_LOCK_USER_T {
62     HAL_SYS_WAKE_LOCK_USER_INTERSYS,
63     HAL_SYS_WAKE_LOCK_USER_INTERSYS_HCI,
64     HAL_SYS_WAKE_LOCK_USER_I2C,
65     HAL_SYS_WAKE_LOCK_USER_3,
66     HAL_SYS_WAKE_LOCK_USER_4,
67     HAL_SYS_WAKE_LOCK_USER_5,
68     HAL_SYS_WAKE_LOCK_USER_6,
69     HAL_SYS_WAKE_LOCK_USER_7,
70     HAL_SYS_WAKE_LOCK_USER_8,
71     HAL_SYS_WAKE_LOCK_USER_9,
72     HAL_SYS_WAKE_LOCK_USER_10,
73     HAL_SYS_WAKE_LOCK_USER_11,
74     HAL_SYS_WAKE_LOCK_USER_12,
75     HAL_SYS_WAKE_LOCK_USER_13,
76     HAL_SYS_WAKE_LOCK_USER_14,
77     HAL_SYS_WAKE_LOCK_USER_15,
78     HAL_SYS_WAKE_LOCK_USER_16,
79     HAL_SYS_WAKE_LOCK_USER_17,
80     HAL_SYS_WAKE_LOCK_USER_18,
81     HAL_SYS_WAKE_LOCK_USER_19,
82     HAL_SYS_WAKE_LOCK_USER_20,
83     HAL_SYS_WAKE_LOCK_USER_21,
84     HAL_SYS_WAKE_LOCK_USER_22,
85     HAL_SYS_WAKE_LOCK_USER_23,
86     HAL_SYS_WAKE_LOCK_USER_24,
87     HAL_SYS_WAKE_LOCK_USER_25,
88     HAL_SYS_WAKE_LOCK_USER_26,
89     HAL_SYS_WAKE_LOCK_USER_27,
90     HAL_SYS_WAKE_LOCK_USER_28,
91     HAL_SYS_WAKE_LOCK_USER_29,
92     HAL_SYS_WAKE_LOCK_USER_30,
93     HAL_SYS_WAKE_LOCK_USER_31,
94 
95     HAL_SYS_WAKE_LOCK_USER_QTY
96 };
97 
98 enum HAL_CHIP_WAKE_LOCK_USER_T {
99     HAL_CHIP_WAKE_LOCK_USER_ANC,
100     HAL_CHIP_WAKE_LOCK_USER_VAD,
101     HAL_CHIP_WAKE_LOCK_USER_CP,
102     HAL_CHIP_WAKE_LOCK_USER_3,
103     HAL_CHIP_WAKE_LOCK_USER_4,
104     HAL_CHIP_WAKE_LOCK_USER_5,
105     HAL_CHIP_WAKE_LOCK_USER_6,
106     HAL_CHIP_WAKE_LOCK_USER_7,
107     HAL_CHIP_WAKE_LOCK_USER_8,
108     HAL_CHIP_WAKE_LOCK_USER_9,
109     HAL_CHIP_WAKE_LOCK_USER_10,
110     HAL_CHIP_WAKE_LOCK_USER_11,
111     HAL_CHIP_WAKE_LOCK_USER_12,
112     HAL_CHIP_WAKE_LOCK_USER_13,
113     HAL_CHIP_WAKE_LOCK_USER_14,
114     HAL_CHIP_WAKE_LOCK_USER_15,
115     HAL_CHIP_WAKE_LOCK_USER_16,
116     HAL_CHIP_WAKE_LOCK_USER_17,
117     HAL_CHIP_WAKE_LOCK_USER_18,
118     HAL_CHIP_WAKE_LOCK_USER_19,
119     HAL_CHIP_WAKE_LOCK_USER_20,
120     HAL_CHIP_WAKE_LOCK_USER_21,
121     HAL_CHIP_WAKE_LOCK_USER_22,
122     HAL_CHIP_WAKE_LOCK_USER_23,
123     HAL_CHIP_WAKE_LOCK_USER_24,
124     HAL_CHIP_WAKE_LOCK_USER_25,
125     HAL_CHIP_WAKE_LOCK_USER_26,
126     HAL_CHIP_WAKE_LOCK_USER_27,
127     HAL_CHIP_WAKE_LOCK_USER_28,
128     HAL_CHIP_WAKE_LOCK_USER_29,
129     HAL_CHIP_WAKE_LOCK_USER_30,
130     HAL_CHIP_WAKE_LOCK_USER_31,
131 
132     HAL_CHIP_WAKE_LOCK_USER_QTY
133 };
134 
135 enum HAL_SLEEP_HOOK_USER_T {
136     HAL_SLEEP_HOOK_USER_NVRECORD = 0,
137     HAL_SLEEP_HOOK_USER_OTA,
138     HAL_SLEEP_HOOK_NORFLASH_API,
139     HAL_SLEEP_HOOK_DUMP_LOG,
140     HAL_SLEEP_HOOK_USER_QTY
141 };
142 
143 enum HAL_DEEP_SLEEP_HOOK_USER_T {
144     HAL_DEEP_SLEEP_HOOK_USER_WDT = 0,
145     HAL_DEEP_SLEEP_HOOK_USER_NVRECORD,
146     HAL_DEEP_SLEEP_HOOK_USER_OTA,
147     HAL_DEEP_SLEEP_HOOK_NORFLASH_API,
148     HAL_DEEP_SLEEP_HOOK_DUMP_LOG,
149     HAL_DEEP_SLEEP_HOOK_USER_QTY
150 };
151 
152 enum HAL_SLEEP_STATUS_T {
153     HAL_SLEEP_STATUS_DEEP,
154     HAL_SLEEP_STATUS_LIGHT,
155 };
156 
157 enum HAL_PM_USER_TYPE_T {
158     HAL_PM_USER_HAL,
159     HAL_PM_USER_DRV,
160     HAL_PM_USER_APP_LOW_LEVEL,
161     HAL_PM_USER_APP_MED_LEVEL,
162     HAL_PM_USER_APP_HI_LEVEL,
163 
164     HAL_PM_USER_QTY,
165 };
166 
167 enum HAL_PM_STATE_T {
168     HAL_PM_STATE_NORMAL_SLEEP,
169     HAL_PM_STATE_NORMAL_WAKEUP,
170     HAL_PM_STATE_POWER_DOWN_SLEEP,
171     HAL_PM_STATE_POWER_DOWN_WAKEUP,
172 
173     HAL_PM_STATE_QTY,
174 };
175 
176 struct CPU_USAGE_T {
177     uint8_t busy;
178     uint8_t light_sleep;
179     uint8_t sys_deep_sleep;
180     uint8_t chip_deep_sleep;
181 };
182 
183 typedef int (*HAL_SLEEP_HOOK_HANDLER)(void);
184 typedef int (*HAL_DEEP_SLEEP_HOOK_HANDLER)(void);
185 typedef int (*HAL_PM_NOTIF_HANDLER)(enum HAL_PM_STATE_T state);
186 
187 int hal_sleep_irq_pending(void);
188 
189 int hal_sleep_specific_irq_pending(const uint32_t *irq, uint32_t cnt);
190 
191 enum HAL_SLEEP_STATUS_T hal_sleep_enter_sleep(void);
192 
193 enum HAL_SLEEP_STATUS_T hal_sleep_light_sleep(void);
194 
195 int hal_sleep_set_sleep_hook(enum HAL_SLEEP_HOOK_USER_T user, HAL_SLEEP_HOOK_HANDLER handler);
196 
197 int hal_sleep_set_deep_sleep_hook(enum HAL_DEEP_SLEEP_HOOK_USER_T user, HAL_DEEP_SLEEP_HOOK_HANDLER handler);
198 
199 int hal_cpu_wake_lock(enum HAL_CPU_WAKE_LOCK_USER_T user);
200 
201 int hal_cpu_wake_unlock(enum HAL_CPU_WAKE_LOCK_USER_T user);
202 
203 int hal_sys_wake_lock(enum HAL_SYS_WAKE_LOCK_USER_T user);
204 
205 int hal_sys_wake_unlock(enum HAL_SYS_WAKE_LOCK_USER_T user);
206 
207 int hal_chip_wake_lock(enum HAL_CHIP_WAKE_LOCK_USER_T user);
208 
209 int hal_chip_wake_unlock(enum HAL_CHIP_WAKE_LOCK_USER_T user);
210 
211 void hal_sleep_power_down_enable(void);
212 
213 void hal_sleep_power_down_disable(void);
214 
215 int hal_pm_notif_register(enum HAL_PM_USER_TYPE_T user, HAL_PM_NOTIF_HANDLER handler);
216 
217 int hal_pm_notif_deregister(enum HAL_PM_USER_TYPE_T user, HAL_PM_NOTIF_HANDLER handler);
218 
219 void hal_sleep_start_stats(uint32_t stats_interval_ms, uint32_t trace_interval_ms);
220 
221 int hal_sleep_get_stats(struct CPU_USAGE_T *usage);
222 
223 #ifdef __cplusplus
224 }
225 #endif
226 
227 #endif
228 
229