162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#include "alloc_cache.h"
462306a36Sopenharmony_ci
562306a36Sopenharmony_cienum {
662306a36Sopenharmony_ci	IO_APOLL_OK,
762306a36Sopenharmony_ci	IO_APOLL_ABORTED,
862306a36Sopenharmony_ci	IO_APOLL_READY
962306a36Sopenharmony_ci};
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_cistruct io_poll {
1262306a36Sopenharmony_ci	struct file			*file;
1362306a36Sopenharmony_ci	struct wait_queue_head		*head;
1462306a36Sopenharmony_ci	__poll_t			events;
1562306a36Sopenharmony_ci	int				retries;
1662306a36Sopenharmony_ci	struct wait_queue_entry		wait;
1762306a36Sopenharmony_ci};
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct async_poll {
2062306a36Sopenharmony_ci	union {
2162306a36Sopenharmony_ci		struct io_poll		poll;
2262306a36Sopenharmony_ci		struct io_cache_entry	cache;
2362306a36Sopenharmony_ci	};
2462306a36Sopenharmony_ci	struct io_poll		*double_poll;
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ciint io_poll_add_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
2862306a36Sopenharmony_ciint io_poll_add(struct io_kiocb *req, unsigned int issue_flags);
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciint io_poll_remove_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
3162306a36Sopenharmony_ciint io_poll_remove(struct io_kiocb *req, unsigned int issue_flags);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistruct io_cancel_data;
3462306a36Sopenharmony_ciint io_poll_cancel(struct io_ring_ctx *ctx, struct io_cancel_data *cd,
3562306a36Sopenharmony_ci		   unsigned issue_flags);
3662306a36Sopenharmony_ciint io_arm_poll_handler(struct io_kiocb *req, unsigned issue_flags);
3762306a36Sopenharmony_cibool io_poll_remove_all(struct io_ring_ctx *ctx, struct task_struct *tsk,
3862306a36Sopenharmony_ci			bool cancel_all);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_civoid io_apoll_cache_free(struct io_cache_entry *entry);
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_civoid io_poll_task_func(struct io_kiocb *req, struct io_tw_state *ts);
43