xref: /openbmc/qemu/hw/core/hotplug.c (revision b312532fd03413d0e6ae6767ec793a3e30f487b8)
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 
hotplug_handler_pre_plug(HotplugHandler * plug_handler,DeviceState * plugged_dev,Error ** errp)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 
hotplug_handler_plug(HotplugHandler * plug_handler,DeviceState * plugged_dev,Error ** errp)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 
hotplug_handler_unplug_request(HotplugHandler * plug_handler,DeviceState * plugged_dev,Error ** errp)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 
hotplug_handler_unplug(HotplugHandler * plug_handler,DeviceState * plugged_dev,Error ** errp)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 
hotplug_handler_register_types(void)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