19f117d41SIgor Mammedov /* 29f117d41SIgor Mammedov * Hotplug handler interface. 39f117d41SIgor Mammedov * 49f117d41SIgor Mammedov * Copyright (c) 2014 Red Hat Inc. 59f117d41SIgor Mammedov * 69f117d41SIgor Mammedov * Authors: 79f117d41SIgor Mammedov * Igor Mammedov <imammedo@redhat.com>, 89f117d41SIgor Mammedov * 99f117d41SIgor Mammedov * This work is licensed under the terms of the GNU GPL, version 2 or later. 109f117d41SIgor Mammedov * See the COPYING file in the top-level directory. 119f117d41SIgor Mammedov */ 129f117d41SIgor Mammedov #include "hw/hotplug.h" 139f117d41SIgor Mammedov #include "qemu/module.h" 149f117d41SIgor Mammedov 159f117d41SIgor Mammedov void hotplug_handler_plug(HotplugHandler *plug_handler, 169f117d41SIgor Mammedov DeviceState *plugged_dev, 179f117d41SIgor Mammedov Error **errp) 189f117d41SIgor Mammedov { 199f117d41SIgor Mammedov HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 209f117d41SIgor Mammedov 219f117d41SIgor Mammedov if (hdc->plug) { 229f117d41SIgor Mammedov hdc->plug(plug_handler, plugged_dev, errp); 239f117d41SIgor Mammedov } 249f117d41SIgor Mammedov } 259f117d41SIgor Mammedov 2614d5a28fSIgor Mammedov void hotplug_handler_unplug_request(HotplugHandler *plug_handler, 279f117d41SIgor Mammedov DeviceState *plugged_dev, 289f117d41SIgor Mammedov Error **errp) 299f117d41SIgor Mammedov { 309f117d41SIgor Mammedov HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 319f117d41SIgor Mammedov 3214d5a28fSIgor Mammedov if (hdc->unplug_request) { 3314d5a28fSIgor Mammedov hdc->unplug_request(plug_handler, plugged_dev, errp); 349f117d41SIgor Mammedov } 359f117d41SIgor Mammedov } 369f117d41SIgor Mammedov 37*181a2c63SIgor Mammedov void hotplug_handler_unplug(HotplugHandler *plug_handler, 38*181a2c63SIgor Mammedov DeviceState *plugged_dev, 39*181a2c63SIgor Mammedov Error **errp) 40*181a2c63SIgor Mammedov { 41*181a2c63SIgor Mammedov HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 42*181a2c63SIgor Mammedov 43*181a2c63SIgor Mammedov if (hdc->unplug) { 44*181a2c63SIgor Mammedov hdc->unplug(plug_handler, plugged_dev, errp); 45*181a2c63SIgor Mammedov } 46*181a2c63SIgor Mammedov } 47*181a2c63SIgor Mammedov 489f117d41SIgor Mammedov static const TypeInfo hotplug_handler_info = { 499f117d41SIgor Mammedov .name = TYPE_HOTPLUG_HANDLER, 509f117d41SIgor Mammedov .parent = TYPE_INTERFACE, 519f117d41SIgor Mammedov .class_size = sizeof(HotplugHandlerClass), 529f117d41SIgor Mammedov }; 539f117d41SIgor Mammedov 549f117d41SIgor Mammedov static void hotplug_handler_register_types(void) 559f117d41SIgor Mammedov { 569f117d41SIgor Mammedov type_register_static(&hotplug_handler_info); 579f117d41SIgor Mammedov } 589f117d41SIgor Mammedov 599f117d41SIgor Mammedov type_init(hotplug_handler_register_types) 60