1/* 2 * xen-stub.c - stub drivers to reserve space for Xen 3 * 4 * Copyright (C) 2012 Intel Corporation 5 * Author: Liu Jinsong <jinsong.liu@intel.com> 6 * Author: Jiang Yunhong <yunhong.jiang@intel.com> 7 * 8 * Copyright (C) 2012 Oracle Inc 9 * Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or (at 14 * your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, but 17 * WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 19 * NON INFRINGEMENT. See the GNU General Public License for more 20 * details. 21 */ 22 23#include <linux/kernel.h> 24#include <linux/init.h> 25#include <linux/export.h> 26#include <linux/types.h> 27#include <linux/acpi.h> 28#include <xen/acpi.h> 29 30#ifdef CONFIG_ACPI 31 32/*-------------------------------------------- 33 stub driver for Xen memory hotplug 34--------------------------------------------*/ 35 36static const struct acpi_device_id memory_device_ids[] = { 37 {ACPI_MEMORY_DEVICE_HID, 0}, 38 {"", 0}, 39}; 40 41static struct acpi_driver xen_stub_memory_device_driver = { 42 /* same name as native memory driver to block native loaded */ 43 .name = "acpi_memhotplug", 44 .class = ACPI_MEMORY_DEVICE_CLASS, 45 .ids = memory_device_ids, 46}; 47 48int xen_stub_memory_device_init(void) 49{ 50 if (!xen_initial_domain()) 51 return -ENODEV; 52 53 /* just reserve space for Xen, block native driver loaded */ 54 return acpi_bus_register_driver(&xen_stub_memory_device_driver); 55} 56EXPORT_SYMBOL_GPL(xen_stub_memory_device_init); 57subsys_initcall(xen_stub_memory_device_init); 58 59void xen_stub_memory_device_exit(void) 60{ 61 acpi_bus_unregister_driver(&xen_stub_memory_device_driver); 62} 63EXPORT_SYMBOL_GPL(xen_stub_memory_device_exit); 64 65 66/*-------------------------------------------- 67 stub driver for Xen cpu hotplug 68--------------------------------------------*/ 69 70static const struct acpi_device_id processor_device_ids[] = { 71 {ACPI_PROCESSOR_OBJECT_HID, 0}, 72 {ACPI_PROCESSOR_DEVICE_HID, 0}, 73 {"", 0}, 74}; 75 76static struct acpi_driver xen_stub_processor_driver = { 77 /* same name as native processor driver to block native loaded */ 78 .name = "processor", 79 .class = ACPI_PROCESSOR_CLASS, 80 .ids = processor_device_ids, 81}; 82 83int xen_stub_processor_init(void) 84{ 85 if (!xen_initial_domain()) 86 return -ENODEV; 87 88 /* just reserve space for Xen, block native driver loaded */ 89 return acpi_bus_register_driver(&xen_stub_processor_driver); 90} 91EXPORT_SYMBOL_GPL(xen_stub_processor_init); 92subsys_initcall(xen_stub_processor_init); 93 94void xen_stub_processor_exit(void) 95{ 96 acpi_bus_unregister_driver(&xen_stub_processor_driver); 97} 98EXPORT_SYMBOL_GPL(xen_stub_processor_exit); 99 100#endif 101