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
Kirill Smelkov
linux
Commits
ff55a9ce
Commit
ff55a9ce
authored
Jun 02, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ACPI: Lindent processor throttling code
Signed-off-by:
Len Brown
<
len.brown@intel.com
>
parent
01854e69
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
79 additions
and
68 deletions
+79
-68
drivers/acpi/processor_throttling.c
drivers/acpi/processor_throttling.c
+75
-65
include/acpi/processor.h
include/acpi/processor.h
+4
-3
No files found.
drivers/acpi/processor_throttling.c
View file @
ff55a9ce
...
...
@@ -44,18 +44,18 @@
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
ACPI_MODULE_NAME
(
"processor_throttling"
);
static
int
acpi_processor_get_throttling
(
struct
acpi_processor
*
pr
);
int
acpi_processor_set_throttling
(
struct
acpi_processor
*
pr
,
int
state
);
static
int
acpi_processor_get_throttling
(
struct
acpi_processor
*
pr
);
int
acpi_processor_set_throttling
(
struct
acpi_processor
*
pr
,
int
state
);
static
int
acpi_processor_get_platform_limit
(
struct
acpi_processor
*
pr
)
{
acpi_status
status
=
0
;
unsigned
long
tpc
=
0
;
if
(
!
pr
)
if
(
!
pr
)
return
-
EINVAL
;
status
=
acpi_evaluate_integer
(
pr
->
handle
,
"_TPC"
,
NULL
,
&
tpc
);
if
(
ACPI_FAILURE
(
status
)
&&
status
!=
AE_NOT_FOUND
)
{
if
(
ACPI_FAILURE
(
status
)
&&
status
!=
AE_NOT_FOUND
)
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"Evaluating _TPC"
));
return
-
ENODEV
;
}
...
...
@@ -102,7 +102,8 @@ static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
if
((
obj
.
type
!=
ACPI_TYPE_BUFFER
)
||
(
obj
.
buffer
.
length
<
sizeof
(
struct
acpi_ptc_register
))
||
(
obj
.
buffer
.
pointer
==
NULL
))
{
printk
(
KERN_ERR
PREFIX
"Invalid _PTC data (control_register)
\n
"
);
printk
(
KERN_ERR
PREFIX
"Invalid _PTC data (control_register)
\n
"
);
result
=
-
EFAULT
;
goto
end
;
}
...
...
@@ -168,7 +169,9 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
for
(
i
=
0
;
i
<
pr
->
throttling
.
state_count
;
i
++
)
{
struct
acpi_processor_tx_tss
*
tx
=
(
struct
acpi_processor_tx_tss
*
)
&
(
pr
->
throttling
.
states_tss
[
i
]);
struct
acpi_processor_tx_tss
*
tx
=
(
struct
acpi_processor_tx_tss
*
)
&
(
pr
->
throttling
.
states_tss
[
i
]);
state
.
length
=
sizeof
(
struct
acpi_processor_tx_tss
);
state
.
pointer
=
tx
;
...
...
@@ -202,9 +205,9 @@ static int acpi_processor_get_tsd(struct acpi_processor *pr)
{
int
result
=
0
;
acpi_status
status
=
AE_OK
;
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_buffer
format
=
{
sizeof
(
"NNNNN"
),
"NNNNN"
};
struct
acpi_buffer
state
=
{
0
,
NULL
};
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_buffer
format
=
{
sizeof
(
"NNNNN"
),
"NNNNN"
};
struct
acpi_buffer
state
=
{
0
,
NULL
};
union
acpi_object
*
tsd
=
NULL
;
struct
acpi_tsd_package
*
pdomain
;
...
...
@@ -251,7 +254,7 @@ static int acpi_processor_get_tsd(struct acpi_processor *pr)
goto
end
;
}
end:
end:
kfree
(
buffer
.
pointer
);
return
result
;
}
...
...
@@ -266,7 +269,6 @@ static int acpi_processor_get_throttling_fadt(struct acpi_processor *pr)
u32
duty_mask
=
0
;
u32
duty_value
=
0
;
if
(
!
pr
)
return
-
EINVAL
;
...
...
@@ -306,17 +308,20 @@ static int acpi_processor_get_throttling_fadt(struct acpi_processor *pr)
return
0
;
}
static
int
acpi_read_throttling_status
(
struct
acpi_processor_throttling
*
throttling
)
static
int
acpi_read_throttling_status
(
struct
acpi_processor_throttling
*
throttling
)
{
int
value
=
-
1
;
switch
(
throttling
->
status_register
.
space_id
)
{
case
ACPI_ADR_SPACE_SYSTEM_IO
:
acpi_os_read_port
((
acpi_io_address
)
throttling
->
status_register
.
address
,
&
value
,
(
u32
)
throttling
->
status_register
.
bit_width
*
8
);
acpi_os_read_port
((
acpi_io_address
)
throttling
->
status_register
.
address
,
&
value
,
(
u32
)
throttling
->
status_register
.
bit_width
*
8
);
break
;
case
ACPI_ADR_SPACE_FIXED_HARDWARE
:
printk
(
KERN_ERR
PREFIX
"HARDWARE addr space,NOT supported yet
\n
"
);
printk
(
KERN_ERR
PREFIX
"HARDWARE addr space,NOT supported yet
\n
"
);
break
;
default:
printk
(
KERN_ERR
PREFIX
"Unknown addr space %d
\n
"
,
...
...
@@ -325,19 +330,22 @@ static int acpi_read_throttling_status(struct acpi_processor_throttling *throttl
return
value
;
}
static
int
acpi_write_throttling_state
(
struct
acpi_processor_throttling
*
throttling
,
int
value
)
static
int
acpi_write_throttling_state
(
struct
acpi_processor_throttling
*
throttling
,
int
value
)
{
int
ret
=
-
1
;
switch
(
throttling
->
control_register
.
space_id
)
{
case
ACPI_ADR_SPACE_SYSTEM_IO
:
acpi_os_write_port
((
acpi_io_address
)
throttling
->
control_register
.
address
,
value
,
(
u32
)
throttling
->
control_register
.
bit_width
*
8
);
acpi_os_write_port
((
acpi_io_address
)
throttling
->
control_register
.
address
,
value
,
(
u32
)
throttling
->
control_register
.
bit_width
*
8
);
ret
=
0
;
break
;
case
ACPI_ADR_SPACE_FIXED_HARDWARE
:
printk
(
KERN_ERR
PREFIX
"HARDWARE addr space,NOT supported yet
\n
"
);
printk
(
KERN_ERR
PREFIX
"HARDWARE addr space,NOT supported yet
\n
"
);
break
;
default:
printk
(
KERN_ERR
PREFIX
"Unknown addr space %d
\n
"
,
...
...
@@ -346,25 +354,29 @@ static int acpi_write_throttling_state(struct acpi_processor_throttling *throttl
return
ret
;
}
static
int
acpi_get_throttling_state
(
struct
acpi_processor
*
pr
,
int
value
)
static
int
acpi_get_throttling_state
(
struct
acpi_processor
*
pr
,
int
value
)
{
int
i
;
for
(
i
=
0
;
i
<
pr
->
throttling
.
state_count
;
i
++
)
{
struct
acpi_processor_tx_tss
*
tx
=
(
struct
acpi_processor_tx_tss
*
)
&
(
pr
->
throttling
.
states_tss
[
i
]);
if
(
tx
->
control
==
value
)
struct
acpi_processor_tx_tss
*
tx
=
(
struct
acpi_processor_tx_tss
*
)
&
(
pr
->
throttling
.
states_tss
[
i
]);
if
(
tx
->
control
==
value
)
break
;
}
if
(
i
>
pr
->
throttling
.
state_count
)
i
=
-
1
;
if
(
i
>
pr
->
throttling
.
state_count
)
i
=
-
1
;
return
i
;
}
static
int
acpi_get_throttling_value
(
struct
acpi_processor
*
pr
,
int
state
)
static
int
acpi_get_throttling_value
(
struct
acpi_processor
*
pr
,
int
state
)
{
int
value
=
-
1
;
if
(
state
>=
0
&&
state
<=
pr
->
throttling
.
state_count
){
struct
acpi_processor_tx_tss
*
tx
=
(
struct
acpi_processor_tx_tss
*
)
&
(
pr
->
throttling
.
states_tss
[
state
]);
if
(
state
>=
0
&&
state
<=
pr
->
throttling
.
state_count
)
{
struct
acpi_processor_tx_tss
*
tx
=
(
struct
acpi_processor_tx_tss
*
)
&
(
pr
->
throttling
.
states_tss
[
state
]);
value
=
tx
->
control
;
}
return
value
;
...
...
@@ -375,7 +387,6 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
int
state
=
0
;
u32
value
=
0
;
if
(
!
pr
)
return
-
EINVAL
;
...
...
@@ -385,8 +396,8 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
pr
->
throttling
.
state
=
0
;
local_irq_disable
();
value
=
acpi_read_throttling_status
(
&
pr
->
throttling
);
if
(
value
>=
0
)
{
state
=
acpi_get_throttling_state
(
pr
,
value
);
if
(
value
>=
0
)
{
state
=
acpi_get_throttling_state
(
pr
,
value
);
pr
->
throttling
.
state
=
state
;
}
local_irq_enable
();
...
...
@@ -394,7 +405,6 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
return
0
;
}
static
int
acpi_processor_get_throttling
(
struct
acpi_processor
*
pr
)
{
return
pr
->
throttling
.
acpi_processor_get_throttling
(
pr
);
...
...
@@ -406,7 +416,6 @@ int acpi_processor_set_throttling_fadt(struct acpi_processor *pr, int state)
u32
duty_mask
=
0
;
u32
duty_value
=
0
;
if
(
!
pr
)
return
-
EINVAL
;
...
...
@@ -494,9 +503,9 @@ int acpi_processor_set_throttling_ptc(struct acpi_processor *pr, int state)
local_irq_disable
();
value
=
acpi_get_throttling_value
(
pr
,
state
);
if
(
value
>=
0
){
acpi_write_throttling_state
(
&
pr
->
throttling
,
value
);
value
=
acpi_get_throttling_value
(
pr
,
state
);
if
(
value
>=
0
)
{
acpi_write_throttling_state
(
&
pr
->
throttling
,
value
);
pr
->
throttling
.
state
=
state
;
}
local_irq_enable
();
...
...
@@ -506,7 +515,7 @@ int acpi_processor_set_throttling_ptc(struct acpi_processor *pr, int state)
int
acpi_processor_set_throttling
(
struct
acpi_processor
*
pr
,
int
state
)
{
return
pr
->
throttling
.
acpi_processor_set_throttling
(
pr
,
state
);
return
pr
->
throttling
.
acpi_processor_set_throttling
(
pr
,
state
);
}
int
acpi_processor_get_throttling_info
(
struct
acpi_processor
*
pr
)
...
...
@@ -518,7 +527,6 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
int
no_tss
=
0
;
int
no_tsd
=
0
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"pblk_address[0x%08x] duty_offset[%d] duty_width[%d]
\n
"
,
pr
->
throttling
.
address
,
...
...
@@ -533,12 +541,16 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
no_tss
=
acpi_processor_get_throttling_states
(
pr
);
no_tsd
=
acpi_processor_get_tsd
(
pr
);
if
(
no_ptc
||
no_tss
)
{
pr
->
throttling
.
acpi_processor_get_throttling
=
&
acpi_processor_get_throttling_fadt
;
pr
->
throttling
.
acpi_processor_set_throttling
=
&
acpi_processor_set_throttling_fadt
;
if
(
no_ptc
||
no_tss
)
{
pr
->
throttling
.
acpi_processor_get_throttling
=
&
acpi_processor_get_throttling_fadt
;
pr
->
throttling
.
acpi_processor_set_throttling
=
&
acpi_processor_set_throttling_fadt
;
}
else
{
pr
->
throttling
.
acpi_processor_get_throttling
=
&
acpi_processor_get_throttling_ptc
;
pr
->
throttling
.
acpi_processor_set_throttling
=
&
acpi_processor_set_throttling_ptc
;
pr
->
throttling
.
acpi_processor_get_throttling
=
&
acpi_processor_get_throttling_ptc
;
pr
->
throttling
.
acpi_processor_set_throttling
=
&
acpi_processor_set_throttling_ptc
;
}
if
(
!
pr
->
throttling
.
address
)
{
...
...
@@ -620,7 +632,6 @@ static int acpi_processor_throttling_seq_show(struct seq_file *seq,
int
i
=
0
;
int
result
=
0
;
if
(
!
pr
)
goto
end
;
...
...
@@ -642,10 +653,10 @@ static int acpi_processor_throttling_seq_show(struct seq_file *seq,
"state available: T%d to T%d
\n
"
,
pr
->
throttling
.
state_count
,
pr
->
throttling
.
state
,
pr
->
throttling_platform_limit
,
pr
->
throttling
.
state_count
-
1
);
pr
->
throttling
.
state_count
-
1
);
seq_puts
(
seq
,
"states:
\n
"
);
if
(
acpi_processor_get_throttling
==
acpi_processor_get_throttling_fadt
)
if
(
acpi_processor_get_throttling
==
acpi_processor_get_throttling_fadt
)
for
(
i
=
0
;
i
<
pr
->
throttling
.
state_count
;
i
++
)
seq_printf
(
seq
,
" %cT%d: %02d%%
\n
"
,
(
i
==
pr
->
throttling
.
state
?
'*'
:
' '
),
i
,
...
...
@@ -655,8 +666,8 @@ static int acpi_processor_throttling_seq_show(struct seq_file *seq,
for
(
i
=
0
;
i
<
pr
->
throttling
.
state_count
;
i
++
)
seq_printf
(
seq
,
" %cT%d: %02d%%
\n
"
,
(
i
==
pr
->
throttling
.
state
?
'*'
:
' '
),
i
,
(
int
)
pr
->
throttling
.
states_tss
[
i
].
freqpercentage
);
(
int
)
pr
->
throttling
.
states_tss
[
i
].
freqpercentage
);
end:
return
0
;
...
...
@@ -669,7 +680,7 @@ static int acpi_processor_throttling_open_fs(struct inode *inode,
PDE
(
inode
)
->
data
);
}
static
ssize_t
acpi_processor_write_throttling
(
struct
file
*
file
,
static
ssize_t
acpi_processor_write_throttling
(
struct
file
*
file
,
const
char
__user
*
buffer
,
size_t
count
,
loff_t
*
data
)
{
...
...
@@ -678,7 +689,6 @@ static ssize_t acpi_processor_write_throttling(struct file * file,
struct
acpi_processor
*
pr
=
m
->
private
;
char
state_string
[
12
]
=
{
'\0'
};
if
(
!
pr
||
(
count
>
sizeof
(
state_string
)
-
1
))
return
-
EINVAL
;
...
...
include/acpi/processor.h
View file @
ff55a9ce
...
...
@@ -167,8 +167,9 @@ struct acpi_processor_throttling {
struct
acpi_processor_tx_tss
*
states_tss
;
struct
acpi_tsd_package
domain_info
;
cpumask_t
shared_cpu_map
;
int
(
*
acpi_processor_get_throttling
)
(
struct
acpi_processor
*
pr
);
int
(
*
acpi_processor_set_throttling
)
(
struct
acpi_processor
*
pr
,
int
state
);
int
(
*
acpi_processor_get_throttling
)
(
struct
acpi_processor
*
pr
);
int
(
*
acpi_processor_set_throttling
)
(
struct
acpi_processor
*
pr
,
int
state
);
u32
address
;
u8
duty_offset
;
...
...
@@ -207,7 +208,7 @@ struct acpi_processor {
u32
pblk
;
int
performance_platform_limit
;
int
throttling_platform_limit
;
/*0 - states 0..n-th satte available
*/
/* 0 - states 0..n-th state available
*/
struct
acpi_processor_flags
flags
;
struct
acpi_processor_power
power
;
...
...
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