Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
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