xref: /qemu/include/hw/hotplug.h (revision 14d5a28fb6bb8ac6505ad1faca2690df56fef326)
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 #ifndef HOTPLUG_H
139f117d41SIgor Mammedov #define HOTPLUG_H
149f117d41SIgor Mammedov 
159f117d41SIgor Mammedov #include "qom/object.h"
169f117d41SIgor Mammedov #include "qemu/typedefs.h"
179f117d41SIgor Mammedov 
189f117d41SIgor Mammedov #define TYPE_HOTPLUG_HANDLER "hotplug-handler"
199f117d41SIgor Mammedov 
209f117d41SIgor Mammedov #define HOTPLUG_HANDLER_CLASS(klass) \
219f117d41SIgor Mammedov      OBJECT_CLASS_CHECK(HotplugHandlerClass, (klass), TYPE_HOTPLUG_HANDLER)
229f117d41SIgor Mammedov #define HOTPLUG_HANDLER_GET_CLASS(obj) \
239f117d41SIgor Mammedov      OBJECT_GET_CLASS(HotplugHandlerClass, (obj), TYPE_HOTPLUG_HANDLER)
249f117d41SIgor Mammedov #define HOTPLUG_HANDLER(obj) \
259f117d41SIgor Mammedov      INTERFACE_CHECK(HotplugHandler, (obj), TYPE_HOTPLUG_HANDLER)
269f117d41SIgor Mammedov 
279f117d41SIgor Mammedov 
289f117d41SIgor Mammedov typedef struct HotplugHandler {
299f117d41SIgor Mammedov     /* <private> */
309f117d41SIgor Mammedov     Object Parent;
319f117d41SIgor Mammedov } HotplugHandler;
329f117d41SIgor Mammedov 
339f117d41SIgor Mammedov /**
349f117d41SIgor Mammedov  * hotplug_fn:
359f117d41SIgor Mammedov  * @plug_handler: a device performing plug/uplug action
369f117d41SIgor Mammedov  * @plugged_dev: a device that has been (un)plugged
379f117d41SIgor Mammedov  * @errp: returns an error if this function fails
389f117d41SIgor Mammedov  */
399f117d41SIgor Mammedov typedef void (*hotplug_fn)(HotplugHandler *plug_handler,
409f117d41SIgor Mammedov                            DeviceState *plugged_dev, Error **errp);
419f117d41SIgor Mammedov 
429f117d41SIgor Mammedov /**
439f117d41SIgor Mammedov  * HotplugDeviceClass:
449f117d41SIgor Mammedov  *
459f117d41SIgor Mammedov  * Interface to be implemented by a device performing
469f117d41SIgor Mammedov  * hardware (un)plug functions.
479f117d41SIgor Mammedov  *
489f117d41SIgor Mammedov  * @parent: Opaque parent interface.
499f117d41SIgor Mammedov  * @plug: plug callback.
50*14d5a28fSIgor Mammedov  * @unplug_request: unplug request callback.
51*14d5a28fSIgor Mammedov  *                  Used as a means to initiate device unplug for devices that
52*14d5a28fSIgor Mammedov  *                  require asynchronous unplug handling.
539f117d41SIgor Mammedov  */
549f117d41SIgor Mammedov typedef struct HotplugHandlerClass {
559f117d41SIgor Mammedov     /* <private> */
569f117d41SIgor Mammedov     InterfaceClass parent;
579f117d41SIgor Mammedov 
589f117d41SIgor Mammedov     /* <public> */
599f117d41SIgor Mammedov     hotplug_fn plug;
60*14d5a28fSIgor Mammedov     hotplug_fn unplug_request;
619f117d41SIgor Mammedov } HotplugHandlerClass;
629f117d41SIgor Mammedov 
639f117d41SIgor Mammedov /**
649f117d41SIgor Mammedov  * hotplug_handler_plug:
659f117d41SIgor Mammedov  *
669f117d41SIgor Mammedov  * Call #HotplugHandlerClass.plug callback of @plug_handler.
679f117d41SIgor Mammedov  */
689f117d41SIgor Mammedov void hotplug_handler_plug(HotplugHandler *plug_handler,
699f117d41SIgor Mammedov                           DeviceState *plugged_dev,
709f117d41SIgor Mammedov                           Error **errp);
719f117d41SIgor Mammedov 
729f117d41SIgor Mammedov /**
73*14d5a28fSIgor Mammedov  * hotplug_handler_unplug_request:
749f117d41SIgor Mammedov  *
75*14d5a28fSIgor Mammedov  * Calls #HotplugHandlerClass.unplug_request callback of @plug_handler.
769f117d41SIgor Mammedov  */
77*14d5a28fSIgor Mammedov void hotplug_handler_unplug_request(HotplugHandler *plug_handler,
789f117d41SIgor Mammedov                                     DeviceState *plugged_dev,
799f117d41SIgor Mammedov                                     Error **errp);
809f117d41SIgor Mammedov #endif
81