linux/arch/arm/include/asm/cpuidle.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __ASM_ARM_CPUIDLE_H
   3#define __ASM_ARM_CPUIDLE_H
   4
   5#include <asm/proc-fns.h>
   6
   7#ifdef CONFIG_CPU_IDLE
   8extern int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
   9                struct cpuidle_driver *drv, int index);
  10#else
  11static inline int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
  12                struct cpuidle_driver *drv, int index) { return -ENODEV; }
  13#endif
  14
  15/* Common ARM WFI state */
  16#define ARM_CPUIDLE_WFI_STATE_PWR(p) {\
  17        .enter                  = arm_cpuidle_simple_enter,\
  18        .exit_latency           = 1,\
  19        .target_residency       = 1,\
  20        .power_usage            = p,\
  21        .name                   = "WFI",\
  22        .desc                   = "ARM WFI",\
  23}
  24
  25/*
  26 * in case power_specified == 1, give a default WFI power value needed
  27 * by some governors
  28 */
  29#define ARM_CPUIDLE_WFI_STATE ARM_CPUIDLE_WFI_STATE_PWR(UINT_MAX)
  30
  31struct device_node;
  32
  33struct cpuidle_ops {
  34        int (*suspend)(unsigned long arg);
  35        int (*init)(struct device_node *, int cpu);
  36};
  37
  38struct of_cpuidle_method {
  39        const char *method;
  40        const struct cpuidle_ops *ops;
  41};
  42
  43#define CPUIDLE_METHOD_OF_DECLARE(name, _method, _ops)                  \
  44        static const struct of_cpuidle_method __cpuidle_method_of_table_##name \
  45        __used __section(__cpuidle_method_of_table)                     \
  46        = { .method = _method, .ops = _ops }
  47
  48extern int arm_cpuidle_suspend(int index);
  49
  50extern int arm_cpuidle_init(int cpu);
  51
  52#endif
  53