Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
5be1676c
Commit
5be1676c
authored
Sep 09, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux-dj.bkbits.net/cpufreq
into home.osdl.org:/home/torvalds/v2.5/linux
parents
2e926a15
5f27f461
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
510 additions
and
38 deletions
+510
-38
arch/i386/boot/setup.S
arch/i386/boot/setup.S
+11
-0
arch/i386/kernel/cpu/cpufreq/Kconfig
arch/i386/kernel/cpu/cpufreq/Kconfig
+26
-14
arch/i386/kernel/cpu/cpufreq/Makefile
arch/i386/kernel/cpu/cpufreq/Makefile
+1
-0
arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
+353
-0
arch/i386/kernel/i386_ksyms.c
arch/i386/kernel/i386_ksyms.c
+5
-0
arch/i386/kernel/setup.c
arch/i386/kernel/setup.c
+3
-0
drivers/cpufreq/cpufreq.c
drivers/cpufreq/cpufreq.c
+67
-21
drivers/cpufreq/cpufreq_userspace.c
drivers/cpufreq/cpufreq_userspace.c
+1
-3
include/asm-i386/ist.h
include/asm-i386/ist.h
+32
-0
include/asm-i386/setup.h
include/asm-i386/setup.h
+1
-0
include/linux/cpufreq.h
include/linux/cpufreq.h
+10
-0
No files found.
arch/i386/boot/setup.S
View file @
5be1676c
...
...
@@ -506,6 +506,17 @@ no_voyager:
movw
$
0xAA
,
(
0x1ff
)
#
device
present
no_psmouse
:
#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
movl
$
0x0000E980
,
%
eax
#
IST
Support
movl
$
0x47534943
,
%
edx
#
Request
value
int
$
0x15
movl
%
eax
,
(
96
)
movl
%
ebx
,
(
100
)
movl
%
ecx
,
(
104
)
movl
%
edx
,
(
108
)
#endif
#if defined(CONFIG_APM) || defined(CONFIG_APM_MODULE)
#
Then
check
for
an
APM
BIOS
...
#
%
ds
points
to
the
bootsector
...
...
arch/i386/kernel/cpu/cpufreq/Kconfig
View file @
5be1676c
...
...
@@ -99,25 +99,37 @@ config X86_GX_SUSPMOD
If in doubt, say N.
config X86_SPEEDSTEP_CENTRINO
tristate "Intel Enhanced SpeedStep"
depends on CPU_FREQ_TABLE
help
This adds the CPUFreq driver for Enhanced SpeedStep enabled
mobile CPUs. This means Intel Pentium M (Centrino) CPUs.
For details, take a look at linux/Documentation/cpu-freq.
If in doubt, say N.
config X86_SPEEDSTEP_ICH
tristate "Intel Speedstep"
tristate "Intel Speedstep
on ICH-M chipsets (ioport interface)
"
depends on CPU_FREQ_TABLE
help
This adds the CPUFreq driver for certain mobile Intel Pentium III
(Coppermine), all mobile Intel Pentium III-M (Tualatin) and all
mobile Intel Pentium 4 P4-M
s, with an Intel ICH2, ICH3,
or ICH4 southbridge.
mobile Intel Pentium 4 P4-M
on systems which have an Intel ICH2,
ICH3
or ICH4 southbridge.
For details, take a look at linux/Documentation/cpu-freq.
If in doubt, say N.
config X86_SPEEDSTEP_
CENTRINO
tristate "Intel
Enhanced SpeedStep
"
depends on CPU_FREQ_TABLE
config X86_SPEEDSTEP_
SMI
tristate "Intel
SpeedStep on 440BX/ZX/MX chipsets (SMI interface)
"
depends on CPU_FREQ_TABLE
&& EXPERIMENTAL
help
This adds the CPUFreq driver for Enhanced SpeedStep enabled
mobile CPUs. This means Intel Pentium M (Centrino) CPUs.
This adds the CPUFreq driver for certain mobile Intel Pentium III
(Coppermine), all mobile Intel Pentium III-M (Tualatin)
on systems which have an Intel 440BX/ZX/MX southbridge.
For details, take a look at linux/Documentation/cpu-freq.
...
...
@@ -125,8 +137,8 @@ config X86_SPEEDSTEP_CENTRINO
config X86_SPEEDSTEP_LIB
tristate
depends on X86_SPEEDSTEP_ICH
default X86_SPEEDSTEP_ICH
depends on (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI)
default (X86_SPEEDSTEP_ICH || X86_SPEEDSTEP_SMI)
config X86_P4_CLOCKMOD
tristate "Intel Pentium 4 clock modulation"
...
...
arch/i386/kernel/cpu/cpufreq/Makefile
View file @
5be1676c
...
...
@@ -9,6 +9,7 @@ obj-$(CONFIG_X86_ACPI_CPUFREQ) += acpi.o
obj-$(CONFIG_X86_SPEEDSTEP_ICH)
+=
speedstep-ich.o
obj-$(CONFIG_X86_SPEEDSTEP_CENTRINO)
+=
speedstep-centrino.o
obj-$(CONFIG_X86_SPEEDSTEP_LIB)
+=
speedstep-lib.o
obj-$(CONFIG_X86_SPEEDSTEP_SMI)
+=
speedstep-smi.o
ifdef
CONFIG_X86_ACPI_CPUFREQ
ifdef
CONFIG_ACPI_DEBUG
...
...
arch/i386/kernel/cpu/cpufreq/speedstep-smi.c
0 → 100644
View file @
5be1676c
/*
* Intel SpeedStep SMI driver.
*
* (C) 2003 Hiroshi Miura <miura@da-cha.org>
*
* Licensed under the terms of the GNU GPL License version 2.
*
*/
/*********************************************************************
* SPEEDSTEP - DEFINITIONS *
*********************************************************************/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/cpufreq.h>
#include <linux/pci.h>
#include <linux/slab.h>
#include <asm/ist.h>
#include "speedstep-lib.h"
/* speedstep system management interface port/command.
*
* These parameters are got from IST-SMI BIOS call.
* If user gives it, these are used.
*
*/
static
int
smi_port
=
0
;
static
int
smi_cmd
=
0
;
static
unsigned
int
smi_sig
=
0
;
/*
* There are only two frequency states for each processor. Values
* are in kHz for the time being.
*/
static
struct
cpufreq_frequency_table
speedstep_freqs
[]
=
{
{
SPEEDSTEP_HIGH
,
0
},
{
SPEEDSTEP_LOW
,
0
},
{
0
,
CPUFREQ_TABLE_END
},
};
#define GET_SPEEDSTEP_OWNER 0
#define GET_SPEEDSTEP_STATE 1
#define SET_SPEEDSTEP_STATE 2
#define GET_SPEEDSTEP_FREQS 4
/* DEBUG
* Define it if you want verbose debug output, e.g. for bug reporting
*/
#define SPEEDSTEP_DEBUG
#ifdef SPEEDSTEP_DEBUG
#define dprintk(msg...) printk(msg)
#else
#define dprintk(msg...) do { } while(0)
#endif
/**
* speedstep_smi_ownership
*/
static
int
speedstep_smi_ownership
(
void
)
{
u32
command
,
result
,
magic
;
u32
function
=
GET_SPEEDSTEP_OWNER
;
unsigned
char
magic_data
[]
=
"Copyright (c) 1999 Intel Corporation"
;
command
=
(
smi_sig
&
0xffffff00
)
|
(
smi_cmd
&
0xff
);
magic
=
virt_to_phys
(
magic_data
);
__asm__
__volatile__
(
"out %%al, (%%dx)
\n
"
:
"=D"
(
result
)
:
"a"
(
command
),
"b"
(
function
),
"c"
(
0
),
"d"
(
smi_port
),
"D"
(
0
),
"S"
(
magic
)
);
return
result
;
}
/**
* speedstep_smi_get_freqs - get SpeedStep preferred & current freq.
*
*/
static
int
speedstep_smi_get_freqs
(
unsigned
int
*
low
,
unsigned
int
*
high
)
{
u32
command
,
result
,
edi
,
high_mhz
,
low_mhz
;
u32
state
=
0
;
u32
function
=
GET_SPEEDSTEP_FREQS
;
command
=
(
smi_sig
&
0xffffff00
)
|
(
smi_cmd
&
0xff
);
__asm__
__volatile__
(
"movl $0, %%edi
\n
"
"out %%al, (%%dx)
\n
"
:
"=a"
(
result
),
"=b"
(
high_mhz
),
"=c"
(
low_mhz
),
"=d"
(
state
),
"=D"
(
edi
)
:
"a"
(
command
),
"b"
(
function
),
"c"
(
state
),
"d"
(
smi_port
),
"S"
(
0
)
);
*
high
=
high_mhz
*
1000
;
*
low
=
low_mhz
*
1000
;
return
result
;
}
/**
* speedstep_get_state - set the SpeedStep state
* @state: processor frequency state (SPEEDSTEP_LOW or SPEEDSTEP_HIGH)
*
*/
static
int
speedstep_get_state
(
void
)
{
u32
function
=
GET_SPEEDSTEP_STATE
;
u32
result
,
state
,
edi
,
command
;
command
=
(
smi_sig
&
0xffffff00
)
|
(
smi_cmd
&
0xff
);
__asm__
__volatile__
(
"movl $0, %%edi
\n
"
"out %%al, (%%dx)
\n
"
:
"=a"
(
result
),
"=b"
(
state
),
"=D"
(
edi
)
:
"a"
(
command
),
"b"
(
function
),
"c"
(
0
),
"d"
(
smi_port
),
"S"
(
0
)
);
return
state
;
}
/**
* speedstep_set_state - set the SpeedStep state
* @state: new processor frequency state (SPEEDSTEP_LOW or SPEEDSTEP_HIGH)
*
*/
static
void
speedstep_set_state
(
unsigned
int
state
,
unsigned
int
notify
)
{
unsigned
int
old_state
,
result
,
command
,
new_state
;
unsigned
long
flags
;
struct
cpufreq_freqs
freqs
;
unsigned
int
function
=
SET_SPEEDSTEP_STATE
;
if
(
state
>
0x1
)
return
;
old_state
=
speedstep_get_state
();
freqs
.
old
=
speedstep_freqs
[
old_state
].
frequency
;
freqs
.
new
=
speedstep_freqs
[
state
].
frequency
;
freqs
.
cpu
=
0
;
/* speedstep.c is UP only driver */
if
(
old_state
==
state
)
return
;
if
(
notify
)
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_PRECHANGE
);
/* Disable IRQs */
local_irq_save
(
flags
);
command
=
(
smi_sig
&
0xffffff00
)
|
(
smi_cmd
&
0xff
);
__asm__
__volatile__
(
"movl $0, %%edi
\n
"
"out %%al, (%%dx)
\n
"
:
"=b"
(
new_state
),
"=D"
(
result
)
:
"a"
(
command
),
"b"
(
function
),
"c"
(
state
),
"d"
(
smi_port
),
"S"
(
0
)
);
/* enable IRQs */
local_irq_restore
(
flags
);
if
(
new_state
==
state
)
{
dprintk
(
KERN_INFO
"cpufreq: change to %u MHz succeded
\n
"
,
(
freqs
.
new
/
1000
));
}
else
{
printk
(
KERN_ERR
"cpufreq: change failed
\n
"
);
}
if
(
notify
)
cpufreq_notify_transition
(
&
freqs
,
CPUFREQ_POSTCHANGE
);
return
;
}
/**
* speedstep_target - set a new CPUFreq policy
* @policy: new policy
* @target_freq: new freq
* @relation:
*
* Sets a new CPUFreq policy/freq.
*/
static
int
speedstep_target
(
struct
cpufreq_policy
*
policy
,
unsigned
int
target_freq
,
unsigned
int
relation
)
{
unsigned
int
newstate
=
0
;
if
(
cpufreq_frequency_table_target
(
policy
,
&
speedstep_freqs
[
0
],
target_freq
,
relation
,
&
newstate
))
return
-
EINVAL
;
speedstep_set_state
(
newstate
,
1
);
return
0
;
}
/**
* speedstep_verify - verifies a new CPUFreq policy
* @freq: new policy
*
* Limit must be within speedstep_low_freq and speedstep_high_freq, with
* at least one border included.
*/
static
int
speedstep_verify
(
struct
cpufreq_policy
*
policy
)
{
return
cpufreq_frequency_table_verify
(
policy
,
&
speedstep_freqs
[
0
]);
}
static
int
speedstep_cpu_init
(
struct
cpufreq_policy
*
policy
)
{
int
result
;
unsigned
int
speed
,
state
;
/* capability check */
if
(
policy
->
cpu
!=
0
)
return
-
ENODEV
;
result
=
speedstep_smi_ownership
();
if
(
result
)
dprintk
(
KERN_INFO
"cpufreq: fails an aquiring ownership of a SMI interface.
\n
"
);
/* detect low and high frequency */
result
=
speedstep_smi_get_freqs
(
&
speedstep_freqs
[
SPEEDSTEP_LOW
].
frequency
,
&
speedstep_freqs
[
SPEEDSTEP_HIGH
].
frequency
);
if
(
result
)
{
/* fall back to speedstep_lib.c dection mechanism: try both states out */
unsigned
int
speedstep_processor
=
speedstep_detect_processor
();
dprintk
(
KERN_INFO
"speedstep-smi: could not detect low and high frequencies by SMI call.
\n
"
);
if
(
!
speedstep_processor
)
return
-
ENODEV
;
result
=
speedstep_get_freqs
(
speedstep_processor
,
&
speedstep_freqs
[
SPEEDSTEP_LOW
].
frequency
,
&
speedstep_freqs
[
SPEEDSTEP_HIGH
].
frequency
,
&
speedstep_set_state
);
if
(
result
)
{
dprintk
(
KERN_INFO
"speedstep-smi: could not detect two different speeds -- aborting.
\n
"
);
return
result
;
}
else
dprintk
(
KERN_INFO
"speedstep-smi: workaround worked.
\n
"
);
}
/* get current speed setting */
state
=
speedstep_get_state
();
speed
=
speedstep_freqs
[
state
].
frequency
;
dprintk
(
KERN_INFO
"cpufreq: currently at %s speed setting - %i MHz
\n
"
,
(
speed
==
speedstep_freqs
[
SPEEDSTEP_LOW
].
frequency
)
?
"low"
:
"high"
,
(
speed
/
1000
));
/* cpuinfo and default policy values */
policy
->
governor
=
CPUFREQ_DEFAULT_GOVERNOR
;
policy
->
cpuinfo
.
transition_latency
=
CPUFREQ_ETERNAL
;
policy
->
cur
=
speed
;
return
cpufreq_frequency_table_cpuinfo
(
policy
,
&
speedstep_freqs
[
0
]);
}
static
int
speedstep_resume
(
struct
cpufreq_policy
*
policy
)
{
int
result
=
speedstep_smi_ownership
();
if
(
result
)
dprintk
(
KERN_INFO
"cpufreq: fails an aquiring ownership of a SMI interface.
\n
"
);
return
result
;
}
static
struct
cpufreq_driver
speedstep_driver
=
{
.
name
=
"speedstep-smi"
,
.
verify
=
speedstep_verify
,
.
target
=
speedstep_target
,
.
init
=
speedstep_cpu_init
,
.
resume
=
speedstep_resume
,
};
/**
* speedstep_init - initializes the SpeedStep CPUFreq driver
*
* Initializes the SpeedStep support. Returns -ENODEV on unsupported
* BIOS, -EINVAL on problems during initiatization, and zero on
* success.
*/
static
int
__init
speedstep_init
(
void
)
{
dprintk
(
"speedstep-smi: signature:0%.8lx, command:0lx%.8lx, event:0x%.8lx, perf_level:0x%.8lx.
\n
"
,
ist_info
.
signature
,
ist_info
.
command
,
ist_info
.
event
,
ist_info
.
perf_level
);
/* Error if no IST-SMI BIOS or no PARM
sig= 'ISGE' aka 'Intel Speedstep Gate E' */
if
((
ist_info
.
signature
!=
0x47534943
)
&&
(
(
smi_port
==
0
)
||
(
smi_cmd
==
0
)))
return
-
ENODEV
;
if
(
smi_sig
==
1
)
smi_sig
=
0x47534943
;
else
smi_sig
=
ist_info
.
signature
;
/* setup smi_port from MODLULE_PARM or BIOS */
if
((
smi_port
>
0xff
)
||
(
smi_port
<
0
))
{
return
-
EINVAL
;
}
else
if
(
smi_port
==
0
)
{
smi_port
=
ist_info
.
command
&
0xff
;
}
if
((
smi_cmd
>
0xff
)
||
(
smi_cmd
<
0
))
{
return
-
EINVAL
;
}
else
if
(
smi_cmd
==
0
)
{
smi_cmd
=
(
ist_info
.
command
>>
16
)
&
0xff
;
}
return
cpufreq_register_driver
(
&
speedstep_driver
);
}
/**
* speedstep_exit - unregisters SpeedStep support
*
* Unregisters SpeedStep support.
*/
static
void
__exit
speedstep_exit
(
void
)
{
cpufreq_unregister_driver
(
&
speedstep_driver
);
}
module_param
(
smi_port
,
int
,
0444
);
module_param
(
smi_cmd
,
int
,
0444
);
module_param
(
smi_sig
,
uint
,
0444
);
MODULE_PARM_DESC
(
smi_port
,
"Override the BIOS-given IST port with this value -- Intel's default setting is 0xb2"
);
MODULE_PARM_DESC
(
smi_cmd
,
"Override the BIOS-given IST command with this value -- Intel's default setting is 0x82"
);
MODULE_PARM_DESC
(
smi_sig
,
"Set to 1 to fake the IST signature when using the SMI interface."
);
MODULE_AUTHOR
(
"Hiroshi Miura"
);
MODULE_DESCRIPTION
(
"Speedstep driver for IST applet SMI interface."
);
MODULE_LICENSE
(
"GPL"
);
module_init
(
speedstep_init
);
module_exit
(
speedstep_exit
);
arch/i386/kernel/i386_ksyms.c
View file @
5be1676c
...
...
@@ -33,6 +33,7 @@
#include <asm/tlbflush.h>
#include <asm/nmi.h>
#include <asm/edd.h>
#include <asm/ist.h>
extern
void
dump_thread
(
struct
pt_regs
*
,
struct
user
*
);
extern
spinlock_t
rtc_lock
;
...
...
@@ -209,3 +210,7 @@ EXPORT_SYMBOL(kmap_atomic_to_page);
EXPORT_SYMBOL
(
edd
);
EXPORT_SYMBOL
(
eddnr
);
#endif
#if defined(CONFIG_X86_SPEEDSTEP_SMI) || defined(CONFIG_X86_SPEEDSTEP_SMI_MODULE)
EXPORT_SYMBOL
(
ist_info
);
#endif
arch/i386/kernel/setup.c
View file @
5be1676c
...
...
@@ -44,6 +44,7 @@
#include <asm/arch_hooks.h>
#include <asm/sections.h>
#include <asm/io_apic.h>
#include <asm/ist.h>
#include "setup_arch_pre.h"
#include "mach_resources.h"
...
...
@@ -102,6 +103,7 @@ struct sys_desc_table_struct {
unsigned
char
table
[
0
];
};
struct
edid_info
edid_info
;
struct
ist_info
ist_info
;
struct
e820map
e820
;
unsigned
char
aux_device_present
;
...
...
@@ -960,6 +962,7 @@ void __init setup_arch(char **cmdline_p)
screen_info
=
SCREEN_INFO
;
edid_info
=
EDID_INFO
;
apm_info
.
bios
=
APM_BIOS_INFO
;
ist_info
=
IST_INFO
;
saved_videomode
=
VIDEO_MODE
;
printk
(
"Video mode to be used for restore is %lx
\n
"
,
saved_videomode
);
if
(
SYS_DESC_TABLE
.
length
!=
0
)
{
...
...
drivers/cpufreq/cpufreq.c
View file @
5be1676c
/*
* linux/
kernel
/cpufreq.c
* linux/
drivers/cpufreq
/cpufreq.c
*
* Copyright (C) 2001 Russell King
* (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
*
* $Id: cpufreq.c,v 1.59 2003/01/20 17:31:48 db Exp $
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
...
...
@@ -743,26 +741,9 @@ int cpufreq_get_policy(struct cpufreq_policy *policy, unsigned int cpu)
EXPORT_SYMBOL
(
cpufreq_get_policy
);
/**
* cpufreq_set_policy - set a new CPUFreq policy
* @policy: policy to be set.
*
* Sets a new CPU frequency and voltage scaling policy.
*/
int
cpufreq_set_policy
(
struct
cpufreq_policy
*
policy
)
static
int
__cpufreq_set_policy
(
struct
cpufreq_policy
*
data
,
struct
cpufreq_policy
*
policy
)
{
int
ret
=
0
;
struct
cpufreq_policy
*
data
;
if
(
!
policy
)
return
-
EINVAL
;
data
=
cpufreq_cpu_get
(
policy
->
cpu
);
if
(
!
data
)
return
-
EINVAL
;
/* lock this CPU */
down
(
&
data
->
lock
);
memcpy
(
&
policy
->
cpuinfo
,
&
data
->
cpuinfo
,
...
...
@@ -829,6 +810,36 @@ int cpufreq_set_policy(struct cpufreq_policy *policy)
}
error_out:
return
ret
;
}
/**
* cpufreq_set_policy - set a new CPUFreq policy
* @policy: policy to be set.
*
* Sets a new CPU frequency and voltage scaling policy.
*/
int
cpufreq_set_policy
(
struct
cpufreq_policy
*
policy
)
{
int
ret
=
0
;
struct
cpufreq_policy
*
data
;
if
(
!
policy
)
return
-
EINVAL
;
data
=
cpufreq_cpu_get
(
policy
->
cpu
);
if
(
!
data
)
return
-
EINVAL
;
/* lock this CPU */
down
(
&
data
->
lock
);
ret
=
__cpufreq_set_policy
(
data
,
policy
);
data
->
user_policy
.
min
=
data
->
min
;
data
->
user_policy
.
max
=
data
->
max
;
data
->
user_policy
.
policy
=
data
->
policy
;
data
->
user_policy
.
governor
=
data
->
governor
;
up
(
&
data
->
lock
);
cpufreq_cpu_put
(
data
);
...
...
@@ -837,6 +848,41 @@ int cpufreq_set_policy(struct cpufreq_policy *policy)
EXPORT_SYMBOL
(
cpufreq_set_policy
);
/**
* cpufreq_update_policy - re-evaluate an existing cpufreq policy
* @cpu: CPU which shall be re-evaluated
*
* Usefull for policy notifiers which have different necessities
* at different times.
*/
int
cpufreq_update_policy
(
unsigned
int
cpu
)
{
struct
cpufreq_policy
*
data
=
cpufreq_cpu_get
(
cpu
);
struct
cpufreq_policy
policy
;
int
ret
=
0
;
if
(
!
data
)
return
-
ENODEV
;
down
(
&
data
->
lock
);
memcpy
(
&
policy
,
&
data
,
sizeof
(
struct
cpufreq_policy
));
policy
.
min
=
data
->
user_policy
.
min
;
policy
.
max
=
data
->
user_policy
.
max
;
policy
.
policy
=
data
->
user_policy
.
policy
;
policy
.
governor
=
data
->
user_policy
.
governor
;
ret
=
__cpufreq_set_policy
(
data
,
&
policy
);
up
(
&
data
->
lock
);
cpufreq_cpu_put
(
data
);
return
ret
;
}
EXPORT_SYMBOL
(
cpufreq_update_policy
);
/*********************************************************************
* EXTERNALLY AFFECTING FREQUENCY CHANGES *
...
...
drivers/cpufreq/cpufreq_userspace.c
View file @
5be1676c
/*
*
drivers/cpufreq/
userspace.c
*
linux/drivers/cpufreq/cpufreq_
userspace.c
*
* Copyright (C) 2001 Russell King
* (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
*
* $Id:$
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
...
...
include/asm-i386/ist.h
0 → 100644
View file @
5be1676c
#ifndef _ASM_IST_H
#define _ASM_IST_H
/*
* Include file for the interface to IST BIOS
* Copyright 2002 Andy Grover <andrew.grover@intel.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2, or (at your option) any
* later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
#ifdef __KERNEL__
struct
ist_info
{
unsigned
long
signature
;
unsigned
long
command
;
unsigned
long
event
;
unsigned
long
perf_level
;
};
extern
struct
ist_info
ist_info
;
#endif
/* __KERNEL__ */
#endif
/* _ASM_IST_H */
include/asm-i386/setup.h
View file @
5be1676c
...
...
@@ -26,6 +26,7 @@
#define E820_MAP_NR (*(char*) (PARAM+E820NR))
#define E820_MAP ((struct e820entry *) (PARAM+E820MAP))
#define APM_BIOS_INFO (*(struct apm_bios_info *) (PARAM+0x40))
#define IST_INFO (*(struct ist_info *) (PARAM+0x60))
#define DRIVE_INFO (*(struct drive_info_struct *) (PARAM+0x80))
#define SYS_DESC_TABLE (*(struct sys_desc_table_struct*)(PARAM+0xa0))
#define MOUNT_ROOT_RDONLY (*(unsigned short *) (PARAM+0x1F2))
...
...
include/linux/cpufreq.h
View file @
5be1676c
...
...
@@ -60,6 +60,13 @@ struct cpufreq_cpuinfo {
unsigned
int
transition_latency
;
/* in 10^(-9) s */
};
struct
cpufreq_real_policy
{
unsigned
int
min
;
/* in kHz */
unsigned
int
max
;
/* in kHz */
unsigned
int
policy
;
/* see above */
struct
cpufreq_governor
*
governor
;
/* see below */
};
struct
cpufreq_policy
{
unsigned
int
cpu
;
/* cpu nr */
struct
cpufreq_cpuinfo
cpuinfo
;
/* see above */
...
...
@@ -74,6 +81,8 @@ struct cpufreq_policy {
struct
semaphore
lock
;
/* CPU ->setpolicy or ->target may
only be called once a time */
struct
cpufreq_real_policy
user_policy
;
struct
kobject
kobj
;
struct
completion
kobj_unregister
;
};
...
...
@@ -217,6 +226,7 @@ struct freq_attr {
*********************************************************************/
int
cpufreq_set_policy
(
struct
cpufreq_policy
*
policy
);
int
cpufreq_get_policy
(
struct
cpufreq_policy
*
policy
,
unsigned
int
cpu
);
int
cpufreq_update_policy
(
unsigned
int
cpu
);
/* the proc_intf.c needs this */
int
cpufreq_parse_governor
(
char
*
str_governor
,
unsigned
int
*
policy
,
struct
cpufreq_governor
**
governor
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment