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