mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.9 KiB
79 lines
1.9 KiB
// SPDX-License-Identifier: GPL-2.0-only |
|
/* |
|
* ACPI Hardware Error Device (PNP0C33) Driver |
|
* |
|
* Copyright (C) 2010, Intel Corp. |
|
* Author: Huang Ying <[email protected]> |
|
* |
|
* ACPI Hardware Error Device is used to report some hardware errors |
|
* notified via SCI, mainly the corrected errors. |
|
*/ |
|
|
|
#include <linux/kernel.h> |
|
#include <linux/module.h> |
|
#include <linux/init.h> |
|
#include <linux/acpi.h> |
|
#include <acpi/hed.h> |
|
|
|
static const struct acpi_device_id acpi_hed_ids[] = { |
|
{"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); |
|
} |
|
|
|
static int acpi_hed_add(struct acpi_device *device) |
|
{ |
|
/* Only one hardware error device */ |
|
if (hed_handle) |
|
return -EINVAL; |
|
hed_handle = device->handle; |
|
return 0; |
|
} |
|
|
|
static int acpi_hed_remove(struct acpi_device *device) |
|
{ |
|
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, |
|
}, |
|
}; |
|
module_acpi_driver(acpi_hed_driver); |
|
|
|
MODULE_AUTHOR("Huang Ying"); |
|
MODULE_DESCRIPTION("ACPI Hardware Error Device Driver"); |
|
MODULE_LICENSE("GPL");
|
|
|