/*
 * Event loop with file descriptor polling
 *
 * Copyright 2012 IBM, Corp.
 * Copyright 2012 Red Hat, Inc. and/or its affiliates
 *
 * Authors:
 *   Stefan Hajnoczi <stefanha@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 EVENT_POLL_H
#define EVENT_POLL_H

#include "hw/event_notifier.h"

typedef struct EventHandler EventHandler;
typedef void EventCallback(EventHandler *handler);
struct EventHandler {
    EventNotifier *notifier;        /* eventfd */
    EventCallback *callback;        /* callback function */
};

typedef struct {
    int epoll_fd;                   /* epoll(2) file descriptor */
    EventNotifier stop_notifier;    /* stop poll notifier */
    EventHandler stop_handler;      /* stop poll handler */
} EventPoll;

void event_poll_add(EventPoll *poll, EventHandler *handler,
                    EventNotifier *notifier, EventCallback *callback);
void event_poll_init(EventPoll *poll);
void event_poll_cleanup(EventPoll *poll);
void event_poll(EventPoll *poll);
void event_poll_notify(EventPoll *poll);

#endif /* EVENT_POLL_H */
