diff options
author | Bob Moore <robert.moore@intel.com> | 2007-02-02 11:48:18 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2007-02-02 21:14:21 -0500 |
commit | f3d2e7865c816258c699ff965768e46b50d536d3 (patch) | |
tree | 83d21269e506109275b77d3ed161883bba8a39cf /drivers/acpi/dispatcher | |
parent | 2e42005bcdb4f63bed1cea7f537a5534d4bd7a57 (diff) |
ACPICA: Implement simplified Table Manager
The Table Manager component has been completely
redesigned and reimplemented. The new design is much
simpler, and reduces the overall code and data size of
the kernel-resident ACPICA by approximately 5%. Also,
it is now possible to obtain the ACPI tables very early
during kernel initialization, even before dynamic memory
management is initialized.
Signed-off-by: Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/dispatcher')
-rw-r--r-- | drivers/acpi/dispatcher/dsinit.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/acpi/dispatcher/dsinit.c b/drivers/acpi/dispatcher/dsinit.c index 1888c055d10f..9db09de0073a 100644 --- a/drivers/acpi/dispatcher/dsinit.c +++ b/drivers/acpi/dispatcher/dsinit.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <acpi/acpi.h> | 44 | #include <acpi/acpi.h> |
45 | #include <acpi/acdispat.h> | 45 | #include <acpi/acdispat.h> |
46 | #include <acpi/acnamesp.h> | 46 | #include <acpi/acnamesp.h> |
47 | #include <acpi/actables.h> | ||
47 | 48 | ||
48 | #define _COMPONENT ACPI_DISPATCHER | 49 | #define _COMPONENT ACPI_DISPATCHER |
49 | ACPI_MODULE_NAME("dsinit") | 50 | ACPI_MODULE_NAME("dsinit") |
@@ -90,7 +91,7 @@ acpi_ds_init_one_object(acpi_handle obj_handle, | |||
90 | * We are only interested in NS nodes owned by the table that | 91 | * We are only interested in NS nodes owned by the table that |
91 | * was just loaded | 92 | * was just loaded |
92 | */ | 93 | */ |
93 | if (node->owner_id != info->table_desc->owner_id) { | 94 | if (node->owner_id != info->owner_id) { |
94 | return (AE_OK); | 95 | return (AE_OK); |
95 | } | 96 | } |
96 | 97 | ||
@@ -150,14 +151,21 @@ acpi_ds_init_one_object(acpi_handle obj_handle, | |||
150 | ******************************************************************************/ | 151 | ******************************************************************************/ |
151 | 152 | ||
152 | acpi_status | 153 | acpi_status |
153 | acpi_ds_initialize_objects(struct acpi_table_desc * table_desc, | 154 | acpi_ds_initialize_objects(acpi_native_uint table_index, |
154 | struct acpi_namespace_node * start_node) | 155 | struct acpi_namespace_node * start_node) |
155 | { | 156 | { |
156 | acpi_status status; | 157 | acpi_status status; |
157 | struct acpi_init_walk_info info; | 158 | struct acpi_init_walk_info info; |
159 | struct acpi_table_header *table; | ||
160 | acpi_owner_id owner_id; | ||
158 | 161 | ||
159 | ACPI_FUNCTION_TRACE(ds_initialize_objects); | 162 | ACPI_FUNCTION_TRACE(ds_initialize_objects); |
160 | 163 | ||
164 | status = acpi_tb_get_owner_id(table_index, &owner_id); | ||
165 | if (ACPI_FAILURE(status)) { | ||
166 | return_ACPI_STATUS(status); | ||
167 | } | ||
168 | |||
161 | ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, | 169 | ACPI_DEBUG_PRINT((ACPI_DB_DISPATCH, |
162 | "**** Starting initialization of namespace objects ****\n")); | 170 | "**** Starting initialization of namespace objects ****\n")); |
163 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "Parsing all Control Methods:")); | 171 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, "Parsing all Control Methods:")); |
@@ -166,7 +174,8 @@ acpi_ds_initialize_objects(struct acpi_table_desc * table_desc, | |||
166 | info.op_region_count = 0; | 174 | info.op_region_count = 0; |
167 | info.object_count = 0; | 175 | info.object_count = 0; |
168 | info.device_count = 0; | 176 | info.device_count = 0; |
169 | info.table_desc = table_desc; | 177 | info.table_index = table_index; |
178 | info.owner_id = owner_id; | ||
170 | 179 | ||
171 | /* Walk entire namespace from the supplied root */ | 180 | /* Walk entire namespace from the supplied root */ |
172 | 181 | ||
@@ -176,10 +185,14 @@ acpi_ds_initialize_objects(struct acpi_table_desc * table_desc, | |||
176 | ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace")); | 185 | ACPI_EXCEPTION((AE_INFO, status, "During WalkNamespace")); |
177 | } | 186 | } |
178 | 187 | ||
188 | status = acpi_get_table_by_index(table_index, &table); | ||
189 | if (ACPI_FAILURE(status)) { | ||
190 | return_ACPI_STATUS(status); | ||
191 | } | ||
192 | |||
179 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, | 193 | ACPI_DEBUG_PRINT_RAW((ACPI_DB_INIT, |
180 | "\nTable [%4.4s](id %4.4X) - %hd Objects with %hd Devices %hd Methods %hd Regions\n", | 194 | "\nTable [%4.4s](id %4.4X) - %hd Objects with %hd Devices %hd Methods %hd Regions\n", |
181 | table_desc->pointer->signature, | 195 | table->signature, owner_id, info.object_count, |
182 | table_desc->owner_id, info.object_count, | ||
183 | info.device_count, info.method_count, | 196 | info.device_count, info.method_count, |
184 | info.op_region_count)); | 197 | info.op_region_count)); |
185 | 198 | ||