syscore作为低功耗流程的一部分,其涉及的文件主要有syscore_ops.h和syscore.c,这一级别的回调函数是在完全屏蔽中断的场景下进行的。
1、主要结构体struct syscore_ops,该结构体是syscore操作的对象类型。
struct syscore_ops {
struct list_head node;//用于链表控制,注册和删除syscore对象时操作此链表完成
int (*suspend)(void);//睡眠流程时回调函数
void (*resume)(void);//唤醒流程时回调函数
void (*shutdown)(void);//这一级别的回调函数主要用于系统级的重启、停止或者掉电时才会使用
};
2、主要接口:
extern void register_syscore_ops(struct syscore_ops *ops);//注册syscore回调函数
extern void unregister_syscore_ops(struct syscore_ops *ops);//取消注册的回调函数
#ifdef CONFIG_PM_SLEEP
extern int syscore_suspend(void);//回调注册的syscore对象的suspend回调函数
extern void syscore_resume(void);//回调注册的syscore对象的resume回调函数
#endif
extern void syscore_shutdown(void);//回调注册的syscore对象的shutdown回调函数
3、具体实现,syscore.c
1)全局变量
static LIST_HEAD(syscore_ops_list);//初始化控制链表头结点,统一