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 */ 1218c86e2bSPeter Maydell #include "qemu/osdep.h" 139f117d41SIgor Mammedov #include "hw/hotplug.h" 149f117d41SIgor Mammedov #include "qemu/module.h" 159f117d41SIgor Mammedov 16*41346263SIgor Mammedov void hotplug_handler_pre_plug(HotplugHandler *plug_handler, 17*41346263SIgor Mammedov DeviceState *plugged_dev, 18*41346263SIgor Mammedov Error **errp) 19*41346263SIgor Mammedov { 20*41346263SIgor Mammedov HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 21*41346263SIgor Mammedov 22*41346263SIgor Mammedov if (hdc->pre_plug) { 23*41346263SIgor Mammedov hdc->pre_plug(plug_handler, plugged_dev, errp); 24*41346263SIgor Mammedov } 25*41346263SIgor Mammedov } 26*41346263SIgor Mammedov 279f117d41SIgor Mammedov void hotplug_handler_plug(HotplugHandler *plug_handler, 289f117d41SIgor Mammedov DeviceState *plugged_dev, 299f117d41SIgor Mammedov Error **errp) 309f117d41SIgor Mammedov { 319f117d41SIgor Mammedov HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 329f117d41SIgor Mammedov 339f117d41SIgor Mammedov if (hdc->plug) { 349f117d41SIgor Mammedov hdc->plug(plug_handler, plugged_dev, errp); 359f117d41SIgor Mammedov } 369f117d41SIgor Mammedov } 379f117d41SIgor Mammedov 3814d5a28fSIgor Mammedov void hotplug_handler_unplug_request(HotplugHandler *plug_handler, 399f117d41SIgor Mammedov DeviceState *plugged_dev, 409f117d41SIgor Mammedov Error **errp) 419f117d41SIgor Mammedov { 429f117d41SIgor Mammedov HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 439f117d41SIgor Mammedov 4414d5a28fSIgor Mammedov if (hdc->unplug_request) { 4514d5a28fSIgor Mammedov hdc->unplug_request(plug_handler, plugged_dev, errp); 469f117d41SIgor Mammedov } 479f117d41SIgor Mammedov } 489f117d41SIgor Mammedov 49181a2c63SIgor Mammedov void hotplug_handler_unplug(HotplugHandler *plug_handler, 50181a2c63SIgor Mammedov DeviceState *plugged_dev, 51181a2c63SIgor Mammedov Error **errp) 52181a2c63SIgor Mammedov { 53181a2c63SIgor Mammedov HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler); 54181a2c63SIgor Mammedov 55181a2c63SIgor Mammedov if (hdc->unplug) { 56181a2c63SIgor Mammedov hdc->unplug(plug_handler, plugged_dev, errp); 57181a2c63SIgor Mammedov } 58181a2c63SIgor Mammedov } 59181a2c63SIgor Mammedov 609f117d41SIgor Mammedov static const TypeInfo hotplug_handler_info = { 619f117d41SIgor Mammedov .name = TYPE_HOTPLUG_HANDLER, 629f117d41SIgor Mammedov .parent = TYPE_INTERFACE, 639f117d41SIgor Mammedov .class_size = sizeof(HotplugHandlerClass), 649f117d41SIgor Mammedov }; 659f117d41SIgor Mammedov 669f117d41SIgor Mammedov static void hotplug_handler_register_types(void) 679f117d41SIgor Mammedov { 689f117d41SIgor Mammedov type_register_static(&hotplug_handler_info); 699f117d41SIgor Mammedov } 709f117d41SIgor Mammedov 719f117d41SIgor Mammedov type_init(hotplug_handler_register_types) 72