9
9
#include "kfifo_buf.h"
11
#define iio_to_kfifo(r) container_of(r, struct iio_kfifo, ring)
11
13
static inline int __iio_allocate_kfifo(struct iio_kfifo *buf,
12
14
int bytes_per_datum, int length)
18
20
return kfifo_alloc(&buf->kf, bytes_per_datum*length, GFP_KERNEL);
21
int iio_request_update_kfifo(struct iio_ring_buffer *r)
23
static int iio_request_update_kfifo(struct iio_ring_buffer *r)
24
26
struct iio_kfifo *buf = iio_to_kfifo(r);
37
39
mutex_unlock(&buf->use_lock);
40
EXPORT_SYMBOL(iio_request_update_kfifo);
42
void iio_mark_kfifo_in_use(struct iio_ring_buffer *r)
43
static void iio_mark_kfifo_in_use(struct iio_ring_buffer *r)
44
45
struct iio_kfifo *buf = iio_to_kfifo(r);
45
46
mutex_lock(&buf->use_lock);
47
48
mutex_unlock(&buf->use_lock);
49
EXPORT_SYMBOL(iio_mark_kfifo_in_use);
51
void iio_unmark_kfifo_in_use(struct iio_ring_buffer *r)
51
static void iio_unmark_kfifo_in_use(struct iio_ring_buffer *r)
53
53
struct iio_kfifo *buf = iio_to_kfifo(r);
54
54
mutex_lock(&buf->use_lock);
56
56
mutex_unlock(&buf->use_lock);
58
EXPORT_SYMBOL(iio_unmark_kfifo_in_use);
60
int iio_get_length_kfifo(struct iio_ring_buffer *r)
59
static int iio_get_length_kfifo(struct iio_ring_buffer *r)
64
EXPORT_SYMBOL(iio_get_length_kfifo);
66
64
static inline void __iio_init_kfifo(struct iio_kfifo *kf)
108
106
kf = kzalloc(sizeof *kf, GFP_KERNEL);
109
kf->update_needed = true;
111
110
iio_ring_buffer_init(&kf->ring, indio_dev);
112
111
__iio_init_kfifo(kf);
113
112
kf->ring.dev.type = &iio_kfifo_type;
121
120
EXPORT_SYMBOL(iio_kfifo_allocate);
123
int iio_get_bytes_per_datum_kfifo(struct iio_ring_buffer *r)
122
static int iio_get_bytes_per_datum_kfifo(struct iio_ring_buffer *r)
125
124
return r->bytes_per_datum;
127
EXPORT_SYMBOL(iio_get_bytes_per_datum_kfifo);
129
int iio_set_bytes_per_datum_kfifo(struct iio_ring_buffer *r, size_t bpd)
127
static int iio_set_bytes_per_datum_kfifo(struct iio_ring_buffer *r, size_t bpd)
131
129
if (r->bytes_per_datum != bpd) {
132
130
r->bytes_per_datum = bpd;
133
if (r->access.mark_param_change)
134
r->access.mark_param_change(r);
131
if (r->access->mark_param_change)
132
r->access->mark_param_change(r);
138
EXPORT_SYMBOL(iio_set_bytes_per_datum_kfifo);
140
int iio_mark_update_needed_kfifo(struct iio_ring_buffer *r)
137
static int iio_mark_update_needed_kfifo(struct iio_ring_buffer *r)
142
139
struct iio_kfifo *kf = iio_to_kfifo(r);
143
140
kf->update_needed = true;
146
EXPORT_SYMBOL(iio_mark_update_needed_kfifo);
148
int iio_set_length_kfifo(struct iio_ring_buffer *r, int length)
144
static int iio_set_length_kfifo(struct iio_ring_buffer *r, int length)
150
146
if (r->length != length) {
151
147
r->length = length;
152
if (r->access.mark_param_change)
153
r->access.mark_param_change(r);
148
if (r->access->mark_param_change)
149
r->access->mark_param_change(r);
157
EXPORT_SYMBOL(iio_set_length_kfifo);
159
154
void iio_kfifo_free(struct iio_ring_buffer *r)
164
159
EXPORT_SYMBOL(iio_kfifo_free);
166
int iio_store_to_kfifo(struct iio_ring_buffer *r, u8 *data, s64 timestamp)
161
static int iio_store_to_kfifo(struct iio_ring_buffer *r,
169
166
struct iio_kfifo *kf = iio_to_kfifo(r);
182
EXPORT_SYMBOL(iio_store_to_kfifo);
184
int iio_rip_kfifo(struct iio_ring_buffer *r,
185
size_t count, char __user *buf, int *deadoffset)
180
static int iio_read_first_n_kfifo(struct iio_ring_buffer *r,
181
size_t n, char __user *buf)
188
184
struct iio_kfifo *kf = iio_to_kfifo(r);
191
ret = kfifo_to_user(&kf->kf, buf, r->bytes_per_datum*count, &copied);
186
ret = kfifo_to_user(&kf->kf, buf, r->bytes_per_datum*n, &copied);
195
EXPORT_SYMBOL(iio_rip_kfifo);
191
const struct iio_ring_access_funcs kfifo_access_funcs = {
192
.mark_in_use = &iio_mark_kfifo_in_use,
193
.unmark_in_use = &iio_unmark_kfifo_in_use,
194
.store_to = &iio_store_to_kfifo,
195
.read_first_n = &iio_read_first_n_kfifo,
196
.mark_param_change = &iio_mark_update_needed_kfifo,
197
.request_update = &iio_request_update_kfifo,
198
.get_bytes_per_datum = &iio_get_bytes_per_datum_kfifo,
199
.set_bytes_per_datum = &iio_set_bytes_per_datum_kfifo,
200
.get_length = &iio_get_length_kfifo,
201
.set_length = &iio_set_length_kfifo,
203
EXPORT_SYMBOL(kfifo_access_funcs);
196
205
MODULE_LICENSE("GPL");