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
5dfef799
Commit
5dfef799
authored
Nov 25, 2002
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
fe8e25c3
c5b0f11b
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
183 additions
and
92 deletions
+183
-92
drivers/acpi/dispatcher/dsmthdat.c
drivers/acpi/dispatcher/dsmthdat.c
+35
-14
drivers/acpi/events/evevent.c
drivers/acpi/events/evevent.c
+41
-37
drivers/acpi/events/evrgnini.c
drivers/acpi/events/evrgnini.c
+6
-1
drivers/acpi/include/acconfig.h
drivers/acpi/include/acconfig.h
+2
-2
drivers/acpi/include/aclocal.h
drivers/acpi/include/aclocal.h
+2
-3
drivers/acpi/include/acpiosxf.h
drivers/acpi/include/acpiosxf.h
+8
-0
drivers/acpi/osl.c
drivers/acpi/osl.c
+39
-0
drivers/acpi/parser/psopcode.c
drivers/acpi/parser/psopcode.c
+2
-2
drivers/acpi/utilities/utcopy.c
drivers/acpi/utilities/utcopy.c
+44
-20
drivers/acpi/utilities/utmisc.c
drivers/acpi/utilities/utmisc.c
+4
-13
No files found.
drivers/acpi/dispatcher/dsmthdat.c
View file @
5dfef799
/*******************************************************************************
*
* Module Name: dsmthdat - control method arguments and local variables
* $Revision: 6
4
$
* $Revision: 6
6
$
*
******************************************************************************/
...
...
@@ -28,6 +28,7 @@
#include "acdispat.h"
#include "amlcode.h"
#include "acnamesp.h"
#include "acinterp.h"
#define _COMPONENT ACPI_DISPATCHER
...
...
@@ -274,6 +275,7 @@ acpi_ds_method_data_get_node (
* RETURN: Status
*
* DESCRIPTION: Insert an object onto the method stack at entry Opcode:Index.
* Note: There is no "implicit conversion" for locals.
*
******************************************************************************/
...
...
@@ -286,11 +288,17 @@ acpi_ds_method_data_set_value (
{
acpi_status
status
;
acpi_namespace_node
*
node
;
acpi_operand_object
*
new_desc
=
object
;
ACPI_FUNCTION_TRACE
(
"Ds_method_data_set_value"
);
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"obj %p op %X, ref count = %d [%s]
\n
"
,
object
,
opcode
,
object
->
common
.
reference_count
,
acpi_ut_get_type_name
(
object
->
common
.
type
)));
/* Get the namespace node for the arg/local */
status
=
acpi_ds_method_data_get_node
(
opcode
,
index
,
walk_state
,
&
node
);
...
...
@@ -298,14 +306,30 @@ acpi_ds_method_data_set_value (
return_ACPI_STATUS
(
status
);
}
/* Increment ref count so object can't be deleted while installed */
/*
* If the object has just been created and is not attached to anything,
* (the reference count is 1), then we can just store it directly into
* the arg/local. Otherwise, we must copy it.
*/
if
(
object
->
common
.
reference_count
>
1
)
{
status
=
acpi_ut_copy_iobject_to_iobject
(
object
,
&
new_desc
,
walk_state
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
acpi_ut_add_reference
(
object
);
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Object Copied %p, new %p
\n
"
,
object
,
new_desc
));
}
else
{
/* Increment ref count so object can't be deleted while installed */
acpi_ut_add_reference
(
new_desc
);
}
/* Install the object
into the stack entry
*/
/* Install the object */
node
->
object
=
object
;
return_ACPI_STATUS
(
AE_OK
);
node
->
object
=
new_desc
;
return_ACPI_STATUS
(
status
);
}
...
...
@@ -560,7 +584,8 @@ acpi_ds_store_object_to_local (
current_obj_desc
=
acpi_ns_get_attached_object
(
node
);
if
(
current_obj_desc
==
obj_desc
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Obj=%p already installed!
\n
"
,
obj_desc
));
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Obj=%p already installed!
\n
"
,
obj_desc
));
return_ACPI_STATUS
(
status
);
}
...
...
@@ -609,16 +634,12 @@ acpi_ds_store_object_to_local (
"Arg (%p) is an Obj_ref(Node), storing in node %p
\n
"
,
obj_desc
,
current_obj_desc
));
/* Detach an existing object from the referenced Node */
acpi_ns_detach_object
(
current_obj_desc
->
reference
.
object
);
/*
* Store this object
in
to the Node
* Store this object to the Node
* (perform the indirect store)
*/
status
=
acpi_
ns_attach_object
(
current_obj_desc
->
reference
.
object
,
obj_desc
,
ACPI_GET_OBJECT_TYPE
(
obj_desc
)
);
status
=
acpi_
ex_store_object_to_node
(
obj_desc
,
current_obj_desc
->
reference
.
object
,
walk_state
);
return_ACPI_STATUS
(
status
);
}
}
...
...
drivers/acpi/events/evevent.c
View file @
5dfef799
/******************************************************************************
*
* Module Name: evevent - Fixed and General Purpose Even handling and dispatch
* $Revision: 9
6
$
* $Revision: 9
9
$
*
*****************************************************************************/
...
...
@@ -331,11 +331,8 @@ acpi_ev_gpe_initialize (void)
* FADT table contain zeros. The GPE0_LEN and GPE1_LEN do not need
* to be the same size."
*/
acpi_gbl_gpe_block_info
[
0
].
address_space_id
=
acpi_gbl_FADT
->
Xgpe0_blk
.
address_space_id
;
acpi_gbl_gpe_block_info
[
1
].
address_space_id
=
acpi_gbl_FADT
->
Xgpe1_blk
.
address_space_id
;
acpi_gbl_gpe_block_info
[
0
].
register_count
=
(
u16
)
ACPI_DIV_16
(
acpi_gbl_FADT
->
Xgpe0_blk
.
register_bit_width
);
acpi_gbl_gpe_block_info
[
1
].
register_count
=
(
u16
)
ACPI_DIV_16
(
acpi_gbl_FADT
->
Xgpe1_blk
.
register_bit_width
);
acpi_gbl_gpe_block_info
[
0
].
register_count
=
0
;
acpi_gbl_gpe_block_info
[
1
].
register_count
=
0
;
acpi_gbl_gpe_block_info
[
0
].
block_address
=
&
acpi_gbl_FADT
->
Xgpe0_blk
;
acpi_gbl_gpe_block_info
[
1
].
block_address
=
&
acpi_gbl_FADT
->
Xgpe1_blk
;
...
...
@@ -343,28 +340,25 @@ acpi_ev_gpe_initialize (void)
acpi_gbl_gpe_block_info
[
0
].
block_base_number
=
0
;
acpi_gbl_gpe_block_info
[
1
].
block_base_number
=
acpi_gbl_FADT
->
gpe1_base
;
/* Warn and exit if there are no GPE registers */
acpi_gbl_gpe_register_count
=
acpi_gbl_gpe_block_info
[
0
].
register_count
+
acpi_gbl_gpe_block_info
[
1
].
register_count
;
if
(
!
acpi_gbl_gpe_register_count
)
{
ACPI_REPORT_WARNING
((
"There are no GPE blocks defined in the FADT
\n
"
));
return_ACPI_STATUS
(
AE_OK
);
}
/*
* Determine the maximum GPE number for this machine.
* Note: both GPE0 and GPE1 are optional, and either can exist without
* the other
* the other.
* If EITHER the register length OR the block address are zero, then that
* particular block is not supported.
*/
if
(
acpi_gbl_
gpe_block_info
[
0
].
register_count
)
{
/* GPE block 0 exists */
if
(
acpi_gbl_
FADT
->
Xgpe0_blk
.
register_bit_width
&&
ACPI_GET_ADDRESS
(
acpi_gbl_FADT
->
Xgpe0_blk
.
address
)
)
{
/* GPE block 0 exists
(has length and address > 0)
*/
acpi_gbl_gpe_number_max
=
ACPI_MUL_8
(
acpi_gbl_gpe_block_info
[
0
].
register_count
)
-
1
;
acpi_gbl_gpe_block_info
[
0
].
register_count
=
(
u16
)
ACPI_DIV_16
(
acpi_gbl_FADT
->
Xgpe0_blk
.
register_bit_width
);
acpi_gbl_gpe_number_max
=
ACPI_MUL_8
(
acpi_gbl_gpe_block_info
[
0
].
register_count
)
-
1
;
}
if
(
acpi_gbl_gpe_block_info
[
1
].
register_count
)
{
/* GPE block 1 exists */
if
(
acpi_gbl_FADT
->
Xgpe1_blk
.
register_bit_width
&&
ACPI_GET_ADDRESS
(
acpi_gbl_FADT
->
Xgpe1_blk
.
address
))
{
/* GPE block 1 exists (has length and address > 0) */
acpi_gbl_gpe_block_info
[
1
].
register_count
=
(
u16
)
ACPI_DIV_16
(
acpi_gbl_FADT
->
Xgpe1_blk
.
register_bit_width
);
/* Check for GPE0/GPE1 overlap (if both banks exist) */
...
...
@@ -385,6 +379,15 @@ acpi_ev_gpe_initialize (void)
(
ACPI_MUL_8
(
acpi_gbl_gpe_block_info
[
1
].
register_count
)
-
1
);
}
/* Warn and exit if there are no GPE registers */
acpi_gbl_gpe_register_count
=
acpi_gbl_gpe_block_info
[
0
].
register_count
+
acpi_gbl_gpe_block_info
[
1
].
register_count
;
if
(
!
acpi_gbl_gpe_register_count
)
{
ACPI_REPORT_WARNING
((
"There are no GPE blocks defined in the FADT
\n
"
));
return_ACPI_STATUS
(
AE_OK
);
}
/* Check for Max GPE number out-of-range */
if
(
acpi_gbl_gpe_number_max
>
ACPI_GPE_MAX
)
{
...
...
@@ -460,8 +463,8 @@ acpi_ev_gpe_initialize (void)
+
i
+
acpi_gbl_gpe_block_info
[
gpe_block
].
register_count
));
gpe_register_info
->
status_address
.
address_space_id
=
acpi_gbl_gpe_block_info
[
gpe_block
].
address_space_id
;
gpe_register_info
->
enable_address
.
address_space_id
=
acpi_gbl_gpe_block_info
[
gpe_block
].
address_space_id
;
gpe_register_info
->
status_address
.
address_space_id
=
acpi_gbl_gpe_block_info
[
gpe_block
].
block_address
->
address_space_id
;
gpe_register_info
->
enable_address
.
address_space_id
=
acpi_gbl_gpe_block_info
[
gpe_block
].
block_address
->
address_space_id
;
gpe_register_info
->
status_address
.
register_bit_width
=
8
;
gpe_register_info
->
enable_address
.
register_bit_width
=
8
;
gpe_register_info
->
status_address
.
register_bit_offset
=
8
;
...
...
@@ -565,7 +568,7 @@ acpi_ev_save_method_info (
/* Extract the name from the object and convert to a string */
ACPI_MOVE_UNALIGNED32_TO_32
(
name
,
&
((
acpi_namespace_node
*
)
obj_handle
)
->
name
.
integer
);
&
((
acpi_namespace_node
*
)
obj_handle
)
->
name
.
integer
);
name
[
ACPI_NAME_SIZE
]
=
0
;
/*
...
...
@@ -614,8 +617,8 @@ acpi_ev_save_method_info (
* Now we can add this information to the Gpe_info block
* for use during dispatch of this GPE.
*/
acpi_gbl_gpe_number_info
[
gpe_number_index
].
type
=
type
;
acpi_gbl_gpe_number_info
[
gpe_number_index
].
method_
handle
=
obj_handle
;
acpi_gbl_gpe_number_info
[
gpe_number_index
].
type
=
type
;
acpi_gbl_gpe_number_info
[
gpe_number_index
].
method_
node
=
(
acpi_namespace_node
*
)
obj_handle
;
/*
* Enable the GPE (SCIs should be disabled at this point)
...
...
@@ -625,7 +628,7 @@ acpi_ev_save_method_info (
return
(
status
);
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Registered GPE method %s as GPE number %X
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Registered GPE method %s as GPE number %
2.2
X
\n
"
,
name
,
gpe_number
));
return
(
AE_OK
);
}
...
...
@@ -805,15 +808,16 @@ acpi_ev_asynch_execute_gpe_method (
return_VOID
;
}
if
(
gpe_info
.
method_
handl
e
)
{
if
(
gpe_info
.
method_
nod
e
)
{
/*
* Invoke the GPE Method (_Lxx, _Exx):
* (Evaluate the _Lxx/_Exx control method that corresponds to this GPE.)
*/
status
=
acpi_ns_evaluate_by_handle
(
gpe_info
.
method_
handl
e
,
NULL
,
NULL
);
status
=
acpi_ns_evaluate_by_handle
(
gpe_info
.
method_
nod
e
,
NULL
,
NULL
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_ERROR
((
"%s while evaluating GPE%X method
\n
"
,
acpi_format_exception
(
status
),
gpe_number
));
ACPI_REPORT_ERROR
((
"%s while evaluating method [%4.4s] for GPE[%2.2X]
\n
"
,
acpi_format_exception
(
status
),
gpe_info
.
method_node
->
name
.
ascii
,
gpe_number
));
}
}
...
...
@@ -881,7 +885,7 @@ acpi_ev_gpe_dispatch (
if
(
gpe_info
->
type
&
ACPI_EVENT_EDGE_TRIGGERED
)
{
status
=
acpi_hw_clear_gpe
(
gpe_number
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to clear GPE[%X]
\n
"
,
gpe_number
));
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to clear GPE[%
2.2
X]
\n
"
,
gpe_number
));
return_VALUE
(
ACPI_INTERRUPT_NOT_HANDLED
);
}
}
...
...
@@ -898,14 +902,14 @@ acpi_ev_gpe_dispatch (
gpe_info
->
handler
(
gpe_info
->
context
);
}
else
if
(
gpe_info
->
method_
handl
e
)
{
else
if
(
gpe_info
->
method_
nod
e
)
{
/*
* Disable GPE, so it doesn't keep firing before the method has a
* chance to run.
*/
status
=
acpi_hw_disable_gpe
(
gpe_number
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to disable GPE[%X]
\n
"
,
gpe_number
));
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to disable GPE[%
2.2
X]
\n
"
,
gpe_number
));
return_VALUE
(
ACPI_INTERRUPT_NOT_HANDLED
);
}
...
...
@@ -915,13 +919,13 @@ acpi_ev_gpe_dispatch (
if
(
ACPI_FAILURE
(
acpi_os_queue_for_execution
(
OSD_PRIORITY_GPE
,
acpi_ev_asynch_execute_gpe_method
,
ACPI_TO_POINTER
(
gpe_number
))))
{
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to queue handler for GPE[%X], event is disabled
\n
"
,
gpe_number
));
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to queue handler for GPE[%
2.2
X], event is disabled
\n
"
,
gpe_number
));
}
}
else
{
/* No handler or method to run! */
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: No handler or method for GPE[%X], disabling event
\n
"
,
gpe_number
));
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: No handler or method for GPE[%
2.2
X], disabling event
\n
"
,
gpe_number
));
/*
* Disable the GPE. The GPE will remain disabled until the ACPI
...
...
@@ -929,7 +933,7 @@ acpi_ev_gpe_dispatch (
*/
status
=
acpi_hw_disable_gpe
(
gpe_number
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to disable GPE[%X]
\n
"
,
gpe_number
));
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to disable GPE[%
2.2
X]
\n
"
,
gpe_number
));
return_VALUE
(
ACPI_INTERRUPT_NOT_HANDLED
);
}
}
...
...
@@ -940,7 +944,7 @@ acpi_ev_gpe_dispatch (
if
(
gpe_info
->
type
&
ACPI_EVENT_LEVEL_TRIGGERED
)
{
status
=
acpi_hw_clear_gpe
(
gpe_number
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to clear GPE[%X]
\n
"
,
gpe_number
));
ACPI_REPORT_ERROR
((
"Acpi_ev_gpe_dispatch: Unable to clear GPE[%
2.2
X]
\n
"
,
gpe_number
));
return_VALUE
(
ACPI_INTERRUPT_NOT_HANDLED
);
}
}
...
...
drivers/acpi/events/evrgnini.c
View file @
5dfef799
/******************************************************************************
*
* Module Name: evrgnini- ACPI Address_space (Op_region) init
* $Revision: 6
3
$
* $Revision: 6
4
$
*
*****************************************************************************/
...
...
@@ -269,6 +269,11 @@ acpi_ev_pci_config_region_setup (
pci_id
->
bus
=
ACPI_LOWORD
(
temp
);
}
/*
* Complete this device's Pci_id
*/
acpi_os_derive_pci_id
(
node
,
region_obj
->
region
.
node
,
&
pci_id
);
*
region_context
=
pci_id
;
return_ACPI_STATUS
(
AE_OK
);
}
...
...
drivers/acpi/include/acconfig.h
View file @
5dfef799
/******************************************************************************
*
* Name: acconfig.h - Global configuration constants
* $Revision: 11
8
$
* $Revision: 11
9
$
*
*****************************************************************************/
...
...
@@ -54,7 +54,7 @@
/* Version string */
#define ACPI_CA_VERSION 0x200211
15
#define ACPI_CA_VERSION 0x200211
22
/* Version of ACPI supported */
...
...
drivers/acpi/include/aclocal.h
View file @
5dfef799
/******************************************************************************
*
* Name: aclocal.h - Internal data types used across the ACPI subsystem
* $Revision: 1
79
$
* $Revision: 1
81
$
*
*****************************************************************************/
...
...
@@ -301,7 +301,6 @@ typedef struct
typedef
struct
{
u8
address_space_id
;
acpi_generic_address
*
block_address
;
u16
register_count
;
u8
block_base_number
;
...
...
@@ -330,7 +329,7 @@ typedef struct
typedef
struct
{
acpi_
handle
method_handle
;
/* Method handle for direct (fast) execution
*/
acpi_
namespace_node
*
method_node
;
/* Method node for this GPE level
*/
acpi_gpe_handler
handler
;
/* Address of handler, if any */
void
*
context
;
/* Context to be passed to handler */
u8
type
;
/* Level or Edge */
...
...
drivers/acpi/include/acpiosxf.h
View file @
5dfef799
...
...
@@ -246,6 +246,14 @@ acpi_os_write_pci_configuration (
acpi_integer
value
,
u32
width
);
/*
* Interim function needed for PCI IRQ routing
*/
void
acpi_os_derive_pci_id
(
acpi_handle
rhandle
,
acpi_handle
chandle
,
acpi_pci_id
**
pci_id
);
/*
* Miscellaneous
...
...
drivers/acpi/osl.c
View file @
5dfef799
...
...
@@ -36,6 +36,7 @@
#include <linux/delay.h>
#include <linux/workqueue.h>
#include <asm/io.h>
#include "acpi_bus.h"
#include "acpi.h"
#ifdef CONFIG_ACPI_EFI
...
...
@@ -483,6 +484,44 @@ acpi_os_write_pci_configuration (
return
(
result
?
AE_ERROR
:
AE_OK
);
}
/* TODO: Rewrite this code!!! */
void
acpi_os_derive_pci_id
(
acpi_handle
rhandle
,
/* upper bound */
acpi_handle
chandle
,
/* current node */
acpi_pci_id
**
id
)
{
acpi_handle
handle
;
acpi_pci_id
*
pci_id
=
*
id
;
acpi_status
status
;
unsigned
long
temp
;
acpi_object_type
type
;
u8
tu8
;
acpi_get_parent
(
chandle
,
&
handle
);
if
(
handle
!=
rhandle
)
{
acpi_os_derive_pci_id
(
rhandle
,
handle
,
&
pci_id
);
status
=
acpi_get_type
(
handle
,
&
type
);
if
(
(
ACPI_FAILURE
(
status
))
||
(
type
!=
ACPI_TYPE_DEVICE
)
)
return
;
status
=
acpi_evaluate_integer
(
handle
,
METHOD_NAME__ADR
,
NULL
,
&
temp
);
if
(
ACPI_SUCCESS
(
status
))
{
pci_id
->
device
=
ACPI_HIWORD
(
ACPI_LODWORD
(
temp
));
pci_id
->
function
=
ACPI_LOWORD
(
ACPI_LODWORD
(
temp
));
/* any nicer way to get bus number of bridge ? */
status
=
acpi_os_read_pci_configuration
(
pci_id
,
0x0e
,
&
tu8
,
8
);
if
(
ACPI_SUCCESS
(
status
)
&&
(
tu8
&
0x7f
)
==
1
)
{
status
=
acpi_os_read_pci_configuration
(
pci_id
,
0x19
,
&
tu8
,
8
);
if
(
ACPI_SUCCESS
(
status
))
pci_id
->
bus
=
tu8
;
}
}
}
}
#else
/*!CONFIG_ACPI_PCI*/
acpi_status
...
...
drivers/acpi/parser/psopcode.c
View file @
5dfef799
/******************************************************************************
*
* Module Name: psopcode - Parser/Interpreter opcode information table
* $Revision: 7
3
$
* $Revision: 7
4
$
*
*****************************************************************************/
...
...
@@ -734,7 +734,7 @@ NATIVE_CHAR *
acpi_ps_get_opcode_name
(
u16
opcode
)
{
#if
def ACPI_DISASSEMBLER
#if
defined(ACPI_DISASSEMBLER) || defined (ACPI_DEBUG_OUTPUT)
const
acpi_opcode_info
*
op
;
...
...
drivers/acpi/utilities/utcopy.c
View file @
5dfef799
/******************************************************************************
*
* Module Name: utcopy - Internal to external object translation utilities
* $Revision: 10
5
$
* $Revision: 10
6
$
*
*****************************************************************************/
...
...
@@ -419,7 +419,8 @@ acpi_ut_copy_esimple_to_isimple (
case
ACPI_TYPE_STRING
:
internal_object
->
string
.
pointer
=
ACPI_MEM_CALLOCATE
((
ACPI_SIZE
)
external_object
->
string
.
length
+
1
);
internal_object
->
string
.
pointer
=
ACPI_MEM_CALLOCATE
((
ACPI_SIZE
)
external_object
->
string
.
length
+
1
);
if
(
!
internal_object
->
string
.
pointer
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -434,7 +435,8 @@ acpi_ut_copy_esimple_to_isimple (
case
ACPI_TYPE_BUFFER
:
internal_object
->
buffer
.
pointer
=
ACPI_MEM_CALLOCATE
(
external_object
->
buffer
.
length
);
internal_object
->
buffer
.
pointer
=
ACPI_MEM_CALLOCATE
(
external_object
->
buffer
.
length
);
if
(
!
internal_object
->
buffer
.
pointer
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -471,10 +473,10 @@ acpi_ut_copy_esimple_to_isimple (
* FUNCTION: Acpi_ut_copy_epackage_to_ipackage
*
* PARAMETERS: *Internal_object - Pointer to the object we are returning
* *Buffer - Where the object is returned
* *Space_used - Where the length of the object is returned
* *Buffer
- Where the object is returned
* *Space_used
- Where the length of the object is returned
*
* RETURN: Status
- the status of the call
* RETURN: Status
*
* DESCRIPTION: This function is called to place a package object in a user
* buffer. A package object by definition contains other objects.
...
...
@@ -607,7 +609,8 @@ acpi_ut_copy_simple_object (
/* Copy the entire source object over the destination object*/
ACPI_MEMCPY
((
char
*
)
dest_desc
,
(
char
*
)
source_desc
,
sizeof
(
acpi_operand_object
));
ACPI_MEMCPY
((
char
*
)
dest_desc
,
(
char
*
)
source_desc
,
sizeof
(
acpi_operand_object
));
/* Restore the saved fields */
...
...
@@ -687,26 +690,36 @@ acpi_ut_copy_ielement_to_ielement (
&
state
->
pkg
.
dest_object
->
package
.
elements
[
this_index
];
switch
(
object_type
)
{
case
0
:
case
ACPI_COPY_TYPE_SIMPLE
:
/*
* This is a simple object, just copy it
*/
target_object
=
acpi_ut_create_internal_object
(
ACPI_GET_OBJECT_TYPE
(
source_object
));
if
(
!
target_object
)
{
return
(
AE_NO_MEMORY
);
}
/* A null source object indicates a (legal) null package element */
status
=
acpi_ut_copy_simple_object
(
source_object
,
target_object
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
if
(
source_object
)
{
/*
* This is a simple object, just copy it
*/
target_object
=
acpi_ut_create_internal_object
(
ACPI_GET_OBJECT_TYPE
(
source_object
));
if
(
!
target_object
)
{
return
(
AE_NO_MEMORY
);
}
status
=
acpi_ut_copy_simple_object
(
source_object
,
target_object
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
*
this_target_ptr
=
target_object
;
}
else
{
/* Pass through a null element */
*
this_target_ptr
=
target_object
;
*
this_target_ptr
=
NULL
;
}
break
;
case
1
:
case
ACPI_COPY_TYPE_PACKAGE
:
/*
* This object is a package - go down another nesting level
...
...
@@ -720,6 +733,17 @@ acpi_ut_copy_ielement_to_ielement (
target_object
->
package
.
count
=
source_object
->
package
.
count
;
target_object
->
common
.
flags
=
source_object
->
common
.
flags
;
/*
* Create the object array
*/
target_object
->
package
.
elements
=
ACPI_MEM_CALLOCATE
(((
ACPI_SIZE
)
source_object
->
package
.
count
+
1
)
*
sizeof
(
void
*
));
if
(
!
target_object
->
package
.
elements
)
{
ACPI_MEM_FREE
(
target_object
);
return
(
AE_NO_MEMORY
);
}
/*
* Pass the new package object back to the package walk routine
*/
...
...
drivers/acpi/utilities/utmisc.c
View file @
5dfef799
/*******************************************************************************
*
* Module Name: utmisc - common utility procedures
* $Revision: 8
6
$
* $Revision: 8
7
$
*
******************************************************************************/
...
...
@@ -475,7 +475,6 @@ acpi_ut_strupr (
string
++
;
}
return
(
src_string
);
}
...
...
@@ -575,7 +574,6 @@ acpi_ut_create_mutex (
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
if
(
!
acpi_gbl_acpi_mutex_info
[
mutex_id
].
mutex
)
{
status
=
acpi_os_create_semaphore
(
1
,
1
,
&
acpi_gbl_acpi_mutex_info
[
mutex_id
].
mutex
);
...
...
@@ -613,7 +611,6 @@ acpi_ut_delete_mutex (
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
status
=
acpi_os_delete_semaphore
(
acpi_gbl_acpi_mutex_info
[
mutex_id
].
mutex
);
acpi_gbl_acpi_mutex_info
[
mutex_id
].
mutex
=
NULL
;
...
...
@@ -651,7 +648,6 @@ acpi_ut_acquire_mutex (
return
(
AE_BAD_PARAMETER
);
}
this_thread_id
=
acpi_os_get_thread_id
();
/*
...
...
@@ -679,7 +675,6 @@ acpi_ut_acquire_mutex (
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_MUTEX
,
"Thread %X attempting to acquire Mutex [%s]
\n
"
,
this_thread_id
,
acpi_ut_get_mutex_name
(
mutex_id
)));
...
...
@@ -693,7 +688,6 @@ acpi_ut_acquire_mutex (
acpi_gbl_acpi_mutex_info
[
mutex_id
].
use_count
++
;
acpi_gbl_acpi_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
"
,
this_thread_id
,
acpi_ut_get_mutex_name
(
mutex_id
),
...
...
@@ -737,7 +731,6 @@ acpi_ut_release_mutex (
return
(
AE_BAD_PARAMETER
);
}
/*
* Mutex must be acquired in order to release it!
*/
...
...
@@ -749,7 +742,6 @@ acpi_ut_release_mutex (
return
(
AE_NOT_ACQUIRED
);
}
/*
* Deadlock prevention. Check if this thread owns any mutexes of value
* greater than this one. If so, the thread has violated the mutex
...
...
@@ -770,7 +762,6 @@ acpi_ut_release_mutex (
}
}
/* Mark unlocked FIRST */
acpi_gbl_acpi_mutex_info
[
mutex_id
].
owner_id
=
ACPI_MUTEX_NOT_ACQUIRED
;
...
...
@@ -828,7 +819,6 @@ acpi_ut_create_update_state_and_push (
return
(
AE_NO_MEMORY
);
}
acpi_ut_push_generic_state
(
state_list
,
state
);
return
(
AE_OK
);
}
...
...
@@ -866,7 +856,6 @@ acpi_ut_create_pkg_state_and_push (
return
(
AE_NO_MEMORY
);
}
acpi_ut_push_generic_state
(
state_list
,
state
);
return
(
AE_OK
);
}
...
...
@@ -1129,7 +1118,6 @@ acpi_ut_create_control_state (
return_PTR
(
NULL
);
}
/* Init fields specific to the control struct */
state
->
common
.
data_type
=
ACPI_DESC_TYPE_STATE_CONTROL
;
...
...
@@ -1224,6 +1212,8 @@ acpi_ut_walk_package_tree (
}
while
(
state
)
{
/* Get one element of the package */
this_index
=
state
->
pkg
.
index
;
this_source_obj
=
(
acpi_operand_object
*
)
state
->
pkg
.
source_object
->
package
.
elements
[
this_index
];
...
...
@@ -1324,6 +1314,7 @@ acpi_ut_generate_checksum (
u32
i
;
signed
char
sum
=
0
;
for
(
i
=
0
;
i
<
length
;
i
++
)
{
sum
=
(
signed
char
)
(
sum
+
buffer
[
i
]);
}
...
...
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