2019-05-27 09:55:14 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2005-04-17 02:20:36 +04:00
/*
* ( C ) 2002 - 2003 Dominik Brodowski < linux @ brodo . de >
*
* Library for common functions for Intel SpeedStep v .1 and v .2 support
*
* BIG FAT DISCLAIMER : Work in progress code . Possibly * dangerous *
*/
/* processors */
2009-11-18 01:39:53 +03:00
enum speedstep_processor {
SPEEDSTEP_CPU_PIII_C_EARLY = 0x00000001 , /* Coppermine core */
SPEEDSTEP_CPU_PIII_C = 0x00000002 , /* Coppermine core */
SPEEDSTEP_CPU_PIII_T = 0x00000003 , /* Tualatin core */
SPEEDSTEP_CPU_P4M = 0x00000004 , /* P4-M */
2005-04-17 02:20:36 +04:00
/* the following processors are not speedstep-capable and are not auto-detected
* in speedstep_detect_processor ( ) . However , their speed can be detected using
2009-01-18 07:55:22 +03:00
* the speedstep_get_frequency ( ) call . */
2009-11-18 01:39:53 +03:00
SPEEDSTEP_CPU_PM = 0xFFFFFF03 , /* Pentium M */
SPEEDSTEP_CPU_P4D = 0xFFFFFF04 , /* desktop P4 */
SPEEDSTEP_CPU_PCORE = 0xFFFFFF05 , /* Core */
} ;
2005-04-17 02:20:36 +04:00
/* speedstep states -- only two of them */
2006-02-28 08:43:23 +03:00
# define SPEEDSTEP_HIGH 0x00000000
# define SPEEDSTEP_LOW 0x00000001
2005-04-17 02:20:36 +04:00
/* detect a speedstep-capable processor */
2009-11-18 01:39:53 +03:00
extern enum speedstep_processor speedstep_detect_processor ( void ) ;
2005-04-17 02:20:36 +04:00
/* detect the current speed (in khz) of the processor */
2009-11-18 01:39:53 +03:00
extern unsigned int speedstep_get_frequency ( enum speedstep_processor processor ) ;
2005-04-17 02:20:36 +04:00
2006-02-28 08:43:23 +03:00
/* detect the low and high speeds of the processor. The callback
* set_state " 's first argument is either SPEEDSTEP_HIGH or
* SPEEDSTEP_LOW ; the second argument is zero so that no
2005-04-17 02:20:36 +04:00
* cpufreq_notify_transition calls are initiated .
*/
2009-11-18 01:39:53 +03:00
extern unsigned int speedstep_get_freqs ( enum speedstep_processor processor ,
2006-02-28 08:43:23 +03:00
unsigned int * low_speed ,
unsigned int * high_speed ,
unsigned int * transition_latency ,
void ( * set_state ) ( unsigned int state ) ) ;