#if !defined(IOV_H)
#define IOV_H
#include "config.h"
#include <stdlib.h>
#include <sys/uio.h>
#include <inttypes.h>
#include <rdma/fabric.h>
static inline size_t ofi_total_iov_len(const struct iovec *iov, size_t iov_count)
{
size_t i, len = 0;
for (i = 0; i < iov_count; i++)
len += iov[i].iov_len;
return len;
}
static inline size_t ofi_total_ioc_cnt(const struct fi_ioc *ioc, size_t ioc_count)
{
size_t i, cnt = 0;
for (i = 0; i < ioc_count; i++)
cnt += ioc[i].count;
return cnt;
}
#define OFI_COPY_IOV_TO_BUF 0
#define OFI_COPY_BUF_TO_IOV 1
uint64_t ofi_copy_iov_buf(const struct iovec *iov, size_t iov_count,
uint64_t iov_offset, void *buf, uint64_t bufsize,
int dir);
static inline uint64_t
ofi_copy_to_iov(const struct iovec *iov, size_t iov_count,
uint64_t iov_offset, void *buf, uint64_t bufsize)
{
return ofi_copy_iov_buf(iov, iov_count, iov_offset, buf, bufsize,
OFI_COPY_BUF_TO_IOV);
}
static inline uint64_t
ofi_copy_from_iov(void *buf, uint64_t bufsize,
const struct iovec *iov, size_t iov_count, uint64_t iov_offset)
{
return ofi_copy_iov_buf(iov, iov_count, iov_offset, buf, bufsize,
OFI_COPY_IOV_TO_BUF);
}
#endif