]>
Commit | Line | Data |
---|---|---|
9f117d41 IM |
1 | /* |
2 | * Hotplug handler interface. | |
3 | * | |
4 | * Copyright (c) 2014 Red Hat Inc. | |
5 | * | |
6 | * Authors: | |
7 | * Igor Mammedov <[email protected]>, | |
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 | #ifndef HOTPLUG_H | |
13 | #define HOTPLUG_H | |
14 | ||
15 | #include "qom/object.h" | |
9f117d41 IM |
16 | |
17 | #define TYPE_HOTPLUG_HANDLER "hotplug-handler" | |
18 | ||
19 | #define HOTPLUG_HANDLER_CLASS(klass) \ | |
20 | OBJECT_CLASS_CHECK(HotplugHandlerClass, (klass), TYPE_HOTPLUG_HANDLER) | |
21 | #define HOTPLUG_HANDLER_GET_CLASS(obj) \ | |
22 | OBJECT_GET_CLASS(HotplugHandlerClass, (obj), TYPE_HOTPLUG_HANDLER) | |
23 | #define HOTPLUG_HANDLER(obj) \ | |
24 | INTERFACE_CHECK(HotplugHandler, (obj), TYPE_HOTPLUG_HANDLER) | |
25 | ||
aa1b35b9 | 26 | typedef struct HotplugHandler HotplugHandler; |
9f117d41 IM |
27 | |
28 | /** | |
29 | * hotplug_fn: | |
30 | * @plug_handler: a device performing plug/uplug action | |
31 | * @plugged_dev: a device that has been (un)plugged | |
32 | * @errp: returns an error if this function fails | |
33 | */ | |
34 | typedef void (*hotplug_fn)(HotplugHandler *plug_handler, | |
35 | DeviceState *plugged_dev, Error **errp); | |
36 | ||
37 | /** | |
38 | * HotplugDeviceClass: | |
39 | * | |
40 | * Interface to be implemented by a device performing | |
41 | * hardware (un)plug functions. | |
42 | * | |
43 | * @parent: Opaque parent interface. | |
41346263 IM |
44 | * @pre_plug: pre plug callback called at start of device.realize(true) |
45 | * @plug: plug callback called at end of device.realize(true). | |
14d5a28f IM |
46 | * @unplug_request: unplug request callback. |
47 | * Used as a means to initiate device unplug for devices that | |
48 | * require asynchronous unplug handling. | |
181a2c63 IM |
49 | * @unplug: unplug callback. |
50 | * Used for device removal with devices that implement | |
b4952c36 | 51 | * asynchronous and synchronous (surprise) removal. |
9f117d41 IM |
52 | */ |
53 | typedef struct HotplugHandlerClass { | |
54 | /* <private> */ | |
55 | InterfaceClass parent; | |
56 | ||
57 | /* <public> */ | |
41346263 | 58 | hotplug_fn pre_plug; |
9f117d41 | 59 | hotplug_fn plug; |
14d5a28f | 60 | hotplug_fn unplug_request; |
181a2c63 | 61 | hotplug_fn unplug; |
9f117d41 IM |
62 | } HotplugHandlerClass; |
63 | ||
64 | /** | |
65 | * hotplug_handler_plug: | |
66 | * | |
67 | * Call #HotplugHandlerClass.plug callback of @plug_handler. | |
68 | */ | |
69 | void hotplug_handler_plug(HotplugHandler *plug_handler, | |
70 | DeviceState *plugged_dev, | |
71 | Error **errp); | |
72 | ||
41346263 IM |
73 | /** |
74 | * hotplug_handler_pre_plug: | |
75 | * | |
76 | * Call #HotplugHandlerClass.pre_plug callback of @plug_handler. | |
77 | */ | |
78 | void hotplug_handler_pre_plug(HotplugHandler *plug_handler, | |
79 | DeviceState *plugged_dev, | |
80 | Error **errp); | |
81 | ||
9f117d41 | 82 | /** |
14d5a28f | 83 | * hotplug_handler_unplug_request: |
9f117d41 | 84 | * |
14d5a28f | 85 | * Calls #HotplugHandlerClass.unplug_request callback of @plug_handler. |
9f117d41 | 86 | */ |
14d5a28f IM |
87 | void hotplug_handler_unplug_request(HotplugHandler *plug_handler, |
88 | DeviceState *plugged_dev, | |
89 | Error **errp); | |
181a2c63 IM |
90 | /** |
91 | * hotplug_handler_unplug: | |
92 | * | |
93 | * Calls #HotplugHandlerClass.unplug callback of @plug_handler. | |
94 | */ | |
95 | void hotplug_handler_unplug(HotplugHandler *plug_handler, | |
96 | DeviceState *plugged_dev, | |
97 | Error **errp); | |
9f117d41 | 98 | #endif |