diff options
| -rw-r--r-- | drivers/acpi/namespace/nsxfobj.c | 44 | ||||
| -rw-r--r-- | drivers/acpi/tables/tbxface.c | 54 | ||||
| -rw-r--r-- | include/acpi/acpixf.h | 7 |
3 files changed, 102 insertions, 3 deletions
diff --git a/drivers/acpi/namespace/nsxfobj.c b/drivers/acpi/namespace/nsxfobj.c index a163e1d3708d..a18b1c223129 100644 --- a/drivers/acpi/namespace/nsxfobj.c +++ b/drivers/acpi/namespace/nsxfobj.c | |||
| @@ -50,6 +50,50 @@ ACPI_MODULE_NAME("nsxfobj") | |||
| 50 | 50 | ||
| 51 | /******************************************************************************* | 51 | /******************************************************************************* |
| 52 | * | 52 | * |
| 53 | * FUNCTION: acpi_get_id | ||
| 54 | * | ||
| 55 | * PARAMETERS: Handle - Handle of object whose id is desired | ||
| 56 | * ret_id - Where the id will be placed | ||
| 57 | * | ||
| 58 | * RETURN: Status | ||
| 59 | * | ||
| 60 | * DESCRIPTION: This routine returns the owner id associated with a handle | ||
| 61 | * | ||
| 62 | ******************************************************************************/ | ||
| 63 | acpi_status acpi_get_id(acpi_handle handle, acpi_owner_id * ret_id) | ||
| 64 | { | ||
| 65 | struct acpi_namespace_node *node; | ||
| 66 | acpi_status status; | ||
| 67 | |||
| 68 | /* Parameter Validation */ | ||
| 69 | |||
| 70 | if (!ret_id) { | ||
| 71 | return (AE_BAD_PARAMETER); | ||
| 72 | } | ||
| 73 | |||
| 74 | status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); | ||
| 75 | if (ACPI_FAILURE(status)) { | ||
| 76 | return (status); | ||
| 77 | } | ||
| 78 | |||
| 79 | /* Convert and validate the handle */ | ||
| 80 | |||
| 81 | node = acpi_ns_map_handle_to_node(handle); | ||
| 82 | if (!node) { | ||
| 83 | (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); | ||
| 84 | return (AE_BAD_PARAMETER); | ||
| 85 | } | ||
| 86 | |||
| 87 | *ret_id = node->owner_id; | ||
| 88 | |||
| 89 | status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); | ||
| 90 | return (status); | ||
| 91 | } | ||
| 92 | |||
| 93 | ACPI_EXPORT_SYMBOL(acpi_get_id) | ||
| 94 | |||
| 95 | /******************************************************************************* | ||
| 96 | * | ||
| 53 | * FUNCTION: acpi_get_type | 97 | * FUNCTION: acpi_get_type |
| 54 | * | 98 | * |
| 55 | * PARAMETERS: Handle - Handle of object whose type is desired | 99 | * PARAMETERS: Handle - Handle of object whose type is desired |
diff --git a/drivers/acpi/tables/tbxface.c b/drivers/acpi/tables/tbxface.c index 7767987be15a..5ba9303293ad 100644 --- a/drivers/acpi/tables/tbxface.c +++ b/drivers/acpi/tables/tbxface.c | |||
| @@ -123,7 +123,6 @@ acpi_status acpi_load_tables(void) | |||
| 123 | 123 | ||
| 124 | ACPI_EXPORT_SYMBOL(acpi_load_tables) | 124 | ACPI_EXPORT_SYMBOL(acpi_load_tables) |
| 125 | 125 | ||
| 126 | #ifdef ACPI_FUTURE_USAGE | ||
| 127 | /******************************************************************************* | 126 | /******************************************************************************* |
| 128 | * | 127 | * |
| 129 | * FUNCTION: acpi_load_table | 128 | * FUNCTION: acpi_load_table |
| @@ -221,6 +220,59 @@ ACPI_EXPORT_SYMBOL(acpi_load_table) | |||
| 221 | 220 | ||
| 222 | /******************************************************************************* | 221 | /******************************************************************************* |
| 223 | * | 222 | * |
| 223 | * FUNCTION: acpi_unload_table_id | ||
| 224 | * | ||
| 225 | * PARAMETERS: table_type - Type of table to be unloaded | ||
| 226 | * id - Owner ID of the table to be removed. | ||
| 227 | * | ||
| 228 | * RETURN: Status | ||
| 229 | * | ||
| 230 | * DESCRIPTION: This routine is used to force the unload of a table (by id) | ||
| 231 | * | ||
| 232 | ******************************************************************************/ | ||
| 233 | acpi_status acpi_unload_table_id(acpi_table_type table_type, acpi_owner_id id) | ||
| 234 | { | ||
| 235 | struct acpi_table_desc *table_desc; | ||
| 236 | acpi_status status; | ||
| 237 | |||
| 238 | ACPI_FUNCTION_TRACE(acpi_unload_table); | ||
| 239 | |||
| 240 | /* Parameter validation */ | ||
| 241 | if (table_type > ACPI_TABLE_ID_MAX) | ||
| 242 | return_ACPI_STATUS(AE_BAD_PARAMETER); | ||
| 243 | |||
| 244 | /* Find table from the requested type list */ | ||
| 245 | table_desc = acpi_gbl_table_lists[table_type].next; | ||
| 246 | while (table_desc && table_desc->owner_id != id) | ||
| 247 | table_desc = table_desc->next; | ||
| 248 | |||
| 249 | if (!table_desc) | ||
| 250 | return_ACPI_STATUS(AE_NOT_EXIST); | ||
| 251 | |||
| 252 | /* | ||
| 253 | * Delete all namespace objects owned by this table. Note that these | ||
| 254 | * objects can appear anywhere in the namespace by virtue of the AML | ||
| 255 | * "Scope" operator. Thus, we need to track ownership by an ID, not | ||
| 256 | * simply a position within the hierarchy | ||
| 257 | */ | ||
| 258 | acpi_ns_delete_namespace_by_owner(table_desc->owner_id); | ||
| 259 | |||
| 260 | status = acpi_ut_acquire_mutex(ACPI_MTX_TABLES); | ||
| 261 | if (ACPI_FAILURE(status)) | ||
| 262 | return_ACPI_STATUS(status); | ||
| 263 | |||
| 264 | (void)acpi_tb_uninstall_table(table_desc); | ||
| 265 | |||
| 266 | (void)acpi_ut_release_mutex(ACPI_MTX_TABLES); | ||
| 267 | |||
| 268 | return_ACPI_STATUS(AE_OK); | ||
| 269 | } | ||
| 270 | |||
| 271 | ACPI_EXPORT_SYMBOL(acpi_unload_table_id) | ||
| 272 | |||
| 273 | #ifdef ACPI_FUTURE_USAGE | ||
| 274 | /******************************************************************************* | ||
| 275 | * | ||
| 224 | * FUNCTION: acpi_unload_table | 276 | * FUNCTION: acpi_unload_table |
| 225 | * | 277 | * |
| 226 | * PARAMETERS: table_type - Type of table to be unloaded | 278 | * PARAMETERS: table_type - Type of table to be unloaded |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 049e9aa1b867..81458767a90e 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
| @@ -97,11 +97,12 @@ acpi_find_root_pointer(u32 flags, struct acpi_pointer *rsdp_address); | |||
| 97 | 97 | ||
| 98 | acpi_status acpi_load_tables(void); | 98 | acpi_status acpi_load_tables(void); |
| 99 | 99 | ||
| 100 | #ifdef ACPI_FUTURE_USAGE | ||
| 101 | acpi_status acpi_load_table(struct acpi_table_header *table_ptr); | 100 | acpi_status acpi_load_table(struct acpi_table_header *table_ptr); |
| 102 | 101 | ||
| 103 | acpi_status acpi_unload_table(acpi_table_type table_type); | 102 | acpi_status acpi_unload_table_id(acpi_table_type table_type, acpi_owner_id id); |
| 104 | 103 | ||
| 104 | #ifdef ACPI_FUTURE_USAGE | ||
| 105 | acpi_status acpi_unload_table(acpi_table_type table_type); | ||
| 105 | acpi_status | 106 | acpi_status |
| 106 | acpi_get_table_header(acpi_table_type table_type, | 107 | acpi_get_table_header(acpi_table_type table_type, |
| 107 | u32 instance, struct acpi_table_header *out_table_header); | 108 | u32 instance, struct acpi_table_header *out_table_header); |
| @@ -180,6 +181,8 @@ acpi_get_next_object(acpi_object_type type, | |||
| 180 | 181 | ||
| 181 | acpi_status acpi_get_type(acpi_handle object, acpi_object_type * out_type); | 182 | acpi_status acpi_get_type(acpi_handle object, acpi_object_type * out_type); |
| 182 | 183 | ||
| 184 | acpi_status acpi_get_id(acpi_handle object, acpi_owner_id * out_type); | ||
| 185 | |||
| 183 | acpi_status acpi_get_parent(acpi_handle object, acpi_handle * out_handle); | 186 | acpi_status acpi_get_parent(acpi_handle object, acpi_handle * out_handle); |
| 184 | 187 | ||
| 185 | /* | 188 | /* |
