diff options
Diffstat (limited to 'drivers/acpi/events/evxfevnt.c')
| -rw-r--r-- | drivers/acpi/events/evxfevnt.c | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/drivers/acpi/events/evxfevnt.c b/drivers/acpi/events/evxfevnt.c index 73bfd6bf962..41554f736b6 100644 --- a/drivers/acpi/events/evxfevnt.c +++ b/drivers/acpi/events/evxfevnt.c | |||
| @@ -248,21 +248,15 @@ ACPI_EXPORT_SYMBOL(acpi_set_gpe_type) | |||
| 248 | * DESCRIPTION: Enable an ACPI event (general purpose) | 248 | * DESCRIPTION: Enable an ACPI event (general purpose) |
| 249 | * | 249 | * |
| 250 | ******************************************************************************/ | 250 | ******************************************************************************/ |
| 251 | acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags) | 251 | acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number) |
| 252 | { | 252 | { |
| 253 | acpi_status status = AE_OK; | 253 | acpi_status status = AE_OK; |
| 254 | acpi_cpu_flags flags; | ||
| 254 | struct acpi_gpe_event_info *gpe_event_info; | 255 | struct acpi_gpe_event_info *gpe_event_info; |
| 255 | 256 | ||
| 256 | ACPI_FUNCTION_TRACE(acpi_enable_gpe); | 257 | ACPI_FUNCTION_TRACE(acpi_enable_gpe); |
| 257 | 258 | ||
| 258 | /* Use semaphore lock if not executing at interrupt level */ | 259 | flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); |
| 259 | |||
| 260 | if (flags & ACPI_NOT_ISR) { | ||
| 261 | status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); | ||
| 262 | if (ACPI_FAILURE(status)) { | ||
| 263 | return_ACPI_STATUS(status); | ||
| 264 | } | ||
| 265 | } | ||
| 266 | 260 | ||
| 267 | /* Ensure that we have a valid GPE number */ | 261 | /* Ensure that we have a valid GPE number */ |
| 268 | 262 | ||
| @@ -277,9 +271,7 @@ acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags) | |||
| 277 | status = acpi_ev_enable_gpe(gpe_event_info, TRUE); | 271 | status = acpi_ev_enable_gpe(gpe_event_info, TRUE); |
| 278 | 272 | ||
| 279 | unlock_and_exit: | 273 | unlock_and_exit: |
| 280 | if (flags & ACPI_NOT_ISR) { | 274 | acpi_os_release_lock(acpi_gbl_gpe_lock, flags); |
| 281 | (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); | ||
| 282 | } | ||
| 283 | return_ACPI_STATUS(status); | 275 | return_ACPI_STATUS(status); |
| 284 | } | 276 | } |
| 285 | 277 | ||
| @@ -299,22 +291,15 @@ ACPI_EXPORT_SYMBOL(acpi_enable_gpe) | |||
| 299 | * DESCRIPTION: Disable an ACPI event (general purpose) | 291 | * DESCRIPTION: Disable an ACPI event (general purpose) |
| 300 | * | 292 | * |
| 301 | ******************************************************************************/ | 293 | ******************************************************************************/ |
| 302 | acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags) | 294 | acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number) |
| 303 | { | 295 | { |
| 304 | acpi_status status = AE_OK; | 296 | acpi_status status = AE_OK; |
| 297 | acpi_cpu_flags flags; | ||
| 305 | struct acpi_gpe_event_info *gpe_event_info; | 298 | struct acpi_gpe_event_info *gpe_event_info; |
| 306 | 299 | ||
| 307 | ACPI_FUNCTION_TRACE(acpi_disable_gpe); | 300 | ACPI_FUNCTION_TRACE(acpi_disable_gpe); |
| 308 | 301 | ||
| 309 | /* Use semaphore lock if not executing at interrupt level */ | 302 | flags = acpi_os_acquire_lock(acpi_gbl_gpe_lock); |
| 310 | |||
| 311 | if (flags & ACPI_NOT_ISR) { | ||
| 312 | status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); | ||
| 313 | if (ACPI_FAILURE(status)) { | ||
| 314 | return_ACPI_STATUS(status); | ||
| 315 | } | ||
| 316 | } | ||
| 317 | |||
| 318 | /* Ensure that we have a valid GPE number */ | 303 | /* Ensure that we have a valid GPE number */ |
| 319 | 304 | ||
| 320 | gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number); | 305 | gpe_event_info = acpi_ev_get_gpe_event_info(gpe_device, gpe_number); |
| @@ -325,10 +310,8 @@ acpi_status acpi_disable_gpe(acpi_handle gpe_device, u32 gpe_number, u32 flags) | |||
| 325 | 310 | ||
| 326 | status = acpi_ev_disable_gpe(gpe_event_info); | 311 | status = acpi_ev_disable_gpe(gpe_event_info); |
| 327 | 312 | ||
| 328 | unlock_and_exit: | 313 | unlock_and_exit: |
| 329 | if (flags & ACPI_NOT_ISR) { | 314 | acpi_os_release_lock(acpi_gbl_gpe_lock, flags); |
| 330 | (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); | ||
| 331 | } | ||
| 332 | return_ACPI_STATUS(status); | 315 | return_ACPI_STATUS(status); |
| 333 | } | 316 | } |
| 334 | 317 | ||
| @@ -521,6 +504,9 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status) | |||
| 521 | if (value) | 504 | if (value) |
| 522 | *event_status |= ACPI_EVENT_FLAG_SET; | 505 | *event_status |= ACPI_EVENT_FLAG_SET; |
| 523 | 506 | ||
| 507 | if (acpi_gbl_fixed_event_handlers[event].handler) | ||
| 508 | *event_status |= ACPI_EVENT_FLAG_HANDLE; | ||
| 509 | |||
| 524 | return_ACPI_STATUS(status); | 510 | return_ACPI_STATUS(status); |
| 525 | } | 511 | } |
| 526 | 512 | ||
| @@ -571,6 +557,9 @@ acpi_get_gpe_status(acpi_handle gpe_device, | |||
| 571 | 557 | ||
| 572 | status = acpi_hw_get_gpe_status(gpe_event_info, event_status); | 558 | status = acpi_hw_get_gpe_status(gpe_event_info, event_status); |
| 573 | 559 | ||
| 560 | if (gpe_event_info->flags & ACPI_GPE_DISPATCH_MASK) | ||
| 561 | *event_status |= ACPI_EVENT_FLAG_HANDLE; | ||
| 562 | |||
| 574 | unlock_and_exit: | 563 | unlock_and_exit: |
| 575 | if (flags & ACPI_NOT_ISR) { | 564 | if (flags & ACPI_NOT_ISR) { |
| 576 | (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); | 565 | (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); |
