drivers: power: report battery voltage in AOSP compatible format
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / kernel / power / tuxonice.h
CommitLineData
6fa3eb70
S
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
49struct 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
65extern struct toi_boot_kernel_data toi_bkd;
66
67/* Location of book kernel data struct in kernel being resumed */
68extern unsigned long boot_kernel_data_buffer;
69
70/* == Action states == */
71
72enum {
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
98extern 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
104enum {
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
146extern 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. */
157enum {
158 TOI_STATUS = 0,
159 TOI_ERROR = 2,
160 TOI_LOW,
161 TOI_MEDIUM,
162 TOI_HIGH,
163 TOI_VERBOSE,
164};
165
166enum {
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
185enum {
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
208struct 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
215extern 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
223extern int toi_start_anything(int toi_or_resume);
224extern void toi_finish_anything(int toi_or_resume);
225
226extern int save_image_part1(void);
227extern int toi_atomic_restore(void);
228
229extern int toi_try_hibernate(void);
230extern void toi_try_resume(void);
231
232extern int __toi_post_context_save(void);
233
234extern unsigned int nr_hibernates;
235extern char alt_resume_param[256];
236
237extern void copyback_post(void);
238extern int toi_hibernate(void);
239extern unsigned long extra_pd1_pages_used;
240
241#define SECTOR_SIZE 512
242
243extern void toi_early_boot_message(int can_erase_image, int default_answer,
244 char *warning_reason, ...);
245
246extern int do_check_can_resume(void);
247extern int do_toi_step(int step);
248extern int toi_launch_userspace_program(char *command, int channel_no, int wait, int debug);
249
250extern char tuxonice_signature[9];
251
252extern int toi_start_other_threads(void);
253extern void toi_stop_other_threads(void);
254
255#ifdef CONFIG_TOI_ENHANCE
256extern int toi_ignore_late_initcall(void);
257#endif /* CONFIG_TOI_ENHANCE */
258
259#endif