xref: /qemu/hw/core/hotplug.c (revision 6402cbbb)
1 /*
2  * Hotplug handler interface.
3  *
4  * Copyright (c) 2014 Red Hat Inc.
5  *
6  * Authors:
7  *  Igor Mammedov <imammedo@redhat.com>,
8  *
9  * This work is licensed under the terms of the GNU GPL, version 2 or later.
10  * See the COPYING file in the top-level directory.
11  */
12 #include "qemu/osdep.h"
13 #include "hw/hotplug.h"
14 #include "qemu/module.h"
15 
16 void hotplug_handler_pre_plug(HotplugHandler *plug_handler,
17                               DeviceState *plugged_dev,
18                               Error **errp)
19 {
20     HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler);
21 
22     if (hdc->pre_plug) {
23         hdc->pre_plug(plug_handler, plugged_dev, errp);
24     }
25 }
26 
27 void hotplug_handler_plug(HotplugHandler *plug_handler,
28                           DeviceState *plugged_dev,
29                           Error **errp)
30 {
31     HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler);
32 
33     if (hdc->plug) {
34         hdc->plug(plug_handler, plugged_dev, errp);
35     }
36 }
37 
38 void hotplug_handler_unplug_request(HotplugHandler *plug_handler,
39                                     DeviceState *plugged_dev,
40                                     Error **errp)
41 {
42     HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler);
43 
44     if (hdc->unplug_request) {
45         hdc->unplug_request(plug_handler, plugged_dev, errp);
46     }
47 }
48 
49 void hotplug_handler_unplug(HotplugHandler *plug_handler,
50                             DeviceState *plugged_dev,
51                             Error **errp)
52 {
53     HotplugHandlerClass *hdc = HOTPLUG_HANDLER_GET_CLASS(plug_handler);
54 
55     if (hdc->unplug) {
56         hdc->unplug(plug_handler, plugged_dev, errp);
57     }
58 }
59 
60 static const TypeInfo hotplug_handler_info = {
61     .name          = TYPE_HOTPLUG_HANDLER,
62     .parent        = TYPE_INTERFACE,
63     .class_size = sizeof(HotplugHandlerClass),
64 };
65 
66 static void hotplug_handler_register_types(void)
67 {
68     type_register_static(&hotplug_handler_info);
69 }
70 
71 type_init(hotplug_handler_register_types)
72