drivers: power: report battery voltage in AOSP compatible format
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / kernel / power / tuxonice.h
1 /*
2 * kernel/power/tuxonice.h
3 *
4 * Copyright (C) 2004-2010 Nigel Cunningham (nigel at tuxonice net)
5 *
6 * This file is released under the GPLv2.
7 *
8 * It contains declarations used throughout swsusp.
9 *
10 */
11
12 #ifndef KERNEL_POWER_TOI_H
13 #define KERNEL_POWER_TOI_H
14
15 #include <linux/delay.h>
16 #include <linux/bootmem.h>
17 #include <linux/suspend.h>
18 #include <linux/fs.h>
19 #include <linux/module.h>
20 #include <asm/setup.h>
21 #include "tuxonice_pageflags.h"
22 #include "power.h"
23
24 #define TOI_CORE_VERSION "3.3"
25 #define TOI_HEADER_VERSION 3
26 #define MY_BOOT_KERNEL_DATA_VERSION 4
27
28 #define HIB_TOI_DEBUG 1
29 #define _TAG_HIB_M "HIB/TOI"
30 #if (HIB_TOI_DEBUG)
31 #undef hib_log
32 #define hib_log(fmt, ...) pr_warn("[%s] [%s()]" fmt, _TAG_HIB_M, __func__, ##__VA_ARGS__);
33 #else
34 #define hib_log(fmt, ...)
35 #endif
36 #undef hib_warn
37 #define hib_warn(fmt, ...) pr_warn("[%s] [%s()]" fmt, _TAG_HIB_M, __func__, ##__VA_ARGS__);
38 #undef hib_err
39 #define hib_err(fmt, ...) pr_err("[%s] [%s()]" fmt, _TAG_HIB_M, __func__, ##__VA_ARGS__);
40
41 #ifdef CONFIG_TOI_FIXUP
42 #define HIB_SHOW_MEMINFO() \
43 do { \
44 hib_warn("%d MEMINFO ---\n", __LINE__); \
45 show_mem(SHOW_MEM_FILTER_NODES|SHOW_MEM_FILTER_PAGE_COUNT); \
46 } while (0)
47 #endif
48
49 struct toi_boot_kernel_data {
50 int version;
51 int size;
52 unsigned long toi_action;
53 unsigned long toi_debug_state;
54 u32 toi_default_console_level;
55 int toi_io_time[2][2];
56 char toi_nosave_commandline[COMMAND_LINE_SIZE];
57 unsigned long pages_used[33];
58 unsigned long incremental_bytes_in;
59 unsigned long incremental_bytes_out;
60 unsigned long compress_bytes_in;
61 unsigned long compress_bytes_out;
62 unsigned long pruned_pages;
63 };
64
65 extern struct toi_boot_kernel_data toi_bkd;
66
67 /* Location of book kernel data struct in kernel being resumed */
68 extern unsigned long boot_kernel_data_buffer;
69
70 /* == Action states == */
71
72 enum {
73 TOI_REBOOT,
74 TOI_PAUSE,
75 TOI_LOGALL,
76 TOI_CAN_CANCEL,
77 TOI_KEEP_IMAGE,
78 TOI_FREEZER_TEST,
79 TOI_SINGLESTEP,
80 TOI_PAUSE_NEAR_PAGESET_END,
81 TOI_TEST_FILTER_SPEED,
82 TOI_TEST_BIO,
83 TOI_NO_PAGESET2,
84 TOI_IGNORE_ROOTFS,
85 TOI_REPLACE_SWSUSP,
86 TOI_PAGESET2_FULL,
87 TOI_ABORT_ON_RESAVE_NEEDED,
88 TOI_NO_MULTITHREADED_IO,
89 TOI_NO_DIRECT_LOAD, /* Obsolete */
90 TOI_LATE_CPU_HOTPLUG,
91 TOI_GET_MAX_MEM_ALLOCD,
92 TOI_NO_FLUSHER_THREAD,
93 TOI_NO_PS2_IF_UNNEEDED,
94 TOI_POST_RESUME_BREAKPOINT,
95 TOI_NO_READAHEAD,
96 };
97
98 extern unsigned long toi_bootflags_mask;
99
100 #define clear_action_state(bit) (test_and_clear_bit(bit, &toi_bkd.toi_action))
101
102 /* == Result states == */
103
104 enum {
105 TOI_ABORTED,
106 TOI_ABORT_REQUESTED,
107 TOI_NOSTORAGE_AVAILABLE,
108 TOI_INSUFFICIENT_STORAGE,
109 TOI_FREEZING_FAILED,
110 TOI_KEPT_IMAGE,
111 TOI_WOULD_EAT_MEMORY,
112 TOI_UNABLE_TO_FREE_ENOUGH_MEMORY,
113 TOI_PM_SEM,
114 TOI_DEVICE_REFUSED,
115 TOI_SYSDEV_REFUSED,
116 TOI_EXTRA_PAGES_ALLOW_TOO_SMALL,
117 TOI_UNABLE_TO_PREPARE_IMAGE,
118 TOI_FAILED_MODULE_INIT,
119 TOI_FAILED_MODULE_CLEANUP,
120 TOI_FAILED_IO,
121 TOI_OUT_OF_MEMORY,
122 TOI_IMAGE_ERROR,
123 TOI_PLATFORM_PREP_FAILED,
124 TOI_CPU_HOTPLUG_FAILED,
125 TOI_ARCH_PREPARE_FAILED, /* Removed Linux-3.0 */
126 TOI_RESAVE_NEEDED,
127 TOI_CANT_SUSPEND,
128 TOI_NOTIFIERS_PREPARE_FAILED,
129 TOI_PRE_SNAPSHOT_FAILED,
130 TOI_PRE_RESTORE_FAILED,
131 TOI_USERMODE_HELPERS_ERR,
132 TOI_CANT_USE_ALT_RESUME,
133 TOI_HEADER_TOO_BIG,
134 TOI_WAKEUP_EVENT,
135 TOI_SYSCORE_REFUSED,
136 TOI_DPM_PREPARE_FAILED,
137 #ifdef CONFIG_TOI_FIXUP
138 /* TOI_DPM_PREPARE_FAILED will exceed the # of bit when set_abort_result(TOI_DPM_SUSPEND_FAILED) is called!!! */
139 TOI_DPM_SUSPEND_FAILED = TOI_DPM_PREPARE_FAILED,
140 #else
141 TOI_DPM_SUSPEND_FAILED,
142 #endif
143 TOI_NUM_RESULT_STATES /* Used in printing debug info only */
144 };
145
146 extern unsigned long toi_result;
147
148 #define set_result_state(bit) (test_and_set_bit(bit, &toi_result))
149 #define set_abort_result(bit) (test_and_set_bit(TOI_ABORTED, &toi_result), \
150 test_and_set_bit(bit, &toi_result))
151 #define clear_result_state(bit) (test_and_clear_bit(bit, &toi_result))
152 #define test_result_state(bit) (test_bit(bit, &toi_result))
153
154 /* == Debug sections and levels == */
155
156 /* debugging levels. */
157 enum {
158 TOI_STATUS = 0,
159 TOI_ERROR = 2,
160 TOI_LOW,
161 TOI_MEDIUM,
162 TOI_HIGH,
163 TOI_VERBOSE,
164 };
165
166 enum {
167 TOI_ANY_SECTION,
168 TOI_EAT_MEMORY,
169 TOI_IO,
170 TOI_HEADER,
171 TOI_WRITER,
172 TOI_MEMORY,
173 TOI_PAGEDIR,
174 TOI_COMPRESS,
175 TOI_BIO,
176 };
177
178 #define set_debug_state(bit) (test_and_set_bit(bit, &toi_bkd.toi_debug_state))
179 #define clear_debug_state(bit) \
180 (test_and_clear_bit(bit, &toi_bkd.toi_debug_state))
181 #define test_debug_state(bit) (test_bit(bit, &toi_bkd.toi_debug_state))
182
183 /* == Steps in hibernating == */
184
185 enum {
186 STEP_HIBERNATE_PREPARE_IMAGE,
187 STEP_HIBERNATE_SAVE_IMAGE,
188 STEP_HIBERNATE_POWERDOWN,
189 STEP_RESUME_CAN_RESUME,
190 STEP_RESUME_LOAD_PS1,
191 STEP_RESUME_DO_RESTORE,
192 STEP_RESUME_READ_PS2,
193 STEP_RESUME_GO,
194 STEP_RESUME_ALT_IMAGE,
195 STEP_CLEANUP,
196 STEP_QUIET_CLEANUP
197 };
198
199 /* == TuxOnIce states ==
200 (see also include/linux/suspend.h) */
201
202 #define get_toi_state() (toi_state)
203 #define restore_toi_state(saved_state) \
204 do { toi_state = saved_state; } while (0)
205
206 /* == Module support == */
207
208 struct toi_core_fns {
209 int (*post_context_save) (void);
210 unsigned long (*get_nonconflicting_page) (void);
211 int (*try_hibernate) (void);
212 void (*try_resume) (void);
213 };
214
215 extern struct toi_core_fns *toi_core_fns;
216
217 /* == All else == */
218 #undef KB
219 #undef MB
220 #define KB(x) ((x) << (PAGE_SHIFT - 10))
221 #define MB(x) ((x) >> (20 - PAGE_SHIFT))
222
223 extern int toi_start_anything(int toi_or_resume);
224 extern void toi_finish_anything(int toi_or_resume);
225
226 extern int save_image_part1(void);
227 extern int toi_atomic_restore(void);
228
229 extern int toi_try_hibernate(void);
230 extern void toi_try_resume(void);
231
232 extern int __toi_post_context_save(void);
233
234 extern unsigned int nr_hibernates;
235 extern char alt_resume_param[256];
236
237 extern void copyback_post(void);
238 extern int toi_hibernate(void);
239 extern unsigned long extra_pd1_pages_used;
240
241 #define SECTOR_SIZE 512
242
243 extern void toi_early_boot_message(int can_erase_image, int default_answer,
244 char *warning_reason, ...);
245
246 extern int do_check_can_resume(void);
247 extern int do_toi_step(int step);
248 extern int toi_launch_userspace_program(char *command, int channel_no, int wait, int debug);
249
250 extern char tuxonice_signature[9];
251
252 extern int toi_start_other_threads(void);
253 extern void toi_stop_other_threads(void);
254
255 #ifdef CONFIG_TOI_ENHANCE
256 extern int toi_ignore_late_initcall(void);
257 #endif /* CONFIG_TOI_ENHANCE */
258
259 #endif