/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Berkeley style UIO structures - Alan Cox 1994. */ #ifndef __LINUX_UIO_H #define __LINUX_UIO_H #include struct kvec { void *iov_base; size_t iov_len; }; struct iovec { void __user *iov_base; size_t iov_len; }; enum iter_type { ITER_UBUF, ITER_IOVEC, ITER_BVEC, ITER_KVEC, ITER_XARRAY, ITER_DISCARD, }; struct iov_iter { u8 iter_type; bool nofault; bool data_source; size_t iov_offset; union { size_t count; }; union { const struct iovec *__iov; const struct kvec *kvec; const struct bio_vec *bvec; struct xarray *xarray; void __user *ubuf; }; union { unsigned long nr_segs; loff_t xarray_start; }; }; static inline size_t iov_iter_count(const struct iov_iter *i) { return i->count; } static inline void iov_iter_truncate(struct iov_iter *i, size_t count) { if (i->count > count) i->count = count; } static inline size_t iov_iter_alignment(const struct iov_iter *i) { return 0; /* Stub - assume aligned */ } #endif /* __LINUX_UIO_H */