Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
309ddc53
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
309ddc53
编写于
12月 24, 2009
作者:
L
Len Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'bugzilla-14446', 'bugzilla-14753' and 'bugzilla-14824' into release
上级
6f5464ce
55b313f2
81074e90
78f16996
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
137 addition
and
71 deletion
+137
-71
drivers/acpi/Makefile
drivers/acpi/Makefile
+1
-0
drivers/acpi/blacklist.c
drivers/acpi/blacklist.c
+14
-0
drivers/acpi/bus.c
drivers/acpi/bus.c
+2
-0
drivers/acpi/ec.c
drivers/acpi/ec.c
+8
-2
drivers/acpi/internal.h
drivers/acpi/internal.h
+1
-0
drivers/acpi/processor_core.c
drivers/acpi/processor_core.c
+0
-69
drivers/acpi/processor_pdc.c
drivers/acpi/processor_pdc.c
+108
-0
include/acpi/processor.h
include/acpi/processor.h
+3
-0
未找到文件。
drivers/acpi/Makefile
浏览文件 @
309ddc53
...
...
@@ -32,6 +32,7 @@ acpi-$(CONFIG_ACPI_SLEEP) += proc.o
#
acpi-y
+=
bus.o glue.o
acpi-y
+=
scan.o
acpi-y
+=
processor_pdc.o
acpi-y
+=
ec.o
acpi-$(CONFIG_ACPI_DOCK)
+=
dock.o
acpi-y
+=
pci_root.o pci_link.o pci_irq.o pci_bind.o
...
...
drivers/acpi/blacklist.c
浏览文件 @
309ddc53
...
...
@@ -185,6 +185,12 @@ static int __init dmi_disable_osi_vista(const struct dmi_system_id *d)
acpi_osi_setup
(
"!Windows 2006"
);
return
0
;
}
static
int
__init
dmi_disable_osi_win7
(
const
struct
dmi_system_id
*
d
)
{
printk
(
KERN_NOTICE
PREFIX
"DMI detected: %s
\n
"
,
d
->
ident
);
acpi_osi_setup
(
"!Windows 2009"
);
return
0
;
}
static
struct
dmi_system_id
acpi_osi_dmi_table
[]
__initdata
=
{
{
...
...
@@ -211,6 +217,14 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"Sony VGN-SR290J"
),
},
},
{
.
callback
=
dmi_disable_osi_win7
,
.
ident
=
"ASUS K50IJ"
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"ASUSTeK Computer Inc."
),
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"K50IJ"
),
},
},
/*
* BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
...
...
drivers/acpi/bus.c
浏览文件 @
309ddc53
...
...
@@ -898,6 +898,8 @@ static int __init acpi_bus_init(void)
goto
error1
;
}
acpi_early_processor_set_pdc
();
/*
* Maybe EC region is required at bus_scan/acpi_get_devices. So it
* is necessary to enable it as early as possible.
...
...
drivers/acpi/ec.c
浏览文件 @
309ddc53
...
...
@@ -916,6 +916,7 @@ static int ec_validate_ecdt(const struct dmi_system_id *id)
/* MSI EC needs special treatment, enable it */
static
int
ec_flag_msi
(
const
struct
dmi_system_id
*
id
)
{
printk
(
KERN_DEBUG
PREFIX
"Detected MSI hardware, enabling workarounds.
\n
"
);
EC_FLAGS_MSI
=
1
;
EC_FLAGS_VALIDATE_ECDT
=
1
;
return
0
;
...
...
@@ -928,8 +929,13 @@ static struct dmi_system_id __initdata ec_dmi_table[] = {
DMI_MATCH
(
DMI_BOARD_NAME
,
"JFL92"
)
},
NULL
},
{
ec_flag_msi
,
"MSI hardware"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Micro-Star"
),
DMI_MATCH
(
DMI_CHASSIS_VENDOR
,
"MICRO-Star"
)
},
NULL
},
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Micro-Star"
)},
NULL
},
{
ec_flag_msi
,
"MSI hardware"
,
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Micro-Star"
)},
NULL
},
{
ec_flag_msi
,
"MSI hardware"
,
{
DMI_MATCH
(
DMI_CHASSIS_VENDOR
,
"MICRO-Star"
)},
NULL
},
{
ec_validate_ecdt
,
"ASUS hardware"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"ASUS"
)
},
NULL
},
...
...
drivers/acpi/internal.h
浏览文件 @
309ddc53
...
...
@@ -43,6 +43,7 @@ int acpi_power_transition(struct acpi_device *device, int state);
extern
int
acpi_power_nocheck
;
int
acpi_wakeup_device_init
(
void
);
void
acpi_early_processor_set_pdc
(
void
);
/* --------------------------------------------------------------------------
Embedded Controller
...
...
drivers/acpi/processor_core.c
浏览文件 @
309ddc53
...
...
@@ -124,29 +124,6 @@ static const struct file_operations acpi_processor_info_fops = {
DEFINE_PER_CPU
(
struct
acpi_processor
*
,
processors
);
struct
acpi_processor_errata
errata
__read_mostly
;
static
int
set_no_mwait
(
const
struct
dmi_system_id
*
id
)
{
printk
(
KERN_NOTICE
PREFIX
"%s detected - "
"disabling mwait for CPU C-states
\n
"
,
id
->
ident
);
idle_nomwait
=
1
;
return
0
;
}
static
struct
dmi_system_id
__cpuinitdata
processor_idle_dmi_table
[]
=
{
{
set_no_mwait
,
"IFL91 board"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"COMPAL"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"ZEPTO"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"3215W"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"IFL91"
)
},
NULL
},
{
set_no_mwait
,
"Extensa 5220"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Acer"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"0100"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"Columbia"
)
},
NULL
},
{},
};
/* --------------------------------------------------------------------------
Errata Handling
...
...
@@ -276,45 +253,6 @@ static int acpi_processor_errata(struct acpi_processor *pr)
return
result
;
}
/* --------------------------------------------------------------------------
Common ACPI processor functions
-------------------------------------------------------------------------- */
/*
* _PDC is required for a BIOS-OS handshake for most of the newer
* ACPI processor features.
*/
static
int
acpi_processor_set_pdc
(
struct
acpi_processor
*
pr
)
{
struct
acpi_object_list
*
pdc_in
=
pr
->
pdc
;
acpi_status
status
=
AE_OK
;
if
(
!
pdc_in
)
return
status
;
if
(
idle_nomwait
)
{
/*
* If mwait is disabled for CPU C-states, the C2C3_FFH access
* mode will be disabled in the parameter of _PDC object.
* Of course C1_FFH access mode will also be disabled.
*/
union
acpi_object
*
obj
;
u32
*
buffer
=
NULL
;
obj
=
pdc_in
->
pointer
;
buffer
=
(
u32
*
)(
obj
->
buffer
.
pointer
);
buffer
[
2
]
&=
~
(
ACPI_PDC_C_C2C3_FFH
|
ACPI_PDC_C_C1_FFH
);
}
status
=
acpi_evaluate_object
(
pr
->
handle
,
"_PDC"
,
pdc_in
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Could not evaluate _PDC, using legacy perf. control...
\n
"
));
return
status
;
}
/* --------------------------------------------------------------------------
FS Interface (/proc)
-------------------------------------------------------------------------- */
...
...
@@ -825,9 +763,7 @@ static int __cpuinit acpi_processor_add(struct acpi_device *device)
}
/* _PDC call should be done before doing anything else (if reqd.). */
arch_acpi_processor_init_pdc
(
pr
);
acpi_processor_set_pdc
(
pr
);
arch_acpi_processor_cleanup_pdc
(
pr
);
#ifdef CONFIG_CPU_FREQ
acpi_processor_ppc_has_changed
(
pr
,
0
);
...
...
@@ -1145,11 +1081,6 @@ static int __init acpi_processor_init(void)
if
(
!
acpi_processor_dir
)
return
-
ENOMEM
;
#endif
/*
* Check whether the system is DMI table. If yes, OSPM
* should not use mwait for CPU-states.
*/
dmi_check_system
(
processor_idle_dmi_table
);
result
=
cpuidle_register_driver
(
&
acpi_idle_driver
);
if
(
result
<
0
)
goto
out_proc
;
...
...
drivers/acpi/processor_pdc.c
0 → 100644
浏览文件 @
309ddc53
#include <linux/dmi.h>
#include <acpi/acpi_drivers.h>
#include <acpi/processor.h>
#include "internal.h"
#define PREFIX "ACPI: "
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
ACPI_MODULE_NAME
(
"processor_pdc"
);
static
int
set_no_mwait
(
const
struct
dmi_system_id
*
id
)
{
printk
(
KERN_NOTICE
PREFIX
"%s detected - "
"disabling mwait for CPU C-states
\n
"
,
id
->
ident
);
idle_nomwait
=
1
;
return
0
;
}
static
struct
dmi_system_id
__cpuinitdata
processor_idle_dmi_table
[]
=
{
{
set_no_mwait
,
"IFL91 board"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"COMPAL"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"ZEPTO"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"3215W"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"IFL91"
)
},
NULL
},
{
set_no_mwait
,
"Extensa 5220"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Acer"
),
DMI_MATCH
(
DMI_PRODUCT_VERSION
,
"0100"
),
DMI_MATCH
(
DMI_BOARD_NAME
,
"Columbia"
)
},
NULL
},
{},
};
/*
* _PDC is required for a BIOS-OS handshake for most of the newer
* ACPI processor features.
*/
static
int
acpi_processor_eval_pdc
(
struct
acpi_processor
*
pr
)
{
struct
acpi_object_list
*
pdc_in
=
pr
->
pdc
;
acpi_status
status
=
AE_OK
;
if
(
!
pdc_in
)
return
status
;
if
(
idle_nomwait
)
{
/*
* If mwait is disabled for CPU C-states, the C2C3_FFH access
* mode will be disabled in the parameter of _PDC object.
* Of course C1_FFH access mode will also be disabled.
*/
union
acpi_object
*
obj
;
u32
*
buffer
=
NULL
;
obj
=
pdc_in
->
pointer
;
buffer
=
(
u32
*
)(
obj
->
buffer
.
pointer
);
buffer
[
2
]
&=
~
(
ACPI_PDC_C_C2C3_FFH
|
ACPI_PDC_C_C1_FFH
);
}
status
=
acpi_evaluate_object
(
pr
->
handle
,
"_PDC"
,
pdc_in
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Could not evaluate _PDC, using legacy perf. control.
\n
"
));
return
status
;
}
void
acpi_processor_set_pdc
(
struct
acpi_processor
*
pr
)
{
arch_acpi_processor_init_pdc
(
pr
);
acpi_processor_eval_pdc
(
pr
);
arch_acpi_processor_cleanup_pdc
(
pr
);
}
EXPORT_SYMBOL_GPL
(
acpi_processor_set_pdc
);
static
acpi_status
early_init_pdc
(
acpi_handle
handle
,
u32
lvl
,
void
*
context
,
void
**
rv
)
{
struct
acpi_processor
pr
;
pr
.
handle
=
handle
;
/* x86 implementation looks at pr.id to determine some
* CPU capabilites. We can just hard code to 0 since we're
* assuming the CPUs in the system are homogenous and all
* have the same capabilities.
*/
pr
.
id
=
0
;
acpi_processor_set_pdc
(
&
pr
);
return
AE_OK
;
}
void
acpi_early_processor_set_pdc
(
void
)
{
/*
* Check whether the system is DMI table. If yes, OSPM
* should not use mwait for CPU-states.
*/
dmi_check_system
(
processor_idle_dmi_table
);
acpi_walk_namespace
(
ACPI_TYPE_PROCESSOR
,
ACPI_ROOT_OBJECT
,
ACPI_UINT32_MAX
,
early_init_pdc
,
NULL
,
NULL
,
NULL
);
}
include/acpi/processor.h
浏览文件 @
309ddc53
...
...
@@ -325,6 +325,9 @@ static inline int acpi_processor_get_bios_limit(int cpu, unsigned int *limit)
#endif
/* CONFIG_CPU_FREQ */
/* in processor_pdc.c */
void
acpi_processor_set_pdc
(
struct
acpi_processor
*
pr
);
/* in processor_throttling.c */
int
acpi_processor_tstate_has_changed
(
struct
acpi_processor
*
pr
);
int
acpi_processor_get_throttling_info
(
struct
acpi_processor
*
pr
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录