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
17d0e4f4
Commit
17d0e4f4
authored
May 23, 2003
by
Andy Grover
Browse files
Options
Browse Files
Download
Plain Diff
Merge groveronline.com:/root/bk/linux-2.5
into groveronline.com:/root/bk/linux-acpi
parents
1a569433
8e498582
Changes
49
Show whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
860 additions
and
817 deletions
+860
-817
arch/i386/kernel/mpparse.c
arch/i386/kernel/mpparse.c
+5
-1
drivers/acpi/dispatcher/dsinit.c
drivers/acpi/dispatcher/dsinit.c
+2
-2
drivers/acpi/dispatcher/dsopcode.c
drivers/acpi/dispatcher/dsopcode.c
+3
-3
drivers/acpi/ec.c
drivers/acpi/ec.c
+11
-11
drivers/acpi/events/evgpe.c
drivers/acpi/events/evgpe.c
+2
-2
drivers/acpi/events/evgpeblk.c
drivers/acpi/events/evgpeblk.c
+2
-2
drivers/acpi/events/evmisc.c
drivers/acpi/events/evmisc.c
+12
-12
drivers/acpi/events/evregion.c
drivers/acpi/events/evregion.c
+133
-146
drivers/acpi/events/evrgnini.c
drivers/acpi/events/evrgnini.c
+90
-76
drivers/acpi/events/evxface.c
drivers/acpi/events/evxface.c
+33
-29
drivers/acpi/events/evxfevnt.c
drivers/acpi/events/evxfevnt.c
+4
-0
drivers/acpi/events/evxfregn.c
drivers/acpi/events/evxfregn.c
+56
-40
drivers/acpi/executer/exconfig.c
drivers/acpi/executer/exconfig.c
+4
-4
drivers/acpi/executer/exdump.c
drivers/acpi/executer/exdump.c
+19
-19
drivers/acpi/hardware/hwgpe.c
drivers/acpi/hardware/hwgpe.c
+12
-12
drivers/acpi/hardware/hwregs.c
drivers/acpi/hardware/hwregs.c
+56
-64
drivers/acpi/hardware/hwtimer.c
drivers/acpi/hardware/hwtimer.c
+1
-1
drivers/acpi/namespace/nsalloc.c
drivers/acpi/namespace/nsalloc.c
+37
-3
drivers/acpi/namespace/nsload.c
drivers/acpi/namespace/nsload.c
+8
-10
drivers/acpi/namespace/nsparse.c
drivers/acpi/namespace/nsparse.c
+1
-2
drivers/acpi/namespace/nsutils.c
drivers/acpi/namespace/nsutils.c
+7
-14
drivers/acpi/osl.c
drivers/acpi/osl.c
+2
-2
drivers/acpi/parser/pswalk.c
drivers/acpi/parser/pswalk.c
+1
-1
drivers/acpi/parser/psxface.c
drivers/acpi/parser/psxface.c
+1
-1
drivers/acpi/resources/rsxface.c
drivers/acpi/resources/rsxface.c
+9
-3
drivers/acpi/scan.c
drivers/acpi/scan.c
+1
-1
drivers/acpi/tables/tbconvrt.c
drivers/acpi/tables/tbconvrt.c
+89
-25
drivers/acpi/tables/tbget.c
drivers/acpi/tables/tbget.c
+7
-7
drivers/acpi/tables/tbgetall.c
drivers/acpi/tables/tbgetall.c
+1
-1
drivers/acpi/tables/tbinstal.c
drivers/acpi/tables/tbinstal.c
+75
-120
drivers/acpi/tables/tbutils.c
drivers/acpi/tables/tbutils.c
+8
-9
drivers/acpi/tables/tbxface.c
drivers/acpi/tables/tbxface.c
+10
-10
drivers/acpi/toshiba_acpi.c
drivers/acpi/toshiba_acpi.c
+7
-8
drivers/acpi/utilities/utdelete.c
drivers/acpi/utilities/utdelete.c
+29
-42
drivers/acpi/utilities/utglobal.c
drivers/acpi/utilities/utglobal.c
+17
-19
drivers/acpi/utilities/utmisc.c
drivers/acpi/utilities/utmisc.c
+23
-23
drivers/acpi/utilities/utxface.c
drivers/acpi/utilities/utxface.c
+35
-29
include/acpi/acconfig.h
include/acpi/acconfig.h
+1
-1
include/acpi/acevents.h
include/acpi/acevents.h
+1
-1
include/acpi/acexcep.h
include/acpi/acexcep.h
+4
-2
include/acpi/acglobal.h
include/acpi/acglobal.h
+11
-9
include/acpi/achware.h
include/acpi/achware.h
+2
-4
include/acpi/aclocal.h
include/acpi/aclocal.h
+10
-9
include/acpi/acmacros.h
include/acpi/acmacros.h
+0
-20
include/acpi/acnamesp.h
include/acpi/acnamesp.h
+5
-0
include/acpi/acobject.h
include/acpi/acobject.h
+6
-6
include/acpi/acpiosxf.h
include/acpi/acpiosxf.h
+2
-2
include/acpi/actables.h
include/acpi/actables.h
+3
-7
include/acpi/actypes.h
include/acpi/actypes.h
+2
-2
No files found.
arch/i386/kernel/mpparse.c
View file @
17d0e4f4
...
...
@@ -1086,7 +1086,7 @@ void __init mp_parse_prt (void)
/*
* Parsing through the PCI Interrupt Routing Table (PRT) and program
* routing for all
static (IOAPIC-direct)
entries.
* routing for all entries.
*/
list_for_each
(
node
,
&
acpi_prt
.
entries
)
{
entry
=
list_entry
(
node
,
struct
acpi_prt_entry
,
node
);
...
...
@@ -1100,6 +1100,10 @@ void __init mp_parse_prt (void)
else
irq
=
entry
->
link
.
index
;
/* Don't set up the ACPI SCI because it's already set up */
if
(
acpi_fadt
.
sci_int
==
irq
)
continue
;
ioapic
=
mp_find_ioapic
(
irq
);
if
(
ioapic
<
0
)
continue
;
...
...
drivers/acpi/dispatcher/dsinit.c
View file @
17d0e4f4
...
...
@@ -222,8 +222,8 @@ acpi_ds_initialize_objects (
}
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"
\n
Table [%4.4s] - %hd Objects with %hd Devices %hd Methods %hd Regions
\n
"
,
table_desc
->
pointer
->
signature
,
info
.
object_count
,
"
\n
Table [%4.4s]
(id %4.4X)
- %hd Objects with %hd Devices %hd Methods %hd Regions
\n
"
,
table_desc
->
pointer
->
signature
,
table_desc
->
table_id
,
info
.
object_count
,
info
.
device_count
,
info
.
method_count
,
info
.
op_region_count
));
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
...
...
drivers/acpi/dispatcher/dsopcode.c
View file @
17d0e4f4
...
...
@@ -82,7 +82,7 @@ acpi_ds_execute_arguments (
union
acpi_parse_object
*
arg
;
ACPI_FUNCTION_TRACE
(
"
acpi_
ds_execute_arguments"
);
ACPI_FUNCTION_TRACE
(
"ds_execute_arguments"
);
/*
...
...
@@ -99,7 +99,7 @@ acpi_ds_execute_arguments (
/* Create and initialize a new parser state */
walk_state
=
acpi_ds_create_walk_state
(
TABLE_ID_DSDT
,
NULL
,
NULL
,
NULL
);
walk_state
=
acpi_ds_create_walk_state
(
0
,
NULL
,
NULL
,
NULL
);
if
(
!
walk_state
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -139,7 +139,7 @@ acpi_ds_execute_arguments (
/* Create and initialize a new parser state */
walk_state
=
acpi_ds_create_walk_state
(
TABLE_ID_DSDT
,
NULL
,
NULL
,
NULL
);
walk_state
=
acpi_ds_create_walk_state
(
0
,
NULL
,
NULL
,
NULL
);
if
(
!
walk_state
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
drivers/acpi/ec.c
View file @
17d0e4f4
...
...
@@ -113,7 +113,7 @@ acpi_ec_wait (
switch
(
event
)
{
case
ACPI_EC_EVENT_OBF
:
do
{
acpi_hw_low_level_read
(
8
,
&
acpi_ec_status
,
&
ec
->
status_addr
,
0
);
acpi_hw_low_level_read
(
8
,
&
acpi_ec_status
,
&
ec
->
status_addr
);
if
(
acpi_ec_status
&
ACPI_EC_FLAG_OBF
)
return
0
;
udelay
(
ACPI_EC_UDELAY
);
...
...
@@ -121,7 +121,7 @@ acpi_ec_wait (
break
;
case
ACPI_EC_EVENT_IBE
:
do
{
acpi_hw_low_level_read
(
8
,
&
acpi_ec_status
,
&
ec
->
status_addr
,
0
);
acpi_hw_low_level_read
(
8
,
&
acpi_ec_status
,
&
ec
->
status_addr
);
if
(
!
(
acpi_ec_status
&
ACPI_EC_FLAG_IBF
))
return
0
;
udelay
(
ACPI_EC_UDELAY
);
...
...
@@ -161,18 +161,18 @@ acpi_ec_read (
spin_lock_irqsave
(
&
ec
->
lock
,
flags
);
acpi_hw_low_level_write
(
8
,
ACPI_EC_COMMAND_READ
,
&
ec
->
command_addr
,
0
);
acpi_hw_low_level_write
(
8
,
ACPI_EC_COMMAND_READ
,
&
ec
->
command_addr
);
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_IBE
);
if
(
result
)
goto
end
;
acpi_hw_low_level_write
(
8
,
address
,
&
ec
->
data_addr
,
0
);
acpi_hw_low_level_write
(
8
,
address
,
&
ec
->
data_addr
);
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_OBF
);
if
(
result
)
goto
end
;
acpi_hw_low_level_read
(
8
,
data
,
&
ec
->
data_addr
,
0
);
acpi_hw_low_level_read
(
8
,
data
,
&
ec
->
data_addr
);
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Read [%02x] from address [%02x]
\n
"
,
*
data
,
address
));
...
...
@@ -211,17 +211,17 @@ acpi_ec_write (
spin_lock_irqsave
(
&
ec
->
lock
,
flags
);
acpi_hw_low_level_write
(
8
,
ACPI_EC_COMMAND_WRITE
,
&
ec
->
command_addr
,
0
);
acpi_hw_low_level_write
(
8
,
ACPI_EC_COMMAND_WRITE
,
&
ec
->
command_addr
);
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_IBE
);
if
(
result
)
goto
end
;
acpi_hw_low_level_write
(
8
,
address
,
&
ec
->
data_addr
,
0
);
acpi_hw_low_level_write
(
8
,
address
,
&
ec
->
data_addr
);
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_IBE
);
if
(
result
)
goto
end
;
acpi_hw_low_level_write
(
8
,
data
,
&
ec
->
data_addr
,
0
);
acpi_hw_low_level_write
(
8
,
data
,
&
ec
->
data_addr
);
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_IBE
);
if
(
result
)
goto
end
;
...
...
@@ -310,12 +310,12 @@ acpi_ec_query (
*/
spin_lock_irqsave
(
&
ec
->
lock
,
flags
);
acpi_hw_low_level_write
(
8
,
ACPI_EC_COMMAND_QUERY
,
&
ec
->
command_addr
,
0
);
acpi_hw_low_level_write
(
8
,
ACPI_EC_COMMAND_QUERY
,
&
ec
->
command_addr
);
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_OBF
);
if
(
result
)
goto
end
;
acpi_hw_low_level_read
(
8
,
data
,
&
ec
->
data_addr
,
0
);
acpi_hw_low_level_read
(
8
,
data
,
&
ec
->
data_addr
);
if
(
!*
data
)
result
=
-
ENODATA
;
...
...
@@ -355,7 +355,7 @@ acpi_ec_gpe_query (
goto
end
;
spin_lock_irqsave
(
&
ec
->
lock
,
flags
);
acpi_hw_low_level_read
(
8
,
&
value
,
&
ec
->
command_addr
,
0
);
acpi_hw_low_level_read
(
8
,
&
value
,
&
ec
->
command_addr
);
spin_unlock_irqrestore
(
&
ec
->
lock
,
flags
);
/* TBD: Implement asynch events!
...
...
drivers/acpi/events/evgpe.c
View file @
17d0e4f4
...
...
@@ -170,7 +170,7 @@ acpi_ev_gpe_detect (
/* Read the Status Register */
status
=
acpi_hw_low_level_read
(
ACPI_GPE_REGISTER_WIDTH
,
&
in_value
,
&
gpe_register_info
->
status_address
,
0
);
&
gpe_register_info
->
status_address
);
gpe_register_info
->
status
=
(
u8
)
in_value
;
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
...
...
@@ -179,7 +179,7 @@ acpi_ev_gpe_detect (
/* Read the Enable Register */
status
=
acpi_hw_low_level_read
(
ACPI_GPE_REGISTER_WIDTH
,
&
in_value
,
&
gpe_register_info
->
enable_address
,
0
);
&
gpe_register_info
->
enable_address
);
gpe_register_info
->
enable
=
(
u8
)
in_value
;
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
...
...
drivers/acpi/events/evgpeblk.c
View file @
17d0e4f4
...
...
@@ -634,13 +634,13 @@ acpi_ev_create_gpe_info_blocks (
* by writing a '0'.
*/
status
=
acpi_hw_low_level_write
(
ACPI_GPE_REGISTER_WIDTH
,
0x00
,
&
this_register
->
enable_address
,
0
);
&
this_register
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
goto
error_exit
;
}
status
=
acpi_hw_low_level_write
(
ACPI_GPE_REGISTER_WIDTH
,
0xFF
,
&
this_register
->
status_address
,
0
);
&
this_register
->
status_address
);
if
(
ACPI_FAILURE
(
status
))
{
goto
error_exit
;
}
...
...
drivers/acpi/events/evmisc.c
View file @
17d0e4f4
...
...
@@ -156,10 +156,10 @@ acpi_ev_queue_notify_request (
case
ACPI_TYPE_POWER
:
if
(
notify_value
<=
ACPI_MAX_SYS_NOTIFY
)
{
handler_obj
=
obj_desc
->
common_notify
.
sys
_handler
;
handler_obj
=
obj_desc
->
common_notify
.
sys
tem_notify
;
}
else
{
handler_obj
=
obj_desc
->
common_notify
.
d
rv_handler
;
handler_obj
=
obj_desc
->
common_notify
.
d
evice_notify
;
}
break
;
...
...
@@ -171,8 +171,8 @@ acpi_ev_queue_notify_request (
/* If there is any handler to run, schedule the dispatcher */
if
((
acpi_gbl_sys_notify
.
handler
&&
(
notify_value
<=
ACPI_MAX_SYS_NOTIFY
))
||
(
acpi_gbl_d
rv
_notify
.
handler
&&
(
notify_value
>
ACPI_MAX_SYS_NOTIFY
))
||
if
((
acpi_gbl_sys
tem
_notify
.
handler
&&
(
notify_value
<=
ACPI_MAX_SYS_NOTIFY
))
||
(
acpi_gbl_d
evice
_notify
.
handler
&&
(
notify_value
>
ACPI_MAX_SYS_NOTIFY
))
||
handler_obj
)
{
notify_info
=
acpi_ut_create_generic_state
();
if
(
!
notify_info
)
{
...
...
@@ -235,17 +235,17 @@ acpi_ev_notify_dispatch (
if
(
notify_info
->
notify
.
value
<=
ACPI_MAX_SYS_NOTIFY
)
{
/* Global system notification handler */
if
(
acpi_gbl_sys_notify
.
handler
)
{
global_handler
=
acpi_gbl_sys_notify
.
handler
;
global_context
=
acpi_gbl_sys_notify
.
context
;
if
(
acpi_gbl_sys
tem
_notify
.
handler
)
{
global_handler
=
acpi_gbl_sys
tem
_notify
.
handler
;
global_context
=
acpi_gbl_sys
tem
_notify
.
context
;
}
}
else
{
/* Global driver notification handler */
if
(
acpi_gbl_d
rv
_notify
.
handler
)
{
global_handler
=
acpi_gbl_d
rv
_notify
.
handler
;
global_context
=
acpi_gbl_d
rv
_notify
.
context
;
if
(
acpi_gbl_d
evice
_notify
.
handler
)
{
global_handler
=
acpi_gbl_d
evice
_notify
.
handler
;
global_context
=
acpi_gbl_d
evice
_notify
.
context
;
}
}
...
...
@@ -259,8 +259,8 @@ acpi_ev_notify_dispatch (
handler_obj
=
notify_info
->
notify
.
handler_obj
;
if
(
handler_obj
)
{
handler_obj
->
notify
_handler
.
handler
(
notify_info
->
notify
.
node
,
notify_info
->
notify
.
value
,
handler_obj
->
notify
_handler
.
context
);
handler_obj
->
notify
.
handler
(
notify_info
->
notify
.
node
,
notify_info
->
notify
.
value
,
handler_obj
->
notify
.
context
);
}
/* All done with the info object */
...
...
drivers/acpi/events/evregion.c
View file @
17d0e4f4
...
...
@@ -180,16 +180,14 @@ acpi_ev_execute_reg_method (
goto
cleanup
;
}
/*
* Set up the parameter objects
*/
/* Set up the parameter objects */
params
[
0
]
->
integer
.
value
=
region_obj
->
region
.
space_id
;
params
[
1
]
->
integer
.
value
=
function
;
params
[
2
]
=
NULL
;
/*
* Execute the method, no return value
*/
/* Execute the method, no return value */
ACPI_DEBUG_EXEC
(
acpi_ut_display_init_pathname
(
ACPI_TYPE_METHOD
,
region_obj2
->
extra
.
method_REG
,
NULL
));
status
=
acpi_ns_evaluate_by_handle
(
region_obj2
->
extra
.
method_REG
,
params
,
NULL
);
...
...
@@ -245,10 +243,9 @@ acpi_ev_address_space_dispatch (
return_ACPI_STATUS
(
AE_NOT_EXIST
);
}
/*
* Ensure that there is a handler associated with this region
*/
handler_desc
=
region_obj
->
region
.
addr_handler
;
/* Ensure that there is a handler associated with this region */
handler_desc
=
region_obj
->
region
.
address_space
;
if
(
!
handler_desc
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"no handler for region(%p) [%s]
\n
"
,
region_obj
,
acpi_ut_get_region_name
(
region_obj
->
region
.
space_id
)));
...
...
@@ -264,24 +261,23 @@ acpi_ev_address_space_dispatch (
/*
* This region has not been initialized yet, do it
*/
region_setup
=
handler_desc
->
addr
_handler
.
setup
;
region_setup
=
handler_desc
->
addr
ess_space
.
setup
;
if
(
!
region_setup
)
{
/*
* Bad news, no init routine and not init'd
*/
/* No initialization routine, exit with error */
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"No init routine for region(%p) [%s]
\n
"
,
region_obj
,
acpi_ut_get_region_name
(
region_obj
->
region
.
space_id
)));
return_ACPI_STATUS
(
AE_
UNKNOWN_STATUS
);
return_ACPI_STATUS
(
AE_
NOT_EXIST
);
}
/*
* We must exit the interpreter because the region setup will potentially
* execute control methods
* execute control methods
(e.g., _REG method for this region)
*/
acpi_ex_exit_interpreter
();
status
=
region_setup
(
region_obj
,
ACPI_REGION_ACTIVATE
,
handler_desc
->
addr
_handler
.
context
,
&
region_context
);
handler_desc
->
addr
ess_space
.
context
,
&
region_context
);
/* Re-enter the interpreter */
...
...
@@ -290,9 +286,8 @@ acpi_ev_address_space_dispatch (
return_ACPI_STATUS
(
status2
);
}
/*
* Init routine may fail
*/
/* Check for failure of the Region Setup */
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Region Init: %s [%s]
\n
"
,
acpi_format_exception
(
status
),
...
...
@@ -300,27 +295,38 @@ acpi_ev_address_space_dispatch (
return_ACPI_STATUS
(
status
);
}
/*
* Region initialization may have been completed by region_setup
*/
if
(
!
(
region_obj
->
region
.
flags
&
AOPOBJ_SETUP_COMPLETE
))
{
region_obj
->
region
.
flags
|=
AOPOBJ_SETUP_COMPLETE
;
if
(
region_obj2
->
extra
.
region_context
)
{
/* The handler for this region was already installed */
ACPI_MEM_FREE
(
region_context
);
}
else
{
/*
* Save the returned context for use in all accesses to
* this particular region.
* this particular region
*/
region_obj2
->
extra
.
region_context
=
region_context
;
}
}
}
/*
* We have everything we need, begin the process
*/
handler
=
handler_desc
->
addr_handler
.
handler
;
/* We have everything we need, we can invoke the address space handler */
handler
=
handler_desc
->
address_space
.
handler
;
ACPI_DEBUG_PRINT
((
ACPI_DB_OPREGION
,
"Handler %p (@%p) Address %8.8X%8.8X [%s]
\n
"
,
&
region_obj
->
region
.
addr
_handler
->
addr_handler
,
handler
,
&
region_obj
->
region
.
addr
ess_space
->
address_space
,
handler
,
ACPI_HIDWORD
(
address
),
ACPI_LODWORD
(
address
),
acpi_ut_get_region_name
(
region_obj
->
region
.
space_id
)));
if
(
!
(
handler_desc
->
addr
_handler
.
flags
&
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED
))
{
if
(
!
(
handler_desc
->
addr
ess_space
.
flags
&
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED
))
{
/*
* For handlers other than the default (supplied) handlers, we must
* exit the interpreter because the handler *might* block -- we don't
...
...
@@ -329,11 +335,10 @@ acpi_ev_address_space_dispatch (
acpi_ex_exit_interpreter
();
}
/*
* Invoke the handler.
*/
/* Call the handler */
status
=
handler
(
function
,
address
,
bit_width
,
value
,
handler_desc
->
addr
_handler
.
context
,
handler_desc
->
addr
ess_space
.
context
,
region_obj2
->
extra
.
region_context
);
if
(
ACPI_FAILURE
(
status
))
{
...
...
@@ -342,7 +347,7 @@ acpi_ev_address_space_dispatch (
acpi_format_exception
(
status
)));
}
if
(
!
(
handler_desc
->
addr
_handler
.
flags
&
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED
))
{
if
(
!
(
handler_desc
->
addr
ess_space
.
flags
&
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED
))
{
/*
* We just returned from a non-default handler, we must re-enter the
* interpreter
...
...
@@ -393,35 +398,30 @@ acpi_ev_detach_region(
}
region_context
=
region_obj2
->
extra
.
region_context
;
/*
* Get the address handler from the region object
*/
handler_obj
=
region_obj
->
region
.
addr_handler
;
/* Get the address handler from the region object */
handler_obj
=
region_obj
->
region
.
address_space
;
if
(
!
handler_obj
)
{
/*
* This region has no handler, all done
*/
/* This region has no handler, all done */
return_VOID
;
}
/* Find this region in the handler's list */
/*
* Find this region in the handler's list
*/
obj_desc
=
handler_obj
->
addr_handler
.
region_list
;
last_obj_ptr
=
&
handler_obj
->
addr_handler
.
region_list
;
obj_desc
=
handler_obj
->
address_space
.
region_list
;
last_obj_ptr
=
&
handler_obj
->
address_space
.
region_list
;
while
(
obj_desc
)
{
/*
* See if this is the one
*/
/* Is this the correct Region? */
if
(
obj_desc
==
region_obj
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_OPREGION
,
"Removing Region %p from address handler %p
\n
"
,
region_obj
,
handler_obj
));
/*
* This is it, remove it from the handler's list
*/
/* This is it, remove it from the handler's list */
*
last_obj_ptr
=
obj_desc
->
region
.
next
;
obj_desc
->
region
.
next
=
NULL
;
/* Must clear field */
...
...
@@ -432,9 +432,8 @@ acpi_ev_detach_region(
}
}
/*
* Now stop region accesses by executing the _REG method
*/
/* Now stop region accesses by executing the _REG method */
status
=
acpi_ev_execute_reg_method
(
region_obj
,
0
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s from region _REG, [%s]
\n
"
,
...
...
@@ -449,16 +448,14 @@ acpi_ev_detach_region(
}
}
/*
* Call the setup handler with the deactivate notification
*/
region_setup
=
handler_obj
->
addr_handler
.
setup
;
/* Call the setup handler with the deactivate notification */
region_setup
=
handler_obj
->
address_space
.
setup
;
status
=
region_setup
(
region_obj
,
ACPI_REGION_DEACTIVATE
,
handler_obj
->
addr_handler
.
context
,
&
region_context
);
handler_obj
->
address_space
.
context
,
&
region_context
);
/* Init routine may fail, Just ignore errors */
/*
* Init routine may fail, Just ignore errors
*/
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s from region init, [%s]
\n
"
,
acpi_format_exception
(
status
),
...
...
@@ -477,22 +474,20 @@ acpi_ev_detach_region(
* If the region is on the handler's list
* this better be the region's handler
*/
region_obj
->
region
.
addr_handler
=
NULL
;
region_obj
->
region
.
address_space
=
NULL
;
acpi_ut_remove_reference
(
handler_obj
);
return_VOID
;
}
}
/* found the right handler
*/
/* Walk the linked list of handlers
*/
/*
* Move through the linked list of handlers
*/
last_obj_ptr
=
&
obj_desc
->
region
.
next
;
obj_desc
=
obj_desc
->
region
.
next
;
}
/*
* If we get here, the region was not in the handler's region list
*/
/* If we get here, the region was not in the handler's region list */
ACPI_DEBUG_PRINT
((
ACPI_DB_OPREGION
,
"Cannot remove region %p from address handler %p
\n
"
,
region_obj
,
handler_obj
));
...
...
@@ -534,16 +529,19 @@ acpi_ev_attach_region (
region_obj
,
handler_obj
,
acpi_ut_get_region_name
(
region_obj
->
region
.
space_id
)));
/*
* Link this region to the front of the handler's list
*/
region_obj
->
region
.
next
=
handler_obj
->
addr_handler
.
region_list
;
handler_obj
->
addr_handler
.
region_list
=
region_obj
;
/* Link this region to the front of the handler's list */
/*
* Set the region's handler
*/
region_obj
->
region
.
addr_handler
=
handler_obj
;
region_obj
->
region
.
next
=
handler_obj
->
address_space
.
region_list
;
handler_obj
->
address_space
.
region_list
=
region_obj
;
/* Install the region's handler */
if
(
region_obj
->
region
.
address_space
)
{
return_ACPI_STATUS
(
AE_ALREADY_EXISTS
);
}
region_obj
->
region
.
address_space
=
handler_obj
;
acpi_ut_add_reference
(
handler_obj
);
/*
* Tell all users that this region is usable by running the _REG
...
...
@@ -571,14 +569,14 @@ acpi_ev_attach_region (
/*******************************************************************************
*
* FUNCTION: acpi_ev_
addr_handler_help
er
* FUNCTION: acpi_ev_
install_handl
er
*
* PARAMETERS: Handle - Node to be dumped
* Level - Nesting level of the handle
* Context - Passed into acpi_ns_walk_namespace
*
* DESCRIPTION: This routine installs an address handler into objects that are
* of type Region.
* of type Region
or Device
.
*
* If the Object is a Device, and the device has a handler of
* the same type then the search is terminated in that branch.
...
...
@@ -589,20 +587,20 @@ acpi_ev_attach_region (
******************************************************************************/
acpi_status
acpi_ev_
addr_handler_help
er
(
acpi_ev_
install_handl
er
(
acpi_handle
obj_handle
,
u32
level
,
void
*
context
,
void
**
return_value
)
{
union
acpi_operand_object
*
handler_obj
;
union
acpi_operand_object
*
tmp
_obj
;
union
acpi_operand_object
*
next_handler
_obj
;
union
acpi_operand_object
*
obj_desc
;
struct
acpi_namespace_node
*
node
;
acpi_status
status
;
ACPI_FUNCTION_NAME
(
"ev_
addr_handler_help
er"
);
ACPI_FUNCTION_NAME
(
"ev_
install_handl
er"
);
handler_obj
=
(
union
acpi_operand_object
*
)
context
;
...
...
@@ -622,7 +620,7 @@ acpi_ev_addr_handler_helper (
/*
* We only care about regions.and objects
*
that can have address
handlers
*
that are allowed to have address space
handlers
*/
if
((
node
->
type
!=
ACPI_TYPE_DEVICE
)
&&
(
node
->
type
!=
ACPI_TYPE_REGION
)
&&
...
...
@@ -634,32 +632,25 @@ acpi_ev_addr_handler_helper (
obj_desc
=
acpi_ns_get_attached_object
(
node
);
if
(
!
obj_desc
)
{
/*
* The object DNE, we don't care about it
*/
/* No object, just exit */
return
(
AE_OK
);
}
/*
* Devices are handled different than regions
*/
/* Devices are handled different than regions */
if
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
)
==
ACPI_TYPE_DEVICE
)
{
/*
* See if this guy has any handlers
*/
tmp_obj
=
obj_desc
->
device
.
addr_handler
;
while
(
tmp_obj
)
{
/*
* Now let's see if it's for the same address space.
*/
if
(
tmp_obj
->
addr_handler
.
space_id
==
handler_obj
->
addr_handler
.
space_id
)
{
/*
* It's for the same address space
*/
/* Check if this Device already has a handler for this address space */
next_handler_obj
=
obj_desc
->
device
.
address_space
;
while
(
next_handler_obj
)
{
/* Found a handler, is it for the same address space? */
if
(
next_handler_obj
->
address_space
.
space_id
==
handler_obj
->
address_space
.
space_id
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_OPREGION
,
"Found handler for region [%s] in device %p(%p) handler %p
\n
"
,
acpi_ut_get_region_name
(
handler_obj
->
addr
_handler
.
space_id
),
obj_desc
,
tmp
_obj
,
handler_obj
));
acpi_ut_get_region_name
(
handler_obj
->
addr
ess_space
.
space_id
),
obj_desc
,
next_handler
_obj
,
handler_obj
));
/*
* Since the object we found it on was a device, then it
...
...
@@ -671,10 +662,9 @@ acpi_ev_addr_handler_helper (
return
(
AE_CTRL_DEPTH
);
}
/*
* Move through the linked list of handlers
*/
tmp_obj
=
tmp_obj
->
addr_handler
.
next
;
/* Walk the linked list of handlers attached to this device */
next_handler_obj
=
next_handler_obj
->
address_space
.
next
;
}
/*
...
...
@@ -685,13 +675,12 @@ acpi_ev_addr_handler_helper (
return
(
AE_OK
);
}
/*
* Only here if it was a region
*/
if
(
obj_desc
->
region
.
space_id
!=
handler_obj
->
addr_handler
.
space_id
)
{
/* Object is a Region */
if
(
obj_desc
->
region
.
space_id
!=
handler_obj
->
address_space
.
space_id
)
{
/*
* This region is for a different address space
* ignore it
*
-- just
ignore it
*/
return
(
AE_OK
);
}
...
...
@@ -704,11 +693,9 @@ acpi_ev_addr_handler_helper (
*/
acpi_ev_detach_region
(
obj_desc
,
FALSE
);
/*
* Then connect the region to the new handler
*/
status
=
acpi_ev_attach_region
(
handler_obj
,
obj_desc
,
FALSE
);
/* Connect the region to the new handler */
status
=
acpi_ev_attach_region
(
handler_obj
,
obj_desc
,
FALSE
);
return
(
status
);
}
...
...
drivers/acpi/events/evrgnini.c
View file @
17d0e4f4
...
...
@@ -165,10 +165,11 @@ acpi_ev_pci_config_region_setup (
void
**
region_context
)
{
acpi_status
status
=
AE_OK
;
acpi_integer
temp
;
acpi_integer
pci_value
;
struct
acpi_pci_id
*
pci_id
=
*
region_context
;
union
acpi_operand_object
*
handler_obj
;
struct
acpi_namespace_node
*
node
;
struct
acpi_namespace_node
*
parent_node
;
struct
acpi_namespace_node
*
pci_root_node
;
union
acpi_operand_object
*
region_obj
=
(
union
acpi_operand_object
*
)
handle
;
struct
acpi_device_id
object_hID
;
...
...
@@ -176,7 +177,7 @@ acpi_ev_pci_config_region_setup (
ACPI_FUNCTION_TRACE
(
"ev_pci_config_region_setup"
);
handler_obj
=
region_obj
->
region
.
addr
_handler
;
handler_obj
=
region_obj
->
region
.
addr
ess_space
;
if
(
!
handler_obj
)
{
/*
* No installed handler. This shouldn't happen because the dispatch
...
...
@@ -187,45 +188,15 @@ acpi_ev_pci_config_region_setup (
return_ACPI_STATUS
(
AE_NOT_EXIST
);
}
*
region_context
=
NULL
;
if
(
function
==
ACPI_REGION_DEACTIVATE
)
{
if
(
pci_id
)
{
ACPI_MEM_FREE
(
pci_id
);
*
region_context
=
NULL
;
}
return_ACPI_STATUS
(
status
);
}
/* Create a new context */
pci_id
=
ACPI_MEM_CALLOCATE
(
sizeof
(
struct
acpi_pci_id
));
if
(
!
pci_id
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/*
* For PCI Config space access, we have to pass the segment, bus,
* device and function numbers. This routine must acquire those.
*/
/*
* First get device and function numbers from the _ADR object
* in the parent's scope.
*/
node
=
acpi_ns_get_parent_node
(
region_obj
->
region
.
node
);
/* Evaluate the _ADR object */
status
=
acpi_ut_evaluate_numeric_object
(
METHOD_NAME__ADR
,
node
,
&
temp
);
/*
* The default is zero, and since the allocation above zeroed
* the data, just do nothing on failure.
*/
if
(
ACPI_SUCCESS
(
status
))
{
pci_id
->
device
=
ACPI_HIWORD
(
ACPI_LODWORD
(
temp
));
pci_id
->
function
=
ACPI_LOWORD
(
ACPI_LODWORD
(
temp
));
}
parent_node
=
acpi_ns_get_parent_node
(
region_obj
->
region
.
node
);
/*
* Get the _SEG and _BBN values from the device upon which the handler
...
...
@@ -236,16 +207,16 @@ acpi_ev_pci_config_region_setup (
*/
/*
* If the addr
_handler
.Node is still pointing to the root, we need
* If the addr
ess_space
.Node is still pointing to the root, we need
* to scan upward for a PCI Root bridge and re-associate the op_region
* handlers with that device.
*/
if
(
handler_obj
->
addr
_handler
.
node
==
acpi_gbl_root_node
)
{
/*
* Node is currently the parent object
*/
while
(
node
!=
acpi_gbl_root_node
)
{
status
=
acpi_ut_execute_HID
(
node
,
&
object_hID
);
if
(
handler_obj
->
addr
ess_space
.
node
==
acpi_gbl_root_node
)
{
/*
Start search from the parent object */
pci_root_node
=
parent_node
;
while
(
pci_root_
node
!=
acpi_gbl_root_node
)
{
status
=
acpi_ut_execute_HID
(
pci_root_
node
,
&
object_hID
);
if
(
ACPI_SUCCESS
(
status
))
{
/* Got a valid _HID, check if this is a PCI root */
...
...
@@ -253,44 +224,89 @@ acpi_ev_pci_config_region_setup (
sizeof
(
PCI_ROOT_HID_STRING
))))
{
/* Install a handler for this PCI root bridge */
status
=
acpi_install_address_space_handler
((
acpi_handle
)
node
,
status
=
acpi_install_address_space_handler
((
acpi_handle
)
pci_root_
node
,
ACPI_ADR_SPACE_PCI_CONFIG
,
ACPI_DEFAULT_HANDLER
,
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_ERROR
((
"Could not install pci_config handler for %4.4s, %s
\n
"
,
node
->
name
.
ascii
,
acpi_format_exception
(
status
)));
if
(
status
==
AE_SAME_HANDLER
)
{
/*
* It is OK if the handler is already installed on the root
* bridge. Still need to return a context object for the
* new PCI_Config operation region, however.
*/
status
=
AE_OK
;
}
else
{
ACPI_REPORT_ERROR
((
"Could not install pci_config handler for Root Bridge %4.4s, %s
\n
"
,
pci_root_node
->
name
.
ascii
,
acpi_format_exception
(
status
)));
}
}
break
;
}
}
node
=
acpi_ns_get_parent_node
(
node
);
pci_root_node
=
acpi_ns_get_parent_node
(
pci_root_
node
);
}
/* PCI root bridge not found, use namespace root node */
}
else
{
node
=
handler_obj
->
addr_handler
.
node
;
pci_root_node
=
handler_obj
->
address_space
.
node
;
}
/*
* The PCI segment number comes from the _SEG method
* If this region is now initialized, we are done.
* (install_address_space_handler could have initialized it)
*/
status
=
acpi_ut_evaluate_numeric_object
(
METHOD_NAME__SEG
,
node
,
&
temp
);
if
(
ACPI_SUCCESS
(
status
))
{
pci_id
->
segment
=
ACPI_LOWORD
(
temp
);
if
(
region_obj
->
region
.
flags
&
AOPOBJ_SETUP_COMPLETE
)
{
return_ACPI_STATUS
(
AE_OK
);
}
/* Region is still not initialized. Create a new context */
pci_id
=
ACPI_MEM_CALLOCATE
(
sizeof
(
struct
acpi_pci_id
));
if
(
!
pci_id
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/*
* The PCI bus number comes from the _BBN method
* For PCI_Config space access, we need the segment, bus,
* device and function numbers. Acquire them here.
*/
status
=
acpi_ut_evaluate_numeric_object
(
METHOD_NAME__BBN
,
node
,
&
temp
);
if
(
ACPI_SUCCESS
(
status
))
{
pci_id
->
bus
=
ACPI_LOWORD
(
temp
);
}
/*
* Complete this device's pci_id
* Get the PCI device and function numbers from the _ADR object
* contained in the parent's scope.
*/
acpi_os_derive_pci_id
(
node
,
region_obj
->
region
.
node
,
&
pci_id
);
status
=
acpi_ut_evaluate_numeric_object
(
METHOD_NAME__ADR
,
parent_node
,
&
pci_value
);
/*
* The default is zero, and since the allocation above zeroed
* the data, just do nothing on failure.
*/
if
(
ACPI_SUCCESS
(
status
))
{
pci_id
->
device
=
ACPI_HIWORD
(
ACPI_LODWORD
(
pci_value
));
pci_id
->
function
=
ACPI_LOWORD
(
ACPI_LODWORD
(
pci_value
));
}
/* The PCI segment number comes from the _SEG method */
status
=
acpi_ut_evaluate_numeric_object
(
METHOD_NAME__SEG
,
pci_root_node
,
&
pci_value
);
if
(
ACPI_SUCCESS
(
status
))
{
pci_id
->
segment
=
ACPI_LOWORD
(
pci_value
);
}
/* The PCI bus number comes from the _BBN method */
status
=
acpi_ut_evaluate_numeric_object
(
METHOD_NAME__BBN
,
pci_root_node
,
&
pci_value
);
if
(
ACPI_SUCCESS
(
status
))
{
pci_id
->
bus
=
ACPI_LOWORD
(
pci_value
);
}
/* Complete this device's pci_id */
acpi_os_derive_pci_id
(
pci_root_node
,
region_obj
->
region
.
node
,
&
pci_id
);
*
region_context
=
pci_id
;
return_ACPI_STATUS
(
AE_OK
);
...
...
@@ -451,14 +467,15 @@ acpi_ev_initialize_region (
node
=
acpi_ns_get_parent_node
(
region_obj
->
region
.
node
);
space_id
=
region_obj
->
region
.
space_id
;
region_obj
->
region
.
addr_handler
=
NULL
;
/* Setup defaults */
region_obj
->
region
.
address_space
=
NULL
;
region_obj2
->
extra
.
method_REG
=
NULL
;
region_obj
->
common
.
flags
&=
~
(
AOPOBJ_SETUP_COMPLETE
);
region_obj
->
common
.
flags
|=
AOPOBJ_OBJECT_INITIALIZED
;
/*
* Find any "_REG" method associated with this region definition
*/
/* Find any "_REG" method associated with this region definition */
status
=
acpi_ns_search_node
(
*
reg_name_ptr
,
node
,
ACPI_TYPE_METHOD
,
&
method_node
);
if
(
ACPI_SUCCESS
(
status
))
{
...
...
@@ -475,29 +492,27 @@ acpi_ev_initialize_region (
* ie: acpi_gbl_root_node->parent_entry being set to NULL
*/
while
(
node
)
{
/*
* Check to see if a handler exists
*/
/* Check to see if a handler exists */
handler_obj
=
NULL
;
obj_desc
=
acpi_ns_get_attached_object
(
node
);
if
(
obj_desc
)
{
/*
* Can only be a handler if the object exists
*/
/* Can only be a handler if the object exists */
switch
(
node
->
type
)
{
case
ACPI_TYPE_DEVICE
:
handler_obj
=
obj_desc
->
device
.
addr
_handler
;
handler_obj
=
obj_desc
->
device
.
addr
ess_space
;
break
;
case
ACPI_TYPE_PROCESSOR
:
handler_obj
=
obj_desc
->
processor
.
addr
_handler
;
handler_obj
=
obj_desc
->
processor
.
addr
ess_space
;
break
;
case
ACPI_TYPE_THERMAL
:
handler_obj
=
obj_desc
->
thermal_zone
.
addr
_handler
;
handler_obj
=
obj_desc
->
thermal_zone
.
addr
ess_space
;
break
;
default:
...
...
@@ -508,7 +523,7 @@ acpi_ev_initialize_region (
while
(
handler_obj
)
{
/* Is this handler of the correct type? */
if
(
handler_obj
->
addr
_handler
.
space_id
==
space_id
)
{
if
(
handler_obj
->
addr
ess_space
.
space_id
==
space_id
)
{
/* Found correct handler */
ACPI_DEBUG_PRINT
((
ACPI_DB_OPREGION
,
...
...
@@ -523,7 +538,7 @@ acpi_ev_initialize_region (
/* Try next handler in the list */
handler_obj
=
handler_obj
->
addr
_handler
.
next
;
handler_obj
=
handler_obj
->
addr
ess_space
.
next
;
}
}
...
...
@@ -534,9 +549,8 @@ acpi_ev_initialize_region (
node
=
acpi_ns_get_parent_node
(
node
);
}
/*
* If we get here, there is no handler for this region
*/
/* If we get here, there is no handler for this region */
ACPI_DEBUG_PRINT
((
ACPI_DB_OPREGION
,
"No handler for region_type %s(%X) (region_obj %p)
\n
"
,
acpi_ut_get_region_name
(
space_id
),
space_id
,
region_obj
));
...
...
drivers/acpi/events/evxface.c
View file @
17d0e4f4
...
...
@@ -244,22 +244,22 @@ acpi_install_notify_handler (
/* Make sure the handler is not already installed */
if
(((
handler_type
==
ACPI_SYSTEM_NOTIFY
)
&&
acpi_gbl_sys_notify
.
handler
)
||
acpi_gbl_system_notify
.
handler
)
||
((
handler_type
==
ACPI_DEVICE_NOTIFY
)
&&
acpi_gbl_drv
_notify
.
handler
))
{
acpi_gbl_device
_notify
.
handler
))
{
status
=
AE_ALREADY_EXISTS
;
goto
unlock_and_exit
;
}
if
(
handler_type
==
ACPI_SYSTEM_NOTIFY
)
{
acpi_gbl_sys
_notify
.
node
=
node
;
acpi_gbl_sys_notify
.
handler
=
handler
;
acpi_gbl_sys_notify
.
context
=
context
;
acpi_gbl_sys
tem_notify
.
node
=
node
;
acpi_gbl_sys
tem
_notify
.
handler
=
handler
;
acpi_gbl_sys
tem
_notify
.
context
=
context
;
}
else
/* ACPI_DEVICE_NOTIFY */
{
acpi_gbl_d
rv_notify
.
node
=
node
;
acpi_gbl_d
rv
_notify
.
handler
=
handler
;
acpi_gbl_d
rv
_notify
.
context
=
context
;
acpi_gbl_d
evice_notify
.
node
=
node
;
acpi_gbl_d
evice
_notify
.
handler
=
handler
;
acpi_gbl_d
evice
_notify
.
context
=
context
;
}
/* Global notify handler installed */
...
...
@@ -282,13 +282,12 @@ acpi_install_notify_handler (
obj_desc
=
acpi_ns_get_attached_object
(
node
);
if
(
obj_desc
)
{
/* Object exists - make sure there's no handler */
if
(((
handler_type
==
ACPI_SYSTEM_NOTIFY
)
&&
obj_desc
->
common_notify
.
sys_handler
)
||
obj_desc
->
common_notify
.
system_notify
)
||
((
handler_type
==
ACPI_DEVICE_NOTIFY
)
&&
obj_desc
->
common_notify
.
drv_handler
))
{
obj_desc
->
common_notify
.
device_notify
))
{
status
=
AE_ALREADY_EXISTS
;
goto
unlock_and_exit
;
}
...
...
@@ -305,6 +304,11 @@ acpi_install_notify_handler (
/* Attach new object to the Node */
status
=
acpi_ns_attach_object
(
device
,
obj_desc
,
node
->
type
);
/* Remove local reference to the object */
acpi_ut_remove_reference
(
obj_desc
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
...
...
@@ -318,15 +322,15 @@ acpi_install_notify_handler (
goto
unlock_and_exit
;
}
notify_obj
->
notify
_handler
.
node
=
node
;
notify_obj
->
notify
_handler
.
handler
=
handler
;
notify_obj
->
notify
_handler
.
context
=
context
;
notify_obj
->
notify
.
node
=
node
;
notify_obj
->
notify
.
handler
=
handler
;
notify_obj
->
notify
.
context
=
context
;
if
(
handler_type
==
ACPI_SYSTEM_NOTIFY
)
{
obj_desc
->
common_notify
.
sys
_handler
=
notify_obj
;
obj_desc
->
common_notify
.
sys
tem_notify
=
notify_obj
;
}
else
/* ACPI_DEVICE_NOTIFY */
{
obj_desc
->
common_notify
.
d
rv_handler
=
notify_obj
;
obj_desc
->
common_notify
.
d
evice_notify
=
notify_obj
;
}
}
...
...
@@ -395,22 +399,22 @@ acpi_remove_notify_handler (
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Removing notify handler for ROOT object.
\n
"
));
if
(((
handler_type
==
ACPI_SYSTEM_NOTIFY
)
&&
!
acpi_gbl_sys_notify
.
handler
)
||
!
acpi_gbl_sys
tem
_notify
.
handler
)
||
((
handler_type
==
ACPI_DEVICE_NOTIFY
)
&&
!
acpi_gbl_d
rv
_notify
.
handler
))
{
!
acpi_gbl_d
evice
_notify
.
handler
))
{
status
=
AE_NOT_EXIST
;
goto
unlock_and_exit
;
}
if
(
handler_type
==
ACPI_SYSTEM_NOTIFY
)
{
acpi_gbl_sys_notify
.
node
=
NULL
;
acpi_gbl_sys_notify
.
handler
=
NULL
;
acpi_gbl_sys_notify
.
context
=
NULL
;
acpi_gbl_sys
tem
_notify
.
node
=
NULL
;
acpi_gbl_sys
tem
_notify
.
handler
=
NULL
;
acpi_gbl_sys
tem
_notify
.
context
=
NULL
;
}
else
{
acpi_gbl_d
rv
_notify
.
node
=
NULL
;
acpi_gbl_d
rv
_notify
.
handler
=
NULL
;
acpi_gbl_d
rv
_notify
.
context
=
NULL
;
acpi_gbl_d
evice
_notify
.
node
=
NULL
;
acpi_gbl_d
evice
_notify
.
handler
=
NULL
;
acpi_gbl_d
evice
_notify
.
context
=
NULL
;
}
}
...
...
@@ -436,14 +440,14 @@ acpi_remove_notify_handler (
/* Object exists - make sure there's an existing handler */
if
(
handler_type
==
ACPI_SYSTEM_NOTIFY
)
{
notify_obj
=
obj_desc
->
common_notify
.
sys
_handler
;
notify_obj
=
obj_desc
->
common_notify
.
sys
tem_notify
;
}
else
{
notify_obj
=
obj_desc
->
common_notify
.
d
rv_handler
;
notify_obj
=
obj_desc
->
common_notify
.
d
evice_notify
;
}
if
((
!
notify_obj
)
||
(
notify_obj
->
notify
_handler
.
handler
!=
handler
))
{
(
notify_obj
->
notify
.
handler
!=
handler
))
{
status
=
AE_BAD_PARAMETER
;
goto
unlock_and_exit
;
}
...
...
@@ -451,10 +455,10 @@ acpi_remove_notify_handler (
/* Remove the handler */
if
(
handler_type
==
ACPI_SYSTEM_NOTIFY
)
{
obj_desc
->
common_notify
.
sys
_handler
=
NULL
;
obj_desc
->
common_notify
.
sys
tem_notify
=
NULL
;
}
else
{
obj_desc
->
common_notify
.
d
rv_handler
=
NULL
;
obj_desc
->
common_notify
.
d
evice_notify
=
NULL
;
}
acpi_ut_remove_reference
(
notify_obj
);
...
...
drivers/acpi/events/evxfevnt.c
View file @
17d0e4f4
...
...
@@ -654,7 +654,11 @@ acpi_install_gpe_block (
}
status
=
acpi_ns_attach_object
(
node
,
obj_desc
,
ACPI_TYPE_DEVICE
);
/* Remove local reference to the object */
acpi_ut_remove_reference
(
obj_desc
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
...
...
drivers/acpi/events/evxfregn.c
View file @
17d0e4f4
...
...
@@ -154,7 +154,7 @@ acpi_install_address_space_handler (
break
;
default:
status
=
AE_
NOT_EXIST
;
status
=
AE_
BAD_PARAMETER
;
goto
unlock_and_exit
;
}
}
...
...
@@ -170,26 +170,36 @@ acpi_install_address_space_handler (
obj_desc
=
acpi_ns_get_attached_object
(
node
);
if
(
obj_desc
)
{
/*
* The
object
exists.
* The
attached device object already
exists.
* Make sure the handler is not already installed.
*/
handler_obj
=
obj_desc
->
device
.
address_space
;
/*
check the address handler the user requested
*/
/*
Walk the handler list for this device
*/
handler_obj
=
obj_desc
->
device
.
addr_handler
;
while
(
handler_obj
)
{
/* Same space_id indicates a handler already installed */
if
(
handler_obj
->
address_space
.
space_id
==
space_id
)
{
if
(
handler_obj
->
address_space
.
handler
==
handler
)
{
/*
* Found an Address handler, see if user requested this
* address
space.
* It is (relatively) OK to attempt to install the SAME
* handler twice. This can easily happen with PCI_Config
space.
*/
if
(
handler_obj
->
addr_handler
.
space_id
==
space_id
)
{
status
=
AE_SAME_HANDLER
;
goto
unlock_and_exit
;
}
else
{
/* A handler is already installed */
status
=
AE_ALREADY_EXISTS
;
}
goto
unlock_and_exit
;
}
/* Walk the linked list of handlers */
handler_obj
=
handler_obj
->
addr
_handler
.
next
;
handler_obj
=
handler_obj
->
addr
ess_space
.
next
;
}
}
else
{
...
...
@@ -218,8 +228,12 @@ acpi_install_address_space_handler (
/* Attach the new object to the Node */
status
=
acpi_ns_attach_object
(
node
,
obj_desc
,
type
);
if
(
ACPI_FAILURE
(
status
))
{
/* Remove local reference to the object */
acpi_ut_remove_reference
(
obj_desc
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
}
...
...
@@ -241,14 +255,25 @@ acpi_install_address_space_handler (
goto
unlock_and_exit
;
}
handler_obj
->
addr_handler
.
space_id
=
(
u8
)
space_id
;
handler_obj
->
addr_handler
.
hflags
=
flags
;
handler_obj
->
addr_handler
.
next
=
obj_desc
->
device
.
addr_handler
;
handler_obj
->
addr_handler
.
region_list
=
NULL
;
handler_obj
->
addr_handler
.
node
=
node
;
handler_obj
->
addr_handler
.
handler
=
handler
;
handler_obj
->
addr_handler
.
context
=
context
;
handler_obj
->
addr_handler
.
setup
=
setup
;
/* Init handler obj */
handler_obj
->
address_space
.
space_id
=
(
u8
)
space_id
;
handler_obj
->
address_space
.
hflags
=
flags
;
handler_obj
->
address_space
.
region_list
=
NULL
;
handler_obj
->
address_space
.
node
=
node
;
handler_obj
->
address_space
.
handler
=
handler
;
handler_obj
->
address_space
.
context
=
context
;
handler_obj
->
address_space
.
setup
=
setup
;
/* Install at head of Device.address_space list */
handler_obj
->
address_space
.
next
=
obj_desc
->
device
.
address_space
;
/*
* The Device object is the first reference on the handler_obj.
* Each region that uses the handler adds a reference.
*/
obj_desc
->
device
.
address_space
=
handler_obj
;
/*
* Walk the namespace finding all of the regions this
...
...
@@ -262,19 +287,10 @@ acpi_install_address_space_handler (
* In either case, back up and search down the remainder
* of the branch
*/
status
=
acpi_ns_walk_namespace
(
ACPI_TYPE_ANY
,
device
,
ACPI_UINT32_MAX
,
ACPI_NS_WALK_UNLOCK
,
acpi_ev_addr_handler_helper
,
status
=
acpi_ns_walk_namespace
(
ACPI_TYPE_ANY
,
device
,
ACPI_UINT32_MAX
,
ACPI_NS_WALK_UNLOCK
,
acpi_ev_install_handler
,
handler_obj
,
NULL
);
/* Place this handler 1st on the list */
handler_obj
->
common
.
reference_count
=
(
u16
)
(
handler_obj
->
common
.
reference_count
+
obj_desc
->
common
.
reference_count
-
1
);
obj_desc
->
device
.
addr_handler
=
handler_obj
;
unlock_and_exit:
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
return_ACPI_STATUS
(
status
);
...
...
@@ -341,12 +357,12 @@ acpi_remove_address_space_handler (
/* Find the address handler the user requested */
handler_obj
=
obj_desc
->
device
.
addr
_handler
;
last_obj_ptr
=
&
obj_desc
->
device
.
addr
_handler
;
handler_obj
=
obj_desc
->
device
.
addr
ess_space
;
last_obj_ptr
=
&
obj_desc
->
device
.
addr
ess_space
;
while
(
handler_obj
)
{
/* We have a handler, see if user requested this one */
if
(
handler_obj
->
addr
_handler
.
space_id
==
space_id
)
{
if
(
handler_obj
->
addr
ess_space
.
space_id
==
space_id
)
{
/* Matched space_id, first dereference this in the Regions */
ACPI_DEBUG_PRINT
((
ACPI_DB_OPREGION
,
...
...
@@ -354,7 +370,7 @@ acpi_remove_address_space_handler (
handler_obj
,
handler
,
acpi_ut_get_region_name
(
space_id
),
node
,
obj_desc
));
region_obj
=
handler_obj
->
addr
_handler
.
region_list
;
region_obj
=
handler_obj
->
addr
ess_space
.
region_list
;
/* Walk the handler's region list */
...
...
@@ -372,13 +388,13 @@ acpi_remove_address_space_handler (
* Walk the list: Just grab the head because the
* detach_region removed the previous head.
*/
region_obj
=
handler_obj
->
addr
_handler
.
region_list
;
region_obj
=
handler_obj
->
addr
ess_space
.
region_list
;
}
/* Remove this Handler object from the list */
*
last_obj_ptr
=
handler_obj
->
addr
_handler
.
next
;
*
last_obj_ptr
=
handler_obj
->
addr
ess_space
.
next
;
/* Now we can delete the handler object */
...
...
@@ -388,8 +404,8 @@ acpi_remove_address_space_handler (
/* Walk the linked list of handlers */
last_obj_ptr
=
&
handler_obj
->
addr
_handler
.
next
;
handler_obj
=
handler_obj
->
addr
_handler
.
next
;
last_obj_ptr
=
&
handler_obj
->
addr
ess_space
.
next
;
handler_obj
=
handler_obj
->
addr
ess_space
.
next
;
}
/* The handler does not exist */
...
...
drivers/acpi/executer/exconfig.c
View file @
17d0e4f4
...
...
@@ -360,11 +360,11 @@ acpi_ex_load_op (
/* The table must be either an SSDT or a PSDT */
if
((
!
ACPI_STRNCMP
(
table_ptr
->
signature
,
acpi_gbl_
acpi_
table_data
[
ACPI_TABLE_PSDT
].
signature
,
acpi_gbl_
acpi_
table_data
[
ACPI_TABLE_PSDT
].
sig_length
))
&&
acpi_gbl_table_data
[
ACPI_TABLE_PSDT
].
signature
,
acpi_gbl_table_data
[
ACPI_TABLE_PSDT
].
sig_length
))
&&
(
!
ACPI_STRNCMP
(
table_ptr
->
signature
,
acpi_gbl_
acpi_
table_data
[
ACPI_TABLE_SSDT
].
signature
,
acpi_gbl_
acpi_
table_data
[
ACPI_TABLE_SSDT
].
sig_length
)))
{
acpi_gbl_table_data
[
ACPI_TABLE_SSDT
].
signature
,
acpi_gbl_table_data
[
ACPI_TABLE_SSDT
].
sig_length
)))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Table has invalid signature [%4.4s], must be SSDT or PSDT
\n
"
,
table_ptr
->
signature
));
...
...
drivers/acpi/executer/exdump.c
View file @
17d0e4f4
...
...
@@ -635,9 +635,9 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_DEVICE
:
acpi_ex_out_pointer
(
"addr
_handler"
,
obj_desc
->
device
.
addr_handler
);
acpi_ex_out_pointer
(
"sys
_handler"
,
obj_desc
->
device
.
sys_handler
);
acpi_ex_out_pointer
(
"d
rv_handler"
,
obj_desc
->
device
.
drv_handler
);
acpi_ex_out_pointer
(
"addr
ess_space"
,
obj_desc
->
device
.
address_space
);
acpi_ex_out_pointer
(
"sys
tem_notify"
,
obj_desc
->
device
.
system_notify
);
acpi_ex_out_pointer
(
"d
evice_notify"
,
obj_desc
->
device
.
device_notify
);
break
;
...
...
@@ -673,7 +673,7 @@ acpi_ex_dump_object_descriptor (
acpi_ex_out_integer
(
"Flags"
,
obj_desc
->
region
.
flags
);
acpi_ex_out_address
(
"Address"
,
obj_desc
->
region
.
address
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
region
.
length
);
acpi_ex_out_pointer
(
"addr
_handler"
,
obj_desc
->
region
.
addr_handler
);
acpi_ex_out_pointer
(
"addr
ess_space"
,
obj_desc
->
region
.
address_space
);
acpi_ex_out_pointer
(
"Next"
,
obj_desc
->
region
.
next
);
break
;
...
...
@@ -682,8 +682,8 @@ acpi_ex_dump_object_descriptor (
acpi_ex_out_integer
(
"system_level"
,
obj_desc
->
power_resource
.
system_level
);
acpi_ex_out_integer
(
"resource_order"
,
obj_desc
->
power_resource
.
resource_order
);
acpi_ex_out_pointer
(
"sys
_handler"
,
obj_desc
->
power_resource
.
sys_handler
);
acpi_ex_out_pointer
(
"d
rv_handler"
,
obj_desc
->
power_resource
.
drv_handler
);
acpi_ex_out_pointer
(
"sys
tem_notify"
,
obj_desc
->
power_resource
.
system_notify
);
acpi_ex_out_pointer
(
"d
evice_notify"
,
obj_desc
->
power_resource
.
device_notify
);
break
;
...
...
@@ -692,17 +692,17 @@ acpi_ex_dump_object_descriptor (
acpi_ex_out_integer
(
"Processor ID"
,
obj_desc
->
processor
.
proc_id
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
processor
.
length
);
acpi_ex_out_address
(
"Address"
,
(
acpi_physical_address
)
obj_desc
->
processor
.
address
);
acpi_ex_out_pointer
(
"sys
_handler"
,
obj_desc
->
processor
.
sys_handler
);
acpi_ex_out_pointer
(
"d
rv_handler"
,
obj_desc
->
processor
.
drv_handler
);
acpi_ex_out_pointer
(
"addr
_handler"
,
obj_desc
->
processor
.
addr_handler
);
acpi_ex_out_pointer
(
"sys
tem_notify"
,
obj_desc
->
processor
.
system_notify
);
acpi_ex_out_pointer
(
"d
evice_notify"
,
obj_desc
->
processor
.
device_notify
);
acpi_ex_out_pointer
(
"addr
ess_space"
,
obj_desc
->
processor
.
address_space
);
break
;
case
ACPI_TYPE_THERMAL
:
acpi_ex_out_pointer
(
"sys
_handler"
,
obj_desc
->
thermal_zone
.
sys_handler
);
acpi_ex_out_pointer
(
"d
rv_handler"
,
obj_desc
->
thermal_zone
.
drv_handler
);
acpi_ex_out_pointer
(
"addr
_handler"
,
obj_desc
->
thermal_zone
.
addr_handler
);
acpi_ex_out_pointer
(
"sys
tem_notify"
,
obj_desc
->
thermal_zone
.
system_notify
);
acpi_ex_out_pointer
(
"d
evice_notify"
,
obj_desc
->
thermal_zone
.
device_notify
);
acpi_ex_out_pointer
(
"addr
ess_space"
,
obj_desc
->
thermal_zone
.
address_space
);
break
;
...
...
@@ -762,18 +762,18 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_LOCAL_ADDRESS_HANDLER
:
acpi_ex_out_integer
(
"space_id"
,
obj_desc
->
addr
_handler
.
space_id
);
acpi_ex_out_pointer
(
"Next"
,
obj_desc
->
addr
_handler
.
next
);
acpi_ex_out_pointer
(
"region_list"
,
obj_desc
->
addr
_handler
.
region_list
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
addr
_handler
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
addr
_handler
.
context
);
acpi_ex_out_integer
(
"space_id"
,
obj_desc
->
addr
ess_space
.
space_id
);
acpi_ex_out_pointer
(
"Next"
,
obj_desc
->
addr
ess_space
.
next
);
acpi_ex_out_pointer
(
"region_list"
,
obj_desc
->
addr
ess_space
.
region_list
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
addr
ess_space
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
addr
ess_space
.
context
);
break
;
case
ACPI_TYPE_LOCAL_NOTIFY
:
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
notify
_handler
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
notify
_handler
.
context
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
notify
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
notify
.
context
);
break
;
...
...
drivers/acpi/hardware/hwgpe.c
View file @
17d0e4f4
...
...
@@ -77,7 +77,7 @@ acpi_hw_enable_gpe (
* to enable the GPE, and write out the new register.
*/
status
=
acpi_hw_low_level_read
(
8
,
&
in_byte
,
&
gpe_event_info
->
register_info
->
enable_address
,
0
);
&
gpe_event_info
->
register_info
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
@@ -85,7 +85,7 @@ acpi_hw_enable_gpe (
/* Write with the new GPE bit enabled */
status
=
acpi_hw_low_level_write
(
8
,
(
in_byte
|
gpe_event_info
->
bit_mask
),
&
gpe_event_info
->
register_info
->
enable_address
,
0
);
&
gpe_event_info
->
register_info
->
enable_address
);
return
(
status
);
}
...
...
@@ -164,7 +164,7 @@ acpi_hw_disable_gpe (
* and write out the new register value to disable the GPE.
*/
status
=
acpi_hw_low_level_read
(
8
,
&
in_byte
,
&
gpe_register_info
->
enable_address
,
0
);
&
gpe_register_info
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
@@ -172,7 +172,7 @@ acpi_hw_disable_gpe (
/* Write the byte with this GPE bit cleared */
status
=
acpi_hw_low_level_write
(
8
,
(
in_byte
&
~
(
gpe_event_info
->
bit_mask
)),
&
gpe_register_info
->
enable_address
,
0
);
&
gpe_register_info
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
@@ -246,7 +246,7 @@ acpi_hw_clear_gpe (
* clear this GPE.
*/
status
=
acpi_hw_low_level_write
(
8
,
gpe_event_info
->
bit_mask
,
&
gpe_event_info
->
register_info
->
status_address
,
0
);
&
gpe_event_info
->
register_info
->
status_address
);
return
(
status
);
}
...
...
@@ -293,7 +293,7 @@ acpi_hw_get_gpe_status (
/* GPE Enabled? */
status
=
acpi_hw_low_level_read
(
8
,
&
in_byte
,
&
gpe_register_info
->
enable_address
,
0
);
status
=
acpi_hw_low_level_read
(
8
,
&
in_byte
,
&
gpe_register_info
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
...
...
@@ -310,7 +310,7 @@ acpi_hw_get_gpe_status (
/* GPE active (set)? */
status
=
acpi_hw_low_level_read
(
8
,
&
in_byte
,
&
gpe_register_info
->
status_address
,
0
);
status
=
acpi_hw_low_level_read
(
8
,
&
in_byte
,
&
gpe_register_info
->
status_address
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
...
...
@@ -360,7 +360,7 @@ acpi_hw_disable_gpe_block (
for
(
i
=
0
;
i
<
gpe_block
->
register_count
;
i
++
)
{
status
=
acpi_hw_low_level_write
(
8
,
0x00
,
&
gpe_block
->
register_info
[
i
].
enable_address
,
(
u32
)
i
);
&
gpe_block
->
register_info
[
i
].
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
@@ -401,7 +401,7 @@ acpi_hw_clear_gpe_block (
for
(
i
=
0
;
i
<
gpe_block
->
register_count
;
i
++
)
{
status
=
acpi_hw_low_level_write
(
8
,
0xFF
,
&
gpe_block
->
register_info
[
i
].
status_address
,
(
u32
)
i
);
&
gpe_block
->
register_info
[
i
].
status_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
@@ -447,7 +447,7 @@ acpi_hw_disable_non_wakeup_gpe_block (
* will be using it to restore all the GPEs later.
*/
status
=
acpi_hw_low_level_read
(
8
,
&
in_value
,
&
gpe_register_info
->
enable_address
,
0
);
&
gpe_register_info
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
@@ -458,7 +458,7 @@ acpi_hw_disable_non_wakeup_gpe_block (
* Disable all GPEs except wakeup GPEs.
*/
status
=
acpi_hw_low_level_write
(
8
,
gpe_register_info
->
wake_enable
,
&
gpe_register_info
->
enable_address
,
0
);
&
gpe_register_info
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
@@ -539,7 +539,7 @@ acpi_hw_enable_non_wakeup_gpe_block (
* Blast them back in.
*/
status
=
acpi_hw_low_level_write
(
8
,
gpe_register_info
->
enable
,
&
gpe_register_info
->
enable_address
,
0
);
&
gpe_register_info
->
enable_address
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
drivers/acpi/hardware/hwregs.c
View file @
17d0e4f4
...
...
@@ -93,7 +93,7 @@ acpi_hw_clear_acpi_status (void)
if
(
acpi_gbl_FADT
->
xpm1b_evt_blk
.
address
)
{
status
=
acpi_hw_low_level_write
(
16
,
ACPI_BITMASK_ALL_FIXED_STATUS
,
&
acpi_gbl_FADT
->
xpm1b_evt_blk
,
0
);
&
acpi_gbl_FADT
->
xpm1b_evt_blk
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
...
...
@@ -470,7 +470,6 @@ acpi_hw_register_read (
{
u32
value1
=
0
;
u32
value2
=
0
;
u32
bank_offset
;
acpi_status
status
;
...
...
@@ -487,50 +486,53 @@ acpi_hw_register_read (
switch
(
register_id
)
{
case
ACPI_REGISTER_PM1_STATUS
:
/* 16-bit access */
status
=
acpi_hw_low_level_read
(
16
,
&
value1
,
&
acpi_gbl_FADT
->
xpm1a_evt_blk
,
0
);
status
=
acpi_hw_low_level_read
(
16
,
&
value1
,
&
acpi_gbl_FADT
->
xpm1a_evt_blk
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
status
=
acpi_hw_low_level_read
(
16
,
&
value2
,
&
acpi_gbl_FADT
->
xpm1b_evt_blk
,
0
);
/* PM1B is optional */
status
=
acpi_hw_low_level_read
(
16
,
&
value2
,
&
acpi_gbl_FADT
->
xpm1b_evt_blk
);
value1
|=
value2
;
break
;
case
ACPI_REGISTER_PM1_ENABLE
:
/* 16-bit access*/
case
ACPI_REGISTER_PM1_ENABLE
:
/* 16-bit access
*/
bank_offset
=
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
);
status
=
acpi_hw_low_level_read
(
16
,
&
value1
,
&
acpi_gbl_FADT
->
xpm1a_evt_blk
,
bank_offset
);
status
=
acpi_hw_low_level_read
(
16
,
&
value1
,
&
acpi_gbl_xpm1a_enable
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
status
=
acpi_hw_low_level_read
(
16
,
&
value2
,
&
acpi_gbl_FADT
->
xpm1b_evt_blk
,
bank_offset
);
/* PM1B is optional */
status
=
acpi_hw_low_level_read
(
16
,
&
value2
,
&
acpi_gbl_xpm1b_enable
);
value1
|=
value2
;
break
;
case
ACPI_REGISTER_PM1_CONTROL
:
/* 16-bit access */
status
=
acpi_hw_low_level_read
(
16
,
&
value1
,
&
acpi_gbl_FADT
->
xpm1a_cnt_blk
,
0
);
status
=
acpi_hw_low_level_read
(
16
,
&
value1
,
&
acpi_gbl_FADT
->
xpm1a_cnt_blk
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
status
=
acpi_hw_low_level_read
(
16
,
&
value2
,
&
acpi_gbl_FADT
->
xpm1b_cnt_blk
,
0
);
status
=
acpi_hw_low_level_read
(
16
,
&
value2
,
&
acpi_gbl_FADT
->
xpm1b_cnt_blk
);
value1
|=
value2
;
break
;
case
ACPI_REGISTER_PM2_CONTROL
:
/* 8-bit access */
status
=
acpi_hw_low_level_read
(
8
,
&
value1
,
&
acpi_gbl_FADT
->
xpm2_cnt_blk
,
0
);
status
=
acpi_hw_low_level_read
(
8
,
&
value1
,
&
acpi_gbl_FADT
->
xpm2_cnt_blk
);
break
;
case
ACPI_REGISTER_PM_TIMER
:
/* 32-bit access */
status
=
acpi_hw_low_level_read
(
32
,
&
value1
,
&
acpi_gbl_FADT
->
xpm_tmr_blk
,
0
);
status
=
acpi_hw_low_level_read
(
32
,
&
value1
,
&
acpi_gbl_FADT
->
xpm_tmr_blk
);
break
;
case
ACPI_REGISTER_SMI_COMMAND_BLOCK
:
/* 8-bit access */
...
...
@@ -577,7 +579,6 @@ acpi_hw_register_write (
u32
register_id
,
u32
value
)
{
u32
bank_offset
;
acpi_status
status
;
...
...
@@ -594,59 +595,62 @@ acpi_hw_register_write (
switch
(
register_id
)
{
case
ACPI_REGISTER_PM1_STATUS
:
/* 16-bit access */
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1a_evt_blk
,
0
);
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1a_evt_blk
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1b_evt_blk
,
0
);
/* PM1B is optional */
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1b_evt_blk
);
break
;
case
ACPI_REGISTER_PM1_ENABLE
:
/* 16-bit access*/
bank_offset
=
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
);
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1a_evt_blk
,
bank_offset
);
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_xpm1a_enable
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1b_evt_blk
,
bank_offset
);
/* PM1B is optional */
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_xpm1b_enable
);
break
;
case
ACPI_REGISTER_PM1_CONTROL
:
/* 16-bit access */
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1a_cnt_blk
,
0
);
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1a_cnt_blk
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1b_cnt_blk
,
0
);
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1b_cnt_blk
);
break
;
case
ACPI_REGISTER_PM1A_CONTROL
:
/* 16-bit access */
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1a_cnt_blk
,
0
);
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1a_cnt_blk
);
break
;
case
ACPI_REGISTER_PM1B_CONTROL
:
/* 16-bit access */
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1b_cnt_blk
,
0
);
status
=
acpi_hw_low_level_write
(
16
,
value
,
&
acpi_gbl_FADT
->
xpm1b_cnt_blk
);
break
;
case
ACPI_REGISTER_PM2_CONTROL
:
/* 8-bit access */
status
=
acpi_hw_low_level_write
(
8
,
value
,
&
acpi_gbl_FADT
->
xpm2_cnt_blk
,
0
);
status
=
acpi_hw_low_level_write
(
8
,
value
,
&
acpi_gbl_FADT
->
xpm2_cnt_blk
);
break
;
case
ACPI_REGISTER_PM_TIMER
:
/* 32-bit access */
status
=
acpi_hw_low_level_write
(
32
,
value
,
&
acpi_gbl_FADT
->
xpm_tmr_blk
,
0
);
status
=
acpi_hw_low_level_write
(
32
,
value
,
&
acpi_gbl_FADT
->
xpm_tmr_blk
);
break
;
...
...
@@ -676,11 +680,11 @@ acpi_hw_register_write (
*
* FUNCTION: acpi_hw_low_level_read
*
* PARAMETERS:
Register - GAS register structure
*
Offset - Offset from the base address in the GAS
*
Width - 8, 16, or 32
* PARAMETERS:
Width - 8, 16, or 32
*
Value - Where the value is returned
*
Register - GAS register structure
*
* RETURN:
Value read
* RETURN:
Status
*
* DESCRIPTION: Read from either memory, IO, or PCI config space.
*
...
...
@@ -690,11 +694,8 @@ acpi_status
acpi_hw_low_level_read
(
u32
width
,
u32
*
value
,
struct
acpi_generic_address
*
reg
,
u32
offset
)
struct
acpi_generic_address
*
reg
)
{
acpi_physical_address
mem_address
;
acpi_io_address
io_address
;
struct
acpi_pci_id
pci_id
;
u16
pci_register
;
acpi_status
status
;
...
...
@@ -721,19 +722,16 @@ acpi_hw_low_level_read (
switch
(
reg
->
address_space_id
)
{
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
mem_address
=
(
reg
->
address
+
(
acpi_physical_address
)
offset
);
status
=
acpi_os_read_memory
(
mem_address
,
value
,
width
);
status
=
acpi_os_read_memory
(
(
acpi_physical_address
)
reg
->
address
,
value
,
width
);
break
;
case
ACPI_ADR_SPACE_SYSTEM_IO
:
io_address
=
(
acpi_io_address
)
(
reg
->
address
+
(
acpi_physical_address
)
offset
);
status
=
acpi_os_read_port
(
io_address
,
value
,
width
);
status
=
acpi_os_read_port
((
acpi_io_address
)
reg
->
address
,
value
,
width
);
break
;
...
...
@@ -743,15 +741,16 @@ acpi_hw_low_level_read (
pci_id
.
bus
=
0
;
pci_id
.
device
=
ACPI_PCI_DEVICE
(
reg
->
address
);
pci_id
.
function
=
ACPI_PCI_FUNCTION
(
reg
->
address
);
pci_register
=
(
u16
)
(
ACPI_PCI_REGISTER
(
reg
->
address
)
+
offset
);
pci_register
=
(
u16
)
ACPI_PCI_REGISTER
(
reg
->
address
);
status
=
acpi_os_read_pci_configuration
(
&
pci_id
,
pci_register
,
value
,
width
);
status
=
acpi_os_read_pci_configuration
(
&
pci_id
,
pci_register
,
value
,
width
);
break
;
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unsupported address space: %X
\n
"
,
reg
->
address_space_id
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unsupported address space: %X
\n
"
,
reg
->
address_space_id
));
status
=
AE_BAD_PARAMETER
;
break
;
}
...
...
@@ -767,12 +766,10 @@ acpi_hw_low_level_read (
* PARAMETERS: Width - 8, 16, or 32
* Value - To be written
* Register - GAS register structure
* Offset - Offset from the base address in the GAS
*
*
* RETURN:
Value read
* RETURN:
Status
*
* DESCRIPTION:
Read from
either memory, IO, or PCI config space.
* DESCRIPTION:
Write to
either memory, IO, or PCI config space.
*
******************************************************************************/
...
...
@@ -780,11 +777,8 @@ acpi_status
acpi_hw_low_level_write
(
u32
width
,
u32
value
,
struct
acpi_generic_address
*
reg
,
u32
offset
)
struct
acpi_generic_address
*
reg
)
{
acpi_physical_address
mem_address
;
acpi_io_address
io_address
;
struct
acpi_pci_id
pci_id
;
u16
pci_register
;
acpi_status
status
;
...
...
@@ -809,19 +803,16 @@ acpi_hw_low_level_write (
switch
(
reg
->
address_space_id
)
{
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
mem_address
=
(
reg
->
address
+
(
acpi_physical_address
)
offset
);
status
=
acpi_os_write_memory
(
mem_address
,
value
,
width
);
status
=
acpi_os_write_memory
(
(
acpi_physical_address
)
reg
->
address
,
value
,
width
);
break
;
case
ACPI_ADR_SPACE_SYSTEM_IO
:
io_address
=
(
acpi_io_address
)
(
reg
->
address
+
(
acpi_physical_address
)
offset
);
status
=
acpi_os_write_port
(
io_address
,
value
,
width
);
status
=
acpi_os_write_port
((
acpi_io_address
)
reg
->
address
,
value
,
width
);
break
;
...
...
@@ -831,15 +822,16 @@ acpi_hw_low_level_write (
pci_id
.
bus
=
0
;
pci_id
.
device
=
ACPI_PCI_DEVICE
(
reg
->
address
);
pci_id
.
function
=
ACPI_PCI_FUNCTION
(
reg
->
address
);
pci_register
=
(
u16
)
(
ACPI_PCI_REGISTER
(
reg
->
address
)
+
offset
);
pci_register
=
(
u16
)
ACPI_PCI_REGISTER
(
reg
->
address
);
status
=
acpi_os_write_pci_configuration
(
&
pci_id
,
pci_register
,
(
acpi_integer
)
value
,
width
);
status
=
acpi_os_write_pci_configuration
(
&
pci_id
,
pci_register
,
(
acpi_integer
)
value
,
width
);
break
;
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unsupported address space: %X
\n
"
,
reg
->
address_space_id
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unsupported address space: %X
\n
"
,
reg
->
address_space_id
));
status
=
AE_BAD_PARAMETER
;
break
;
}
...
...
drivers/acpi/hardware/hwtimer.c
View file @
17d0e4f4
...
...
@@ -108,7 +108,7 @@ acpi_get_timer (
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
status
=
acpi_hw_low_level_read
(
32
,
ticks
,
&
acpi_gbl_FADT
->
xpm_tmr_blk
,
0
);
status
=
acpi_hw_low_level_read
(
32
,
ticks
,
&
acpi_gbl_FADT
->
xpm_tmr_blk
);
return_ACPI_STATUS
(
status
);
}
...
...
drivers/acpi/namespace/nsalloc.c
View file @
17d0e4f4
...
...
@@ -116,20 +116,34 @@ acpi_ns_delete_node (
prev_node
=
NULL
;
next_node
=
parent_node
->
child
;
/* Find the node that is the previous peer in the parent's child list */
while
(
next_node
!=
node
)
{
prev_node
=
next_node
;
next_node
=
prev_node
->
peer
;
}
if
(
prev_node
)
{
/* Node is not first child, unlink it */
prev_node
->
peer
=
next_node
->
peer
;
if
(
next_node
->
flags
&
ANOBJ_END_OF_PEER_LIST
)
{
prev_node
->
flags
|=
ANOBJ_END_OF_PEER_LIST
;
}
}
else
{
/* Node is first child (has no previous peer) */
if
(
next_node
->
flags
&
ANOBJ_END_OF_PEER_LIST
)
{
/* No peers at all */
parent_node
->
child
=
NULL
;
}
else
{
/* Link peer list to parent */
parent_node
->
child
=
next_node
->
peer
;
}
}
ACPI_MEM_TRACKING
(
acpi_gbl_memory_lists
[
ACPI_MEM_LIST_NSNODE
].
total_freed
++
);
...
...
@@ -222,7 +236,7 @@ acpi_ns_install_node (
struct
acpi_namespace_node
*
node
,
/* New Child*/
acpi_object_type
type
)
{
u16
owner_id
=
TABLE_ID_DSDT
;
u16
owner_id
=
0
;
struct
acpi_namespace_node
*
child_node
;
#ifdef ACPI_ALPHABETIC_NAMESPACE
...
...
@@ -355,6 +369,7 @@ acpi_ns_delete_children (
{
struct
acpi_namespace_node
*
child_node
;
struct
acpi_namespace_node
*
next_node
;
struct
acpi_namespace_node
*
node
;
u8
flags
;
...
...
@@ -399,6 +414,25 @@ acpi_ns_delete_children (
* Detach an object if there is one, then free the child node
*/
acpi_ns_detach_object
(
child_node
);
/*
* Decrement the reference count(s) of all parents up to
* the root! (counts were incremented when the node was created)
*/
node
=
child_node
;
while
((
node
=
acpi_ns_get_parent_node
(
node
))
!=
NULL
)
{
node
->
reference_count
--
;
}
/* There should be only one reference remaining on this node */
if
(
child_node
->
reference_count
!=
1
)
{
ACPI_REPORT_WARNING
((
"Existing references (%d) on node being deleted (%p)
\n
"
,
child_node
->
reference_count
,
child_node
));
}
/* Now we can delete the node */
ACPI_MEM_FREE
(
child_node
);
/* And move on to the next child in the list */
...
...
@@ -512,7 +546,7 @@ acpi_ns_delete_namespace_subtree (
*
******************************************************************************/
static
void
void
acpi_ns_remove_reference
(
struct
acpi_namespace_node
*
node
)
{
...
...
drivers/acpi/namespace/nsload.c
View file @
17d0e4f4
...
...
@@ -79,7 +79,7 @@ acpi_ns_load_table (
/* Check if table contains valid AML (must be DSDT, PSDT, SSDT, etc.) */
if
(
!
(
acpi_gbl_
acpi_
table_data
[
table_desc
->
type
].
flags
&
ACPI_TABLE_EXECUTABLE
))
{
if
(
!
(
acpi_gbl_table_data
[
table_desc
->
type
].
flags
&
ACPI_TABLE_EXECUTABLE
))
{
/* Just ignore this table */
return_ACPI_STATUS
(
AE_OK
);
...
...
@@ -182,7 +182,7 @@ acpi_ns_load_table_by_type (
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Loading DSDT
\n
"
));
table_desc
=
&
acpi_gbl_acpi_tables
[
ACPI_TABLE_DSDT
]
;
table_desc
=
acpi_gbl_table_lists
[
ACPI_TABLE_DSDT
].
next
;
/* If table already loaded into namespace, just return */
...
...
@@ -190,8 +190,6 @@ acpi_ns_load_table_by_type (
goto
unlock_and_exit
;
}
table_desc
->
table_id
=
TABLE_ID_DSDT
;
/* Now load the single DSDT */
status
=
acpi_ns_load_table
(
table_desc
,
acpi_gbl_root_node
);
...
...
@@ -205,13 +203,13 @@ acpi_ns_load_table_by_type (
case
ACPI_TABLE_SSDT
:
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Loading %d SSDTs
\n
"
,
acpi_gbl_
acpi_table
s
[
ACPI_TABLE_SSDT
].
count
));
acpi_gbl_
table_list
s
[
ACPI_TABLE_SSDT
].
count
));
/*
* Traverse list of SSDT tables
*/
table_desc
=
&
acpi_gbl_acpi_tables
[
ACPI_TABLE_SSDT
]
;
for
(
i
=
0
;
i
<
acpi_gbl_
acpi_table
s
[
ACPI_TABLE_SSDT
].
count
;
i
++
)
{
table_desc
=
acpi_gbl_table_lists
[
ACPI_TABLE_SSDT
].
next
;
for
(
i
=
0
;
i
<
acpi_gbl_
table_list
s
[
ACPI_TABLE_SSDT
].
count
;
i
++
)
{
/*
* Only attempt to load table if it is not
* already loaded!
...
...
@@ -233,14 +231,14 @@ acpi_ns_load_table_by_type (
case
ACPI_TABLE_PSDT
:
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Loading %d PSDTs
\n
"
,
acpi_gbl_
acpi_table
s
[
ACPI_TABLE_PSDT
].
count
));
acpi_gbl_
table_list
s
[
ACPI_TABLE_PSDT
].
count
));
/*
* Traverse list of PSDT tables
*/
table_desc
=
&
acpi_gbl_acpi_tables
[
ACPI_TABLE_PSDT
]
;
table_desc
=
acpi_gbl_table_lists
[
ACPI_TABLE_PSDT
].
next
;
for
(
i
=
0
;
i
<
acpi_gbl_
acpi_table
s
[
ACPI_TABLE_PSDT
].
count
;
i
++
)
{
for
(
i
=
0
;
i
<
acpi_gbl_
table_list
s
[
ACPI_TABLE_PSDT
].
count
;
i
++
)
{
/* Only attempt to load table if it is not already loaded! */
if
(
!
table_desc
->
loaded_into_namespace
)
{
...
...
drivers/acpi/namespace/nsparse.c
View file @
17d0e4f4
...
...
@@ -85,10 +85,9 @@ acpi_ns_one_complete_parse (
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/* Create and initialize a new walk state */
walk_state
=
acpi_ds_create_walk_state
(
TABLE_ID_DSDT
,
walk_state
=
acpi_ds_create_walk_state
(
table_desc
->
table_id
,
NULL
,
NULL
,
NULL
);
if
(
!
walk_state
)
{
acpi_ps_free_op
(
parse_root
);
...
...
drivers/acpi/namespace/nsutils.c
View file @
17d0e4f4
...
...
@@ -799,38 +799,31 @@ void
acpi_ns_terminate
(
void
)
{
union
acpi_operand_object
*
obj_desc
;
struct
acpi_namespace_node
*
this_node
;
ACPI_FUNCTION_TRACE
(
"ns_terminate"
);
this_node
=
acpi_gbl_root_node
;
/*
* 1) Free the entire namespace -- all
objects, tables, and stack
s
* 1) Free the entire namespace -- all
nodes and object
s
*
* Delete all objects linked to the root
* (additional table descriptors)
* Delete all object descriptors attached to namepsace nodes
*/
acpi_ns_delete_namespace_subtree
(
this
_node
);
acpi_ns_delete_namespace_subtree
(
acpi_gbl_root
_node
);
/* Detach any object
(s)
attached to the root */
/* Detach any object
s
attached to the root */
obj_desc
=
acpi_ns_get_attached_object
(
this
_node
);
obj_desc
=
acpi_ns_get_attached_object
(
acpi_gbl_root
_node
);
if
(
obj_desc
)
{
acpi_ns_detach_object
(
this_node
);
acpi_ut_remove_reference
(
obj_desc
);
acpi_ns_detach_object
(
acpi_gbl_root_node
);
}
acpi_ns_delete_children
(
this_node
);
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Namespace freed
\n
"
));
/*
* 2) Now we can delete the ACPI tables
*/
acpi_tb_delete_a
cpi
_tables
();
acpi_tb_delete_a
ll
_tables
();
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"ACPI Tables freed
\n
"
));
return_VOID
;
...
...
drivers/acpi/osl.c
View file @
17d0e4f4
...
...
@@ -237,7 +237,7 @@ acpi_os_table_override (struct acpi_table_header *existing_table,
static
irqreturn_t
acpi_irq
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
return
(
*
acpi_irq_handler
)(
acpi_irq_context
);
return
(
*
acpi_irq_handler
)(
acpi_irq_context
)
?
IRQ_HANDLED
:
IRQ_NONE
;
}
acpi_status
...
...
@@ -1006,7 +1006,7 @@ acpi_os_name_setup(char *str)
return
0
;
for
(;
count
--
&&
str
&&
*
str
;
str
++
)
{
if
(
isalnum
(
*
str
)
||
*
str
==
' '
)
if
(
isalnum
(
*
str
)
||
*
str
==
' '
||
*
str
==
':'
)
*
p
++
=
*
str
;
else
if
(
*
str
==
'\''
||
*
str
==
'"'
)
continue
;
...
...
drivers/acpi/parser/pswalk.c
View file @
17d0e4f4
...
...
@@ -270,7 +270,7 @@ acpi_ps_delete_parse_tree (
return_VOID
;
}
walk_state
=
acpi_ds_create_walk_state
(
TABLE_ID_DSDT
,
NULL
,
NULL
,
thread
);
walk_state
=
acpi_ds_create_walk_state
(
0
,
NULL
,
NULL
,
thread
);
if
(
!
walk_state
)
{
return_VOID
;
}
...
...
drivers/acpi/parser/psxface.c
View file @
17d0e4f4
...
...
@@ -178,7 +178,7 @@ acpi_psx_execute (
/* Create and initialize a new walk state */
walk_state
=
acpi_ds_create_walk_state
(
TABLE_ID_DSDT
,
NULL
,
NULL
,
NULL
);
walk_state
=
acpi_ds_create_walk_state
(
0
,
NULL
,
NULL
,
NULL
);
if
(
!
walk_state
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
drivers/acpi/resources/rsxface.c
View file @
17d0e4f4
...
...
@@ -379,25 +379,31 @@ acpi_resource_to_address64 (
{
struct
acpi_resource_address16
*
address16
;
struct
acpi_resource_address32
*
address32
;
struct
acpi_resource_address64
*
address64
;
switch
(
resource
->
id
)
{
case
ACPI_RSTYPE_ADDRESS16
:
address16
=
(
struct
acpi_resource_address16
*
)
&
resource
->
data
;
ACPI_COPY_ADDRESS
(
out
,
address16
);
break
;
case
ACPI_RSTYPE_ADDRESS32
:
address32
=
(
struct
acpi_resource_address32
*
)
&
resource
->
data
;
ACPI_COPY_ADDRESS
(
out
,
address32
);
break
;
case
ACPI_RSTYPE_ADDRESS64
:
address64
=
(
struct
acpi_resource_address64
*
)
&
resource
->
data
;
ACPI_COPY_ADDRESS
(
out
,
address64
);
/* Simple copy for 64 bit source */
ACPI_MEMCPY
(
out
,
&
resource
->
data
,
sizeof
(
struct
acpi_resource_address64
));
break
;
default:
return
(
AE_BAD_PARAMETER
);
}
...
...
drivers/acpi/scan.c
View file @
17d0e4f4
...
...
@@ -69,7 +69,7 @@ static void acpi_device_register(struct acpi_device * device, struct acpi_device
device
->
kobj
.
parent
=
&
parent
->
kobj
;
device
->
kobj
.
ktype
=
&
ktype_acpi_ns
;
device
->
kobj
.
kset
=
&
acpi_namespace_kset
;
kobject_
register
(
&
device
->
kobj
);
kobject_
add
(
&
device
->
kobj
);
}
static
int
...
...
drivers/acpi/tables/tbconvrt.c
View file @
17d0e4f4
...
...
@@ -164,6 +164,36 @@ acpi_tb_convert_to_xsdt (
}
/******************************************************************************
*
* FUNCTION: acpi_tb_init_generic_address
*
* PARAMETERS: new_gas_struct - GAS struct to be initialized
* register_bit_width - Width of this register
* Address - Address of the register
*
* RETURN: None
*
* DESCRIPTION: Initialize a GAS structure.
*
******************************************************************************/
static
void
acpi_tb_init_generic_address
(
struct
acpi_generic_address
*
new_gas_struct
,
u8
register_bit_width
,
acpi_physical_address
address
)
{
ACPI_STORE_ADDRESS
(
new_gas_struct
->
address
,
address
);
new_gas_struct
->
address_space_id
=
ACPI_ADR_SPACE_SYSTEM_IO
;
new_gas_struct
->
register_bit_width
=
register_bit_width
;
new_gas_struct
->
register_bit_offset
=
0
;
new_gas_struct
->
reserved
=
0
;
}
/*******************************************************************************
*
* FUNCTION: acpi_tb_convert_fadt1
...
...
@@ -233,14 +263,34 @@ acpi_tb_convert_fadt1 (
/*
* Convert the V1.0 block addresses to V2.0 GAS structures
*/
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1a_evt_blk
,
local_fadt
->
pm1_evt_len
,
local_fadt
->
V1_pm1a_evt_blk
);
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1b_evt_blk
,
local_fadt
->
pm1_evt_len
,
local_fadt
->
V1_pm1b_evt_blk
);
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1a_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
local_fadt
->
V1_pm1a_cnt_blk
);
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1b_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
local_fadt
->
V1_pm1b_cnt_blk
);
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm2_cnt_blk
,
local_fadt
->
pm2_cnt_len
,
local_fadt
->
V1_pm2_cnt_blk
);
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm_tmr_blk
,
local_fadt
->
pm_tm_len
,
local_fadt
->
V1_pm_tmr_blk
);
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xgpe0_blk
,
0
,
local_fadt
->
V1_gpe0_blk
);
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xgpe1_blk
,
0
,
local_fadt
->
V1_gpe1_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1a_evt_blk
,
local_fadt
->
pm1_evt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1a_evt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1b_evt_blk
,
local_fadt
->
pm1_evt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1b_evt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1a_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1a_cnt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1b_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1b_cnt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm2_cnt_blk
,
local_fadt
->
pm2_cnt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm2_cnt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm_tmr_blk
,
local_fadt
->
pm_tm_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm_tmr_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xgpe0_blk
,
0
,
(
acpi_physical_address
)
local_fadt
->
V1_gpe0_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xgpe1_blk
,
0
,
(
acpi_physical_address
)
local_fadt
->
V1_gpe1_blk
);
/* Create separate GAS structs for the PM1 Enable registers */
acpi_tb_init_generic_address
(
&
acpi_gbl_xpm1a_enable
,
(
u8
)
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
),
(
acpi_physical_address
)
(
local_fadt
->
xpm1a_evt_blk
.
address
+
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
)));
acpi_tb_init_generic_address
(
&
acpi_gbl_xpm1b_enable
,
(
u8
)
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
),
(
acpi_physical_address
)
(
local_fadt
->
xpm1b_evt_blk
.
address
+
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
)));
}
...
...
@@ -282,44 +332,58 @@ acpi_tb_convert_fadt2 (
}
if
(
!
(
local_fadt
->
xpm1a_evt_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1a_evt_blk
,
local_fadt
->
pm1_evt_len
,
local_fadt
->
V1_pm1a_evt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1a_evt_blk
,
local_fadt
->
pm1_evt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1a_evt_blk
);
}
if
(
!
(
local_fadt
->
xpm1b_evt_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1b_evt_blk
,
local_fadt
->
pm1_evt_len
,
local_fadt
->
V1_pm1b_evt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1b_evt_blk
,
local_fadt
->
pm1_evt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1b_evt_blk
);
}
if
(
!
(
local_fadt
->
xpm1a_cnt_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1a_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
local_fadt
->
V1_pm1a_cnt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1a_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1a_cnt_blk
);
}
if
(
!
(
local_fadt
->
xpm1b_cnt_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm1b_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
local_fadt
->
V1_pm1b_cnt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm1b_cnt_blk
,
local_fadt
->
pm1_cnt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm1b_cnt_blk
);
}
if
(
!
(
local_fadt
->
xpm2_cnt_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm2_cnt_blk
,
local_fadt
->
pm2_cnt_len
,
local_fadt
->
V1_pm2_cnt_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm2_cnt_blk
,
local_fadt
->
pm2_cnt_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm2_cnt_blk
);
}
if
(
!
(
local_fadt
->
xpm_tmr_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xpm_tmr_blk
,
local_fadt
->
pm_tm_len
,
local_fadt
->
V1_pm_tmr_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xpm_tmr_blk
,
local_fadt
->
pm_tm_len
,
(
acpi_physical_address
)
local_fadt
->
V1_pm_tmr_blk
);
}
if
(
!
(
local_fadt
->
xgpe0_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xgpe0_blk
,
0
,
local_fadt
->
V1_gpe0_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xgpe0_blk
,
0
,
(
acpi_physical_address
)
local_fadt
->
V1_gpe0_blk
);
}
if
(
!
(
local_fadt
->
xgpe1_blk
.
address
))
{
ASL_BUILD_GAS_FROM_V1_ENTRY
(
local_fadt
->
xgpe1_blk
,
0
,
local_fadt
->
V1_gpe1_blk
);
acpi_tb_init_generic_address
(
&
local_fadt
->
xgpe1_blk
,
0
,
(
acpi_physical_address
)
local_fadt
->
V1_gpe1_blk
);
}
/* Create separate GAS structs for the PM1 Enable registers */
acpi_tb_init_generic_address
(
&
acpi_gbl_xpm1a_enable
,
(
u8
)
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
),
(
acpi_physical_address
)
(
local_fadt
->
xpm1a_evt_blk
.
address
+
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
)));
acpi_gbl_xpm1a_enable
.
address_space_id
=
local_fadt
->
xpm1a_evt_blk
.
address_space_id
;
acpi_tb_init_generic_address
(
&
acpi_gbl_xpm1b_enable
,
(
u8
)
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
),
(
acpi_physical_address
)
(
local_fadt
->
xpm1b_evt_blk
.
address
+
ACPI_DIV_2
(
acpi_gbl_FADT
->
pm1_evt_len
)));
acpi_gbl_xpm1b_enable
.
address_space_id
=
local_fadt
->
xpm1b_evt_blk
.
address_space_id
;
}
...
...
@@ -396,7 +460,7 @@ acpi_tb_convert_table_fadt (void)
/* Free the original table */
table_desc
=
&
acpi_gbl_acpi_tables
[
ACPI_TABLE_FADT
]
;
table_desc
=
acpi_gbl_table_lists
[
ACPI_TABLE_FADT
].
next
;
acpi_tb_delete_single_table
(
table_desc
);
/* Install the new table */
...
...
drivers/acpi/tables/tbget.c
View file @
17d0e4f4
...
...
@@ -456,18 +456,18 @@ acpi_tb_get_table_ptr (
* instance is always in the list head.
*/
if
(
instance
==
1
)
{
/*
* Just pluck the pointer out of the global table!
* Will be null if no table is present
*/
*
table_ptr_loc
=
acpi_gbl_acpi_tables
[
table_type
].
pointer
;
/*
Get the first */
if
(
acpi_gbl_table_lists
[
table_type
].
next
)
{
*
table_ptr_loc
=
acpi_gbl_table_lists
[
table_type
].
next
->
pointer
;
}
return_ACPI_STATUS
(
AE_OK
);
}
/*
* Check for instance out of range
*/
if
(
instance
>
acpi_gbl_
acpi_table
s
[
table_type
].
count
)
{
if
(
instance
>
acpi_gbl_
table_list
s
[
table_type
].
count
)
{
return_ACPI_STATUS
(
AE_NOT_EXIST
);
}
...
...
@@ -478,7 +478,7 @@ acpi_tb_get_table_ptr (
* need to walk from the 2nd table until we reach the Instance
* that the user is looking for and return its table pointer.
*/
table_desc
=
acpi_gbl_
acpi_table
s
[
table_type
].
next
;
table_desc
=
acpi_gbl_
table_list
s
[
table_type
].
next
;
for
(
i
=
2
;
i
<
instance
;
i
++
)
{
table_desc
=
table_desc
->
next
;
}
...
...
drivers/acpi/tables/tbgetall.c
View file @
17d0e4f4
...
...
@@ -307,7 +307,7 @@ acpi_tb_get_required_tables (
/* Always delete the RSDP mapping, we are done with it */
acpi_tb_delete_
acpi_tabl
e
(
ACPI_TABLE_RSDP
);
acpi_tb_delete_
tables_by_typ
e
(
ACPI_TABLE_RSDP
);
return_ACPI_STATUS
(
status
);
}
...
...
drivers/acpi/tables/tbinstal.c
View file @
17d0e4f4
...
...
@@ -79,13 +79,13 @@ acpi_tb_match_signature (
/*
* Search for a signature match among the known table types
*/
for
(
i
=
0
;
i
<
NUM_ACPI_TABLES
;
i
++
)
{
if
(
!
(
acpi_gbl_
acpi_
table_data
[
i
].
flags
&
search_type
))
{
for
(
i
=
0
;
i
<
NUM_ACPI_TABLE
_TYPE
S
;
i
++
)
{
if
(
!
(
acpi_gbl_table_data
[
i
].
flags
&
search_type
))
{
continue
;
}
if
(
!
ACPI_STRNCMP
(
signature
,
acpi_gbl_
acpi_
table_data
[
i
].
signature
,
acpi_gbl_
acpi_
table_data
[
i
].
sig_length
))
{
if
(
!
ACPI_STRNCMP
(
signature
,
acpi_gbl_table_data
[
i
].
signature
,
acpi_gbl_table_data
[
i
].
sig_length
))
{
/* Found a signature match, return index if requested */
if
(
table_info
)
{
...
...
@@ -94,7 +94,7 @@ acpi_tb_match_signature (
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Table [%4.4s] is an ACPI table consumed by the core subsystem
\n
"
,
(
char
*
)
acpi_gbl_
acpi_
table_data
[
i
].
signature
));
(
char
*
)
acpi_gbl_table_data
[
i
].
signature
));
return_ACPI_STATUS
(
AE_OK
);
}
...
...
@@ -149,7 +149,7 @@ acpi_tb_install_table (
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"%s located at %p
\n
"
,
acpi_gbl_
acpi_
table_data
[
table_info
->
type
].
name
,
table_info
->
pointer
));
acpi_gbl_table_data
[
table_info
->
type
].
name
,
table_info
->
pointer
));
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
return_ACPI_STATUS
(
status
);
...
...
@@ -239,70 +239,58 @@ acpi_tb_init_table_descriptor (
acpi_table_type
table_type
,
struct
acpi_table_desc
*
table_info
)
{
struct
acpi_table_
desc
*
list_head
;
struct
acpi_table_
list
*
list_head
;
struct
acpi_table_desc
*
table_desc
;
ACPI_FUNCTION_TRACE_U32
(
"tb_init_table_descriptor"
,
table_type
);
/* Allocate a descriptor for this table */
table_desc
=
ACPI_MEM_CALLOCATE
(
sizeof
(
struct
acpi_table_desc
));
if
(
!
table_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/*
* Install the table into the global data structure
*/
list_head
=
&
acpi_gbl_acpi_tables
[
table_type
];
table_desc
=
list_head
;
list_head
=
&
acpi_gbl_table_lists
[
table_type
];
/*
* Two major types of tables: 1) Only one instance is allowed. This
* includes most ACPI tables such as the DSDT. 2) Multiple instances of
* the table are allowed. This includes SSDT and PSDTs.
*/
if
(
ACPI_IS_SINGLE_TABLE
(
acpi_gbl_
acpi_
table_data
[
table_type
].
flags
))
{
if
(
ACPI_IS_SINGLE_TABLE
(
acpi_gbl_table_data
[
table_type
].
flags
))
{
/*
* Only one table allowed, and a table has alread been installed
* at this location, so return an error.
*/
if
(
list_head
->
pointer
)
{
if
(
list_head
->
next
)
{
return_ACPI_STATUS
(
AE_ALREADY_EXISTS
);
}
table_desc
->
count
=
1
;
table_desc
->
prev
=
NULL
;
table_desc
->
next
=
NULL
;
}
else
{
/*
* Multiple tables allowed for this table type, we must link
* the new table in to the list of tables of this type.
* Link the new table in to the list of tables of this type.
* Just insert at the start of the list, order unimportant.
*
* table_desc->Prev is already NULL from calloc()
*/
if
(
list_head
->
pointer
)
{
table_desc
=
ACPI_MEM_CALLOCATE
(
sizeof
(
struct
acpi_table_desc
));
if
(
!
table_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
table_desc
->
next
=
list_head
->
next
;
list_head
->
next
=
table_desc
;
if
(
table_desc
->
next
)
{
table_desc
->
next
->
prev
=
table_desc
;
}
list_head
->
count
++
;
/* Update the original previous */
list_head
->
prev
->
next
=
table_desc
;
/* Update new entry */
/* Finish initialization of the table descriptor */
table_desc
->
prev
=
list_head
->
prev
;
table_desc
->
next
=
list_head
;
/* Update list head */
list_head
->
prev
=
table_desc
;
}
else
{
table_desc
->
count
=
1
;
}
}
/* Common initialization of the table descriptor */
table_desc
->
type
=
table_info
->
type
;
table_desc
->
type
=
(
u8
)
table_type
;
table_desc
->
pointer
=
table_info
->
pointer
;
table_desc
->
length
=
table_info
->
length
;
table_desc
->
allocation
=
table_info
->
allocation
;
...
...
@@ -316,8 +304,8 @@ acpi_tb_init_table_descriptor (
* Set the appropriate global pointer (if there is one) to point to the
* newly installed table
*/
if
(
acpi_gbl_
acpi_
table_data
[
table_type
].
global_ptr
)
{
*
(
acpi_gbl_
acpi_
table_data
[
table_type
].
global_ptr
)
=
table_info
->
pointer
;
if
(
acpi_gbl_table_data
[
table_type
].
global_ptr
)
{
*
(
acpi_gbl_table_data
[
table_type
].
global_ptr
)
=
table_info
->
pointer
;
}
/* Return Data */
...
...
@@ -331,7 +319,7 @@ acpi_tb_init_table_descriptor (
/*******************************************************************************
*
* FUNCTION: acpi_tb_delete_a
cpi
_tables
* FUNCTION: acpi_tb_delete_a
ll
_tables
*
* PARAMETERS: None.
*
...
...
@@ -342,7 +330,7 @@ acpi_tb_init_table_descriptor (
******************************************************************************/
void
acpi_tb_delete_a
cpi
_tables
(
void
)
acpi_tb_delete_a
ll
_tables
(
void
)
{
acpi_table_type
type
;
...
...
@@ -351,15 +339,15 @@ acpi_tb_delete_acpi_tables (void)
* Free memory allocated for ACPI tables
* Memory can either be mapped or allocated
*/
for
(
type
=
0
;
type
<
NUM_ACPI_TABLES
;
type
++
)
{
acpi_tb_delete_
acpi_tabl
e
(
type
);
for
(
type
=
0
;
type
<
NUM_ACPI_TABLE
_TYPE
S
;
type
++
)
{
acpi_tb_delete_
tables_by_typ
e
(
type
);
}
}
/*******************************************************************************
*
* FUNCTION: acpi_tb_delete_
acpi_tabl
e
* FUNCTION: acpi_tb_delete_
tables_by_typ
e
*
* PARAMETERS: Type - The table type to be deleted
*
...
...
@@ -371,11 +359,15 @@ acpi_tb_delete_acpi_tables (void)
******************************************************************************/
void
acpi_tb_delete_
acpi_tabl
e
(
acpi_tb_delete_
tables_by_typ
e
(
acpi_table_type
type
)
{
struct
acpi_table_desc
*
table_desc
;
u32
count
;
u32
i
;
ACPI_FUNCTION_TRACE_U32
(
"tb_delete_
acpi_tabl
e"
,
type
);
ACPI_FUNCTION_TRACE_U32
(
"tb_delete_
tables_by_typ
e"
,
type
);
if
(
type
>
ACPI_TABLE_MAX
)
{
...
...
@@ -416,43 +408,10 @@ acpi_tb_delete_acpi_table (
}
/* Free the table */
acpi_tb_free_acpi_tables_of_type
(
&
acpi_gbl_acpi_tables
[
type
]);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
return_VOID
;
}
/*******************************************************************************
*
* FUNCTION: acpi_tb_free_acpi_tables_of_type
*
* PARAMETERS: table_info - A table info struct
*
* RETURN: None.
*
* DESCRIPTION: Free the memory associated with an internal ACPI table
* Table mutex should be locked.
*
******************************************************************************/
void
acpi_tb_free_acpi_tables_of_type
(
struct
acpi_table_desc
*
list_head
)
{
struct
acpi_table_desc
*
table_desc
;
u32
count
;
u32
i
;
ACPI_FUNCTION_TRACE_PTR
(
"tb_free_acpi_tables_of_type"
,
list_head
);
/* Get the head of the list */
table_desc
=
list_head
;
count
=
list_head
->
count
;
table_desc
=
acpi_gbl_table_lists
[
type
].
next
;
count
=
acpi_gbl_table_lists
[
type
].
count
;
/*
* Walk the entire list, deleting both the allocated tables
...
...
@@ -462,6 +421,7 @@ acpi_tb_free_acpi_tables_of_type (
table_desc
=
acpi_tb_uninstall_table
(
table_desc
);
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
return_VOID
;
}
...
...
@@ -484,11 +444,13 @@ acpi_tb_delete_single_table (
struct
acpi_table_desc
*
table_desc
)
{
if
(
!
table_desc
)
{
/* Must have a valid table descriptor and pointer */
if
((
!
table_desc
)
||
(
!
table_desc
->
pointer
))
{
return
;
}
if
(
table_desc
->
pointer
)
{
/* Valid table, determine type of memory allocation */
switch
(
table_desc
->
allocation
)
{
...
...
@@ -508,7 +470,6 @@ acpi_tb_delete_single_table (
default:
break
;
}
}
}
...
...
@@ -533,18 +494,23 @@ acpi_tb_uninstall_table (
struct
acpi_table_desc
*
next_desc
;
ACPI_FUNCTION_TRACE_PTR
(
"
acpi_
tb_uninstall_table"
,
table_desc
);
ACPI_FUNCTION_TRACE_PTR
(
"tb_uninstall_table"
,
table_desc
);
if
(
!
table_desc
)
{
return_PTR
(
NULL
);
}
/* Unlink the descriptor */
/* Unlink the descriptor
from the doubly linked list
*/
if
(
table_desc
->
prev
)
{
table_desc
->
prev
->
next
=
table_desc
->
next
;
}
else
{
/* Is first on list, update list head */
acpi_gbl_table_lists
[
table_desc
->
type
].
next
=
table_desc
->
next
;
}
if
(
table_desc
->
next
)
{
table_desc
->
next
->
prev
=
table_desc
->
prev
;
...
...
@@ -554,23 +520,12 @@ acpi_tb_uninstall_table (
acpi_tb_delete_single_table
(
table_desc
);
/* Free the table descriptor (Don't delete the list head, tho) */
if
((
table_desc
->
prev
)
==
(
table_desc
->
next
))
{
next_desc
=
NULL
;
/* Clear the list head */
table_desc
->
pointer
=
NULL
;
table_desc
->
length
=
0
;
table_desc
->
count
=
0
;
}
else
{
/* Free the table descriptor */
next_desc
=
table_desc
->
next
;
ACPI_MEM_FREE
(
table_desc
);
}
/* Return pointer to the next descriptor */
return_PTR
(
next_desc
);
}
...
...
drivers/acpi/tables/tbutils.c
View file @
17d0e4f4
...
...
@@ -66,26 +66,25 @@
acpi_status
acpi_tb_handle_to_object
(
u16
table_id
,
struct
acpi_table_desc
**
table_desc
)
struct
acpi_table_desc
**
return_
table_desc
)
{
u32
i
;
struct
acpi_table_desc
*
list_head
;
struct
acpi_table_desc
*
table_desc
;
ACPI_FUNCTION_NAME
(
"tb_handle_to_object"
);
for
(
i
=
0
;
i
<
ACPI_TABLE_MAX
;
i
++
)
{
list_head
=
&
acpi_gbl_acpi_tables
[
i
]
;
do
{
if
(
list_head
->
table_id
==
table_id
)
{
*
table_desc
=
list_head
;
table_desc
=
acpi_gbl_table_lists
[
i
].
next
;
while
(
table_desc
)
{
if
(
table_desc
->
table_id
==
table_id
)
{
*
return_table_desc
=
table_desc
;
return
(
AE_OK
);
}
list_head
=
list_head
->
next
;
}
while
(
list_head
!=
&
acpi_gbl_acpi_tables
[
i
]);
table_desc
=
table_desc
->
next
;
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"table_id=%X does not exist
\n
"
,
table_id
));
...
...
drivers/acpi/tables/tbxface.c
View file @
17d0e4f4
...
...
@@ -235,7 +235,7 @@ acpi_status
acpi_unload_table
(
acpi_table_type
table_type
)
{
struct
acpi_table_desc
*
list_head
;
struct
acpi_table_desc
*
table_desc
;
ACPI_FUNCTION_TRACE
(
"acpi_unload_table"
);
...
...
@@ -250,22 +250,22 @@ acpi_unload_table (
/* Find all tables of the requested type */
list_head
=
&
acpi_gbl_acpi_tables
[
table_type
]
;
do
{
table_desc
=
acpi_gbl_table_lists
[
table_type
].
next
;
while
(
table_desc
);
{
/*
* Delete all namespace entries owned by this table. Note that these
* entries can appear anywhere in the namespace by virtue of the AML
* "Scope" operator. Thus, we need to track ownership by an ID, not
* simply a position within the hierarchy
*/
acpi_ns_delete_namespace_by_owner
(
list_head
->
table_id
);
acpi_ns_delete_namespace_by_owner
(
table_desc
->
table_id
);
/* Delete (or unmap) the actual table */
acpi_tb_delete_acpi_table
(
table_type
);
table_desc
=
table_desc
->
next
;
}
}
while
(
list_head
!=
&
acpi_gbl_acpi_tables
[
table_type
]);
/* Delete (or unmap) all tables of this type */
acpi_tb_delete_tables_by_type
(
table_type
);
return_ACPI_STATUS
(
AE_OK
);
}
...
...
@@ -313,7 +313,7 @@ acpi_get_table_header (
/* Check the table type and instance */
if
((
table_type
>
ACPI_TABLE_MAX
)
||
(
ACPI_IS_SINGLE_TABLE
(
acpi_gbl_
acpi_
table_data
[
table_type
].
flags
)
&&
(
ACPI_IS_SINGLE_TABLE
(
acpi_gbl_table_data
[
table_type
].
flags
)
&&
instance
>
1
))
{
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
...
...
@@ -394,7 +394,7 @@ acpi_get_table (
/* Check the table type and instance */
if
((
table_type
>
ACPI_TABLE_MAX
)
||
(
ACPI_IS_SINGLE_TABLE
(
acpi_gbl_
acpi_
table_data
[
table_type
].
flags
)
&&
(
ACPI_IS_SINGLE_TABLE
(
acpi_gbl_table_data
[
table_type
].
flags
)
&&
instance
>
1
))
{
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
...
...
drivers/acpi/toshiba_acpi.c
View file @
17d0e4f4
...
...
@@ -33,7 +33,7 @@
*
*/
#define TOSHIBA_ACPI_VERSION "0.1
4
"
#define TOSHIBA_ACPI_VERSION "0.1
5
"
#define PROC_INTERFACE_VERSION 1
#include <linux/kernel.h>
...
...
@@ -172,9 +172,7 @@ hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
for
(
i
=
0
;
i
<
HCI_WORDS
;
++
i
)
{
in_objs
[
i
].
type
=
ACPI_TYPE_INTEGER
;
in_objs
[
i
].
integer
.
value
=
in
[
i
];
/*printk("%04x ", in[i]);*/
}
/*printk("\n");*/
results
.
length
=
sizeof
(
out_objs
);
results
.
pointer
=
out_objs
;
...
...
@@ -184,9 +182,7 @@ hci_raw(const u32 in[HCI_WORDS], u32 out[HCI_WORDS])
if
((
status
==
AE_OK
)
&&
(
out_objs
->
package
.
count
<=
HCI_WORDS
))
{
for
(
i
=
0
;
i
<
out_objs
->
package
.
count
;
++
i
)
{
out
[
i
]
=
out_objs
->
package
.
elements
[
i
].
integer
.
value
;
/*printk("%04x ", out[i]);*/
}
/*printk("\n");*/
}
return
status
;
...
...
@@ -226,7 +222,7 @@ static int key_event_valid;
typedef
struct
_ProcItem
{
char
*
name
;
c
onst
c
har
*
name
;
char
*
(
*
read_func
)(
char
*
);
unsigned
long
(
*
write_func
)(
const
char
*
,
unsigned
long
);
}
ProcItem
;
...
...
@@ -284,10 +280,8 @@ static unsigned long
write_lcd
(
const
char
*
buffer
,
unsigned
long
count
)
{
int
value
;
/*int byte_count;*/
u32
hci_result
;
/* ISSUE: %i doesn't work with hex values as advertised */
if
(
snscanf
(
buffer
,
count
,
" brightness : %i"
,
&
value
)
==
1
&&
value
>=
0
&&
value
<
HCI_LCD_BRIGHTNESS_LEVELS
)
{
value
=
value
<<
HCI_LCD_BRIGHTNESS_SHIFT
;
...
...
@@ -414,6 +408,11 @@ read_keys(char* p)
last_key_event
=
value
;
}
else
if
(
hci_result
==
HCI_EMPTY
)
{
/* better luck next time */
}
else
if
(
hci_result
==
HCI_NOT_SUPPORTED
)
{
/* This is a workaround for an unresolved issue on
* some machines where system events sporadically
* become disabled. */
hci_write1
(
HCI_SYSTEM_EVENT
,
1
,
&
hci_result
);
}
else
{
p
+=
sprintf
(
p
,
"ERROR
\n
"
);
goto
end
;
...
...
drivers/acpi/utilities/utdelete.c
View file @
17d0e4f4
...
...
@@ -71,6 +71,7 @@ acpi_ut_delete_internal_obj (
void
*
obj_pointer
=
NULL
;
union
acpi_operand_object
*
handler_desc
;
union
acpi_operand_object
*
second_desc
;
union
acpi_operand_object
*
next_desc
;
ACPI_FUNCTION_TRACE_PTR
(
"ut_delete_internal_obj"
,
object
);
...
...
@@ -136,6 +137,15 @@ acpi_ut_delete_internal_obj (
if
(
object
->
device
.
gpe_block
)
{
(
void
)
acpi_ev_delete_gpe_block
(
object
->
device
.
gpe_block
);
}
/* Walk the handler list for this device */
handler_desc
=
object
->
device
.
address_space
;
while
(
handler_desc
)
{
next_desc
=
handler_desc
->
address_space
.
next
;
acpi_ut_remove_reference
(
handler_desc
);
handler_desc
=
next_desc
;
}
break
;
...
...
@@ -183,12 +193,15 @@ acpi_ut_delete_internal_obj (
* default handlers -- and therefore, we created the context object
* locally, it was not created by an external caller.
*/
handler_desc
=
object
->
region
.
addr
_handler
;
if
(
(
handler_desc
)
&&
(
handler_desc
->
addr_handler
.
hflags
==
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED
)
)
{
handler_desc
=
object
->
region
.
addr
ess_space
;
if
(
handler_desc
)
{
if
(
handler_desc
->
address_space
.
hflags
&
ACPI_ADDR_HANDLER_DEFAULT_INSTALLED
)
{
obj_pointer
=
second_desc
->
extra
.
region_context
;
}
acpi_ut_remove_reference
(
handler_desc
);
}
/* Now we can free the Extra object */
acpi_ut_delete_object_desc
(
second_desc
);
...
...
@@ -211,7 +224,6 @@ acpi_ut_delete_internal_obj (
break
;
}
/* Free any allocated memory (pointer within the object) found above */
if
(
obj_pointer
)
{
...
...
@@ -299,7 +311,7 @@ acpi_ut_update_ref_count (
new_count
=
count
;
/*
*
R
eference count action (increment, decrement, or force delete)
*
Perform the r
eference count action (increment, decrement, or force delete)
*/
switch
(
action
)
{
...
...
@@ -402,8 +414,6 @@ acpi_ut_update_object_reference (
{
acpi_status
status
;
u32
i
;
union
acpi_operand_object
*
next
;
union
acpi_operand_object
*
new
;
union
acpi_generic_state
*
state_list
=
NULL
;
union
acpi_generic_state
*
state
;
...
...
@@ -417,9 +427,8 @@ acpi_ut_update_object_reference (
return_ACPI_STATUS
(
AE_OK
);
}
/*
* Make sure that this isn't a namespace handle
*/
/* Make sure that this isn't a namespace handle */
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
object
)
==
ACPI_DESC_TYPE_NAMED
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Object %p is NS handle
\n
"
,
object
));
return_ACPI_STATUS
(
AE_OK
);
...
...
@@ -439,28 +448,8 @@ acpi_ut_update_object_reference (
switch
(
ACPI_GET_OBJECT_TYPE
(
object
))
{
case
ACPI_TYPE_DEVICE
:
status
=
acpi_ut_create_update_state_and_push
(
object
->
device
.
addr_handler
,
action
,
&
state_list
);
if
(
ACPI_FAILURE
(
status
))
{
goto
error_exit
;
}
acpi_ut_update_ref_count
(
object
->
device
.
sys_handler
,
action
);
acpi_ut_update_ref_count
(
object
->
device
.
drv_handler
,
action
);
break
;
case
ACPI_TYPE_LOCAL_ADDRESS_HANDLER
:
/* Must walk list of address handlers */
next
=
object
->
addr_handler
.
next
;
while
(
next
)
{
new
=
next
->
addr_handler
.
next
;
acpi_ut_update_ref_count
(
next
,
action
);
next
=
new
;
}
acpi_ut_update_ref_count
(
object
->
device
.
system_notify
,
action
);
acpi_ut_update_ref_count
(
object
->
device
.
device_notify
,
action
);
break
;
...
...
@@ -590,16 +579,14 @@ acpi_ut_add_reference (
ACPI_FUNCTION_TRACE_PTR
(
"ut_add_reference"
,
object
);
/*
* Ensure that we have a valid object
*/
/* Ensure that we have a valid object */
if
(
!
acpi_ut_valid_internal_object
(
object
))
{
return_VOID
;
}
/*
* We have a valid ACPI internal object, now increment the reference count
*/
/* Increment the reference count */
(
void
)
acpi_ut_update_object_reference
(
object
,
REF_INCREMENT
);
return_VOID
;
}
...
...
@@ -624,6 +611,7 @@ acpi_ut_remove_reference (
ACPI_FUNCTION_TRACE_PTR
(
"ut_remove_reference"
,
object
);
/*
* Allow a NULL pointer to be passed in, just ignore it. This saves
* each caller from having to check. Also, ignore NS nodes.
...
...
@@ -634,9 +622,8 @@ acpi_ut_remove_reference (
return_VOID
;
}
/*
* Ensure that we have a valid object
*/
/* Ensure that we have a valid object */
if
(
!
acpi_ut_valid_internal_object
(
object
))
{
return_VOID
;
}
...
...
drivers/acpi/utilities/utglobal.c
View file @
17d0e4f4
...
...
@@ -299,10 +299,10 @@ acpi_ut_hex_to_ascii_char (
******************************************************************************/
struct
acpi_table_
desc
acpi_gbl_acpi_tables
[
NUM_ACPI_TABL
ES
];
struct
acpi_table_
list
acpi_gbl_table_lists
[
NUM_ACPI_TABLE_TYP
ES
];
struct
acpi_table_support
acpi_gbl_
acpi_table_data
[
NUM_ACPI_TABL
ES
]
=
struct
acpi_table_support
acpi_gbl_
table_data
[
NUM_ACPI_TABLE_TYP
ES
]
=
{
/*********** Name, Signature, Global typed pointer Signature size, Type How many allowed?, Contains valid AML? */
...
...
@@ -535,12 +535,10 @@ acpi_ut_get_object_type_name (
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*
* Strings and procedures used for debug only
*/
/*****************************************************************************
*
* FUNCTION: acpi_ut_get_mutex_name
...
...
@@ -558,7 +556,7 @@ acpi_ut_get_mutex_name (
u32
mutex_id
)
{
if
(
mutex_id
>
MAX_M
T
X
)
if
(
mutex_id
>
MAX_M
UTE
X
)
{
return
(
"Invalid Mutex ID"
);
}
...
...
@@ -566,7 +564,6 @@ acpi_ut_get_mutex_name (
return
(
acpi_gbl_mutex_names
[
mutex_id
]);
}
#endif
...
...
@@ -630,9 +627,12 @@ acpi_ut_allocate_owner_id (
owner_id
=
acpi_gbl_next_table_owner_id
;
acpi_gbl_next_table_owner_id
++
;
/* Check for wraparound */
if
(
acpi_gbl_next_table_owner_id
==
ACPI_FIRST_METHOD_ID
)
{
acpi_gbl_next_table_owner_id
=
ACPI_FIRST_TABLE_ID
;
ACPI_REPORT_WARNING
((
"Table owner ID wraparound
\n
"
));
}
break
;
...
...
@@ -644,6 +644,8 @@ acpi_ut_allocate_owner_id (
if
(
acpi_gbl_next_method_owner_id
==
ACPI_FIRST_TABLE_ID
)
{
/* Check for wraparound */
acpi_gbl_next_method_owner_id
=
ACPI_FIRST_METHOD_ID
;
}
break
;
...
...
@@ -710,23 +712,19 @@ acpi_ut_init_globals (
/* ACPI table structure */
for
(
i
=
0
;
i
<
NUM_ACPI_TABLES
;
i
++
)
for
(
i
=
0
;
i
<
NUM_ACPI_TABLE
_TYPE
S
;
i
++
)
{
acpi_gbl_acpi_tables
[
i
].
prev
=
&
acpi_gbl_acpi_tables
[
i
];
acpi_gbl_acpi_tables
[
i
].
next
=
&
acpi_gbl_acpi_tables
[
i
];
acpi_gbl_acpi_tables
[
i
].
pointer
=
NULL
;
acpi_gbl_acpi_tables
[
i
].
length
=
0
;
acpi_gbl_acpi_tables
[
i
].
allocation
=
ACPI_MEM_NOT_ALLOCATED
;
acpi_gbl_acpi_tables
[
i
].
count
=
0
;
acpi_gbl_table_lists
[
i
].
next
=
NULL
;
acpi_gbl_table_lists
[
i
].
count
=
0
;
}
/* Mutex locked flags */
for
(
i
=
0
;
i
<
NUM_M
T
X
;
i
++
)
for
(
i
=
0
;
i
<
NUM_M
UTE
X
;
i
++
)
{
acpi_gbl_
acpi_mutex_info
[
i
].
mutex
=
NULL
;
acpi_gbl_
acpi_mutex_info
[
i
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
acpi_gbl_
acpi_mutex_info
[
i
].
use_count
=
0
;
acpi_gbl_
mutex_info
[
i
].
mutex
=
NULL
;
acpi_gbl_
mutex_info
[
i
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
acpi_gbl_
mutex_info
[
i
].
use_count
=
0
;
}
/* GPE support */
...
...
@@ -737,8 +735,8 @@ acpi_ut_init_globals (
/* Global notify handlers */
acpi_gbl_sys
_notify
.
handler
=
NULL
;
acpi_gbl_d
rv_notify
.
handler
=
NULL
;
acpi_gbl_sys
tem_notify
.
handler
=
NULL
;
acpi_gbl_d
evice_notify
.
handler
=
NULL
;
acpi_gbl_init_handler
=
NULL
;
/* Global "typed" ACPI table pointers */
...
...
drivers/acpi/utilities/utmisc.c
View file @
17d0e4f4
...
...
@@ -549,7 +549,7 @@ acpi_ut_mutex_initialize (
/*
* Create each of the predefined mutex objects
*/
for
(
i
=
0
;
i
<
NUM_M
T
X
;
i
++
)
{
for
(
i
=
0
;
i
<
NUM_M
UTE
X
;
i
++
)
{
status
=
acpi_ut_create_mutex
(
i
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
...
...
@@ -588,7 +588,7 @@ acpi_ut_mutex_terminate (
/*
* Delete each predefined mutex object
*/
for
(
i
=
0
;
i
<
NUM_M
T
X
;
i
++
)
{
for
(
i
=
0
;
i
<
NUM_M
UTE
X
;
i
++
)
{
(
void
)
acpi_ut_delete_mutex
(
i
);
}
...
...
@@ -619,15 +619,15 @@ acpi_ut_create_mutex (
ACPI_FUNCTION_TRACE_U32
(
"ut_create_mutex"
,
mutex_id
);
if
(
mutex_id
>
MAX_M
T
X
)
{
if
(
mutex_id
>
MAX_M
UTE
X
)
{
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
if
(
!
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
mutex
)
{
if
(
!
acpi_gbl_mutex_info
[
mutex_id
].
mutex
)
{
status
=
acpi_os_create_semaphore
(
1
,
1
,
&
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
mutex
);
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
use_count
=
0
;
&
acpi_gbl_mutex_info
[
mutex_id
].
mutex
);
acpi_gbl_mutex_info
[
mutex_id
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
acpi_gbl_mutex_info
[
mutex_id
].
use_count
=
0
;
}
return_ACPI_STATUS
(
status
);
...
...
@@ -656,14 +656,14 @@ acpi_ut_delete_mutex (
ACPI_FUNCTION_TRACE_U32
(
"ut_delete_mutex"
,
mutex_id
);
if
(
mutex_id
>
MAX_M
T
X
)
{
if
(
mutex_id
>
MAX_M
UTE
X
)
{
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
status
=
acpi_os_delete_semaphore
(
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
mutex
);
status
=
acpi_os_delete_semaphore
(
acpi_gbl_mutex_info
[
mutex_id
].
mutex
);
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
mutex
=
NULL
;
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
acpi_gbl_mutex_info
[
mutex_id
].
mutex
=
NULL
;
acpi_gbl_mutex_info
[
mutex_id
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
return_ACPI_STATUS
(
status
);
}
...
...
@@ -693,7 +693,7 @@ acpi_ut_acquire_mutex (
ACPI_FUNCTION_NAME
(
"ut_acquire_mutex"
);
if
(
mutex_id
>
MAX_M
T
X
)
{
if
(
mutex_id
>
MAX_M
UTE
X
)
{
return
(
AE_BAD_PARAMETER
);
}
...
...
@@ -705,8 +705,8 @@ acpi_ut_acquire_mutex (
* the mutex ordering rule. This indicates a coding error somewhere in
* the ACPI subsystem code.
*/
for
(
i
=
mutex_id
;
i
<
MAX_M
T
X
;
i
++
)
{
if
(
acpi_gbl_
acpi_
mutex_info
[
i
].
owner_id
==
this_thread_id
)
{
for
(
i
=
mutex_id
;
i
<
MAX_M
UTE
X
;
i
++
)
{
if
(
acpi_gbl_mutex_info
[
i
].
owner_id
==
this_thread_id
)
{
if
(
i
==
mutex_id
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Mutex [%s] already acquired by this thread [%X]
\n
"
,
...
...
@@ -728,14 +728,14 @@ acpi_ut_acquire_mutex (
"Thread %X attempting to acquire Mutex [%s]
\n
"
,
this_thread_id
,
acpi_ut_get_mutex_name
(
mutex_id
)));
status
=
acpi_os_wait_semaphore
(
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
mutex
,
status
=
acpi_os_wait_semaphore
(
acpi_gbl_mutex_info
[
mutex_id
].
mutex
,
1
,
ACPI_WAIT_FOREVER
);
if
(
ACPI_SUCCESS
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_MUTEX
,
"Thread %X acquired Mutex [%s]
\n
"
,
this_thread_id
,
acpi_ut_get_mutex_name
(
mutex_id
)));
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
use_count
++
;
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
owner_id
=
this_thread_id
;
acpi_gbl_mutex_info
[
mutex_id
].
use_count
++
;
acpi_gbl_mutex_info
[
mutex_id
].
owner_id
=
this_thread_id
;
}
else
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Thread %X could not acquire Mutex [%s] %s
\n
"
,
...
...
@@ -776,14 +776,14 @@ acpi_ut_release_mutex (
"Thread %X releasing Mutex [%s]
\n
"
,
this_thread_id
,
acpi_ut_get_mutex_name
(
mutex_id
)));
if
(
mutex_id
>
MAX_M
T
X
)
{
if
(
mutex_id
>
MAX_M
UTE
X
)
{
return
(
AE_BAD_PARAMETER
);
}
/*
* Mutex must be acquired in order to release it!
*/
if
(
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
owner_id
==
ACPI_MUTEX_NOT_ACQUIRED
)
{
if
(
acpi_gbl_mutex_info
[
mutex_id
].
owner_id
==
ACPI_MUTEX_NOT_ACQUIRED
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Mutex [%s] is not acquired, cannot release
\n
"
,
acpi_ut_get_mutex_name
(
mutex_id
)));
...
...
@@ -797,8 +797,8 @@ acpi_ut_release_mutex (
* ordering rule. This indicates a coding error somewhere in
* the ACPI subsystem code.
*/
for
(
i
=
mutex_id
;
i
<
MAX_M
T
X
;
i
++
)
{
if
(
acpi_gbl_
acpi_
mutex_info
[
i
].
owner_id
==
this_thread_id
)
{
for
(
i
=
mutex_id
;
i
<
MAX_M
UTE
X
;
i
++
)
{
if
(
acpi_gbl_mutex_info
[
i
].
owner_id
==
this_thread_id
)
{
if
(
i
==
mutex_id
)
{
continue
;
}
...
...
@@ -813,9 +813,9 @@ acpi_ut_release_mutex (
/* Mark unlocked FIRST */
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
acpi_gbl_mutex_info
[
mutex_id
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
status
=
acpi_os_signal_semaphore
(
acpi_gbl_
acpi_
mutex_info
[
mutex_id
].
mutex
,
1
);
status
=
acpi_os_signal_semaphore
(
acpi_gbl_mutex_info
[
mutex_id
].
mutex
,
1
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Thread %X could not release Mutex [%s] %s
\n
"
,
...
...
drivers/acpi/utilities/utxface.c
View file @
17d0e4f4
...
...
@@ -144,23 +144,9 @@ acpi_enable_subsystem (
ACPI_FUNCTION_TRACE
(
"acpi_enable_subsystem"
);
/*
* Install the default op_region handlers. These are installed unless
* other handlers have already been installed via the
* install_address_space_handler interface
*/
if
(
!
(
flags
&
ACPI_NO_ADDRESS_SPACE_INIT
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] Installing default address space handlers
\n
"
));
status
=
acpi_ev_init_address_spaces
();
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
/*
* We must initialize the hardware before we can enable ACPI.
*
FADT values
are validated here.
*
The values from the FADT
are validated here.
*/
if
(
!
(
flags
&
ACPI_NO_HARDWARE_INIT
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] Initializing ACPI hardware
\n
"
));
...
...
@@ -172,7 +158,7 @@ acpi_enable_subsystem (
}
/*
* Enable ACPI
on this platform
* Enable ACPI
mode
*/
if
(
!
(
flags
&
ACPI_NO_ACPI_ENABLE
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] Going into ACPI mode
\n
"
));
...
...
@@ -187,8 +173,9 @@ acpi_enable_subsystem (
}
/*
* Note:
* We must have the hardware AND events initialized before we can execute
* Initialize ACPI Event handling
*
* NOTE: We must have the hardware AND events initialized before we can execute
* ANY control methods SAFELY. Any control method can require ACPI hardware
* support, so the hardware MUST be initialized before execution!
*/
...
...
@@ -201,7 +188,7 @@ acpi_enable_subsystem (
}
}
/* Install
SCI handler, Global Lock handler,
GPE handlers */
/* Install
the SCI handler, Global Lock handler, and
GPE handlers */
if
(
!
(
flags
&
ACPI_NO_HANDLER_INIT
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] Installing SCI/GL/GPE handlers
\n
"
));
...
...
@@ -237,14 +224,20 @@ acpi_initialize_objects (
ACPI_FUNCTION_TRACE
(
"acpi_initialize_objects"
);
/*
* Initialize all device objects in the namespace
* This runs the _STA and _INI methods.
* Install the default op_region handlers. These are installed unless
* other handlers have already been installed via the
* install_address_space_handler interface.
*
* NOTE: This will cause _REG methods to be run. Any objects accessed
* by the _REG methods will be automatically initialized, even if they
* contain executable AML (see call to acpi_ns_initialize_objects below).
*/
if
(
!
(
flags
&
ACPI_NO_
DEVI
CE_INIT
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] In
itializing ACPI Device
s
\n
"
));
if
(
!
(
flags
&
ACPI_NO_
ADDRESS_SPA
CE_INIT
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] In
stalling default address space handler
s
\n
"
));
status
=
acpi_
ns_initialize_devi
ces
();
status
=
acpi_
ev_init_address_spa
ces
();
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -252,8 +245,8 @@ acpi_initialize_objects (
/*
* Initialize the objects that remain uninitialized. This
* runs the executable AML that
is part of the declaration of op_regions
*
and Field
s.
* runs the executable AML that
may be part of the declaration of these
*
objects: operation_regions, buffer_fields, Buffers, and Package
s.
*/
if
(
!
(
flags
&
ACPI_NO_OBJECT_INIT
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] Initializing ACPI Objects
\n
"
));
...
...
@@ -264,6 +257,19 @@ acpi_initialize_objects (
}
}
/*
* Initialize all device objects in the namespace
* This runs the _STA and _INI methods.
*/
if
(
!
(
flags
&
ACPI_NO_DEVICE_INIT
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[Init] Initializing ACPI Devices
\n
"
));
status
=
acpi_ns_initialize_devices
();
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
/*
* Empty the caches (delete the cached objects) on the assumption that
* the table load filled them up more than they will be at runtime --
...
...
@@ -431,9 +437,9 @@ acpi_get_system_info (
/* Current status of the ACPI tables, per table type */
info_ptr
->
num_table_types
=
NUM_ACPI_TABLES
;
for
(
i
=
0
;
i
<
NUM_ACPI_TABLES
;
i
++
)
{
info_ptr
->
table_info
[
i
].
count
=
acpi_gbl_
acpi_table
s
[
i
].
count
;
info_ptr
->
num_table_types
=
NUM_ACPI_TABLE
_TYPE
S
;
for
(
i
=
0
;
i
<
NUM_ACPI_TABLE
_TYPE
S
;
i
++
)
{
info_ptr
->
table_info
[
i
].
count
=
acpi_gbl_
table_list
s
[
i
].
count
;
}
return_ACPI_STATUS
(
AE_OK
);
...
...
include/acpi/acconfig.h
View file @
17d0e4f4
...
...
@@ -64,7 +64,7 @@
/* Version string */
#define ACPI_CA_VERSION 0x20030
418
#define ACPI_CA_VERSION 0x20030
509
/* Maximum objects in the various object caches */
...
...
include/acpi/acevents.h
View file @
17d0e4f4
...
...
@@ -165,7 +165,7 @@ acpi_ev_address_space_dispatch (
void
*
value
);
acpi_status
acpi_ev_
addr_handler_help
er
(
acpi_ev_
install_handl
er
(
acpi_handle
obj_handle
,
u32
level
,
void
*
context
,
...
...
include/acpi/acexcep.h
View file @
17d0e4f4
...
...
@@ -94,8 +94,9 @@
#define AE_NO_GLOBAL_LOCK (acpi_status) (0x001A | AE_CODE_ENVIRONMENTAL)
#define AE_LOGICAL_ADDRESS (acpi_status) (0x001B | AE_CODE_ENVIRONMENTAL)
#define AE_ABORT_METHOD (acpi_status) (0x001C | AE_CODE_ENVIRONMENTAL)
#define AE_SAME_HANDLER (acpi_status) (0x001D | AE_CODE_ENVIRONMENTAL)
#define AE_CODE_ENV_MAX 0x001
C
#define AE_CODE_ENV_MAX 0x001
D
/*
* Programmer exceptions
...
...
@@ -219,7 +220,8 @@ char const *acpi_gbl_exception_names_env[] =
"AE_NO_HARDWARE_RESPONSE"
,
"AE_NO_GLOBAL_LOCK"
,
"AE_LOGICAL_ADDRESS"
,
"AE_ABORT_METHOD"
"AE_ABORT_METHOD"
,
"AE_SAME_HANDLER"
};
char
const
*
acpi_gbl_exception_names_pgm
[]
=
...
...
include/acpi/acglobal.h
View file @
17d0e4f4
...
...
@@ -105,6 +105,8 @@ ACPI_EXTERN struct acpi_common_facs acpi_gbl_common_fACS;
*/
ACPI_EXTERN
u8
acpi_gbl_integer_bit_width
;
ACPI_EXTERN
u8
acpi_gbl_integer_byte_width
;
ACPI_EXTERN
struct
acpi_generic_address
acpi_gbl_xpm1a_enable
;
ACPI_EXTERN
struct
acpi_generic_address
acpi_gbl_xpm1b_enable
;
/*
* Since there may be multiple SSDTs and PSDTS, a single pointer is not
...
...
@@ -115,15 +117,15 @@ ACPI_EXTERN u8 acpi_gbl_integer_byte_width;
/*
* ACPI Table info arrays
*/
extern
struct
acpi_table_
desc
acpi_gbl_acpi_tables
[
NUM_ACPI_TABL
ES
];
extern
struct
acpi_table_support
acpi_gbl_
acpi_table_data
[
NUM_ACPI_TABL
ES
];
extern
struct
acpi_table_
list
acpi_gbl_table_lists
[
NUM_ACPI_TABLE_TYP
ES
];
extern
struct
acpi_table_support
acpi_gbl_
table_data
[
NUM_ACPI_TABLE_TYP
ES
];
/*
* Predefined mutex objects. This array contains the
* actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
* (The table maps local handles to the real OS handles)
*/
ACPI_EXTERN
struct
acpi_mutex_info
acpi_gbl_
acpi_mutex_info
[
NUM_MT
X
];
ACPI_EXTERN
struct
acpi_mutex_info
acpi_gbl_
mutex_info
[
NUM_MUTE
X
];
/*****************************************************************************
...
...
@@ -134,8 +136,8 @@ ACPI_EXTERN struct acpi_mutex_info acpi_gbl_acpi_mutex_info [NUM_MT
ACPI_EXTERN
struct
acpi_memory_list
acpi_gbl_memory_lists
[
ACPI_NUM_MEM_LISTS
];
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_d
rv
_notify
;
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_sys_notify
;
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_d
evice
_notify
;
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_sys
tem
_notify
;
ACPI_EXTERN
acpi_init_handler
acpi_gbl_init_handler
;
ACPI_EXTERN
struct
acpi_walk_state
*
acpi_gbl_breakpoint_walk
;
ACPI_EXTERN
acpi_handle
acpi_gbl_global_lock_semaphore
;
...
...
include/acpi/achware.h
View file @
17d0e4f4
...
...
@@ -98,15 +98,13 @@ acpi_status
acpi_hw_low_level_read
(
u32
width
,
u32
*
value
,
struct
acpi_generic_address
*
reg
,
u32
offset
);
struct
acpi_generic_address
*
reg
);
acpi_status
acpi_hw_low_level_write
(
u32
width
,
u32
value
,
struct
acpi_generic_address
*
reg
,
u32
offset
);
struct
acpi_generic_address
*
reg
);
acpi_status
acpi_hw_clear_acpi_status
(
...
...
include/acpi/aclocal.h
View file @
17d0e4f4
...
...
@@ -87,8 +87,8 @@ typedef u32 acpi_mutex_handle;
#define ACPI_MTX_DEBUG_CMD_COMPLETE 11
#define ACPI_MTX_DEBUG_CMD_READY 12
#define MAX_M
TX
12
#define NUM_M
TX MAX_MT
X+1
#define MAX_M
UTEX
12
#define NUM_M
UTEX MAX_MUTE
X+1
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
...
...
@@ -140,12 +140,8 @@ struct acpi_mutex_info
typedef
u16
acpi_owner_id
;
#define ACPI_OWNER_TYPE_TABLE 0x0
#define ACPI_OWNER_TYPE_METHOD 0x1
#define ACPI_FIRST_METHOD_ID 0x0000
#define ACPI_FIRST_TABLE_ID 0x8000
/* TBD: [Restructure] get rid of the need for this! */
#define TABLE_ID_DSDT (acpi_owner_id) 0x8000
#define ACPI_FIRST_METHOD_ID 0x0001
#define ACPI_FIRST_TABLE_ID 0xF000
/* Field access granularities */
...
...
@@ -232,13 +228,18 @@ struct acpi_table_desc
u64
physical_address
;
u32
aml_length
;
acpi_size
length
;
u32
count
;
acpi_owner_id
table_id
;
u8
type
;
u8
allocation
;
u8
loaded_into_namespace
;
};
struct
acpi_table_list
{
struct
acpi_table_desc
*
next
;
u32
count
;
};
struct
acpi_find_context
{
...
...
include/acpi/acmacros.h
View file @
17d0e4f4
...
...
@@ -440,26 +440,6 @@
#define INCREMENT_ARG_LIST(list) (list >>= ((u32) ARG_TYPE_WIDTH))
/*
* Build a GAS structure from earlier ACPI table entries (V1.0 and 0.71 extensions)
*
* 1) Address space
* 2) Length in bytes -- convert to length in bits
* 3) Bit offset is zero
* 4) Reserved field is zero
* 5) Expand address to 64 bits
*/
#define ASL_BUILD_GAS_FROM_ENTRY(a,b,c,d) do {a.address_space_id = (u8) d;\
a.register_bit_width = (u8) ACPI_MUL_8 (b);\
a.register_bit_offset = 0;\
a.reserved = 0;\
ACPI_STORE_ADDRESS (a.address,(acpi_physical_address) c);} while (0)
/* ACPI V1.0 entries -- address space is always I/O */
#define ASL_BUILD_GAS_FROM_V1_ENTRY(a,b,c) ASL_BUILD_GAS_FROM_ENTRY(a,b,c,ACPI_ADR_SPACE_SYSTEM_IO)
/*
* Reporting macros that are never compiled out
*/
...
...
include/acpi/acnamesp.h
View file @
17d0e4f4
...
...
@@ -201,6 +201,11 @@ acpi_ns_compare_names (
char
*
name1
,
char
*
name2
);
void
acpi_ns_remove_reference
(
struct
acpi_namespace_node
*
node
);
/*
* Namespace modification - nsmodify
*/
...
...
include/acpi/acobject.h
View file @
17d0e4f4
...
...
@@ -112,9 +112,9 @@
* Common fields for objects that support ASL notifications
*/
#define ACPI_COMMON_NOTIFY_INFO \
union acpi_operand_object *sys
_handler;
/* Handler for system notifies */
\
union acpi_operand_object *d
rv_handler;
/* Handler for driver notifies */
\
union acpi_operand_object *addr
_handler;
/* Handler for Address space */
union acpi_operand_object *sys
tem_notify;
/* Handler for system notifies */
\
union acpi_operand_object *d
evice_notify;
/* Handler for driver notifies */
\
union acpi_operand_object *addr
ess_space;
/* Handler for Address space */
/******************************************************************************
...
...
@@ -214,7 +214,7 @@ struct acpi_object_region
ACPI_OBJECT_COMMON_HEADER
u8
space_id
;
union
acpi_operand_object
*
addr
_handler
;
/* Handler for system notifie
s */
union
acpi_operand_object
*
addr
ess_space
;
/* Handler for region acces
s */
struct
acpi_namespace_node
*
node
;
/* containing object */
union
acpi_operand_object
*
next
;
u32
length
;
...
...
@@ -446,8 +446,8 @@ union acpi_operand_object
struct
acpi_object_buffer_field
buffer_field
;
struct
acpi_object_bank_field
bank_field
;
struct
acpi_object_index_field
index_field
;
struct
acpi_object_notify_handler
notify
_handler
;
struct
acpi_object_addr_handler
addr
_handler
;
struct
acpi_object_notify_handler
notify
;
struct
acpi_object_addr_handler
addr
ess_space
;
struct
acpi_object_reference
reference
;
struct
acpi_object_extra
extra
;
struct
acpi_object_data
data
;
...
...
include/acpi/acpiosxf.h
View file @
17d0e4f4
...
...
@@ -290,12 +290,12 @@ acpi_os_derive_pci_id(
u8
acpi_os_readable
(
void
*
pointer
,
u32
length
);
acpi_size
length
);
u8
acpi_os_writable
(
void
*
pointer
,
u32
length
);
acpi_size
length
);
u32
acpi_os_get_timer
(
...
...
include/acpi/actables.h
View file @
17d0e4f4
...
...
@@ -170,11 +170,11 @@ acpi_tb_init_table_descriptor (
*/
void
acpi_tb_delete_a
cpi
_tables
(
acpi_tb_delete_a
ll
_tables
(
void
);
void
acpi_tb_delete_
acpi_tabl
e
(
acpi_tb_delete_
tables_by_typ
e
(
acpi_table_type
type
);
void
...
...
@@ -185,10 +185,6 @@ struct acpi_table_desc *
acpi_tb_uninstall_table
(
struct
acpi_table_desc
*
table_desc
);
void
acpi_tb_free_acpi_tables_of_type
(
struct
acpi_table_desc
*
table_info
);
/*
* tbrsd - RSDP, RSDT utilities
...
...
include/acpi/actypes.h
View file @
17d0e4f4
...
...
@@ -407,7 +407,7 @@ typedef u32 acpi_table_type;
#define ACPI_TABLE_SSDT (acpi_table_type) 5
#define ACPI_TABLE_XSDT (acpi_table_type) 6
#define ACPI_TABLE_MAX 6
#define NUM_ACPI_TABLE
S
(ACPI_TABLE_MAX+1)
#define NUM_ACPI_TABLE
_TYPES
(ACPI_TABLE_MAX+1)
/*
...
...
@@ -747,7 +747,7 @@ struct acpi_system_info
u32
debug_level
;
u32
debug_layer
;
u32
num_table_types
;
struct
acpi_table_info
table_info
[
NUM_ACPI_TABLES
];
struct
acpi_table_info
table_info
[
NUM_ACPI_TABLE
_TYPE
S
];
};
...
...
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