diff options
Diffstat (limited to 'drivers/acpi/tables/tbxface.c')
| -rw-r--r-- | drivers/acpi/tables/tbxface.c | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/drivers/acpi/tables/tbxface.c b/drivers/acpi/tables/tbxface.c index a9e3331fee5d..fb57b93c2495 100644 --- a/drivers/acpi/tables/tbxface.c +++ b/drivers/acpi/tables/tbxface.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2007, R. Byron Moore | 9 | * Copyright (C) 2000 - 2008, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
| @@ -635,6 +635,95 @@ acpi_status acpi_load_tables(void) | |||
| 635 | ACPI_EXPORT_SYMBOL(acpi_load_tables) | 635 | ACPI_EXPORT_SYMBOL(acpi_load_tables) |
| 636 | 636 | ||
| 637 | 637 | ||
| 638 | /******************************************************************************* | ||
| 639 | * | ||
| 640 | * FUNCTION: acpi_install_table_handler | ||
| 641 | * | ||
| 642 | * PARAMETERS: Handler - Table event handler | ||
| 643 | * Context - Value passed to the handler on each event | ||
| 644 | * | ||
| 645 | * RETURN: Status | ||
| 646 | * | ||
| 647 | * DESCRIPTION: Install table event handler | ||
| 648 | * | ||
| 649 | ******************************************************************************/ | ||
| 650 | acpi_status | ||
| 651 | acpi_install_table_handler(acpi_tbl_handler handler, void *context) | ||
| 652 | { | ||
| 653 | acpi_status status; | ||
| 654 | |||
| 655 | ACPI_FUNCTION_TRACE(acpi_install_table_handler); | ||
| 656 | |||
| 657 | if (!handler) { | ||
| 658 | return_ACPI_STATUS(AE_BAD_PARAMETER); | ||
| 659 | } | ||
| 660 | |||
| 661 | status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); | ||
| 662 | if (ACPI_FAILURE(status)) { | ||
| 663 | return_ACPI_STATUS(status); | ||
| 664 | } | ||
| 665 | |||
| 666 | /* Don't allow more than one handler */ | ||
| 667 | |||
| 668 | if (acpi_gbl_table_handler) { | ||
| 669 | status = AE_ALREADY_EXISTS; | ||
| 670 | goto cleanup; | ||
| 671 | } | ||
| 672 | |||
| 673 | /* Install the handler */ | ||
| 674 | |||
| 675 | acpi_gbl_table_handler = handler; | ||
| 676 | acpi_gbl_table_handler_context = context; | ||
| 677 | |||
| 678 | cleanup: | ||
| 679 | (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); | ||
| 680 | return_ACPI_STATUS(status); | ||
| 681 | } | ||
| 682 | |||
| 683 | ACPI_EXPORT_SYMBOL(acpi_install_table_handler) | ||
| 684 | |||
| 685 | /******************************************************************************* | ||
| 686 | * | ||
| 687 | * FUNCTION: acpi_remove_table_handler | ||
| 688 | * | ||
| 689 | * PARAMETERS: Handler - Table event handler that was installed | ||
| 690 | * previously. | ||
| 691 | * | ||
| 692 | * RETURN: Status | ||
| 693 | * | ||
| 694 | * DESCRIPTION: Remove table event handler | ||
| 695 | * | ||
| 696 | ******************************************************************************/ | ||
| 697 | acpi_status acpi_remove_table_handler(acpi_tbl_handler handler) | ||
| 698 | { | ||
| 699 | acpi_status status; | ||
| 700 | |||
| 701 | ACPI_FUNCTION_TRACE(acpi_remove_table_handler); | ||
| 702 | |||
| 703 | status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); | ||
| 704 | if (ACPI_FAILURE(status)) { | ||
| 705 | return_ACPI_STATUS(status); | ||
| 706 | } | ||
| 707 | |||
| 708 | /* Make sure that the installed handler is the same */ | ||
| 709 | |||
| 710 | if (!handler || handler != acpi_gbl_table_handler) { | ||
| 711 | status = AE_BAD_PARAMETER; | ||
| 712 | goto cleanup; | ||
| 713 | } | ||
| 714 | |||
| 715 | /* Remove the handler */ | ||
| 716 | |||
| 717 | acpi_gbl_table_handler = NULL; | ||
| 718 | |||
| 719 | cleanup: | ||
| 720 | (void)acpi_ut_release_mutex(ACPI_MTX_EVENTS); | ||
| 721 | return_ACPI_STATUS(status); | ||
| 722 | } | ||
| 723 | |||
| 724 | ACPI_EXPORT_SYMBOL(acpi_remove_table_handler) | ||
| 725 | |||
| 726 | |||
| 638 | static int __init acpi_no_auto_ssdt_setup(char *s) { | 727 | static int __init acpi_no_auto_ssdt_setup(char *s) { |
| 639 | 728 | ||
| 640 | printk(KERN_NOTICE "ACPI: SSDT auto-load disabled\n"); | 729 | printk(KERN_NOTICE "ACPI: SSDT auto-load disabled\n"); |
