Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
3b87bb64
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
3b87bb64
编写于
15年前
作者:
L
Len Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'bjorn-start-stop-2.6.32' into release
上级
7a92d803
dcf52fb7
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
153 addition
and
231 deletion
+153
-231
drivers/acpi/acpi_memhotplug.c
drivers/acpi/acpi_memhotplug.c
+14
-26
drivers/acpi/ec.c
drivers/acpi/ec.c
+44
-74
drivers/acpi/processor_core.c
drivers/acpi/processor_core.c
+95
-124
drivers/acpi/scan.c
drivers/acpi/scan.c
+0
-5
include/acpi/acpi_bus.h
include/acpi/acpi_bus.h
+0
-2
未找到文件。
drivers/acpi/acpi_memhotplug.c
浏览文件 @
3b87bb64
...
...
@@ -53,7 +53,6 @@ MODULE_LICENSE("GPL");
static
int
acpi_memory_device_add
(
struct
acpi_device
*
device
);
static
int
acpi_memory_device_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_memory_device_start
(
struct
acpi_device
*
device
);
static
const
struct
acpi_device_id
memory_device_ids
[]
=
{
{
ACPI_MEMORY_DEVICE_HID
,
0
},
...
...
@@ -68,7 +67,6 @@ static struct acpi_driver acpi_memory_device_driver = {
.
ops
=
{
.
add
=
acpi_memory_device_add
,
.
remove
=
acpi_memory_device_remove
,
.
start
=
acpi_memory_device_start
,
},
};
...
...
@@ -431,28 +429,6 @@ static int acpi_memory_device_add(struct acpi_device *device)
printk
(
KERN_DEBUG
"%s
\n
"
,
acpi_device_name
(
device
));
return
result
;
}
static
int
acpi_memory_device_remove
(
struct
acpi_device
*
device
,
int
type
)
{
struct
acpi_memory_device
*
mem_device
=
NULL
;
if
(
!
device
||
!
acpi_driver_data
(
device
))
return
-
EINVAL
;
mem_device
=
acpi_driver_data
(
device
);
kfree
(
mem_device
);
return
0
;
}
static
int
acpi_memory_device_start
(
struct
acpi_device
*
device
)
{
struct
acpi_memory_device
*
mem_device
;
int
result
=
0
;
/*
* Early boot code has recognized memory area by EFI/E820.
* If DSDT shows these memory devices on boot, hotplug is not necessary
...
...
@@ -462,8 +438,6 @@ static int acpi_memory_device_start (struct acpi_device *device)
if
(
!
acpi_hotmem_initialized
)
return
0
;
mem_device
=
acpi_driver_data
(
device
);
if
(
!
acpi_memory_check_device
(
mem_device
))
{
/* call add_memory func */
result
=
acpi_memory_enable_device
(
mem_device
);
...
...
@@ -474,6 +448,20 @@ static int acpi_memory_device_start (struct acpi_device *device)
return
result
;
}
static
int
acpi_memory_device_remove
(
struct
acpi_device
*
device
,
int
type
)
{
struct
acpi_memory_device
*
mem_device
=
NULL
;
if
(
!
device
||
!
acpi_driver_data
(
device
))
return
-
EINVAL
;
mem_device
=
acpi_driver_data
(
device
);
kfree
(
mem_device
);
return
0
;
}
/*
* Helper function to check for memory device
*/
...
...
This diff is collapsed.
Click to expand it.
drivers/acpi/ec.c
浏览文件 @
3b87bb64
...
...
@@ -787,6 +787,42 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval)
return
AE_CTRL_TERMINATE
;
}
static
int
ec_install_handlers
(
struct
acpi_ec
*
ec
)
{
acpi_status
status
;
if
(
test_bit
(
EC_FLAGS_HANDLERS_INSTALLED
,
&
ec
->
flags
))
return
0
;
status
=
acpi_install_gpe_handler
(
NULL
,
ec
->
gpe
,
ACPI_GPE_EDGE_TRIGGERED
,
&
acpi_ec_gpe_handler
,
ec
);
if
(
ACPI_FAILURE
(
status
))
return
-
ENODEV
;
acpi_set_gpe_type
(
NULL
,
ec
->
gpe
,
ACPI_GPE_TYPE_RUNTIME
);
acpi_enable_gpe
(
NULL
,
ec
->
gpe
);
status
=
acpi_install_address_space_handler
(
ec
->
handle
,
ACPI_ADR_SPACE_EC
,
&
acpi_ec_space_handler
,
NULL
,
ec
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
==
AE_NOT_FOUND
)
{
/*
* Maybe OS fails in evaluating the _REG object.
* The AE_NOT_FOUND error will be ignored and OS
* continue to initialize EC.
*/
printk
(
KERN_ERR
"Fail in evaluating the _REG object"
" of EC device. Broken bios is suspected.
\n
"
);
}
else
{
acpi_remove_gpe_handler
(
NULL
,
ec
->
gpe
,
&
acpi_ec_gpe_handler
);
return
-
ENODEV
;
}
}
set_bit
(
EC_FLAGS_HANDLERS_INSTALLED
,
&
ec
->
flags
);
return
0
;
}
static
void
ec_remove_handlers
(
struct
acpi_ec
*
ec
)
{
if
(
ACPI_FAILURE
(
acpi_remove_address_space_handler
(
ec
->
handle
,
...
...
@@ -801,9 +837,8 @@ static void ec_remove_handlers(struct acpi_ec *ec)
static
int
acpi_ec_add
(
struct
acpi_device
*
device
)
{
struct
acpi_ec
*
ec
=
NULL
;
int
ret
;
if
(
!
device
)
return
-
EINVAL
;
strcpy
(
acpi_device_name
(
device
),
ACPI_EC_DEVICE_NAME
);
strcpy
(
acpi_device_class
(
device
),
ACPI_EC_CLASS
);
...
...
@@ -838,7 +873,12 @@ static int acpi_ec_add(struct acpi_device *device)
ec
->
gpe
,
ec
->
command_addr
,
ec
->
data_addr
);
pr_info
(
PREFIX
"driver started in %s mode
\n
"
,
(
test_bit
(
EC_FLAGS_GPE_MODE
,
&
ec
->
flags
))
?
"interrupt"
:
"poll"
);
return
0
;
ret
=
ec_install_handlers
(
ec
);
/* EC is fully operational, allow queries */
clear_bit
(
EC_FLAGS_QUERY_PENDING
,
&
ec
->
flags
);
return
ret
;
}
static
int
acpi_ec_remove
(
struct
acpi_device
*
device
,
int
type
)
...
...
@@ -850,6 +890,7 @@ static int acpi_ec_remove(struct acpi_device *device, int type)
return
-
EINVAL
;
ec
=
acpi_driver_data
(
device
);
ec_remove_handlers
(
ec
);
mutex_lock
(
&
ec
->
lock
);
list_for_each_entry_safe
(
handler
,
tmp
,
&
ec
->
list
,
node
)
{
list_del
(
&
handler
->
node
);
...
...
@@ -887,75 +928,6 @@ ec_parse_io_ports(struct acpi_resource *resource, void *context)
return
AE_OK
;
}
static
int
ec_install_handlers
(
struct
acpi_ec
*
ec
)
{
acpi_status
status
;
if
(
test_bit
(
EC_FLAGS_HANDLERS_INSTALLED
,
&
ec
->
flags
))
return
0
;
status
=
acpi_install_gpe_handler
(
NULL
,
ec
->
gpe
,
ACPI_GPE_EDGE_TRIGGERED
,
&
acpi_ec_gpe_handler
,
ec
);
if
(
ACPI_FAILURE
(
status
))
return
-
ENODEV
;
acpi_set_gpe_type
(
NULL
,
ec
->
gpe
,
ACPI_GPE_TYPE_RUNTIME
);
acpi_enable_gpe
(
NULL
,
ec
->
gpe
);
status
=
acpi_install_address_space_handler
(
ec
->
handle
,
ACPI_ADR_SPACE_EC
,
&
acpi_ec_space_handler
,
NULL
,
ec
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
==
AE_NOT_FOUND
)
{
/*
* Maybe OS fails in evaluating the _REG object.
* The AE_NOT_FOUND error will be ignored and OS
* continue to initialize EC.
*/
printk
(
KERN_ERR
"Fail in evaluating the _REG object"
" of EC device. Broken bios is suspected.
\n
"
);
}
else
{
acpi_remove_gpe_handler
(
NULL
,
ec
->
gpe
,
&
acpi_ec_gpe_handler
);
return
-
ENODEV
;
}
}
set_bit
(
EC_FLAGS_HANDLERS_INSTALLED
,
&
ec
->
flags
);
return
0
;
}
static
int
acpi_ec_start
(
struct
acpi_device
*
device
)
{
struct
acpi_ec
*
ec
;
int
ret
=
0
;
if
(
!
device
)
return
-
EINVAL
;
ec
=
acpi_driver_data
(
device
);
if
(
!
ec
)
return
-
EINVAL
;
ret
=
ec_install_handlers
(
ec
);
/* EC is fully operational, allow queries */
clear_bit
(
EC_FLAGS_QUERY_PENDING
,
&
ec
->
flags
);
return
ret
;
}
static
int
acpi_ec_stop
(
struct
acpi_device
*
device
,
int
type
)
{
struct
acpi_ec
*
ec
;
if
(
!
device
)
return
-
EINVAL
;
ec
=
acpi_driver_data
(
device
);
if
(
!
ec
)
return
-
EINVAL
;
ec_remove_handlers
(
ec
);
return
0
;
}
int
__init
acpi_boot_ec_enable
(
void
)
{
if
(
!
boot_ec
||
test_bit
(
EC_FLAGS_HANDLERS_INSTALLED
,
&
boot_ec
->
flags
))
...
...
@@ -1076,8 +1048,6 @@ static struct acpi_driver acpi_ec_driver = {
.
ops
=
{
.
add
=
acpi_ec_add
,
.
remove
=
acpi_ec_remove
,
.
start
=
acpi_ec_start
,
.
stop
=
acpi_ec_stop
,
.
suspend
=
acpi_ec_suspend
,
.
resume
=
acpi_ec_resume
,
},
...
...
This diff is collapsed.
Click to expand it.
drivers/acpi/processor_core.c
浏览文件 @
3b87bb64
...
...
@@ -81,7 +81,6 @@ MODULE_DESCRIPTION("ACPI Processor Driver");
MODULE_LICENSE
(
"GPL"
);
static
int
acpi_processor_add
(
struct
acpi_device
*
device
);
static
int
acpi_processor_start
(
struct
acpi_device
*
device
);
static
int
acpi_processor_remove
(
struct
acpi_device
*
device
,
int
type
);
static
int
acpi_processor_info_open_fs
(
struct
inode
*
inode
,
struct
file
*
file
);
static
void
acpi_processor_notify
(
struct
acpi_device
*
device
,
u32
event
);
...
...
@@ -103,7 +102,6 @@ static struct acpi_driver acpi_processor_driver = {
.
ops
=
{
.
add
=
acpi_processor_add
,
.
remove
=
acpi_processor_remove
,
.
start
=
acpi_processor_start
,
.
suspend
=
acpi_processor_suspend
,
.
resume
=
acpi_processor_resume
,
.
notify
=
acpi_processor_notify
,
...
...
@@ -700,92 +698,6 @@ static int acpi_processor_get_info(struct acpi_device *device)
static
DEFINE_PER_CPU
(
void
*
,
processor_device_array
);
static
int
__cpuinit
acpi_processor_start
(
struct
acpi_device
*
device
)
{
int
result
=
0
;
struct
acpi_processor
*
pr
;
struct
sys_device
*
sysdev
;
pr
=
acpi_driver_data
(
device
);
result
=
acpi_processor_get_info
(
device
);
if
(
result
)
{
/* Processor is physically not present */
return
0
;
}
BUG_ON
((
pr
->
id
>=
nr_cpu_ids
)
||
(
pr
->
id
<
0
));
/*
* Buggy BIOS check
* ACPI id of processors can be reported wrongly by the BIOS.
* Don't trust it blindly
*/
if
(
per_cpu
(
processor_device_array
,
pr
->
id
)
!=
NULL
&&
per_cpu
(
processor_device_array
,
pr
->
id
)
!=
device
)
{
printk
(
KERN_WARNING
"BIOS reported wrong ACPI id "
"for the processor
\n
"
);
return
-
ENODEV
;
}
per_cpu
(
processor_device_array
,
pr
->
id
)
=
device
;
per_cpu
(
processors
,
pr
->
id
)
=
pr
;
result
=
acpi_processor_add_fs
(
device
);
if
(
result
)
goto
end
;
sysdev
=
get_cpu_sysdev
(
pr
->
id
);
if
(
sysfs_create_link
(
&
device
->
dev
.
kobj
,
&
sysdev
->
kobj
,
"sysdev"
))
return
-
EFAULT
;
/* _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
);
#endif
acpi_processor_get_throttling_info
(
pr
);
acpi_processor_get_limit_info
(
pr
);
acpi_processor_power_init
(
pr
,
device
);
pr
->
cdev
=
thermal_cooling_device_register
(
"Processor"
,
device
,
&
processor_cooling_ops
);
if
(
IS_ERR
(
pr
->
cdev
))
{
result
=
PTR_ERR
(
pr
->
cdev
);
goto
end
;
}
dev_info
(
&
device
->
dev
,
"registered as cooling_device%d
\n
"
,
pr
->
cdev
->
id
);
result
=
sysfs_create_link
(
&
device
->
dev
.
kobj
,
&
pr
->
cdev
->
device
.
kobj
,
"thermal_cooling"
);
if
(
result
)
printk
(
KERN_ERR
PREFIX
"Create sysfs link
\n
"
);
result
=
sysfs_create_link
(
&
pr
->
cdev
->
device
.
kobj
,
&
device
->
dev
.
kobj
,
"device"
);
if
(
result
)
printk
(
KERN_ERR
PREFIX
"Create sysfs link
\n
"
);
if
(
pr
->
flags
.
throttling
)
{
printk
(
KERN_INFO
PREFIX
"%s [%s] (supports"
,
acpi_device_name
(
device
),
acpi_device_bid
(
device
));
printk
(
" %d throttling states"
,
pr
->
throttling
.
state_count
);
printk
(
")
\n
"
);
}
end:
return
result
;
}
static
void
acpi_processor_notify
(
struct
acpi_device
*
device
,
u32
event
)
{
struct
acpi_processor
*
pr
=
acpi_driver_data
(
device
);
...
...
@@ -848,10 +760,8 @@ static struct notifier_block acpi_cpu_notifier =
static
int
acpi_processor_add
(
struct
acpi_device
*
device
)
{
struct
acpi_processor
*
pr
=
NULL
;
if
(
!
device
)
return
-
EINVAL
;
int
result
=
0
;
struct
sys_device
*
sysdev
;
pr
=
kzalloc
(
sizeof
(
struct
acpi_processor
),
GFP_KERNEL
);
if
(
!
pr
)
...
...
@@ -867,7 +777,100 @@ static int acpi_processor_add(struct acpi_device *device)
strcpy
(
acpi_device_class
(
device
),
ACPI_PROCESSOR_CLASS
);
device
->
driver_data
=
pr
;
result
=
acpi_processor_get_info
(
device
);
if
(
result
)
{
/* Processor is physically not present */
return
0
;
}
BUG_ON
((
pr
->
id
>=
nr_cpu_ids
)
||
(
pr
->
id
<
0
));
/*
* Buggy BIOS check
* ACPI id of processors can be reported wrongly by the BIOS.
* Don't trust it blindly
*/
if
(
per_cpu
(
processor_device_array
,
pr
->
id
)
!=
NULL
&&
per_cpu
(
processor_device_array
,
pr
->
id
)
!=
device
)
{
printk
(
KERN_WARNING
"BIOS reported wrong ACPI id "
"for the processor
\n
"
);
result
=
-
ENODEV
;
goto
err_free_cpumask
;
}
per_cpu
(
processor_device_array
,
pr
->
id
)
=
device
;
per_cpu
(
processors
,
pr
->
id
)
=
pr
;
result
=
acpi_processor_add_fs
(
device
);
if
(
result
)
goto
err_free_cpumask
;
sysdev
=
get_cpu_sysdev
(
pr
->
id
);
if
(
sysfs_create_link
(
&
device
->
dev
.
kobj
,
&
sysdev
->
kobj
,
"sysdev"
))
{
result
=
-
EFAULT
;
goto
err_remove_fs
;
}
/* _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
);
#endif
acpi_processor_get_throttling_info
(
pr
);
acpi_processor_get_limit_info
(
pr
);
acpi_processor_power_init
(
pr
,
device
);
pr
->
cdev
=
thermal_cooling_device_register
(
"Processor"
,
device
,
&
processor_cooling_ops
);
if
(
IS_ERR
(
pr
->
cdev
))
{
result
=
PTR_ERR
(
pr
->
cdev
);
goto
err_power_exit
;
}
dev_info
(
&
device
->
dev
,
"registered as cooling_device%d
\n
"
,
pr
->
cdev
->
id
);
result
=
sysfs_create_link
(
&
device
->
dev
.
kobj
,
&
pr
->
cdev
->
device
.
kobj
,
"thermal_cooling"
);
if
(
result
)
{
printk
(
KERN_ERR
PREFIX
"Create sysfs link
\n
"
);
goto
err_thermal_unregister
;
}
result
=
sysfs_create_link
(
&
pr
->
cdev
->
device
.
kobj
,
&
device
->
dev
.
kobj
,
"device"
);
if
(
result
)
{
printk
(
KERN_ERR
PREFIX
"Create sysfs link
\n
"
);
goto
err_remove_sysfs
;
}
if
(
pr
->
flags
.
throttling
)
{
printk
(
KERN_INFO
PREFIX
"%s [%s] (supports"
,
acpi_device_name
(
device
),
acpi_device_bid
(
device
));
printk
(
" %d throttling states"
,
pr
->
throttling
.
state_count
);
printk
(
")
\n
"
);
}
return
0
;
err_remove_sysfs:
sysfs_remove_link
(
&
device
->
dev
.
kobj
,
"thermal_cooling"
);
err_thermal_unregister:
thermal_cooling_device_unregister
(
pr
->
cdev
);
err_power_exit:
acpi_processor_power_exit
(
pr
,
device
);
err_remove_fs:
acpi_processor_remove_fs
(
device
);
err_free_cpumask:
free_cpumask_var
(
pr
->
throttling
.
shared_cpu_map
);
return
result
;
}
static
int
acpi_processor_remove
(
struct
acpi_device
*
device
,
int
type
)
...
...
@@ -944,7 +947,6 @@ int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
{
acpi_handle
phandle
;
struct
acpi_device
*
pdev
;
struct
acpi_processor
*
pr
;
if
(
acpi_get_parent
(
handle
,
&
phandle
))
{
...
...
@@ -959,15 +961,6 @@ int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
return
-
ENODEV
;
}
acpi_bus_start
(
*
device
);
pr
=
acpi_driver_data
(
*
device
);
if
(
!
pr
)
return
-
ENODEV
;
if
((
pr
->
id
>=
0
)
&&
(
pr
->
id
<
nr_cpu_ids
))
{
kobject_uevent
(
&
(
*
device
)
->
dev
.
kobj
,
KOBJ_ONLINE
);
}
return
0
;
}
...
...
@@ -997,25 +990,6 @@ static void __ref acpi_processor_hotplug_notify(acpi_handle handle,
"Unable to add the device
\n
"
);
break
;
}
pr
=
acpi_driver_data
(
device
);
if
(
!
pr
)
{
printk
(
KERN_ERR
PREFIX
"Driver data is NULL
\n
"
);
break
;
}
if
(
pr
->
id
>=
0
&&
(
pr
->
id
<
nr_cpu_ids
))
{
kobject_uevent
(
&
device
->
dev
.
kobj
,
KOBJ_OFFLINE
);
break
;
}
result
=
acpi_processor_start
(
device
);
if
((
!
result
)
&&
((
pr
->
id
>=
0
)
&&
(
pr
->
id
<
nr_cpu_ids
)))
{
kobject_uevent
(
&
device
->
dev
.
kobj
,
KOBJ_ONLINE
);
}
else
{
printk
(
KERN_ERR
PREFIX
"Device [%s] failed to start
\n
"
,
acpi_device_bid
(
device
));
}
break
;
case
ACPI_NOTIFY_EJECT_REQUEST
:
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
...
...
@@ -1032,9 +1006,6 @@ static void __ref acpi_processor_hotplug_notify(acpi_handle handle,
"Driver data is NULL, dropping EJECT
\n
"
);
return
;
}
if
((
pr
->
id
<
nr_cpu_ids
)
&&
(
cpu_present
(
pr
->
id
)))
kobject_uevent
(
&
device
->
dev
.
kobj
,
KOBJ_OFFLINE
);
break
;
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
...
...
This diff is collapsed.
Click to expand it.
drivers/acpi/scan.c
浏览文件 @
3b87bb64
...
...
@@ -430,9 +430,6 @@ static int acpi_device_probe(struct device * dev)
if
(
acpi_drv
->
ops
.
notify
)
{
ret
=
acpi_device_install_notify_handler
(
acpi_dev
);
if
(
ret
)
{
if
(
acpi_drv
->
ops
.
stop
)
acpi_drv
->
ops
.
stop
(
acpi_dev
,
acpi_dev
->
removal_type
);
if
(
acpi_drv
->
ops
.
remove
)
acpi_drv
->
ops
.
remove
(
acpi_dev
,
acpi_dev
->
removal_type
);
...
...
@@ -456,8 +453,6 @@ static int acpi_device_remove(struct device * dev)
if
(
acpi_drv
)
{
if
(
acpi_drv
->
ops
.
notify
)
acpi_device_remove_notify_handler
(
acpi_dev
);
if
(
acpi_drv
->
ops
.
stop
)
acpi_drv
->
ops
.
stop
(
acpi_dev
,
acpi_dev
->
removal_type
);
if
(
acpi_drv
->
ops
.
remove
)
acpi_drv
->
ops
.
remove
(
acpi_dev
,
acpi_dev
->
removal_type
);
}
...
...
This diff is collapsed.
Click to expand it.
include/acpi/acpi_bus.h
浏览文件 @
3b87bb64
...
...
@@ -87,7 +87,6 @@ struct acpi_device;
typedef
int
(
*
acpi_op_add
)
(
struct
acpi_device
*
device
);
typedef
int
(
*
acpi_op_remove
)
(
struct
acpi_device
*
device
,
int
type
);
typedef
int
(
*
acpi_op_start
)
(
struct
acpi_device
*
device
);
typedef
int
(
*
acpi_op_stop
)
(
struct
acpi_device
*
device
,
int
type
);
typedef
int
(
*
acpi_op_suspend
)
(
struct
acpi_device
*
device
,
pm_message_t
state
);
typedef
int
(
*
acpi_op_resume
)
(
struct
acpi_device
*
device
);
...
...
@@ -104,7 +103,6 @@ struct acpi_device_ops {
acpi_op_add
add
;
acpi_op_remove
remove
;
acpi_op_start
start
;
acpi_op_stop
stop
;
acpi_op_suspend
suspend
;
acpi_op_resume
resume
;
acpi_op_bind
bind
;
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录