xref: /linux-6.15/include/acpi/processor.h (revision 4e32645c)
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;
72bc71bec9S[email protected] 	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;
220c1385c1fSJonathan Cameron 	u8 previously_online: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);
283*4e32645cSJosh Poimboeuf void __noreturn acpi_processor_ffh_play_dead(struct acpi_processor_cx *cx);
28402df8b93SVenkatesh Pallipadi #else
acpi_processor_power_init_bm_check(struct acpi_processor_flags * flags,unsigned int cpu)2854be44fcdSLen Brown static inline void acpi_processor_power_init_bm_check(struct
2864be44fcdSLen Brown 						      acpi_processor_flags
2874be44fcdSLen Brown 						      *flags, unsigned int cpu)
28802df8b93SVenkatesh Pallipadi {
28902df8b93SVenkatesh Pallipadi 	flags->bm_check = 1;
29002df8b93SVenkatesh Pallipadi 	return;
29102df8b93SVenkatesh Pallipadi }
acpi_processor_ffh_cstate_probe(unsigned int cpu,struct acpi_processor_cx * cx,struct acpi_power_register * reg)292991528d7SVenkatesh Pallipadi static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu,
293fd350943SLen Brown 						  struct acpi_processor_cx *cx,
294fd350943SLen Brown 						  struct acpi_power_register
295fd350943SLen Brown 						  *reg)
296991528d7SVenkatesh Pallipadi {
297991528d7SVenkatesh Pallipadi 	return -1;
298991528d7SVenkatesh Pallipadi }
acpi_processor_ffh_cstate_enter(struct acpi_processor_cx * cstate)299fd350943SLen Brown static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx
300fd350943SLen Brown 						   *cstate)
301991528d7SVenkatesh Pallipadi {
302991528d7SVenkatesh Pallipadi 	return;
303991528d7SVenkatesh Pallipadi }
acpi_processor_ffh_play_dead(struct acpi_processor_cx * cx)304*4e32645cSJosh Poimboeuf static inline void __noreturn acpi_processor_ffh_play_dead(struct acpi_processor_cx *cx)
305541ddf31SPatryk Wlazlyn {
306*4e32645cSJosh Poimboeuf 	BUG();
307541ddf31SPatryk Wlazlyn }
30802df8b93SVenkatesh Pallipadi #endif
30902df8b93SVenkatesh Pallipadi 
call_on_cpu(int cpu,long (* fn)(void *),void * arg,bool direct)310696ac2e3SQian Cai static inline int call_on_cpu(int cpu, long (*fn)(void *), void *arg,
311696ac2e3SQian Cai 			      bool direct)
312696ac2e3SQian Cai {
313696ac2e3SQian Cai 	if (direct || (is_percpu_thread() && cpu == smp_processor_id()))
314696ac2e3SQian Cai 		return fn(arg);
315696ac2e3SQian Cai 	return work_on_cpu(cpu, fn, arg);
316696ac2e3SQian Cai }
317696ac2e3SQian Cai 
3181da177e4SLinus Torvalds /* in processor_perflib.c */
31902df8b93SVenkatesh Pallipadi 
3201da177e4SLinus Torvalds #ifdef CONFIG_CPU_FREQ
321d15ce412SViresh Kumar extern bool acpi_processor_cpufreq_init;
322d15ce412SViresh Kumar void acpi_processor_ignore_ppc_init(void);
3233000ce3cSRafael J. Wysocki void acpi_processor_ppc_init(struct cpufreq_policy *policy);
3243000ce3cSRafael J. Wysocki void acpi_processor_ppc_exit(struct cpufreq_policy *policy);
325bca5f557SRafael J. Wysocki void acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag);
326e2f74f35SThomas Renninger extern int acpi_processor_get_bios_limit(int cpu, unsigned int *limit);
3271da177e4SLinus Torvalds #else
acpi_processor_ignore_ppc_init(void)328d15ce412SViresh Kumar static inline void acpi_processor_ignore_ppc_init(void)
3294be44fcdSLen Brown {
3304be44fcdSLen Brown 	return;
3314be44fcdSLen Brown }
acpi_processor_ppc_init(struct cpufreq_policy * policy)3323000ce3cSRafael J. Wysocki static inline void acpi_processor_ppc_init(struct cpufreq_policy *policy)
333d15ce412SViresh Kumar {
334d15ce412SViresh Kumar 	return;
335d15ce412SViresh Kumar }
acpi_processor_ppc_exit(struct cpufreq_policy * policy)3363000ce3cSRafael J. Wysocki static inline void acpi_processor_ppc_exit(struct cpufreq_policy *policy)
3374be44fcdSLen Brown {
3384be44fcdSLen Brown 	return;
3394be44fcdSLen Brown }
acpi_processor_ppc_has_changed(struct acpi_processor * pr,int event_flag)340a507a306SBrian Norris static inline void acpi_processor_ppc_has_changed(struct acpi_processor *pr,
341d81c45e1SZhao Yakui 								int event_flag)
3424be44fcdSLen Brown {
3431da177e4SLinus Torvalds 	static unsigned int printout = 1;
3441da177e4SLinus Torvalds 	if (printout) {
3454be44fcdSLen Brown 		printk(KERN_WARNING
3464be44fcdSLen Brown 		       "Warning: Processor Platform Limit event detected, but not handled.\n");
3474be44fcdSLen Brown 		printk(KERN_WARNING
3484be44fcdSLen Brown 		       "Consider compiling CPUfreq support into your kernel.\n");
3491da177e4SLinus Torvalds 		printout = 0;
3501da177e4SLinus Torvalds 	}
3511da177e4SLinus Torvalds }
acpi_processor_get_bios_limit(int cpu,unsigned int * limit)352e2f74f35SThomas Renninger static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit)
353e2f74f35SThomas Renninger {
354e2f74f35SThomas Renninger 	return -ENODEV;
355e2f74f35SThomas Renninger }
356e2f74f35SThomas Renninger 
3571da177e4SLinus Torvalds #endif				/* CONFIG_CPU_FREQ */
3581da177e4SLinus Torvalds 
3594d5d4cd8SAlex Chiang /* in processor_core.c */
360828aef37SCatalin Marinas phys_cpuid_t acpi_get_phys_id(acpi_handle, int type, u32 acpi_id);
361fb7c2baeSDavid Daney phys_cpuid_t acpi_map_madt_entry(u32 acpi_id);
362828aef37SCatalin Marinas int acpi_map_cpuid(phys_cpuid_t phys_id, u32 acpi_id);
3632e9d5e4eSAlex Chiang int acpi_get_cpuid(acpi_handle, int type, u32 acpi_id);
36478f16996SAlex Chiang 
3654f2f7573SAshwin Chaugule #ifdef CONFIG_ACPI_CPPC_LIB
3664f2f7573SAshwin Chaugule extern int acpi_cppc_processor_probe(struct acpi_processor *pr);
3674f2f7573SAshwin Chaugule extern void acpi_cppc_processor_exit(struct acpi_processor *pr);
3684f2f7573SAshwin Chaugule #else
acpi_cppc_processor_probe(struct acpi_processor * pr)3694f2f7573SAshwin Chaugule static inline int acpi_cppc_processor_probe(struct acpi_processor *pr)
3704f2f7573SAshwin Chaugule {
3714f2f7573SAshwin Chaugule 	return 0;
3724f2f7573SAshwin Chaugule }
acpi_cppc_processor_exit(struct acpi_processor * pr)3734f2f7573SAshwin Chaugule static inline void acpi_cppc_processor_exit(struct acpi_processor *pr)
3744f2f7573SAshwin Chaugule {
3754f2f7573SAshwin Chaugule 	return;
3764f2f7573SAshwin Chaugule }
3774f2f7573SAshwin Chaugule #endif	/* CONFIG_ACPI_CPPC_LIB */
3784f2f7573SAshwin Chaugule 
37924119a88SHanjun Guo /* in processor_pdc.c */
38024119a88SHanjun Guo void acpi_processor_set_pdc(acpi_handle handle);
38124119a88SHanjun Guo 
3821da177e4SLinus Torvalds /* in processor_throttling.c */
383239708a3SAshwin Chaugule #ifdef CONFIG_ACPI_CPU_FREQ_PSS
384a66b34b2SAdrian Bunk int acpi_processor_tstate_has_changed(struct acpi_processor *pr);
3851da177e4SLinus Torvalds int acpi_processor_get_throttling_info(struct acpi_processor *pr);
3862a908002SFrans Pop extern int acpi_processor_set_throttling(struct acpi_processor *pr,
3872a908002SFrans Pop 					 int state, bool force);
3885a344a50SZhao Yakui /*
3895a344a50SZhao Yakui  * Reevaluate whether the T-state is invalid after one cpu is
3905a344a50SZhao Yakui  * onlined/offlined. In such case the flags.throttling will be updated.
3915a344a50SZhao Yakui  */
3925a344a50SZhao Yakui extern void acpi_processor_reevaluate_tstate(struct acpi_processor *pr,
39364f3bf2fSSebastian Andrzej Siewior 			bool is_dead);
394070d8eb1SJan Engelhardt extern const struct file_operations acpi_processor_throttling_fops;
3951180509fSZhao Yakui extern void acpi_processor_throttling_init(void);
396239708a3SAshwin Chaugule #else
acpi_processor_tstate_has_changed(struct acpi_processor * pr)397239708a3SAshwin Chaugule static inline int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
398239708a3SAshwin Chaugule {
399239708a3SAshwin Chaugule 	return 0;
400239708a3SAshwin Chaugule }
401239708a3SAshwin Chaugule 
acpi_processor_get_throttling_info(struct acpi_processor * pr)402239708a3SAshwin Chaugule static inline int acpi_processor_get_throttling_info(struct acpi_processor *pr)
403239708a3SAshwin Chaugule {
404239708a3SAshwin Chaugule 	return -ENODEV;
405239708a3SAshwin Chaugule }
406239708a3SAshwin Chaugule 
acpi_processor_set_throttling(struct acpi_processor * pr,int state,bool force)407239708a3SAshwin Chaugule static inline int acpi_processor_set_throttling(struct acpi_processor *pr,
408239708a3SAshwin Chaugule 					 int state, bool force)
409239708a3SAshwin Chaugule {
410239708a3SAshwin Chaugule 	return -ENODEV;
411239708a3SAshwin Chaugule }
412239708a3SAshwin Chaugule 
acpi_processor_reevaluate_tstate(struct acpi_processor * pr,bool is_dead)413239708a3SAshwin Chaugule static inline void acpi_processor_reevaluate_tstate(struct acpi_processor *pr,
41464f3bf2fSSebastian Andrzej Siewior 			bool is_dead) {}
415239708a3SAshwin Chaugule 
acpi_processor_throttling_init(void)416239708a3SAshwin Chaugule static inline void acpi_processor_throttling_init(void) {}
417239708a3SAshwin Chaugule #endif	/* CONFIG_ACPI_CPU_FREQ_PSS */
418239708a3SAshwin Chaugule 
4191da177e4SLinus Torvalds /* in processor_idle.c */
4205f05586cSAshwin Chaugule extern struct cpuidle_driver acpi_idle_driver;
4215f05586cSAshwin Chaugule #ifdef CONFIG_ACPI_PROCESSOR_IDLE
42238a991b6SDaniel Lezcano int acpi_processor_power_init(struct acpi_processor *pr);
42338a991b6SDaniel Lezcano int acpi_processor_power_exit(struct acpi_processor *pr);
424a36a7fecSSudeep Holla int acpi_processor_power_state_has_changed(struct acpi_processor *pr);
42546bcfad7SDeepthi Dharwar int acpi_processor_hotplug(struct acpi_processor *pr);
4265f05586cSAshwin Chaugule #else
acpi_processor_power_init(struct acpi_processor * pr)4275f05586cSAshwin Chaugule static inline int acpi_processor_power_init(struct acpi_processor *pr)
4285f05586cSAshwin Chaugule {
4295f05586cSAshwin Chaugule 	return -ENODEV;
4305f05586cSAshwin Chaugule }
4311da177e4SLinus Torvalds 
acpi_processor_power_exit(struct acpi_processor * pr)4325f05586cSAshwin Chaugule static inline int acpi_processor_power_exit(struct acpi_processor *pr)
4335f05586cSAshwin Chaugule {
4345f05586cSAshwin Chaugule 	return -ENODEV;
4355f05586cSAshwin Chaugule }
4365f05586cSAshwin Chaugule 
acpi_processor_power_state_has_changed(struct acpi_processor * pr)437a36a7fecSSudeep Holla static inline int acpi_processor_power_state_has_changed(struct acpi_processor *pr)
4385f05586cSAshwin Chaugule {
4395f05586cSAshwin Chaugule 	return -ENODEV;
4405f05586cSAshwin Chaugule }
4415f05586cSAshwin Chaugule 
acpi_processor_hotplug(struct acpi_processor * pr)4425f05586cSAshwin Chaugule static inline int acpi_processor_hotplug(struct acpi_processor *pr)
4435f05586cSAshwin Chaugule {
4445f05586cSAshwin Chaugule 	return -ENODEV;
4455f05586cSAshwin Chaugule }
4465f05586cSAshwin Chaugule #endif /* CONFIG_ACPI_PROCESSOR_IDLE */
4475f05586cSAshwin Chaugule 
4481da177e4SLinus Torvalds /* in processor_thermal.c */
4497fdc74daSRiwen Lu int acpi_processor_thermal_init(struct acpi_processor *pr,
4507fdc74daSRiwen Lu 				struct acpi_device *device);
4517fdc74daSRiwen Lu void acpi_processor_thermal_exit(struct acpi_processor *pr,
4527fdc74daSRiwen Lu 				 struct acpi_device *device);
4539c8b04beSVasiliy Kulikov extern const struct thermal_cooling_device_ops processor_cooling_ops;
4547fdc74daSRiwen Lu #ifdef CONFIG_CPU_FREQ
4553000ce3cSRafael J. Wysocki void acpi_thermal_cpufreq_init(struct cpufreq_policy *policy);
4563000ce3cSRafael J. Wysocki void acpi_thermal_cpufreq_exit(struct cpufreq_policy *policy);
4571da177e4SLinus Torvalds #else
acpi_thermal_cpufreq_init(struct cpufreq_policy * policy)4583000ce3cSRafael J. Wysocki static inline void acpi_thermal_cpufreq_init(struct cpufreq_policy *policy)
4594be44fcdSLen Brown {
4604be44fcdSLen Brown 	return;
4614be44fcdSLen Brown }
acpi_thermal_cpufreq_exit(struct cpufreq_policy * policy)4623000ce3cSRafael J. Wysocki static inline void acpi_thermal_cpufreq_exit(struct cpufreq_policy *policy)
4634be44fcdSLen Brown {
4644be44fcdSLen Brown 	return;
4654be44fcdSLen Brown }
4667fdc74daSRiwen Lu #endif	/* CONFIG_CPU_FREQ */
4671da177e4SLinus Torvalds 
46831436373SSudeep Holla #ifdef CONFIG_ACPI_PROCESSOR_IDLE
46931436373SSudeep Holla extern int acpi_processor_ffh_lpi_probe(unsigned int cpu);
47031436373SSudeep Holla extern int acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi);
47131436373SSudeep Holla #endif
47231436373SSudeep Holla 
473b79276dcSMario Limonciello void acpi_processor_init_invariance_cppc(void);
474b79276dcSMario Limonciello 
4751da177e4SLinus Torvalds #endif
476