Blame axfer/waiter.h

Packit Service a9274b
// SPDX-License-Identifier: GPL-2.0
Packit Service a9274b
//
Packit Service a9274b
// waiter.h - a header for I/O event waiter.
Packit Service a9274b
//
Packit Service a9274b
// Copyright (c) 2018 Takashi Sakamoto <o-takashi@sakamocchi.jp>
Packit Service a9274b
//
Packit Service a9274b
// Licensed under the terms of the GNU General Public License, version 2.
Packit Service a9274b
Packit Service a9274b
#ifndef __ALSA_UTILS_AXFER_WAITER__H_
Packit Service a9274b
#define __ALSA_UTILS_AXFER_WAITER__H_
Packit Service a9274b
Packit Service a9274b
#include <poll.h>
Packit Service a9274b
Packit Service a9274b
enum waiter_type {
Packit Service a9274b
	WAITER_TYPE_DEFAULT = 0,
Packit Service a9274b
	WAITER_TYPE_POLL,
Packit Service a9274b
	WAITER_TYPE_SELECT,
Packit Service a9274b
	WAITER_TYPE_EPOLL,
Packit Service a9274b
	WAITER_TYPE_COUNT,
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
struct waiter_ops;
Packit Service a9274b
Packit Service a9274b
struct waiter_context {
Packit Service a9274b
	enum waiter_type type;
Packit Service a9274b
	const struct waiter_ops *ops;
Packit Service a9274b
	void *private_data;
Packit Service a9274b
Packit Service a9274b
	struct pollfd *pfds;
Packit Service a9274b
	unsigned int pfd_count;
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
enum waiter_type waiter_type_from_label(const char *label);
Packit Service a9274b
const char *waiter_label_from_type(enum waiter_type type);
Packit Service a9274b
Packit Service a9274b
int waiter_context_init(struct waiter_context *waiter,
Packit Service a9274b
			enum waiter_type type, unsigned int pfd_count);
Packit Service a9274b
int waiter_context_prepare(struct waiter_context *waiter);
Packit Service a9274b
int waiter_context_wait_event(struct waiter_context *waiter,
Packit Service a9274b
				int timeout_msec);
Packit Service a9274b
void waiter_context_release(struct waiter_context *waiter);
Packit Service a9274b
void waiter_context_destroy(struct waiter_context *waiter);
Packit Service a9274b
Packit Service a9274b
// For internal use in 'waiter' module.
Packit Service a9274b
Packit Service a9274b
struct waiter_ops {
Packit Service a9274b
	int (*prepare)(struct waiter_context *waiter);
Packit Service a9274b
	int (*wait_event)(struct waiter_context *waiter, int timeout_msec);
Packit Service a9274b
	void (*release)(struct waiter_context *waiter);
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
struct waiter_data {
Packit Service a9274b
	struct waiter_ops ops;
Packit Service a9274b
	unsigned int private_size;
Packit Service a9274b
};
Packit Service a9274b
Packit Service a9274b
extern const struct waiter_data waiter_poll;
Packit Service a9274b
extern const struct waiter_data waiter_select;
Packit Service a9274b
extern const struct waiter_data waiter_epoll;
Packit Service a9274b
Packit Service a9274b
#endif