blob: a9038213aa4d6a6bf8f86ef74c85846f4d9074cf [file] [log] [blame]
/*
* Copyright (C) 2013-2015 Kay Sievers
* Copyright (C) 2013-2015 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
* Copyright (C) 2013-2015 Daniel Mack <daniel@zonque.org>
* Copyright (C) 2013-2015 David Herrmann <dh.herrmann@gmail.com>
* Copyright (C) 2013-2015 Linux Foundation
* Copyright (C) 2014-2015 Djalal Harouni <tixxdz@opendz.org>
*
* kdbus is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation; either version 2.1 of the License, or (at
* your option) any later version.
*/
#ifndef __KDBUS_POOL_H
#define __KDBUS_POOL_H
#include <linux/uio.h>
struct kdbus_pool;
struct kdbus_pool_slice;
struct kdbus_pool *kdbus_pool_new(const char *name, size_t size);
void kdbus_pool_free(struct kdbus_pool *pool);
void kdbus_pool_accounted(struct kdbus_pool *pool, size_t *size, size_t *acc);
int kdbus_pool_mmap(const struct kdbus_pool *pool, struct vm_area_struct *vma);
int kdbus_pool_release_offset(struct kdbus_pool *pool, size_t off);
void kdbus_pool_publish_empty(struct kdbus_pool *pool, u64 *off, u64 *size);
struct kdbus_pool_slice *kdbus_pool_slice_alloc(struct kdbus_pool *pool,
size_t size, bool accounted);
void kdbus_pool_slice_release(struct kdbus_pool_slice *slice);
void kdbus_pool_slice_publish(struct kdbus_pool_slice *slice,
u64 *out_offset, u64 *out_size);
off_t kdbus_pool_slice_offset(const struct kdbus_pool_slice *slice);
size_t kdbus_pool_slice_size(const struct kdbus_pool_slice *slice);
int kdbus_pool_slice_copy(const struct kdbus_pool_slice *slice_dst,
const struct kdbus_pool_slice *slice_src);
ssize_t kdbus_pool_slice_copy_kvec(const struct kdbus_pool_slice *slice,
loff_t off, struct kvec *kvec,
size_t kvec_count, size_t total_len);
ssize_t kdbus_pool_slice_copy_iovec(const struct kdbus_pool_slice *slice,
loff_t off, struct iovec *iov,
size_t iov_count, size_t total_len);
#endif