Version:  2.0.40 2.2.26 2.4.37 2.6.39 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15

Linux/drivers/acpi/hed.c

  1 /*
  2  * ACPI Hardware Error Device (PNP0C33) Driver
  3  *
  4  * Copyright (C) 2010, Intel Corp.
  5  *      Author: Huang Ying <ying.huang@intel.com>
  6  *
  7  * ACPI Hardware Error Device is used to report some hardware errors
  8  * notified via SCI, mainly the corrected errors.
  9  *
 10  * This program is free software; you can redistribute it and/or
 11  * modify it under the terms of the GNU General Public License version
 12  * 2 as published by the Free Software Foundation;
 13  *
 14  * This program is distributed in the hope that it will be useful,
 15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 17  * GNU General Public License for more details.
 18  *
 19  * You should have received a copy of the GNU General Public License
 20  * along with this program; if not, write to the Free Software
 21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 22  */
 23 
 24 #include <linux/kernel.h>
 25 #include <linux/module.h>
 26 #include <linux/init.h>
 27 #include <linux/acpi.h>
 28 #include <acpi/hed.h>
 29 
 30 static struct acpi_device_id acpi_hed_ids[] = {
 31         {"PNP0C33", 0},
 32         {"", 0},
 33 };
 34 MODULE_DEVICE_TABLE(acpi, acpi_hed_ids);
 35 
 36 static acpi_handle hed_handle;
 37 
 38 static BLOCKING_NOTIFIER_HEAD(acpi_hed_notify_list);
 39 
 40 int register_acpi_hed_notifier(struct notifier_block *nb)
 41 {
 42         return blocking_notifier_chain_register(&acpi_hed_notify_list, nb);
 43 }
 44 EXPORT_SYMBOL_GPL(register_acpi_hed_notifier);
 45 
 46 void unregister_acpi_hed_notifier(struct notifier_block *nb)
 47 {
 48         blocking_notifier_chain_unregister(&acpi_hed_notify_list, nb);
 49 }
 50 EXPORT_SYMBOL_GPL(unregister_acpi_hed_notifier);
 51 
 52 /*
 53  * SCI to report hardware error is forwarded to the listeners of HED,
 54  * it is used by HEST Generic Hardware Error Source with notify type
 55  * SCI.
 56  */
 57 static void acpi_hed_notify(struct acpi_device *device, u32 event)
 58 {
 59         blocking_notifier_call_chain(&acpi_hed_notify_list, 0, NULL);
 60 }
 61 
 62 static int acpi_hed_add(struct acpi_device *device)
 63 {
 64         /* Only one hardware error device */
 65         if (hed_handle)
 66                 return -EINVAL;
 67         hed_handle = device->handle;
 68         return 0;
 69 }
 70 
 71 static int acpi_hed_remove(struct acpi_device *device)
 72 {
 73         hed_handle = NULL;
 74         return 0;
 75 }
 76 
 77 static struct acpi_driver acpi_hed_driver = {
 78         .name = "hardware_error_device",
 79         .class = "hardware_error",
 80         .ids = acpi_hed_ids,
 81         .ops = {
 82                 .add = acpi_hed_add,
 83                 .remove = acpi_hed_remove,
 84                 .notify = acpi_hed_notify,
 85         },
 86 };
 87 module_acpi_driver(acpi_hed_driver);
 88 
 89 ACPI_MODULE_NAME("hed");
 90 MODULE_AUTHOR("Huang Ying");
 91 MODULE_DESCRIPTION("ACPI Hardware Error Device Driver");
 92 MODULE_LICENSE("GPL");
 93 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us