xref: /qemu/hw/core/hotplug.c (revision 181a2c63236966b3c80eef131bac33a355a492da)
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