power.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include <linux/suspend.h>
  2. #include <linux/utsname.h>
  3. struct swsusp_info {
  4. struct new_utsname uts;
  5. u32 version_code;
  6. unsigned long num_physpages;
  7. int cpus;
  8. unsigned long image_pages;
  9. unsigned long pages;
  10. } __attribute__((aligned(PAGE_SIZE)));
  11. #ifdef CONFIG_SOFTWARE_SUSPEND
  12. extern int pm_suspend_disk(void);
  13. #else
  14. static inline int pm_suspend_disk(void)
  15. {
  16. return -EPERM;
  17. }
  18. #endif
  19. extern struct semaphore pm_sem;
  20. #define power_attr(_name) \
  21. static struct subsys_attribute _name##_attr = { \
  22. .attr = { \
  23. .name = __stringify(_name), \
  24. .mode = 0644, \
  25. }, \
  26. .show = _name##_show, \
  27. .store = _name##_store, \
  28. }
  29. extern struct subsystem power_subsys;
  30. /* References to section boundaries */
  31. extern const void __nosave_begin, __nosave_end;
  32. extern struct pbe *pagedir_nosave;
  33. /* Preferred image size in bytes (default 500 MB) */
  34. extern unsigned long image_size;
  35. extern int in_suspend;
  36. extern dev_t swsusp_resume_device;
  37. extern asmlinkage int swsusp_arch_suspend(void);
  38. extern asmlinkage int swsusp_arch_resume(void);
  39. extern unsigned int count_data_pages(void);
  40. extern void swsusp_free(void);
  41. struct snapshot_handle {
  42. loff_t offset;
  43. unsigned int page;
  44. unsigned int page_offset;
  45. unsigned int prev;
  46. struct pbe *pbe;
  47. void *buffer;
  48. unsigned int buf_offset;
  49. };
  50. #define data_of(handle) ((handle).buffer + (handle).buf_offset)
  51. extern int snapshot_read_next(struct snapshot_handle *handle, size_t count);
  52. extern int snapshot_write_next(struct snapshot_handle *handle, size_t count);
  53. int snapshot_image_loaded(struct snapshot_handle *handle);
  54. /**
  55. * The bitmap is used for tracing allocated swap pages
  56. *
  57. * The entire bitmap consists of a number of bitmap_page
  58. * structures linked with the help of the .next member.
  59. * Thus each page can be allocated individually, so we only
  60. * need to make 0-order memory allocations to create
  61. * the bitmap.
  62. */
  63. #define BITMAP_PAGE_SIZE (PAGE_SIZE - sizeof(void *))
  64. #define BITMAP_PAGE_CHUNKS (BITMAP_PAGE_SIZE / sizeof(long))
  65. #define BITS_PER_CHUNK (sizeof(long) * 8)
  66. #define BITMAP_PAGE_BITS (BITMAP_PAGE_CHUNKS * BITS_PER_CHUNK)
  67. struct bitmap_page {
  68. unsigned long chunks[BITMAP_PAGE_CHUNKS];
  69. struct bitmap_page *next;
  70. };
  71. extern void free_bitmap(struct bitmap_page *bitmap);
  72. extern struct bitmap_page *alloc_bitmap(unsigned int nr_bits);
  73. extern unsigned long alloc_swap_page(int swap, struct bitmap_page *bitmap);
  74. extern void free_all_swap_pages(int swap, struct bitmap_page *bitmap);
  75. extern int swsusp_shrink_memory(void);
  76. extern int swsusp_suspend(void);
  77. extern int swsusp_resume(void);