162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#include <linux/net.h>
462306a36Sopenharmony_ci#include <linux/uio.h>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include "alloc_cache.h"
762306a36Sopenharmony_ci
862306a36Sopenharmony_cistruct io_async_msghdr {
962306a36Sopenharmony_ci#if defined(CONFIG_NET)
1062306a36Sopenharmony_ci	union {
1162306a36Sopenharmony_ci		struct iovec		fast_iov[UIO_FASTIOV];
1262306a36Sopenharmony_ci		struct {
1362306a36Sopenharmony_ci			struct iovec	fast_iov_one;
1462306a36Sopenharmony_ci			__kernel_size_t	controllen;
1562306a36Sopenharmony_ci			int		namelen;
1662306a36Sopenharmony_ci			__kernel_size_t	payloadlen;
1762306a36Sopenharmony_ci		};
1862306a36Sopenharmony_ci		struct io_cache_entry	cache;
1962306a36Sopenharmony_ci	};
2062306a36Sopenharmony_ci	/* points to an allocated iov, if NULL we use fast_iov instead */
2162306a36Sopenharmony_ci	struct iovec			*free_iov;
2262306a36Sopenharmony_ci	struct sockaddr __user		*uaddr;
2362306a36Sopenharmony_ci	struct msghdr			msg;
2462306a36Sopenharmony_ci	struct sockaddr_storage		addr;
2562306a36Sopenharmony_ci#endif
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#if defined(CONFIG_NET)
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct io_async_connect {
3162306a36Sopenharmony_ci	struct sockaddr_storage		address;
3262306a36Sopenharmony_ci};
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ciint io_shutdown_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
3562306a36Sopenharmony_ciint io_shutdown(struct io_kiocb *req, unsigned int issue_flags);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciint io_sendmsg_prep_async(struct io_kiocb *req);
3862306a36Sopenharmony_civoid io_sendmsg_recvmsg_cleanup(struct io_kiocb *req);
3962306a36Sopenharmony_ciint io_sendmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
4062306a36Sopenharmony_ciint io_sendmsg(struct io_kiocb *req, unsigned int issue_flags);
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciint io_send(struct io_kiocb *req, unsigned int issue_flags);
4362306a36Sopenharmony_ciint io_send_prep_async(struct io_kiocb *req);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciint io_recvmsg_prep_async(struct io_kiocb *req);
4662306a36Sopenharmony_ciint io_recvmsg_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
4762306a36Sopenharmony_ciint io_recvmsg(struct io_kiocb *req, unsigned int issue_flags);
4862306a36Sopenharmony_ciint io_recv(struct io_kiocb *req, unsigned int issue_flags);
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_civoid io_sendrecv_fail(struct io_kiocb *req);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciint io_accept_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
5362306a36Sopenharmony_ciint io_accept(struct io_kiocb *req, unsigned int issue_flags);
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciint io_socket_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
5662306a36Sopenharmony_ciint io_socket(struct io_kiocb *req, unsigned int issue_flags);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciint io_connect_prep_async(struct io_kiocb *req);
5962306a36Sopenharmony_ciint io_connect_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
6062306a36Sopenharmony_ciint io_connect(struct io_kiocb *req, unsigned int issue_flags);
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciint io_send_zc(struct io_kiocb *req, unsigned int issue_flags);
6362306a36Sopenharmony_ciint io_sendmsg_zc(struct io_kiocb *req, unsigned int issue_flags);
6462306a36Sopenharmony_ciint io_send_zc_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
6562306a36Sopenharmony_civoid io_send_zc_cleanup(struct io_kiocb *req);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_civoid io_netmsg_cache_free(struct io_cache_entry *entry);
6862306a36Sopenharmony_ci#else
6962306a36Sopenharmony_cistatic inline void io_netmsg_cache_free(struct io_cache_entry *entry)
7062306a36Sopenharmony_ci{
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci#endif
73