/*
 * QEMU event-loop backend
 *
 * Copyright (C) 2022 Red Hat Inc
 *
 * Authors:
 *  Nicolas Saenz Julienne <nsaenzju@redhat.com>
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
 * See the COPYING file in the top-level directory.
 */
#ifndef QEMU_EVENT_LOOP_BASE_H
#define QEMU_EVENT_LOOP_BASE_H

#include "qom/object.h"
#include "block/aio.h"

#define TYPE_EVENT_LOOP_BASE         "event-loop-base"
OBJECT_DECLARE_TYPE(EventLoopBase, EventLoopBaseClass,
                    EVENT_LOOP_BASE)

struct EventLoopBaseClass {
    ObjectClass parent_class;

    void (*init)(EventLoopBase *base, Error **errp);
    void (*update_params)(EventLoopBase *base, Error **errp);
    bool (*can_be_deleted)(EventLoopBase *base);
};

struct EventLoopBase {
    Object parent;

    /* AioContext AIO engine parameters */
    int64_t aio_max_batch;

    /* AioContext thread pool parameters */
    int64_t thread_pool_min;
    int64_t thread_pool_max;
};
#endif
