Chameleon

Chameleon Svn Source Tree

Root/branches/cparm/i386/modules/HibernateEnabler/HibernateEnabler.c

1/*
2 * HibernateEnabler.c
3 * Chameleon
4 *
5 * Created by cparm.
6 */
7
8#include "bootstruct.h"
9#include "modules.h"
10#include "resume.h"
11#include "sl.h"
12#include "graphic_utils.h"
13
14#define kWake"Wake"/* boot.c */
15#define kForceWake"ForceWake"/* boot.c */
16#define kWakeImage"WakeImage"/* boot.c */
17#define kEnableHibernate"EnableHibernateModule"
18
19void HibernateEnabler_hook(void* arg1, void* arg2, void* arg3, void* arg4, void* arg5, void* arg6)
20{
21bool tryresume,tryresumedefault, forceresume;
22
23if (!getBoolForKey (kWake, &tryresume, &bootInfo->bootConfig))
24{
25tryresume = true;
26tryresumedefault = true;
27}
28else
29{
30tryresumedefault = false;
31}
32
33if (!getBoolForKey (kForceWake, &forceresume, &bootInfo->bootConfig))
34{
35forceresume = false;
36}
37
38if (forceresume)
39{
40tryresume = true;
41tryresumedefault = false;
42}
43
44while (tryresume) {
45const char *tmp, *val;
46int len, ret = -1;
47long flags, sleeptime;
48BVRef bvr;
49if (!getValueForKey(kWakeImage, &val, &len, &bootInfo->bootConfig))
50val="/private/var/vm/sleepimage";
51
52// Do this first to be sure that root volume is mounted
53ret = GetFileInfo(0, val, &flags, &sleeptime);
54
55if ((bvr = getBootVolumeRef(val, &tmp)) == NULL)
56break;
57
58// Can't check if it was hibernation Wake=y is required
59if (bvr->modTime == 0 && tryresumedefault)
60break;
61
62if ((ret != 0) || ((flags & kFileTypeMask) != kFileTypeFlat))
63break;
64
65if (!forceresume && ((sleeptime+3)<bvr->modTime))
66{
67printf ("Hibernate image is too old by %d seconds. Use ForceWake=y to override\n",bvr->modTime-sleeptime);
68break;
69}
70
71HibernateBoot((char *)val);
72break;
73}
74
75}
76
77void HibernateEnabler_start()
78{
79bool enable = true;
80getBoolForKey(kEnableHibernate, &enable, &bootInfo->bootConfig) ;
81
82if (enable)
83{
84register_hook_callback("PreBoot", &HibernateEnabler_hook);
85register_hook_callback("spinActivity_hook", &spinActivityIndicator_hook);
86}
87}

Archive Download this file

Revision: 1525