qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

object_interfaces.h (6061B)


      1 #ifndef OBJECT_INTERFACES_H
      2 #define OBJECT_INTERFACES_H
      3 
      4 #include "qom/object.h"
      5 #include "qapi/qapi-types-qom.h"
      6 #include "qapi/visitor.h"
      7 
      8 #define TYPE_USER_CREATABLE "user-creatable"
      9 
     10 typedef struct UserCreatableClass UserCreatableClass;
     11 DECLARE_CLASS_CHECKERS(UserCreatableClass, USER_CREATABLE,
     12                        TYPE_USER_CREATABLE)
     13 #define USER_CREATABLE(obj) \
     14      INTERFACE_CHECK(UserCreatable, (obj), \
     15                      TYPE_USER_CREATABLE)
     16 
     17 typedef struct UserCreatable UserCreatable;
     18 
     19 /**
     20  * UserCreatableClass:
     21  * @parent_class: the base class
     22  * @complete: callback to be called after @obj's properties are set.
     23  * @can_be_deleted: callback to be called before an object is removed
     24  * to check if @obj can be removed safely.
     25  *
     26  * Interface is designed to work with -object/object-add/object_add
     27  * commands.
     28  * Interface is mandatory for objects that are designed to be user
     29  * creatable (i.e. -object/object-add/object_add, will accept only
     30  * objects that inherit this interface).
     31  *
     32  * Interface also provides an optional ability to do the second
     33  * stage * initialization of the object after its properties were
     34  * set.
     35  *
     36  * For objects created without using -object/object-add/object_add,
     37  * @user_creatable_complete() wrapper should be called manually if
     38  * object's type implements USER_CREATABLE interface and needs
     39  * complete() callback to be called.
     40  */
     41 struct UserCreatableClass {
     42     /* <private> */
     43     InterfaceClass parent_class;
     44 
     45     /* <public> */
     46     void (*complete)(UserCreatable *uc, Error **errp);
     47     bool (*can_be_deleted)(UserCreatable *uc);
     48 };
     49 
     50 /**
     51  * user_creatable_complete:
     52  * @uc: the user-creatable object whose complete() method is called if defined
     53  * @errp: if an error occurs, a pointer to an area to store the error
     54  *
     55  * Wrapper to call complete() method if one of types it's inherited
     56  * from implements USER_CREATABLE interface, otherwise the call does
     57  * nothing.
     58  *
     59  * Returns: %true on success, %false on failure.
     60  */
     61 bool user_creatable_complete(UserCreatable *uc, Error **errp);
     62 
     63 /**
     64  * user_creatable_can_be_deleted:
     65  * @uc: the object whose can_be_deleted() method is called if implemented
     66  *
     67  * Wrapper to call can_be_deleted() method if one of types it's inherited
     68  * from implements USER_CREATABLE interface.
     69  */
     70 bool user_creatable_can_be_deleted(UserCreatable *uc);
     71 
     72 /**
     73  * user_creatable_add_type:
     74  * @type: the object type name
     75  * @id: the unique ID for the object
     76  * @qdict: the object properties
     77  * @v: the visitor
     78  * @errp: if an error occurs, a pointer to an area to store the error
     79  *
     80  * Create an instance of the user creatable object @type, placing
     81  * it in the object composition tree with name @id, initializing
     82  * it with properties from @qdict
     83  *
     84  * Returns: the newly created object or NULL on error
     85  */
     86 Object *user_creatable_add_type(const char *type, const char *id,
     87                                 const QDict *qdict,
     88                                 Visitor *v, Error **errp);
     89 
     90 /**
     91  * user_creatable_add_qapi:
     92  * @options: the object definition
     93  * @errp: if an error occurs, a pointer to an area to store the error
     94  *
     95  * Create an instance of the user creatable object according to the
     96  * options passed in @opts as described in the QAPI schema documentation.
     97  */
     98 void user_creatable_add_qapi(ObjectOptions *options, Error **errp);
     99 
    100 /**
    101  * user_creatable_parse_str:
    102  * @optarg: the object definition string as passed on the command line
    103  * @errp: if an error occurs, a pointer to an area to store the error
    104  *
    105  * Parses the option for the user creatable object with a keyval parser and
    106  * implicit key 'qom-type', converting the result to ObjectOptions.
    107  *
    108  * If a help option is given, print help instead.
    109  *
    110  * Returns: ObjectOptions on success, NULL when an error occurred (*errp is set
    111  * then) or help was printed (*errp is not set).
    112  */
    113 ObjectOptions *user_creatable_parse_str(const char *optarg, Error **errp);
    114 
    115 /**
    116  * user_creatable_add_from_str:
    117  * @optarg: the object definition string as passed on the command line
    118  * @errp: if an error occurs, a pointer to an area to store the error
    119  *
    120  * Create an instance of the user creatable object by parsing optarg
    121  * with a keyval parser and implicit key 'qom-type', converting the
    122  * result to ObjectOptions and calling into qmp_object_add().
    123  *
    124  * If a help option is given, print help instead.
    125  *
    126  * Returns: true when an object was successfully created, false when an error
    127  * occurred (*errp is set then) or help was printed (*errp is not set).
    128  */
    129 bool user_creatable_add_from_str(const char *optarg, Error **errp);
    130 
    131 /**
    132  * user_creatable_process_cmdline:
    133  * @optarg: the object definition string as passed on the command line
    134  *
    135  * Create an instance of the user creatable object by parsing optarg
    136  * with a keyval parser and implicit key 'qom-type', converting the
    137  * result to ObjectOptions and calling into qmp_object_add().
    138  *
    139  * If a help option is given, print help instead and exit.
    140  *
    141  * This function is only meant to be called during command line parsing.
    142  * It exits the process on failure or after printing help.
    143  */
    144 void user_creatable_process_cmdline(const char *optarg);
    145 
    146 /**
    147  * user_creatable_print_help:
    148  * @type: the QOM type to be added
    149  * @opts: options to create
    150  *
    151  * Prints help if requested in @type or @opts. Note that if @type is neither
    152  * "help"/"?" nor a valid user creatable type, no help will be printed
    153  * regardless of @opts.
    154  *
    155  * Returns: true if a help option was found and help was printed, false
    156  * otherwise.
    157  */
    158 bool user_creatable_print_help(const char *type, QemuOpts *opts);
    159 
    160 /**
    161  * user_creatable_del:
    162  * @id: the unique ID for the object
    163  * @errp: if an error occurs, a pointer to an area to store the error
    164  *
    165  * Delete an instance of the user creatable object identified
    166  * by @id.
    167  *
    168  * Returns: %true on success, %false on failure.
    169  */
    170 bool user_creatable_del(const char *id, Error **errp);
    171 
    172 /**
    173  * user_creatable_cleanup:
    174  *
    175  * Delete all user-creatable objects and the user-creatable
    176  * objects container.
    177  */
    178 void user_creatable_cleanup(void);
    179 
    180 #endif