linux/include/linux/cpu_pm.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2011 Google, Inc.
   3 *
   4 * Author:
   5 *      Colin Cross <ccross@android.com>
   6 *
   7 * This software is licensed under the terms of the GNU General Public
   8 * License version 2, as published by the Free Software Foundation, and
   9 * may be copied, distributed, and modified under those terms.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 */
  17
  18#ifndef _LINUX_CPU_PM_H
  19#define _LINUX_CPU_PM_H
  20
  21#include <linux/kernel.h>
  22#include <linux/notifier.h>
  23
  24/*
  25 * When a CPU goes to a low power state that turns off power to the CPU's
  26 * power domain, the contents of some blocks (floating point coprocessors,
  27 * interrupt controllers, caches, timers) in the same power domain can
  28 * be lost.  The cpm_pm notifiers provide a method for platform idle, suspend,
  29 * and hotplug implementations to notify the drivers for these blocks that
  30 * they may be reset.
  31 *
  32 * All cpu_pm notifications must be called with interrupts disabled.
  33 *
  34 * The notifications are split into two classes: CPU notifications and CPU
  35 * cluster notifications.
  36 *
  37 * CPU notifications apply to a single CPU and must be called on the affected
  38 * CPU.  They are used to save per-cpu context for affected blocks.
  39 *
  40 * CPU cluster notifications apply to all CPUs in a single power domain. They
  41 * are used to save any global context for affected blocks, and must be called
  42 * after all the CPUs in the power domain have been notified of the low power
  43 * state.
  44 */
  45
  46/*
  47 * Event codes passed as unsigned long val to notifier calls
  48 */
  49enum cpu_pm_event {
  50        /* A single cpu is entering a low power state */
  51        CPU_PM_ENTER,
  52
  53        /* A single cpu failed to enter a low power state */
  54        CPU_PM_ENTER_FAILED,
  55
  56        /* A single cpu is exiting a low power state */
  57        CPU_PM_EXIT,
  58
  59        /* A cpu power domain is entering a low power state */
  60        CPU_CLUSTER_PM_ENTER,
  61
  62        /* A cpu power domain failed to enter a low power state */
  63        CPU_CLUSTER_PM_ENTER_FAILED,
  64
  65        /* A cpu power domain is exiting a low power state */
  66        CPU_CLUSTER_PM_EXIT,
  67};
  68
  69#ifdef CONFIG_CPU_PM
  70int cpu_pm_register_notifier(struct notifier_block *nb);
  71int cpu_pm_unregister_notifier(struct notifier_block *nb);
  72int cpu_pm_enter(void);
  73int cpu_pm_exit(void);
  74int cpu_cluster_pm_enter(void);
  75int cpu_cluster_pm_exit(void);
  76
  77#else
  78
  79static inline int cpu_pm_register_notifier(struct notifier_block *nb)
  80{
  81        return 0;
  82}
  83
  84static inline int cpu_pm_unregister_notifier(struct notifier_block *nb)
  85{
  86        return 0;
  87}
  88
  89static inline int cpu_pm_enter(void)
  90{
  91        return 0;
  92}
  93
  94static inline int cpu_pm_exit(void)
  95{
  96        return 0;
  97}
  98
  99static inline int cpu_cluster_pm_enter(void)
 100{
 101        return 0;
 102}
 103
 104static inline int cpu_cluster_pm_exit(void)
 105{
 106        return 0;
 107}
 108#endif
 109#endif
 110