xen-stub.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * xen-stub.c - stub drivers to reserve space for Xen
  4. *
  5. * Copyright (C) 2012 Intel Corporation
  6. * Author: Liu Jinsong <jinsong.liu@intel.com>
  7. * Author: Jiang Yunhong <yunhong.jiang@intel.com>
  8. *
  9. * Copyright (C) 2012 Oracle Inc
  10. * Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/init.h>
  14. #include <linux/export.h>
  15. #include <linux/types.h>
  16. #include <linux/acpi.h>
  17. #include <xen/acpi.h>
  18. #ifdef CONFIG_ACPI
  19. /*--------------------------------------------
  20. stub driver for Xen memory hotplug
  21. --------------------------------------------*/
  22. static const struct acpi_device_id memory_device_ids[] = {
  23. {ACPI_MEMORY_DEVICE_HID, 0},
  24. {"", 0},
  25. };
  26. static struct acpi_driver xen_stub_memory_device_driver = {
  27. /* same name as native memory driver to block native loaded */
  28. .name = "acpi_memhotplug",
  29. .class = ACPI_MEMORY_DEVICE_CLASS,
  30. .ids = memory_device_ids,
  31. };
  32. int xen_stub_memory_device_init(void)
  33. {
  34. if (!xen_initial_domain())
  35. return -ENODEV;
  36. /* just reserve space for Xen, block native driver loaded */
  37. return acpi_bus_register_driver(&xen_stub_memory_device_driver);
  38. }
  39. EXPORT_SYMBOL_GPL(xen_stub_memory_device_init);
  40. subsys_initcall(xen_stub_memory_device_init);
  41. void xen_stub_memory_device_exit(void)
  42. {
  43. acpi_bus_unregister_driver(&xen_stub_memory_device_driver);
  44. }
  45. EXPORT_SYMBOL_GPL(xen_stub_memory_device_exit);
  46. /*--------------------------------------------
  47. stub driver for Xen cpu hotplug
  48. --------------------------------------------*/
  49. static const struct acpi_device_id processor_device_ids[] = {
  50. {ACPI_PROCESSOR_OBJECT_HID, 0},
  51. {ACPI_PROCESSOR_DEVICE_HID, 0},
  52. {"", 0},
  53. };
  54. static struct acpi_driver xen_stub_processor_driver = {
  55. /* same name as native processor driver to block native loaded */
  56. .name = "processor",
  57. .class = ACPI_PROCESSOR_CLASS,
  58. .ids = processor_device_ids,
  59. };
  60. int xen_stub_processor_init(void)
  61. {
  62. if (!xen_initial_domain())
  63. return -ENODEV;
  64. /* just reserve space for Xen, block native driver loaded */
  65. return acpi_bus_register_driver(&xen_stub_processor_driver);
  66. }
  67. EXPORT_SYMBOL_GPL(xen_stub_processor_init);
  68. subsys_initcall(xen_stub_processor_init);
  69. void xen_stub_processor_exit(void)
  70. {
  71. acpi_bus_unregister_driver(&xen_stub_processor_driver);
  72. }
  73. EXPORT_SYMBOL_GPL(xen_stub_processor_exit);
  74. #endif