summaryrefslogtreecommitdiff
path: root/ipc/kdbus/pool.h
blob: a9038213aa4d6a6bf8f86ef74c85846f4d9074cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
 * 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