Blame view

drivers/acpi/hed.c 1.9 KB
1802d0bee   Thomas Gleixner   treewide: Replace...
1
  // SPDX-License-Identifier: GPL-2.0-only
801eab811   Huang Ying   ACPI Hardware Err...
2
3
4
5
6
7
8
9
  /*
   * ACPI Hardware Error Device (PNP0C33) Driver
   *
   * Copyright (C) 2010, Intel Corp.
   *	Author: Huang Ying <ying.huang@intel.com>
   *
   * ACPI Hardware Error Device is used to report some hardware errors
   * notified via SCI, mainly the corrected errors.
801eab811   Huang Ying   ACPI Hardware Err...
10
11
12
13
14
15
   */
  
  #include <linux/kernel.h>
  #include <linux/module.h>
  #include <linux/init.h>
  #include <linux/acpi.h>
801eab811   Huang Ying   ACPI Hardware Err...
16
  #include <acpi/hed.h>
69cda6e0f   Mathias Krause   ACPI / HED: const...
17
  static const struct acpi_device_id acpi_hed_ids[] = {
801eab811   Huang Ying   ACPI Hardware Err...
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  	{"PNP0C33", 0},
  	{"", 0},
  };
  MODULE_DEVICE_TABLE(acpi, acpi_hed_ids);
  
  static acpi_handle hed_handle;
  
  static BLOCKING_NOTIFIER_HEAD(acpi_hed_notify_list);
  
  int register_acpi_hed_notifier(struct notifier_block *nb)
  {
  	return blocking_notifier_chain_register(&acpi_hed_notify_list, nb);
  }
  EXPORT_SYMBOL_GPL(register_acpi_hed_notifier);
  
  void unregister_acpi_hed_notifier(struct notifier_block *nb)
  {
  	blocking_notifier_chain_unregister(&acpi_hed_notify_list, nb);
  }
  EXPORT_SYMBOL_GPL(unregister_acpi_hed_notifier);
  
  /*
   * SCI to report hardware error is forwarded to the listeners of HED,
   * it is used by HEST Generic Hardware Error Source with notify type
   * SCI.
   */
  static void acpi_hed_notify(struct acpi_device *device, u32 event)
  {
  	blocking_notifier_call_chain(&acpi_hed_notify_list, 0, NULL);
  }
da095fd3d   Bill Pemberton   acpi: remove use ...
48
  static int acpi_hed_add(struct acpi_device *device)
801eab811   Huang Ying   ACPI Hardware Err...
49
50
51
52
53
54
55
  {
  	/* Only one hardware error device */
  	if (hed_handle)
  		return -EINVAL;
  	hed_handle = device->handle;
  	return 0;
  }
51fac8388   Rafael J. Wysocki   ACPI: Remove usel...
56
  static int acpi_hed_remove(struct acpi_device *device)
801eab811   Huang Ying   ACPI Hardware Err...
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  {
  	hed_handle = NULL;
  	return 0;
  }
  
  static struct acpi_driver acpi_hed_driver = {
  	.name = "hardware_error_device",
  	.class = "hardware_error",
  	.ids = acpi_hed_ids,
  	.ops = {
  		.add = acpi_hed_add,
  		.remove = acpi_hed_remove,
  		.notify = acpi_hed_notify,
  	},
  };
8fe4bf6f9   Mika Westerberg   ACPI/hed: convert...
72
  module_acpi_driver(acpi_hed_driver);
801eab811   Huang Ying   ACPI Hardware Err...
73
74
75
76
77
  
  ACPI_MODULE_NAME("hed");
  MODULE_AUTHOR("Huang Ying");
  MODULE_DESCRIPTION("ACPI Hardware Error Device Driver");
  MODULE_LICENSE("GPL");