1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds #ifndef __ACPI_PROCESSOR_H
31da177e4SLinus Torvalds #define __ACPI_PROCESSOR_H
41da177e4SLinus Torvalds
53b2d9942SVenkatesh Pallipadi #include <linux/cpu.h>
6d15ce412SViresh Kumar #include <linux/cpufreq.h>
7d15ce412SViresh Kumar #include <linux/pm_qos.h>
86fd13452SAndy Shevchenko #include <linux/printk.h>
96fd13452SAndy Shevchenko #include <linux/sched.h>
106fd13452SAndy Shevchenko #include <linux/smp.h>
11d9460fd2SZhang Rui #include <linux/thermal.h>
126fd13452SAndy Shevchenko #include <linux/types.h>
136fd13452SAndy Shevchenko #include <linux/workqueue.h>
146fd13452SAndy Shevchenko
1502df8b93SVenkatesh Pallipadi #include <asm/acpi.h>
1602df8b93SVenkatesh Pallipadi
17ac212b69SRafael J. Wysocki #define ACPI_PROCESSOR_CLASS "processor"
18ac212b69SRafael J. Wysocki #define ACPI_PROCESSOR_DEVICE_NAME "Processor"
19ac212b69SRafael J. Wysocki #define ACPI_PROCESSOR_DEVICE_HID "ACPI0007"
20db62fda3SSudeep Holla #define ACPI_PROCESSOR_CONTAINER_HID "ACPI0010"
21ac212b69SRafael J. Wysocki
221da177e4SLinus Torvalds #define ACPI_PROCESSOR_BUSY_METRIC 10
231da177e4SLinus Torvalds
241da177e4SLinus Torvalds #define ACPI_PROCESSOR_MAX_POWER 8
251da177e4SLinus Torvalds #define ACPI_PROCESSOR_MAX_C2_LATENCY 100
261da177e4SLinus Torvalds #define ACPI_PROCESSOR_MAX_C3_LATENCY 1000
271da177e4SLinus Torvalds
281da177e4SLinus Torvalds #define ACPI_PROCESSOR_MAX_THROTTLING 16
291da177e4SLinus Torvalds #define ACPI_PROCESSOR_MAX_THROTTLE 250 /* 25% */
301da177e4SLinus Torvalds #define ACPI_PROCESSOR_MAX_DUTY_WIDTH 4
311da177e4SLinus Torvalds
3202df8b93SVenkatesh Pallipadi #define ACPI_PDC_REVISION_ID 0x1
3302df8b93SVenkatesh Pallipadi
343b2d9942SVenkatesh Pallipadi #define ACPI_PSD_REV0_REVISION 0 /* Support for _PSD as in ACPI 3.0 */
353b2d9942SVenkatesh Pallipadi #define ACPI_PSD_REV0_ENTRIES 5
363b2d9942SVenkatesh Pallipadi
3701854e69SLuming Yu #define ACPI_TSD_REV0_REVISION 0 /* Support for _PSD as in ACPI 3.0 */
3801854e69SLuming Yu #define ACPI_TSD_REV0_ENTRIES 5
393b2d9942SVenkatesh Pallipadi /*
403b2d9942SVenkatesh Pallipadi * Types of coordination defined in ACPI 3.0. Same macros can be used across
413b2d9942SVenkatesh Pallipadi * P, C and T states
423b2d9942SVenkatesh Pallipadi */
433b2d9942SVenkatesh Pallipadi #define DOMAIN_COORD_TYPE_SW_ALL 0xfc
443b2d9942SVenkatesh Pallipadi #define DOMAIN_COORD_TYPE_SW_ANY 0xfd
453b2d9942SVenkatesh Pallipadi #define DOMAIN_COORD_TYPE_HW_ALL 0xfe
463b2d9942SVenkatesh Pallipadi
474fcb2fcdSVenkatesh Pallipadi #define ACPI_CSTATE_SYSTEMIO 0
484fcb2fcdSVenkatesh Pallipadi #define ACPI_CSTATE_FFH 1
494fcb2fcdSVenkatesh Pallipadi #define ACPI_CSTATE_HALT 2
50a36a7fecSSudeep Holla #define ACPI_CSTATE_INTEGER 3
514fcb2fcdSVenkatesh Pallipadi
524fcb2fcdSVenkatesh Pallipadi #define ACPI_CX_DESC_LEN 32
53991528d7SVenkatesh Pallipadi
541da177e4SLinus Torvalds /* Power Management */
551da177e4SLinus Torvalds
561da177e4SLinus Torvalds struct acpi_processor_cx;
571da177e4SLinus Torvalds
581da177e4SLinus Torvalds struct acpi_power_register {
591da177e4SLinus Torvalds u8 descriptor;
601da177e4SLinus Torvalds u16 length;
611da177e4SLinus Torvalds u8 space_id;
621da177e4SLinus Torvalds u8 bit_width;
631da177e4SLinus Torvalds u8 bit_offset;
64718be4aaSLen Brown u8 access_size;
651da177e4SLinus Torvalds u64 address;
6692c4d2adSFabian Frederick } __packed;
671da177e4SLinus Torvalds
681da177e4SLinus Torvalds struct acpi_processor_cx {
691da177e4SLinus Torvalds u8 valid;
701da177e4SLinus Torvalds u8 type;
711da177e4SLinus Torvalds u32 address;
72bc71bec9Svenkatesh.pallipadi@intel.com u8 entry_method;
73991528d7SVenkatesh Pallipadi u8 index;
741da177e4SLinus Torvalds u32 latency;
75718be4aaSLen Brown u8 bm_sts_skip;
764fcb2fcdSVenkatesh Pallipadi char desc[ACPI_CX_DESC_LEN];
771da177e4SLinus Torvalds };
781da177e4SLinus Torvalds
79a36a7fecSSudeep Holla struct acpi_lpi_state {
80a36a7fecSSudeep Holla u32 min_residency;
81a36a7fecSSudeep Holla u32 wake_latency; /* worst case */
82a36a7fecSSudeep Holla u32 flags;
83a36a7fecSSudeep Holla u32 arch_flags;
84a36a7fecSSudeep Holla u32 res_cnt_freq;
85a36a7fecSSudeep Holla u32 enable_parent_state;
86a36a7fecSSudeep Holla u64 address;
87a36a7fecSSudeep Holla u8 index;
88a36a7fecSSudeep Holla u8 entry_method;
89a36a7fecSSudeep Holla char desc[ACPI_CX_DESC_LEN];
90a36a7fecSSudeep Holla };
91a36a7fecSSudeep Holla
921da177e4SLinus Torvalds struct acpi_processor_power {
931da177e4SLinus Torvalds int count;
94a36a7fecSSudeep Holla union {
951da177e4SLinus Torvalds struct acpi_processor_cx states[ACPI_PROCESSOR_MAX_POWER];
96a36a7fecSSudeep Holla struct acpi_lpi_state lpi_states[ACPI_PROCESSOR_MAX_POWER];
97a36a7fecSSudeep Holla };
98169a0abbSThomas Gleixner int timer_broadcast_on_state;
991da177e4SLinus Torvalds };
1001da177e4SLinus Torvalds
1011da177e4SLinus Torvalds /* Performance Management */
1021da177e4SLinus Torvalds
1033b2d9942SVenkatesh Pallipadi struct acpi_psd_package {
104439913ffSLin Ming u64 num_entries;
105439913ffSLin Ming u64 revision;
106439913ffSLin Ming u64 domain;
107439913ffSLin Ming u64 coord_type;
108439913ffSLin Ming u64 num_processors;
10992c4d2adSFabian Frederick } __packed;
1103b2d9942SVenkatesh Pallipadi
1111da177e4SLinus Torvalds struct acpi_pct_register {
1121da177e4SLinus Torvalds u8 descriptor;
1131da177e4SLinus Torvalds u16 length;
1141da177e4SLinus Torvalds u8 space_id;
1151da177e4SLinus Torvalds u8 bit_width;
1161da177e4SLinus Torvalds u8 bit_offset;
1171da177e4SLinus Torvalds u8 reserved;
1181da177e4SLinus Torvalds u64 address;
11992c4d2adSFabian Frederick } __packed;
1201da177e4SLinus Torvalds
1211da177e4SLinus Torvalds struct acpi_processor_px {
122439913ffSLin Ming u64 core_frequency; /* megahertz */
123439913ffSLin Ming u64 power; /* milliWatts */
124439913ffSLin Ming u64 transition_latency; /* microseconds */
125439913ffSLin Ming u64 bus_master_latency; /* microseconds */
126439913ffSLin Ming u64 control; /* control value */
127439913ffSLin Ming u64 status; /* success indicator */
1281da177e4SLinus Torvalds };
1291da177e4SLinus Torvalds
1301da177e4SLinus Torvalds struct acpi_processor_performance {
1311da177e4SLinus Torvalds unsigned int state;
1321da177e4SLinus Torvalds unsigned int platform_limit;
1331da177e4SLinus Torvalds struct acpi_pct_register control_register;
1341da177e4SLinus Torvalds struct acpi_pct_register status_register;
1351da177e4SLinus Torvalds unsigned int state_count;
1361da177e4SLinus Torvalds struct acpi_processor_px *states;
1373b2d9942SVenkatesh Pallipadi struct acpi_psd_package domain_info;
1382fdf66b4SRusty Russell cpumask_var_t shared_cpu_map;
1393b2d9942SVenkatesh Pallipadi unsigned int shared_type;
1401da177e4SLinus Torvalds };
1411da177e4SLinus Torvalds
1421da177e4SLinus Torvalds /* Throttling Control */
1431da177e4SLinus Torvalds
14401854e69SLuming Yu struct acpi_tsd_package {
145439913ffSLin Ming u64 num_entries;
146439913ffSLin Ming u64 revision;
147439913ffSLin Ming u64 domain;
148439913ffSLin Ming u64 coord_type;
149439913ffSLin Ming u64 num_processors;
15092c4d2adSFabian Frederick } __packed;
15101854e69SLuming Yu
15201854e69SLuming Yu struct acpi_ptc_register {
15301854e69SLuming Yu u8 descriptor;
15401854e69SLuming Yu u16 length;
15501854e69SLuming Yu u8 space_id;
15601854e69SLuming Yu u8 bit_width;
15701854e69SLuming Yu u8 bit_offset;
15801854e69SLuming Yu u8 reserved;
15901854e69SLuming Yu u64 address;
16092c4d2adSFabian Frederick } __packed;
16101854e69SLuming Yu
16201854e69SLuming Yu struct acpi_processor_tx_tss {
163439913ffSLin Ming u64 freqpercentage; /* */
164439913ffSLin Ming u64 power; /* milliWatts */
165439913ffSLin Ming u64 transition_latency; /* microseconds */
166439913ffSLin Ming u64 control; /* control value */
167439913ffSLin Ming u64 status; /* success indicator */
16801854e69SLuming Yu };
1691da177e4SLinus Torvalds struct acpi_processor_tx {
1701da177e4SLinus Torvalds u16 power;
1711da177e4SLinus Torvalds u16 performance;
1721da177e4SLinus Torvalds };
1731da177e4SLinus Torvalds
17401854e69SLuming Yu struct acpi_processor;
1751da177e4SLinus Torvalds struct acpi_processor_throttling {
17601854e69SLuming Yu unsigned int state;
17701854e69SLuming Yu unsigned int platform_limit;
17801854e69SLuming Yu struct acpi_pct_register control_register;
17901854e69SLuming Yu struct acpi_pct_register status_register;
18001854e69SLuming Yu unsigned int state_count;
18101854e69SLuming Yu struct acpi_processor_tx_tss *states_tss;
18201854e69SLuming Yu struct acpi_tsd_package domain_info;
1832fdf66b4SRusty Russell cpumask_var_t shared_cpu_map;
18401854e69SLuming Yu int (*acpi_processor_get_throttling) (struct acpi_processor * pr);
185ff55a9ceSLen Brown int (*acpi_processor_set_throttling) (struct acpi_processor * pr,
1862a908002SFrans Pop int state, bool force);
18701854e69SLuming Yu
1881da177e4SLinus Torvalds u32 address;
1891da177e4SLinus Torvalds u8 duty_offset;
1901da177e4SLinus Torvalds u8 duty_width;
1911180509fSZhao Yakui u8 tsd_valid_flag;
1921180509fSZhao Yakui unsigned int shared_type;
1931da177e4SLinus Torvalds struct acpi_processor_tx states[ACPI_PROCESSOR_MAX_THROTTLING];
1941da177e4SLinus Torvalds };
1951da177e4SLinus Torvalds
1961da177e4SLinus Torvalds /* Limit Interface */
1971da177e4SLinus Torvalds
1981da177e4SLinus Torvalds struct acpi_processor_lx {
199aee07ba6SJoe Perches int px; /* performance state */
2001da177e4SLinus Torvalds int tx; /* throttle level */
2011da177e4SLinus Torvalds };
2021da177e4SLinus Torvalds
2031da177e4SLinus Torvalds struct acpi_processor_limit {
2041da177e4SLinus Torvalds struct acpi_processor_lx state; /* current limit */
2051da177e4SLinus Torvalds struct acpi_processor_lx thermal; /* thermal limit */
2061da177e4SLinus Torvalds struct acpi_processor_lx user; /* user limit */
2071da177e4SLinus Torvalds };
2081da177e4SLinus Torvalds
2091da177e4SLinus Torvalds struct acpi_processor_flags {
2101da177e4SLinus Torvalds u8 power:1;
2111da177e4SLinus Torvalds u8 performance:1;
2121da177e4SLinus Torvalds u8 throttling:1;
2131da177e4SLinus Torvalds u8 limit:1;
2141da177e4SLinus Torvalds u8 bm_control:1;
2151da177e4SLinus Torvalds u8 bm_check:1;
2161da177e4SLinus Torvalds u8 has_cst:1;
217a36a7fecSSudeep Holla u8 has_lpi:1;
2181da177e4SLinus Torvalds u8 power_setup_done:1;
2194f86d3a8SLen Brown u8 bm_rld_set:1;
22099b72508SThomas Renninger u8 need_hotplug_init:1;
2211da177e4SLinus Torvalds };
2221da177e4SLinus Torvalds
2231da177e4SLinus Torvalds struct acpi_processor {
2241da177e4SLinus Torvalds acpi_handle handle;
2251da177e4SLinus Torvalds u32 acpi_id;
226828aef37SCatalin Marinas phys_cpuid_t phys_id; /* CPU hardware ID such as APIC ID for x86 */
227af8f3f51SHanjun Guo u32 id; /* CPU logical ID allocated by OS */
2281da177e4SLinus Torvalds u32 pblk;
2291da177e4SLinus Torvalds int performance_platform_limit;
23001854e69SLuming Yu int throttling_platform_limit;
231ff55a9ceSLen Brown /* 0 - states 0..n-th state available */
23201854e69SLuming Yu
2331da177e4SLinus Torvalds struct acpi_processor_flags flags;
2341da177e4SLinus Torvalds struct acpi_processor_power power;
2351da177e4SLinus Torvalds struct acpi_processor_performance *performance;
2361da177e4SLinus Torvalds struct acpi_processor_throttling throttling;
2371da177e4SLinus Torvalds struct acpi_processor_limit limit;
238d9460fd2SZhang Rui struct thermal_cooling_device *cdev;
239ac212b69SRafael J. Wysocki struct device *dev; /* Processor device. */
2403000ce3cSRafael J. Wysocki struct freq_qos_request perflib_req;
2413000ce3cSRafael J. Wysocki struct freq_qos_request thermal_req;
2421da177e4SLinus Torvalds };
2431da177e4SLinus Torvalds
2441da177e4SLinus Torvalds struct acpi_processor_errata {
2451da177e4SLinus Torvalds u8 smp;
2461da177e4SLinus Torvalds struct {
2471da177e4SLinus Torvalds u8 throttle:1;
2481da177e4SLinus Torvalds u8 fdma:1;
2491da177e4SLinus Torvalds u8 reserved:6;
2501da177e4SLinus Torvalds u32 bmisx;
2511da177e4SLinus Torvalds } piix4;
2521da177e4SLinus Torvalds };
2531da177e4SLinus Torvalds
254fd350943SLen Brown extern int acpi_processor_preregister_performance(struct
255fd350943SLen Brown acpi_processor_performance
256a29d8b8eSTejun Heo __percpu *performance);
2573b2d9942SVenkatesh Pallipadi
2584be44fcdSLen Brown extern int acpi_processor_register_performance(struct acpi_processor_performance
2594be44fcdSLen Brown *performance, unsigned int cpu);
260b2f8dc4cSRafael J. Wysocki extern void acpi_processor_unregister_performance(unsigned int cpu);
2611da177e4SLinus Torvalds
262d0ea59e1SRafael J. Wysocki int acpi_processor_pstate_control(void);
2631da177e4SLinus Torvalds /* note: this locks both the calling module and the processor module
2641da177e4SLinus Torvalds if a _PPC object exists, rmmod is disallowed then */
2651da177e4SLinus Torvalds int acpi_processor_notify_smm(struct module *calling_module);
2664d0f1ce6SJoao Martins int acpi_processor_get_psd(acpi_handle handle,
2674d0f1ce6SJoao Martins struct acpi_psd_package *pdomain);
2681da177e4SLinus Torvalds
269c705c78cSKonrad Rzeszutek Wilk /* parsing the _P* objects. */
270c705c78cSKonrad Rzeszutek Wilk extern int acpi_processor_get_performance_info(struct acpi_processor *pr);
271c705c78cSKonrad Rzeszutek Wilk
2721da177e4SLinus Torvalds /* for communication between multiple parts of the processor kernel module */
273706546d0SMike Travis DECLARE_PER_CPU(struct acpi_processor *, processors);
2741da177e4SLinus Torvalds extern struct acpi_processor_errata errata;
2751da177e4SLinus Torvalds
27635ae7133SSudeep Holla #if defined(ARCH_HAS_POWER_INIT) && defined(CONFIG_ACPI_PROCESSOR_CSTATE)
27702df8b93SVenkatesh Pallipadi void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
27802df8b93SVenkatesh Pallipadi unsigned int cpu);
279991528d7SVenkatesh Pallipadi int acpi_processor_ffh_cstate_probe(unsigned int cpu,
280fd350943SLen Brown struct acpi_processor_cx *cx,
281fd350943SLen Brown struct acpi_power_register *reg);
282991528d7SVenkatesh Pallipadi void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate);
28302df8b93SVenkatesh Pallipadi #else
acpi_processor_power_init_bm_check(struct acpi_processor_flags * flags,unsigned int cpu)2844be44fcdSLen Brown static inline void acpi_processor_power_init_bm_check(struct
2854be44fcdSLen Brown acpi_processor_flags
2864be44fcdSLen Brown *flags, unsigned int cpu)
28702df8b93SVenkatesh Pallipadi {
28802df8b93SVenkatesh Pallipadi flags->bm_check = 1;
28902df8b93SVenkatesh Pallipadi return;
29002df8b93SVenkatesh Pallipadi }
acpi_processor_ffh_cstate_probe(unsigned int cpu,struct acpi_processor_cx * cx,struct acpi_power_register * reg)291991528d7SVenkatesh Pallipadi static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu,
292fd350943SLen Brown struct acpi_processor_cx *cx,
293fd350943SLen Brown struct acpi_power_register
294fd350943SLen Brown *reg)
295991528d7SVenkatesh Pallipadi {
296991528d7SVenkatesh Pallipadi return -1;
297991528d7SVenkatesh Pallipadi }
acpi_processor_ffh_cstate_enter(struct acpi_processor_cx * cstate)298fd350943SLen Brown static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx
299fd350943SLen Brown *cstate)
300991528d7SVenkatesh Pallipadi {
301991528d7SVenkatesh Pallipadi return;
302991528d7SVenkatesh Pallipadi }
30302df8b93SVenkatesh Pallipadi #endif
30402df8b93SVenkatesh Pallipadi
call_on_cpu(int cpu,long (* fn)(void *),void * arg,bool direct)305696ac2e3SQian Cai static inline int call_on_cpu(int cpu, long (*fn)(void *), void *arg,
306696ac2e3SQian Cai bool direct)
307696ac2e3SQian Cai {
308696ac2e3SQian Cai if (direct || (is_percpu_thread() && cpu == smp_processor_id()))
309696ac2e3SQian Cai return fn(arg);
310696ac2e3SQian Cai return work_on_cpu(cpu, fn, arg);
311696ac2e3SQian Cai }
312696ac2e3SQian Cai
3131da177e4SLinus Torvalds /* in processor_perflib.c */
31402df8b93SVenkatesh Pallipadi
3151da177e4SLinus Torvalds #ifdef CONFIG_CPU_FREQ
316d15ce412SViresh Kumar extern bool acpi_processor_cpufreq_init;
317d15ce412SViresh Kumar void acpi_processor_ignore_ppc_init(void);
3183000ce3cSRafael J. Wysocki void acpi_processor_ppc_init(struct cpufreq_policy *policy);
3193000ce3cSRafael J. Wysocki void acpi_processor_ppc_exit(struct cpufreq_policy *policy);
320bca5f557SRafael J. Wysocki void acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag);
321e2f74f35SThomas Renninger extern int acpi_processor_get_bios_limit(int cpu, unsigned int *limit);
3221da177e4SLinus Torvalds #else
acpi_processor_ignore_ppc_init(void)323d15ce412SViresh Kumar static inline void acpi_processor_ignore_ppc_init(void)
3244be44fcdSLen Brown {
3254be44fcdSLen Brown return;
3264be44fcdSLen Brown }
acpi_processor_ppc_init(struct cpufreq_policy * policy)3273000ce3cSRafael J. Wysocki static inline void acpi_processor_ppc_init(struct cpufreq_policy *policy)
328d15ce412SViresh Kumar {
329d15ce412SViresh Kumar return;
330d15ce412SViresh Kumar }
acpi_processor_ppc_exit(struct cpufreq_policy * policy)3313000ce3cSRafael J. Wysocki static inline void acpi_processor_ppc_exit(struct cpufreq_policy *policy)
3324be44fcdSLen Brown {
3334be44fcdSLen Brown return;
3344be44fcdSLen Brown }
acpi_processor_ppc_has_changed(struct acpi_processor * pr,int event_flag)335a507a306SBrian Norris static inline void acpi_processor_ppc_has_changed(struct acpi_processor *pr,
336d81c45e1SZhao Yakui int event_flag)
3374be44fcdSLen Brown {
3381da177e4SLinus Torvalds static unsigned int printout = 1;
3391da177e4SLinus Torvalds if (printout) {
3404be44fcdSLen Brown printk(KERN_WARNING
3414be44fcdSLen Brown "Warning: Processor Platform Limit event detected, but not handled.\n");
3424be44fcdSLen Brown printk(KERN_WARNING
3434be44fcdSLen Brown "Consider compiling CPUfreq support into your kernel.\n");
3441da177e4SLinus Torvalds printout = 0;
3451da177e4SLinus Torvalds }
3461da177e4SLinus Torvalds }
acpi_processor_get_bios_limit(int cpu,unsigned int * limit)347e2f74f35SThomas Renninger static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit)
348e2f74f35SThomas Renninger {
349e2f74f35SThomas Renninger return -ENODEV;
350e2f74f35SThomas Renninger }
351e2f74f35SThomas Renninger
3521da177e4SLinus Torvalds #endif /* CONFIG_CPU_FREQ */
3531da177e4SLinus Torvalds
3544d5d4cd8SAlex Chiang /* in processor_core.c */
355828aef37SCatalin Marinas phys_cpuid_t acpi_get_phys_id(acpi_handle, int type, u32 acpi_id);
356fb7c2baeSDavid Daney phys_cpuid_t acpi_map_madt_entry(u32 acpi_id);
357828aef37SCatalin Marinas int acpi_map_cpuid(phys_cpuid_t phys_id, u32 acpi_id);
3582e9d5e4eSAlex Chiang int acpi_get_cpuid(acpi_handle, int type, u32 acpi_id);
35978f16996SAlex Chiang
3604f2f7573SAshwin Chaugule #ifdef CONFIG_ACPI_CPPC_LIB
3614f2f7573SAshwin Chaugule extern int acpi_cppc_processor_probe(struct acpi_processor *pr);
3624f2f7573SAshwin Chaugule extern void acpi_cppc_processor_exit(struct acpi_processor *pr);
3634f2f7573SAshwin Chaugule #else
acpi_cppc_processor_probe(struct acpi_processor * pr)3644f2f7573SAshwin Chaugule static inline int acpi_cppc_processor_probe(struct acpi_processor *pr)
3654f2f7573SAshwin Chaugule {
3664f2f7573SAshwin Chaugule return 0;
3674f2f7573SAshwin Chaugule }
acpi_cppc_processor_exit(struct acpi_processor * pr)3684f2f7573SAshwin Chaugule static inline void acpi_cppc_processor_exit(struct acpi_processor *pr)
3694f2f7573SAshwin Chaugule {
3704f2f7573SAshwin Chaugule return;
3714f2f7573SAshwin Chaugule }
3724f2f7573SAshwin Chaugule #endif /* CONFIG_ACPI_CPPC_LIB */
3734f2f7573SAshwin Chaugule
37424119a88SHanjun Guo /* in processor_pdc.c */
37524119a88SHanjun Guo void acpi_processor_set_pdc(acpi_handle handle);
37624119a88SHanjun Guo
3771da177e4SLinus Torvalds /* in processor_throttling.c */
378239708a3SAshwin Chaugule #ifdef CONFIG_ACPI_CPU_FREQ_PSS
379a66b34b2SAdrian Bunk int acpi_processor_tstate_has_changed(struct acpi_processor *pr);
3801da177e4SLinus Torvalds int acpi_processor_get_throttling_info(struct acpi_processor *pr);
3812a908002SFrans Pop extern int acpi_processor_set_throttling(struct acpi_processor *pr,
3822a908002SFrans Pop int state, bool force);
3835a344a50SZhao Yakui /*
3845a344a50SZhao Yakui * Reevaluate whether the T-state is invalid after one cpu is
3855a344a50SZhao Yakui * onlined/offlined. In such case the flags.throttling will be updated.
3865a344a50SZhao Yakui */
3875a344a50SZhao Yakui extern void acpi_processor_reevaluate_tstate(struct acpi_processor *pr,
38864f3bf2fSSebastian Andrzej Siewior bool is_dead);
389070d8eb1SJan Engelhardt extern const struct file_operations acpi_processor_throttling_fops;
3901180509fSZhao Yakui extern void acpi_processor_throttling_init(void);
391239708a3SAshwin Chaugule #else
acpi_processor_tstate_has_changed(struct acpi_processor * pr)392239708a3SAshwin Chaugule static inline int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
393239708a3SAshwin Chaugule {
394239708a3SAshwin Chaugule return 0;
395239708a3SAshwin Chaugule }
396239708a3SAshwin Chaugule
acpi_processor_get_throttling_info(struct acpi_processor * pr)397239708a3SAshwin Chaugule static inline int acpi_processor_get_throttling_info(struct acpi_processor *pr)
398239708a3SAshwin Chaugule {
399239708a3SAshwin Chaugule return -ENODEV;
400239708a3SAshwin Chaugule }
401239708a3SAshwin Chaugule
acpi_processor_set_throttling(struct acpi_processor * pr,int state,bool force)402239708a3SAshwin Chaugule static inline int acpi_processor_set_throttling(struct acpi_processor *pr,
403239708a3SAshwin Chaugule int state, bool force)
404239708a3SAshwin Chaugule {
405239708a3SAshwin Chaugule return -ENODEV;
406239708a3SAshwin Chaugule }
407239708a3SAshwin Chaugule
acpi_processor_reevaluate_tstate(struct acpi_processor * pr,bool is_dead)408239708a3SAshwin Chaugule static inline void acpi_processor_reevaluate_tstate(struct acpi_processor *pr,
40964f3bf2fSSebastian Andrzej Siewior bool is_dead) {}
410239708a3SAshwin Chaugule
acpi_processor_throttling_init(void)411239708a3SAshwin Chaugule static inline void acpi_processor_throttling_init(void) {}
412239708a3SAshwin Chaugule #endif /* CONFIG_ACPI_CPU_FREQ_PSS */
413239708a3SAshwin Chaugule
4141da177e4SLinus Torvalds /* in processor_idle.c */
4155f05586cSAshwin Chaugule extern struct cpuidle_driver acpi_idle_driver;
4165f05586cSAshwin Chaugule #ifdef CONFIG_ACPI_PROCESSOR_IDLE
41738a991b6SDaniel Lezcano int acpi_processor_power_init(struct acpi_processor *pr);
41838a991b6SDaniel Lezcano int acpi_processor_power_exit(struct acpi_processor *pr);
419a36a7fecSSudeep Holla int acpi_processor_power_state_has_changed(struct acpi_processor *pr);
42046bcfad7SDeepthi Dharwar int acpi_processor_hotplug(struct acpi_processor *pr);
4215f05586cSAshwin Chaugule #else
acpi_processor_power_init(struct acpi_processor * pr)4225f05586cSAshwin Chaugule static inline int acpi_processor_power_init(struct acpi_processor *pr)
4235f05586cSAshwin Chaugule {
4245f05586cSAshwin Chaugule return -ENODEV;
4255f05586cSAshwin Chaugule }
4261da177e4SLinus Torvalds
acpi_processor_power_exit(struct acpi_processor * pr)4275f05586cSAshwin Chaugule static inline int acpi_processor_power_exit(struct acpi_processor *pr)
4285f05586cSAshwin Chaugule {
4295f05586cSAshwin Chaugule return -ENODEV;
4305f05586cSAshwin Chaugule }
4315f05586cSAshwin Chaugule
acpi_processor_power_state_has_changed(struct acpi_processor * pr)432a36a7fecSSudeep Holla static inline int acpi_processor_power_state_has_changed(struct acpi_processor *pr)
4335f05586cSAshwin Chaugule {
4345f05586cSAshwin Chaugule return -ENODEV;
4355f05586cSAshwin Chaugule }
4365f05586cSAshwin Chaugule
acpi_processor_hotplug(struct acpi_processor * pr)4375f05586cSAshwin Chaugule static inline int acpi_processor_hotplug(struct acpi_processor *pr)
4385f05586cSAshwin Chaugule {
4395f05586cSAshwin Chaugule return -ENODEV;
4405f05586cSAshwin Chaugule }
4415f05586cSAshwin Chaugule #endif /* CONFIG_ACPI_PROCESSOR_IDLE */
4425f05586cSAshwin Chaugule
4431da177e4SLinus Torvalds /* in processor_thermal.c */
4447fdc74daSRiwen Lu int acpi_processor_thermal_init(struct acpi_processor *pr,
4457fdc74daSRiwen Lu struct acpi_device *device);
4467fdc74daSRiwen Lu void acpi_processor_thermal_exit(struct acpi_processor *pr,
4477fdc74daSRiwen Lu struct acpi_device *device);
4489c8b04beSVasiliy Kulikov extern const struct thermal_cooling_device_ops processor_cooling_ops;
4497fdc74daSRiwen Lu #ifdef CONFIG_CPU_FREQ
4503000ce3cSRafael J. Wysocki void acpi_thermal_cpufreq_init(struct cpufreq_policy *policy);
4513000ce3cSRafael J. Wysocki void acpi_thermal_cpufreq_exit(struct cpufreq_policy *policy);
4521da177e4SLinus Torvalds #else
acpi_thermal_cpufreq_init(struct cpufreq_policy * policy)4533000ce3cSRafael J. Wysocki static inline void acpi_thermal_cpufreq_init(struct cpufreq_policy *policy)
4544be44fcdSLen Brown {
4554be44fcdSLen Brown return;
4564be44fcdSLen Brown }
acpi_thermal_cpufreq_exit(struct cpufreq_policy * policy)4573000ce3cSRafael J. Wysocki static inline void acpi_thermal_cpufreq_exit(struct cpufreq_policy *policy)
4584be44fcdSLen Brown {
4594be44fcdSLen Brown return;
4604be44fcdSLen Brown }
4617fdc74daSRiwen Lu #endif /* CONFIG_CPU_FREQ */
4621da177e4SLinus Torvalds
463*31436373SSudeep Holla #ifdef CONFIG_ACPI_PROCESSOR_IDLE
464*31436373SSudeep Holla extern int acpi_processor_ffh_lpi_probe(unsigned int cpu);
465*31436373SSudeep Holla extern int acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi);
466*31436373SSudeep Holla #endif
467*31436373SSudeep Holla
4681da177e4SLinus Torvalds #endif
469