Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[firefly-linux-kernel-4.4.55.git] / drivers / staging / iio / kfifo_buf.h
1
2 #include <linux/kfifo.h>
3 #include "iio.h"
4 #include "ring_generic.h"
5
6 struct iio_kfifo {
7         struct iio_ring_buffer ring;
8         struct kfifo kf;
9         int use_count;
10         int update_needed;
11         struct mutex use_lock;
12 };
13
14 #define iio_to_kfifo(r) container_of(r, struct iio_kfifo, ring)
15
16 int iio_create_kfifo(struct iio_ring_buffer **r);
17 int iio_init_kfifo(struct iio_ring_buffer *r, struct iio_dev *indio_dev);
18 void iio_exit_kfifo(struct iio_ring_buffer *r);
19 void iio_free_kfifo(struct iio_ring_buffer *r);
20 void iio_mark_kfifo_in_use(struct iio_ring_buffer *r);
21 void iio_unmark_kfifo_in_use(struct iio_ring_buffer *r);
22
23 int iio_store_to_kfifo(struct iio_ring_buffer *r, u8 *data, s64 timestamp);
24 int iio_rip_kfifo(struct iio_ring_buffer *r,
25                 size_t count,
26                 char __user *buf,
27                 int *dead_offset);
28
29 int iio_request_update_kfifo(struct iio_ring_buffer *r);
30 int iio_mark_update_needed_kfifo(struct iio_ring_buffer *r);
31
32 int iio_get_bytes_per_datum_kfifo(struct iio_ring_buffer *r);
33 int iio_set_bytes_per_datum_kfifo(struct iio_ring_buffer *r, size_t bpd);
34 int iio_get_length_kfifo(struct iio_ring_buffer *r);
35 int iio_set_length_kfifo(struct iio_ring_buffer *r, int length);
36
37 static inline void iio_kfifo_register_funcs(struct iio_ring_access_funcs *ra)
38 {
39         ra->mark_in_use = &iio_mark_kfifo_in_use;
40         ra->unmark_in_use = &iio_unmark_kfifo_in_use;
41
42         ra->store_to = &iio_store_to_kfifo;
43         ra->rip_lots = &iio_rip_kfifo;
44
45         ra->mark_param_change = &iio_mark_update_needed_kfifo;
46         ra->request_update = &iio_request_update_kfifo;
47
48         ra->get_bytes_per_datum = &iio_get_bytes_per_datum_kfifo;
49         ra->set_bytes_per_datum = &iio_set_bytes_per_datum_kfifo;
50         ra->get_length = &iio_get_length_kfifo;
51         ra->set_length = &iio_set_length_kfifo;
52 };
53
54 struct iio_ring_buffer *iio_kfifo_allocate(struct iio_dev *indio_dev);
55 void iio_kfifo_free(struct iio_ring_buffer *r);
56