1 /* 2 * Hotplug handler interface. 3 * 4 * Copyright (c) 2014 Red Hat Inc. 5 * 6 * Authors: 7 * Igor Mammedov <imammedo@redhat.com>, 8 * 9 * This work is licensed under the terms of the GNU GPL, version 2 or later. 10 * See the COPYING file in the top-level directory. 11 */ 12 #include "qemu/osdep.h" 13 #include "hw/hotplug.h" 14 #include "qemu/module.h" 15 16 void hotplug_handler_pre_plug(HotplugHandler *plug_handler, 17 DeviceState *plugged_dev, 18 Error **errp) 19 { 20 HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 21 22 if (hdc->pre_plug) { 23 hdc->pre_plug(plug_handler, plugged_dev, errp); 24 } 25 } 26 27 void hotplug_handler_plug(HotplugHandler *plug_handler, 28 DeviceState *plugged_dev, 29 Error **errp) 30 { 31 HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 32 33 if (hdc->plug) { 34 hdc->plug(plug_handler, plugged_dev, errp); 35 } 36 } 37 38 void hotplug_handler_post_plug(HotplugHandler *plug_handler, 39 DeviceState *plugged_dev, 40 Error **errp) 41 { 42 HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 43 44 if (hdc->post_plug) { 45 hdc->post_plug(plug_handler, plugged_dev, errp); 46 } 47 } 48 49 void hotplug_handler_unplug_request(HotplugHandler *plug_handler, 50 DeviceState *plugged_dev, 51 Error **errp) 52 { 53 HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 54 55 if (hdc->unplug_request) { 56 hdc->unplug_request(plug_handler, plugged_dev, errp); 57 } 58 } 59 60 void hotplug_handler_unplug(HotplugHandler *plug_handler, 61 DeviceState *plugged_dev, 62 Error **errp) 63 { 64 HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 65 66 if (hdc->unplug) { 67 hdc->unplug(plug_handler, plugged_dev, errp); 68 } 69 } 70 71 static const TypeInfo hotplug_handler_info = { 72 .name = TYPE_HOTPLUG_HANDLER, 73 .parent = TYPE_INTERFACE, 74 .class_size = sizeof(HotplugHandlerClass), 75 }; 76 77 static void hotplug_handler_register_types(void) 78 { 79 type_register_static(&hotplug_handler_info); 80 } 81 82 type_init(hotplug_handler_register_types) 83