| // SPDX-License-Identifier: GPL-2.0-or-later |
| /* |
| * xen-stub.c - stub drivers to reserve space for Xen |
| * |
| * Copyright (C) 2012 Intel Corporation |
| * Author: Liu Jinsong <jinsong.liu@intel.com> |
| * Author: Jiang Yunhong <yunhong.jiang@intel.com> |
| * |
| * Copyright (C) 2012 Oracle Inc |
| * Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> |
| */ |
| |
| #include <linux/kernel.h> |
| #include <linux/init.h> |
| #include <linux/export.h> |
| #include <linux/types.h> |
| #include <linux/acpi.h> |
| #include <xen/acpi.h> |
| |
| #ifdef CONFIG_ACPI |
| |
| /*-------------------------------------------- |
| stub driver for Xen memory hotplug |
| --------------------------------------------*/ |
| |
| static const struct acpi_device_id memory_device_ids[] = { |
| {ACPI_MEMORY_DEVICE_HID, 0}, |
| {"", 0}, |
| }; |
| |
| static struct acpi_driver xen_stub_memory_device_driver = { |
| /* same name as native memory driver to block native loaded */ |
| .name = "acpi_memhotplug", |
| .class = ACPI_MEMORY_DEVICE_CLASS, |
| .ids = memory_device_ids, |
| }; |
| |
| int xen_stub_memory_device_init(void) |
| { |
| if (!xen_initial_domain()) |
| return -ENODEV; |
| |
| /* just reserve space for Xen, block native driver loaded */ |
| return acpi_bus_register_driver(&xen_stub_memory_device_driver); |
| } |
| EXPORT_SYMBOL_GPL(xen_stub_memory_device_init); |
| subsys_initcall(xen_stub_memory_device_init); |
| |
| void xen_stub_memory_device_exit(void) |
| { |
| acpi_bus_unregister_driver(&xen_stub_memory_device_driver); |
| } |
| EXPORT_SYMBOL_GPL(xen_stub_memory_device_exit); |
| |
| |
| /*-------------------------------------------- |
| stub driver for Xen cpu hotplug |
| --------------------------------------------*/ |
| |
| static const struct acpi_device_id processor_device_ids[] = { |
| {ACPI_PROCESSOR_OBJECT_HID, 0}, |
| {ACPI_PROCESSOR_DEVICE_HID, 0}, |
| {"", 0}, |
| }; |
| |
| static struct acpi_driver xen_stub_processor_driver = { |
| /* same name as native processor driver to block native loaded */ |
| .name = "processor", |
| .class = ACPI_PROCESSOR_CLASS, |
| .ids = processor_device_ids, |
| }; |
| |
| int xen_stub_processor_init(void) |
| { |
| if (!xen_initial_domain()) |
| return -ENODEV; |
| |
| /* just reserve space for Xen, block native driver loaded */ |
| return acpi_bus_register_driver(&xen_stub_processor_driver); |
| } |
| EXPORT_SYMBOL_GPL(xen_stub_processor_init); |
| subsys_initcall(xen_stub_processor_init); |
| |
| void xen_stub_processor_exit(void) |
| { |
| acpi_bus_unregister_driver(&xen_stub_processor_driver); |
| } |
| EXPORT_SYMBOL_GPL(xen_stub_processor_exit); |
| |
| #endif |