git log --grep="suspend"
找到 arch 裡的 pm.c pm.c 好像是專屬的 power manager module,雖然結構跟一般的 module 一樣,device, driver 兩個,用
init, exit 插入 kernel symbol list。
但是在 init 時,使用的是
suspend_set_ops
implement 在 ./kernel/power/suspend.c
static struct platform_suspend_ops *suspend_ops;
void suspend_set_ops(struct platform_suspend_ops *ops)
{
mutex_lock(&pm_mutex);
suspend_ops = ops;
mutex_unlock(&pm_mutex);
}
這個 structure 宣告在 include/linux/suspend.h
struct platform_suspend_ops {
int (*valid)(suspend_state_t state);
int (*begin)(suspend_state_t state);
int (*prepare)(void);
int (*prepare_late)(void);
int (*enter)(suspend_state_t state);
void (*wake)(void);
void (*finish)(void);
void (*end)(void);
void (*recover)(void);
};
這個 suspend .c 很有趣,就是依照著 platform_suspend_ops 裡面的 function pointer,依照需要的時間來執行。 就是一個 kernel 的 interface 而已。
沒有留言:
張貼留言