cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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
     10typedef struct UserCreatableClass UserCreatableClass;
     11DECLARE_CLASS_CHECKERS(UserCreatableClass, USER_CREATABLE,
     12                       TYPE_USER_CREATABLE)
     13#define USER_CREATABLE(obj) \
     14     INTERFACE_CHECK(UserCreatable, (obj), \
     15                     TYPE_USER_CREATABLE)
     16
     17typedef 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 */
     41struct 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 */
     61bool 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 */
     70bool 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 */
     86Object *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 */
     98void 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 */
    113ObjectOptions *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 */
    129bool 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 */
    144void 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 */
    158bool 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 */
    170bool 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 */
    178void user_creatable_cleanup(void);
    179
    180#endif