Version:  2.0.40 2.2.26 2.4.37 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7

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 
 20 #include <linux/kernel.h>
 21 #include <linux/module.h>
 22 #include <linux/init.h>
 23 #include <linux/acpi.h>
 24 #include <acpi/hed.h>
 25 
 26 static const struct acpi_device_id acpi_hed_ids[] = {
 27         {"PNP0C33", 0},
 28         {"", 0},
 29 };
 30 MODULE_DEVICE_TABLE(acpi, acpi_hed_ids);
 31 
 32 static acpi_handle hed_handle;
 33 
 34 static BLOCKING_NOTIFIER_HEAD(acpi_hed_notify_list);
 35 
 36 int register_acpi_hed_notifier(struct notifier_block *nb)
 37 {
 38         return blocking_notifier_chain_register(&acpi_hed_notify_list, nb);
 39 }
 40 EXPORT_SYMBOL_GPL(register_acpi_hed_notifier);
 41 
 42 void unregister_acpi_hed_notifier(struct notifier_block *nb)
 43 {
 44         blocking_notifier_chain_unregister(&acpi_hed_notify_list, nb);
 45 }
 46 EXPORT_SYMBOL_GPL(unregister_acpi_hed_notifier);
 47 
 48 /*
 49  * SCI to report hardware error is forwarded to the listeners of HED,
 50  * it is used by HEST Generic Hardware Error Source with notify type
 51  * SCI.
 52  */
 53 static void acpi_hed_notify(struct acpi_device *device, u32 event)
 54 {
 55         blocking_notifier_call_chain(&acpi_hed_notify_list, 0, NULL);
 56 }
 57 
 58 static int acpi_hed_add(struct acpi_device *device)
 59 {
 60         /* Only one hardware error device */
 61         if (hed_handle)
 62                 return -EINVAL;
 63         hed_handle = device->handle;
 64         return 0;
 65 }
 66 
 67 static int acpi_hed_remove(struct acpi_device *device)
 68 {
 69         hed_handle = NULL;
 70         return 0;
 71 }
 72 
 73 static struct acpi_driver acpi_hed_driver = {
 74         .name = "hardware_error_device",
 75         .class = "hardware_error",
 76         .ids = acpi_hed_ids,
 77         .ops = {
 78                 .add = acpi_hed_add,
 79                 .remove = acpi_hed_remove,
 80                 .notify = acpi_hed_notify,
 81         },
 82 };
 83 module_acpi_driver(acpi_hed_driver);
 84 
 85 ACPI_MODULE_NAME("hed");
 86 MODULE_AUTHOR("Huang Ying");
 87 MODULE_DESCRIPTION("ACPI Hardware Error Device Driver");
 88 MODULE_LICENSE("GPL");
 89 

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