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#define __cpuidle_method_section __used __section("__cpuidle_method_of_table")
  11#else
  12static inline int arm_cpuidle_simple_enter(struct cpuidle_device *dev,
  13                struct cpuidle_driver *drv, int index) { return -ENODEV; }
  14#define __cpuidle_method_section __maybe_unused /* drop silently */
  15#endif
  16
  17/* Common ARM WFI state */
  18#define ARM_CPUIDLE_WFI_STATE_PWR(p) {\
  19        .enter                  = arm_cpuidle_simple_enter,\
  20        .exit_latency           = 1,\
  21        .target_residency       = 1,\
  22        .power_usage            = p,\
  23        .name                   = "WFI",\
  24        .desc                   = "ARM WFI",\
  25}
  26
  27/*
  28 * in case power_specified == 1, give a default WFI power value needed
  29 * by some governors
  30 */
  31#define ARM_CPUIDLE_WFI_STATE ARM_CPUIDLE_WFI_STATE_PWR(UINT_MAX)
  32
  33struct device_node;
  34
  35struct cpuidle_ops {
  36        int (*suspend)(unsigned long arg);
  37        int (*init)(struct device_node *, int cpu);
  38};
  39
  40struct of_cpuidle_method {
  41        const char *method;
  42        const struct cpuidle_ops *ops;
  43};
  44
  45#define CPUIDLE_METHOD_OF_DECLARE(name, _method, _ops)                  \
  46        static const struct of_cpuidle_method __cpuidle_method_of_table_##name \
  47        __cpuidle_method_section = { .method = _method, .ops = _ops }
  48
  49extern int arm_cpuidle_suspend(int index);
  50
  51extern int arm_cpuidle_init(int cpu);
  52
  53struct arm_cpuidle_irq_context { };
  54
  55#define arm_cpuidle_save_irq_context(c)         (void)c
  56#define arm_cpuidle_restore_irq_context(c)      (void)c
  57
  58#endif
  59