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
3b87bb64
Commit
3b87bb64
authored
Sep 19, 2009
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'bjorn-start-stop-2.6.32' into release
parents
7a92d803
dcf52fb7
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
153 additions
and
231 deletions
+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
No files found.
drivers/acpi/acpi_memhotplug.c
View file @
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
*/
...
...
drivers/acpi/ec.c
View file @
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
,
},
...
...
drivers/acpi/processor_core.c
View file @
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
,
...
...
drivers/acpi/scan.c
View file @
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
);
}
...
...
include/acpi/acpi_bus.h
View file @
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
;
...
...
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