1 // SPDX-License-Identifier: GPL-2.0-only
2 /* The industrial I/O core
3 *
4 * Copyright (c) 2008 Jonathan Cameron
5 *
6 * Handling of buffer allocation / resizing.
7 *
8 * Things to look at here.
9 * - Better memory allocation techniques?
10 * - Alternative access techniques?
11 */
12 #include <linux/atomic.h>
13 #include <linux/anon_inodes.h>
14 #include <linux/cleanup.h>
15 #include <linux/kernel.h>
16 #include <linux/export.h>
17 #include <linux/device.h>
18 #include <linux/dma-buf.h>
19 #include <linux/dma-fence.h>
20 #include <linux/dma-resv.h>
21 #include <linux/file.h>
22 #include <linux/fs.h>
23 #include <linux/cdev.h>
24 #include <linux/slab.h>
25 #include <linux/mm.h>
26 #include <linux/poll.h>
27 #include <linux/sched/signal.h>
28
29 #include <linux/iio/iio.h>
30 #include <linux/iio/iio-opaque.h>
31 #include "iio_core.h"
32 #include "iio_core_trigger.h"
33 #include <linux/iio/sysfs.h>
34 #include <linux/iio/buffer.h>
35 #include <linux/iio/buffer_impl.h>
36
37 #define DMABUF_ENQUEUE_TIMEOUT_MS 5000
38
39 MODULE_IMPORT_NS("DMA_BUF");
40
41 struct iio_dmabuf_priv {
42 struct list_head entry;
43 struct kref ref;
44
45 struct iio_buffer *buffer;
46 struct iio_dma_buffer_block *block;
47
48 u64 context;
49
50 /* Spinlock used for locking the dma_fence */
51 spinlock_t lock;
52
53 struct dma_buf_attachment *attach;
54 struct sg_table *sgt;
55 enum dma_data_direction dir;
56 atomic_t seqno;
57 };
58
59 struct iio_dma_fence {
60 struct dma_fence base;
61 struct iio_dmabuf_priv *priv;
62 struct work_struct work;
63 };
64
65 static const char * const iio_endian_prefix[] = {
66 [IIO_BE] = "be",
67 [IIO_LE] = "le",
68 };
69
iio_buffer_is_active(struct iio_buffer * buf)70 static bool iio_buffer_is_active(struct iio_buffer *buf)
71 {
72 return !list_empty(&buf->buffer_list);
73 }
74
iio_buffer_data_available(struct iio_buffer * buf)75 static size_t iio_buffer_data_available(struct iio_buffer *buf)
76 {
77 return buf->access->data_available(buf);
78 }
79
iio_buffer_flush_hwfifo(struct iio_dev * indio_dev,struct iio_buffer * buf,size_t required)80 static int iio_buffer_flush_hwfifo(struct iio_dev *indio_dev,
81 struct iio_buffer *buf, size_t required)
82 {
83 if (!indio_dev->info->hwfifo_flush_to_buffer)
84 return -ENODEV;
85
86 return indio_dev->info->hwfifo_flush_to_buffer(indio_dev, required);
87 }
88
iio_buffer_ready(struct iio_dev * indio_dev,struct iio_buffer * buf,size_t to_wait,int to_flush)89 static bool iio_buffer_ready(struct iio_dev *indio_dev, struct iio_buffer *buf,
90 size_t to_wait, int to_flush)
91 {
92 size_t avail;
93 int flushed = 0;
94
95 /* wakeup if the device was unregistered */
96 if (!indio_dev->info)
97 return true;
98
99 /* drain the buffer if it was disabled */
100 if (!iio_buffer_is_active(buf)) {
101 to_wait = min_t(size_t, to_wait, 1);
102 to_flush = 0;
103 }
104
105 avail = iio_buffer_data_available(buf);
106
107 if (avail >= to_wait) {
108 /* force a flush for non-blocking reads */
109 if (!to_wait && avail < to_flush)
110 iio_buffer_flush_hwfifo(indio_dev, buf,
111 to_flush - avail);
112 return true;
113 }
114
115 if (to_flush)
116 flushed = iio_buffer_flush_hwfifo(indio_dev, buf,
117 to_wait - avail);
118 if (flushed <= 0)
119 return false;
120
121 if (avail + flushed >= to_wait)
122 return true;
123
124 return false;
125 }
126
127 /**
128 * iio_buffer_read() - chrdev read for buffer access
129 * @filp: File structure pointer for the char device
130 * @buf: Destination buffer for iio buffer read
131 * @n: First n bytes to read
132 * @f_ps: Long offset provided by the user as a seek position
133 *
134 * This function relies on all buffer implementations having an
135 * iio_buffer as their first element.
136 *
137 * Return: negative values corresponding to error codes or ret != 0
138 * for ending the reading activity
139 **/
iio_buffer_read(struct file * filp,char __user * buf,size_t n,loff_t * f_ps)140 static ssize_t iio_buffer_read(struct file *filp, char __user *buf,
141 size_t n, loff_t *f_ps)
142 {
143 struct iio_dev_buffer_pair *ib = filp->private_data;
144 struct iio_buffer *rb = ib->buffer;
145 struct iio_dev *indio_dev = ib->indio_dev;
146 DEFINE_WAIT_FUNC(wait, woken_wake_function);
147 size_t datum_size;
148 size_t to_wait;
149 int ret = 0;
150
151 if (!indio_dev->info)
152 return -ENODEV;
153
154 if (!rb || !rb->access->read)
155 return -EINVAL;
156
157 if (rb->direction != IIO_BUFFER_DIRECTION_IN)
158 return -EPERM;
159
160 datum_size = rb->bytes_per_datum;
161
162 /*
163 * If datum_size is 0 there will never be anything to read from the
164 * buffer, so signal end of file now.
165 */
166 if (!datum_size)
167 return 0;
168
169 if (filp->f_flags & O_NONBLOCK)
170 to_wait = 0;
171 else
172 to_wait = min_t(size_t, n / datum_size, rb->watermark);
173
174 add_wait_queue(&rb->pollq, &wait);
175 do {
176 if (!indio_dev->info) {
177 ret = -ENODEV;
178 break;
179 }
180
181 if (!iio_buffer_ready(indio_dev, rb, to_wait, n / datum_size)) {
182 if (signal_pending(current)) {
183 ret = -ERESTARTSYS;
184 break;
185 }
186
187 wait_woken(&wait, TASK_INTERRUPTIBLE,
188 MAX_SCHEDULE_TIMEOUT);
189 continue;
190 }
191
192 ret = rb->access->read(rb, n, buf);
193 if (ret == 0 && (filp->f_flags & O_NONBLOCK))
194 ret = -EAGAIN;
195 } while (ret == 0);
196 remove_wait_queue(&rb->pollq, &wait);
197
198 return ret;
199 }
200
iio_buffer_space_available(struct iio_buffer * buf)201 static size_t iio_buffer_space_available(struct iio_buffer *buf)
202 {
203 if (buf->access->space_available)
204 return buf->access->space_available(buf);
205
206 return SIZE_MAX;
207 }
208
iio_buffer_write(struct file * filp,const char __user * buf,size_t n,loff_t * f_ps)209 static ssize_t iio_buffer_write(struct file *filp, const char __user *buf,
210 size_t n, loff_t *f_ps)
211 {
212 struct iio_dev_buffer_pair *ib = filp->private_data;
213 struct iio_buffer *rb = ib->buffer;
214 struct iio_dev *indio_dev = ib->indio_dev;
215 DEFINE_WAIT_FUNC(wait, woken_wake_function);
216 int ret = 0;
217 size_t written;
218
219 if (!indio_dev->info)
220 return -ENODEV;
221
222 if (!rb || !rb->access->write)
223 return -EINVAL;
224
225 if (rb->direction != IIO_BUFFER_DIRECTION_OUT)
226 return -EPERM;
227
228 written = 0;
229 add_wait_queue(&rb->pollq, &wait);
230 do {
231 if (!indio_dev->info) {
232 ret = -ENODEV;
233 break;
234 }
235
236 if (!iio_buffer_space_available(rb)) {
237 if (signal_pending(current)) {
238 ret = -ERESTARTSYS;
239 break;
240 }
241
242 if (filp->f_flags & O_NONBLOCK) {
243 if (!written)
244 ret = -EAGAIN;
245 break;
246 }
247
248 wait_woken(&wait, TASK_INTERRUPTIBLE,
249 MAX_SCHEDULE_TIMEOUT);
250 continue;
251 }
252
253 ret = rb->access->write(rb, n - written, buf + written);
254 if (ret < 0)
255 break;
256
257 written += ret;
258
259 } while (written != n);
260 remove_wait_queue(&rb->pollq, &wait);
261
262 return ret < 0 ? ret : written;
263 }
264
265 /**
266 * iio_buffer_poll() - poll the buffer to find out if it has data
267 * @filp: File structure pointer for device access
268 * @wait: Poll table structure pointer for which the driver adds
269 * a wait queue
270 *
271 * Return: (EPOLLIN | EPOLLRDNORM) if data is available for reading
272 * or 0 for other cases
273 */
iio_buffer_poll(struct file * filp,struct poll_table_struct * wait)274 static __poll_t iio_buffer_poll(struct file *filp,
275 struct poll_table_struct *wait)
276 {
277 struct iio_dev_buffer_pair *ib = filp->private_data;
278 struct iio_buffer *rb = ib->buffer;
279 struct iio_dev *indio_dev = ib->indio_dev;
280
281 if (!indio_dev->info || !rb)
282 return 0;
283
284 poll_wait(filp, &rb->pollq, wait);
285
286 switch (rb->direction) {
287 case IIO_BUFFER_DIRECTION_IN:
288 if (iio_buffer_ready(indio_dev, rb, rb->watermark, 0))
289 return EPOLLIN | EPOLLRDNORM;
290 break;
291 case IIO_BUFFER_DIRECTION_OUT:
292 if (iio_buffer_space_available(rb))
293 return EPOLLOUT | EPOLLWRNORM;
294 break;
295 }
296
297 return 0;
298 }
299
iio_buffer_read_wrapper(struct file * filp,char __user * buf,size_t n,loff_t * f_ps)300 ssize_t iio_buffer_read_wrapper(struct file *filp, char __user *buf,
301 size_t n, loff_t *f_ps)
302 {
303 struct iio_dev_buffer_pair *ib = filp->private_data;
304 struct iio_buffer *rb = ib->buffer;
305
306 /* check if buffer was opened through new API */
307 if (test_bit(IIO_BUSY_BIT_POS, &rb->flags))
308 return -EBUSY;
309
310 return iio_buffer_read(filp, buf, n, f_ps);
311 }
312
iio_buffer_write_wrapper(struct file * filp,const char __user * buf,size_t n,loff_t * f_ps)313 ssize_t iio_buffer_write_wrapper(struct file *filp, const char __user *buf,
314 size_t n, loff_t *f_ps)
315 {
316 struct iio_dev_buffer_pair *ib = filp->private_data;
317 struct iio_buffer *rb = ib->buffer;
318
319 /* check if buffer was opened through new API */
320 if (test_bit(IIO_BUSY_BIT_POS, &rb->flags))
321 return -EBUSY;
322
323 return iio_buffer_write(filp, buf, n, f_ps);
324 }
325
iio_buffer_poll_wrapper(struct file * filp,struct poll_table_struct * wait)326 __poll_t iio_buffer_poll_wrapper(struct file *filp,
327 struct poll_table_struct *wait)
328 {
329 struct iio_dev_buffer_pair *ib = filp->private_data;
330 struct iio_buffer *rb = ib->buffer;
331
332 /* check if buffer was opened through new API */
333 if (test_bit(IIO_BUSY_BIT_POS, &rb->flags))
334 return 0;
335
336 return iio_buffer_poll(filp, wait);
337 }
338
339 /**
340 * iio_buffer_wakeup_poll - Wakes up the buffer waitqueue
341 * @indio_dev: The IIO device
342 *
343 * Wakes up the event waitqueue used for poll(). Should usually
344 * be called when the device is unregistered.
345 */
iio_buffer_wakeup_poll(struct iio_dev * indio_dev)346 void iio_buffer_wakeup_poll(struct iio_dev *indio_dev)
347 {
348 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
349 struct iio_buffer *buffer;
350 unsigned int i;
351
352 for (i = 0; i < iio_dev_opaque->attached_buffers_cnt; i++) {
353 buffer = iio_dev_opaque->attached_buffers[i];
354 wake_up(&buffer->pollq);
355 }
356 }
357
iio_pop_from_buffer(struct iio_buffer * buffer,void * data)358 int iio_pop_from_buffer(struct iio_buffer *buffer, void *data)
359 {
360 if (!buffer || !buffer->access || !buffer->access->remove_from)
361 return -EINVAL;
362
363 return buffer->access->remove_from(buffer, data);
364 }
365 EXPORT_SYMBOL_GPL(iio_pop_from_buffer);
366
iio_buffer_init(struct iio_buffer * buffer)367 void iio_buffer_init(struct iio_buffer *buffer)
368 {
369 INIT_LIST_HEAD(&buffer->demux_list);
370 INIT_LIST_HEAD(&buffer->buffer_list);
371 INIT_LIST_HEAD(&buffer->dmabufs);
372 mutex_init(&buffer->dmabufs_mutex);
373 init_waitqueue_head(&buffer->pollq);
374 kref_init(&buffer->ref);
375 if (!buffer->watermark)
376 buffer->watermark = 1;
377 }
378 EXPORT_SYMBOL(iio_buffer_init);
379
iio_device_detach_buffers(struct iio_dev * indio_dev)380 void iio_device_detach_buffers(struct iio_dev *indio_dev)
381 {
382 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
383 struct iio_buffer *buffer;
384 unsigned int i;
385
386 for (i = 0; i < iio_dev_opaque->attached_buffers_cnt; i++) {
387 buffer = iio_dev_opaque->attached_buffers[i];
388 iio_buffer_put(buffer);
389 }
390
391 kfree(iio_dev_opaque->attached_buffers);
392 }
393
iio_show_scan_index(struct device * dev,struct device_attribute * attr,char * buf)394 static ssize_t iio_show_scan_index(struct device *dev,
395 struct device_attribute *attr,
396 char *buf)
397 {
398 return sysfs_emit(buf, "%u\n", to_iio_dev_attr(attr)->c->scan_index);
399 }
400
iio_show_fixed_type(struct device * dev,struct device_attribute * attr,char * buf)401 static ssize_t iio_show_fixed_type(struct device *dev,
402 struct device_attribute *attr,
403 char *buf)
404 {
405 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
406 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
407 const struct iio_scan_type *scan_type;
408 u8 type;
409
410 scan_type = iio_get_current_scan_type(indio_dev, this_attr->c);
411 if (IS_ERR(scan_type))
412 return PTR_ERR(scan_type);
413
414 type = scan_type->endianness;
415
416 if (type == IIO_CPU) {
417 #ifdef __LITTLE_ENDIAN
418 type = IIO_LE;
419 #else
420 type = IIO_BE;
421 #endif
422 }
423 if (scan_type->repeat > 1)
424 return sysfs_emit(buf, "%s:%c%d/%dX%d>>%u\n",
425 iio_endian_prefix[type],
426 scan_type->sign,
427 scan_type->realbits,
428 scan_type->storagebits,
429 scan_type->repeat,
430 scan_type->shift);
431 else
432 return sysfs_emit(buf, "%s:%c%d/%d>>%u\n",
433 iio_endian_prefix[type],
434 scan_type->sign,
435 scan_type->realbits,
436 scan_type->storagebits,
437 scan_type->shift);
438 }
439
iio_scan_el_show(struct device * dev,struct device_attribute * attr,char * buf)440 static ssize_t iio_scan_el_show(struct device *dev,
441 struct device_attribute *attr,
442 char *buf)
443 {
444 int ret;
445 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
446
447 /* Ensure ret is 0 or 1. */
448 ret = !!test_bit(to_iio_dev_attr(attr)->address,
449 buffer->scan_mask);
450
451 return sysfs_emit(buf, "%d\n", ret);
452 }
453
454 /* Note NULL used as error indicator as it doesn't make sense. */
iio_scan_mask_match(const unsigned long * av_masks,unsigned int masklength,const unsigned long * mask,bool strict)455 static const unsigned long *iio_scan_mask_match(const unsigned long *av_masks,
456 unsigned int masklength,
457 const unsigned long *mask,
458 bool strict)
459 {
460 if (bitmap_empty(mask, masklength))
461 return NULL;
462 /*
463 * The condition here do not handle multi-long masks correctly.
464 * It only checks the first long to be zero, and will use such mask
465 * as a terminator even if there was bits set after the first long.
466 *
467 * Correct check would require using:
468 * while (!bitmap_empty(av_masks, masklength))
469 * instead. This is potentially hazardous because the
470 * avaliable_scan_masks is a zero terminated array of longs - and
471 * using the proper bitmap_empty() check for multi-long wide masks
472 * would require the array to be terminated with multiple zero longs -
473 * which is not such an usual pattern.
474 *
475 * As writing of this no multi-long wide masks were found in-tree, so
476 * the simple while (*av_masks) check is working.
477 */
478 while (*av_masks) {
479 if (strict) {
480 if (bitmap_equal(mask, av_masks, masklength))
481 return av_masks;
482 } else {
483 if (bitmap_subset(mask, av_masks, masklength))
484 return av_masks;
485 }
486 av_masks += BITS_TO_LONGS(masklength);
487 }
488 return NULL;
489 }
490
iio_validate_scan_mask(struct iio_dev * indio_dev,const unsigned long * mask)491 static bool iio_validate_scan_mask(struct iio_dev *indio_dev,
492 const unsigned long *mask)
493 {
494 if (!indio_dev->setup_ops->validate_scan_mask)
495 return true;
496
497 return indio_dev->setup_ops->validate_scan_mask(indio_dev, mask);
498 }
499
500 /**
501 * iio_scan_mask_set() - set particular bit in the scan mask
502 * @indio_dev: the iio device
503 * @buffer: the buffer whose scan mask we are interested in
504 * @bit: the bit to be set.
505 *
506 * Note that at this point we have no way of knowing what other
507 * buffers might request, hence this code only verifies that the
508 * individual buffers request is plausible.
509 */
iio_scan_mask_set(struct iio_dev * indio_dev,struct iio_buffer * buffer,int bit)510 static int iio_scan_mask_set(struct iio_dev *indio_dev,
511 struct iio_buffer *buffer, int bit)
512 {
513 unsigned int masklength = iio_get_masklength(indio_dev);
514 const unsigned long *mask;
515 unsigned long *trialmask;
516
517 if (!masklength) {
518 WARN(1, "Trying to set scanmask prior to registering buffer\n");
519 return -EINVAL;
520 }
521
522 trialmask = bitmap_alloc(masklength, GFP_KERNEL);
523 if (!trialmask)
524 return -ENOMEM;
525 bitmap_copy(trialmask, buffer->scan_mask, masklength);
526 set_bit(bit, trialmask);
527
528 if (!iio_validate_scan_mask(indio_dev, trialmask))
529 goto err_invalid_mask;
530
531 if (indio_dev->available_scan_masks) {
532 mask = iio_scan_mask_match(indio_dev->available_scan_masks,
533 masklength, trialmask, false);
534 if (!mask)
535 goto err_invalid_mask;
536 }
537 bitmap_copy(buffer->scan_mask, trialmask, masklength);
538
539 bitmap_free(trialmask);
540
541 return 0;
542
543 err_invalid_mask:
544 bitmap_free(trialmask);
545 return -EINVAL;
546 }
547
iio_scan_mask_clear(struct iio_buffer * buffer,int bit)548 static int iio_scan_mask_clear(struct iio_buffer *buffer, int bit)
549 {
550 clear_bit(bit, buffer->scan_mask);
551 return 0;
552 }
553
iio_scan_mask_query(struct iio_dev * indio_dev,struct iio_buffer * buffer,int bit)554 static int iio_scan_mask_query(struct iio_dev *indio_dev,
555 struct iio_buffer *buffer, int bit)
556 {
557 if (bit > iio_get_masklength(indio_dev))
558 return -EINVAL;
559
560 if (!buffer->scan_mask)
561 return 0;
562
563 /* Ensure return value is 0 or 1. */
564 return !!test_bit(bit, buffer->scan_mask);
565 };
566
iio_scan_el_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)567 static ssize_t iio_scan_el_store(struct device *dev,
568 struct device_attribute *attr,
569 const char *buf,
570 size_t len)
571 {
572 int ret;
573 bool state;
574 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
575 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
576 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
577 struct iio_buffer *buffer = this_attr->buffer;
578
579 ret = kstrtobool(buf, &state);
580 if (ret < 0)
581 return ret;
582
583 guard(mutex)(&iio_dev_opaque->mlock);
584 if (iio_buffer_is_active(buffer))
585 return -EBUSY;
586
587 ret = iio_scan_mask_query(indio_dev, buffer, this_attr->address);
588 if (ret < 0)
589 return ret;
590
591 if (state && ret)
592 return len;
593
594 if (state)
595 ret = iio_scan_mask_set(indio_dev, buffer, this_attr->address);
596 else
597 ret = iio_scan_mask_clear(buffer, this_attr->address);
598 if (ret)
599 return ret;
600
601 return len;
602 }
603
iio_scan_el_ts_show(struct device * dev,struct device_attribute * attr,char * buf)604 static ssize_t iio_scan_el_ts_show(struct device *dev,
605 struct device_attribute *attr,
606 char *buf)
607 {
608 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
609
610 return sysfs_emit(buf, "%d\n", buffer->scan_timestamp);
611 }
612
iio_scan_el_ts_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)613 static ssize_t iio_scan_el_ts_store(struct device *dev,
614 struct device_attribute *attr,
615 const char *buf,
616 size_t len)
617 {
618 int ret;
619 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
620 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
621 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
622 bool state;
623
624 ret = kstrtobool(buf, &state);
625 if (ret < 0)
626 return ret;
627
628 guard(mutex)(&iio_dev_opaque->mlock);
629 if (iio_buffer_is_active(buffer))
630 return -EBUSY;
631
632 buffer->scan_timestamp = state;
633
634 return len;
635 }
636
iio_buffer_add_channel_sysfs(struct iio_dev * indio_dev,struct iio_buffer * buffer,const struct iio_chan_spec * chan)637 static int iio_buffer_add_channel_sysfs(struct iio_dev *indio_dev,
638 struct iio_buffer *buffer,
639 const struct iio_chan_spec *chan)
640 {
641 int ret, attrcount = 0;
642
643 ret = __iio_add_chan_devattr("index",
644 chan,
645 &iio_show_scan_index,
646 NULL,
647 0,
648 IIO_SEPARATE,
649 &indio_dev->dev,
650 buffer,
651 &buffer->buffer_attr_list);
652 if (ret)
653 return ret;
654 attrcount++;
655 ret = __iio_add_chan_devattr("type",
656 chan,
657 &iio_show_fixed_type,
658 NULL,
659 0,
660 IIO_SEPARATE,
661 &indio_dev->dev,
662 buffer,
663 &buffer->buffer_attr_list);
664 if (ret)
665 return ret;
666 attrcount++;
667 if (chan->type != IIO_TIMESTAMP)
668 ret = __iio_add_chan_devattr("en",
669 chan,
670 &iio_scan_el_show,
671 &iio_scan_el_store,
672 chan->scan_index,
673 IIO_SEPARATE,
674 &indio_dev->dev,
675 buffer,
676 &buffer->buffer_attr_list);
677 else
678 ret = __iio_add_chan_devattr("en",
679 chan,
680 &iio_scan_el_ts_show,
681 &iio_scan_el_ts_store,
682 chan->scan_index,
683 IIO_SEPARATE,
684 &indio_dev->dev,
685 buffer,
686 &buffer->buffer_attr_list);
687 if (ret)
688 return ret;
689 attrcount++;
690 ret = attrcount;
691 return ret;
692 }
693
length_show(struct device * dev,struct device_attribute * attr,char * buf)694 static ssize_t length_show(struct device *dev, struct device_attribute *attr,
695 char *buf)
696 {
697 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
698
699 return sysfs_emit(buf, "%d\n", buffer->length);
700 }
701
length_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)702 static ssize_t length_store(struct device *dev, struct device_attribute *attr,
703 const char *buf, size_t len)
704 {
705 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
706 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
707 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
708 unsigned int val;
709 int ret;
710
711 ret = kstrtouint(buf, 10, &val);
712 if (ret)
713 return ret;
714
715 if (val == buffer->length)
716 return len;
717
718 guard(mutex)(&iio_dev_opaque->mlock);
719 if (iio_buffer_is_active(buffer))
720 return -EBUSY;
721
722 buffer->access->set_length(buffer, val);
723
724 if (buffer->length && buffer->length < buffer->watermark)
725 buffer->watermark = buffer->length;
726
727 return len;
728 }
729
enable_show(struct device * dev,struct device_attribute * attr,char * buf)730 static ssize_t enable_show(struct device *dev, struct device_attribute *attr,
731 char *buf)
732 {
733 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
734
735 return sysfs_emit(buf, "%d\n", iio_buffer_is_active(buffer));
736 }
737
iio_storage_bytes_for_si(struct iio_dev * indio_dev,unsigned int scan_index)738 static int iio_storage_bytes_for_si(struct iio_dev *indio_dev,
739 unsigned int scan_index)
740 {
741 const struct iio_chan_spec *ch;
742 const struct iio_scan_type *scan_type;
743 unsigned int bytes;
744
745 ch = iio_find_channel_from_si(indio_dev, scan_index);
746 scan_type = iio_get_current_scan_type(indio_dev, ch);
747 if (IS_ERR(scan_type))
748 return PTR_ERR(scan_type);
749
750 bytes = scan_type->storagebits / 8;
751
752 if (scan_type->repeat > 1)
753 bytes *= scan_type->repeat;
754
755 return bytes;
756 }
757
iio_storage_bytes_for_timestamp(struct iio_dev * indio_dev)758 static int iio_storage_bytes_for_timestamp(struct iio_dev *indio_dev)
759 {
760 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
761
762 return iio_storage_bytes_for_si(indio_dev,
763 iio_dev_opaque->scan_index_timestamp);
764 }
765
iio_compute_scan_bytes(struct iio_dev * indio_dev,const unsigned long * mask,bool timestamp)766 static int iio_compute_scan_bytes(struct iio_dev *indio_dev,
767 const unsigned long *mask, bool timestamp)
768 {
769 unsigned int bytes = 0;
770 int length, i, largest = 0;
771
772 /* How much space will the demuxed element take? */
773 for_each_set_bit(i, mask, iio_get_masklength(indio_dev)) {
774 length = iio_storage_bytes_for_si(indio_dev, i);
775 if (length < 0)
776 return length;
777
778 bytes = ALIGN(bytes, length);
779 bytes += length;
780 largest = max(largest, length);
781 }
782
783 if (timestamp) {
784 length = iio_storage_bytes_for_timestamp(indio_dev);
785 if (length < 0)
786 return length;
787
788 bytes = ALIGN(bytes, length);
789 bytes += length;
790 largest = max(largest, length);
791 }
792
793 bytes = ALIGN(bytes, largest);
794 return bytes;
795 }
796
iio_buffer_activate(struct iio_dev * indio_dev,struct iio_buffer * buffer)797 static void iio_buffer_activate(struct iio_dev *indio_dev,
798 struct iio_buffer *buffer)
799 {
800 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
801
802 iio_buffer_get(buffer);
803 list_add(&buffer->buffer_list, &iio_dev_opaque->buffer_list);
804 }
805
iio_buffer_deactivate(struct iio_buffer * buffer)806 static void iio_buffer_deactivate(struct iio_buffer *buffer)
807 {
808 list_del_init(&buffer->buffer_list);
809 wake_up_interruptible(&buffer->pollq);
810 iio_buffer_put(buffer);
811 }
812
iio_buffer_deactivate_all(struct iio_dev * indio_dev)813 static void iio_buffer_deactivate_all(struct iio_dev *indio_dev)
814 {
815 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
816 struct iio_buffer *buffer, *_buffer;
817
818 list_for_each_entry_safe(buffer, _buffer,
819 &iio_dev_opaque->buffer_list, buffer_list)
820 iio_buffer_deactivate(buffer);
821 }
822
iio_buffer_enable(struct iio_buffer * buffer,struct iio_dev * indio_dev)823 static int iio_buffer_enable(struct iio_buffer *buffer,
824 struct iio_dev *indio_dev)
825 {
826 if (!buffer->access->enable)
827 return 0;
828 return buffer->access->enable(buffer, indio_dev);
829 }
830
iio_buffer_disable(struct iio_buffer * buffer,struct iio_dev * indio_dev)831 static int iio_buffer_disable(struct iio_buffer *buffer,
832 struct iio_dev *indio_dev)
833 {
834 if (!buffer->access->disable)
835 return 0;
836 return buffer->access->disable(buffer, indio_dev);
837 }
838
iio_buffer_update_bytes_per_datum(struct iio_dev * indio_dev,struct iio_buffer * buffer)839 static void iio_buffer_update_bytes_per_datum(struct iio_dev *indio_dev,
840 struct iio_buffer *buffer)
841 {
842 unsigned int bytes;
843
844 if (!buffer->access->set_bytes_per_datum)
845 return;
846
847 bytes = iio_compute_scan_bytes(indio_dev, buffer->scan_mask,
848 buffer->scan_timestamp);
849
850 buffer->access->set_bytes_per_datum(buffer, bytes);
851 }
852
iio_buffer_request_update(struct iio_dev * indio_dev,struct iio_buffer * buffer)853 static int iio_buffer_request_update(struct iio_dev *indio_dev,
854 struct iio_buffer *buffer)
855 {
856 int ret;
857
858 iio_buffer_update_bytes_per_datum(indio_dev, buffer);
859 if (buffer->access->request_update) {
860 ret = buffer->access->request_update(buffer);
861 if (ret) {
862 dev_dbg(&indio_dev->dev,
863 "Buffer not started: buffer parameter update failed (%d)\n",
864 ret);
865 return ret;
866 }
867 }
868
869 return 0;
870 }
871
iio_free_scan_mask(struct iio_dev * indio_dev,const unsigned long * mask)872 static void iio_free_scan_mask(struct iio_dev *indio_dev,
873 const unsigned long *mask)
874 {
875 /* If the mask is dynamically allocated free it, otherwise do nothing */
876 if (!indio_dev->available_scan_masks)
877 bitmap_free(mask);
878 }
879
880 struct iio_device_config {
881 unsigned int mode;
882 unsigned int watermark;
883 const unsigned long *scan_mask;
884 unsigned int scan_bytes;
885 bool scan_timestamp;
886 };
887
iio_verify_update(struct iio_dev * indio_dev,struct iio_buffer * insert_buffer,struct iio_buffer * remove_buffer,struct iio_device_config * config)888 static int iio_verify_update(struct iio_dev *indio_dev,
889 struct iio_buffer *insert_buffer,
890 struct iio_buffer *remove_buffer,
891 struct iio_device_config *config)
892 {
893 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
894 unsigned int masklength = iio_get_masklength(indio_dev);
895 unsigned long *compound_mask;
896 const unsigned long *scan_mask;
897 bool strict_scanmask = false;
898 struct iio_buffer *buffer;
899 bool scan_timestamp;
900 unsigned int modes;
901
902 if (insert_buffer &&
903 bitmap_empty(insert_buffer->scan_mask, masklength)) {
904 dev_dbg(&indio_dev->dev,
905 "At least one scan element must be enabled first\n");
906 return -EINVAL;
907 }
908
909 memset(config, 0, sizeof(*config));
910 config->watermark = ~0;
911
912 /*
913 * If there is just one buffer and we are removing it there is nothing
914 * to verify.
915 */
916 if (remove_buffer && !insert_buffer &&
917 list_is_singular(&iio_dev_opaque->buffer_list))
918 return 0;
919
920 modes = indio_dev->modes;
921
922 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
923 if (buffer == remove_buffer)
924 continue;
925 modes &= buffer->access->modes;
926 config->watermark = min(config->watermark, buffer->watermark);
927 }
928
929 if (insert_buffer) {
930 modes &= insert_buffer->access->modes;
931 config->watermark = min(config->watermark,
932 insert_buffer->watermark);
933 }
934
935 /* Definitely possible for devices to support both of these. */
936 if ((modes & INDIO_BUFFER_TRIGGERED) && indio_dev->trig) {
937 config->mode = INDIO_BUFFER_TRIGGERED;
938 } else if (modes & INDIO_BUFFER_HARDWARE) {
939 /*
940 * Keep things simple for now and only allow a single buffer to
941 * be connected in hardware mode.
942 */
943 if (insert_buffer && !list_empty(&iio_dev_opaque->buffer_list))
944 return -EINVAL;
945 config->mode = INDIO_BUFFER_HARDWARE;
946 strict_scanmask = true;
947 } else if (modes & INDIO_BUFFER_SOFTWARE) {
948 config->mode = INDIO_BUFFER_SOFTWARE;
949 } else {
950 /* Can only occur on first buffer */
951 if (indio_dev->modes & INDIO_BUFFER_TRIGGERED)
952 dev_dbg(&indio_dev->dev, "Buffer not started: no trigger\n");
953 return -EINVAL;
954 }
955
956 /* What scan mask do we actually have? */
957 compound_mask = bitmap_zalloc(masklength, GFP_KERNEL);
958 if (!compound_mask)
959 return -ENOMEM;
960
961 scan_timestamp = false;
962
963 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
964 if (buffer == remove_buffer)
965 continue;
966 bitmap_or(compound_mask, compound_mask, buffer->scan_mask,
967 masklength);
968 scan_timestamp |= buffer->scan_timestamp;
969 }
970
971 if (insert_buffer) {
972 bitmap_or(compound_mask, compound_mask,
973 insert_buffer->scan_mask, masklength);
974 scan_timestamp |= insert_buffer->scan_timestamp;
975 }
976
977 if (indio_dev->available_scan_masks) {
978 scan_mask = iio_scan_mask_match(indio_dev->available_scan_masks,
979 masklength, compound_mask,
980 strict_scanmask);
981 bitmap_free(compound_mask);
982 if (!scan_mask)
983 return -EINVAL;
984 } else {
985 scan_mask = compound_mask;
986 }
987
988 config->scan_bytes = iio_compute_scan_bytes(indio_dev,
989 scan_mask, scan_timestamp);
990 config->scan_mask = scan_mask;
991 config->scan_timestamp = scan_timestamp;
992
993 return 0;
994 }
995
996 /**
997 * struct iio_demux_table - table describing demux memcpy ops
998 * @from: index to copy from
999 * @to: index to copy to
1000 * @length: how many bytes to copy
1001 * @l: list head used for management
1002 */
1003 struct iio_demux_table {
1004 unsigned int from;
1005 unsigned int to;
1006 unsigned int length;
1007 struct list_head l;
1008 };
1009
iio_buffer_demux_free(struct iio_buffer * buffer)1010 static void iio_buffer_demux_free(struct iio_buffer *buffer)
1011 {
1012 struct iio_demux_table *p, *q;
1013
1014 list_for_each_entry_safe(p, q, &buffer->demux_list, l) {
1015 list_del(&p->l);
1016 kfree(p);
1017 }
1018 }
1019
iio_buffer_add_demux(struct iio_buffer * buffer,struct iio_demux_table ** p,unsigned int in_loc,unsigned int out_loc,unsigned int length)1020 static int iio_buffer_add_demux(struct iio_buffer *buffer,
1021 struct iio_demux_table **p, unsigned int in_loc,
1022 unsigned int out_loc,
1023 unsigned int length)
1024 {
1025 if (*p && (*p)->from + (*p)->length == in_loc &&
1026 (*p)->to + (*p)->length == out_loc) {
1027 (*p)->length += length;
1028 } else {
1029 *p = kmalloc_obj(**p);
1030 if (!(*p))
1031 return -ENOMEM;
1032 (*p)->from = in_loc;
1033 (*p)->to = out_loc;
1034 (*p)->length = length;
1035 list_add_tail(&(*p)->l, &buffer->demux_list);
1036 }
1037
1038 return 0;
1039 }
1040
iio_buffer_update_demux(struct iio_dev * indio_dev,struct iio_buffer * buffer)1041 static int iio_buffer_update_demux(struct iio_dev *indio_dev,
1042 struct iio_buffer *buffer)
1043 {
1044 unsigned int masklength = iio_get_masklength(indio_dev);
1045 int ret, in_ind = -1, out_ind, length;
1046 unsigned int in_loc = 0, out_loc = 0;
1047 struct iio_demux_table *p = NULL;
1048
1049 /* Clear out any old demux */
1050 iio_buffer_demux_free(buffer);
1051 kfree(buffer->demux_bounce);
1052 buffer->demux_bounce = NULL;
1053
1054 /* First work out which scan mode we will actually have */
1055 if (bitmap_equal(indio_dev->active_scan_mask,
1056 buffer->scan_mask, masklength))
1057 return 0;
1058
1059 /* Now we have the two masks, work from least sig and build up sizes */
1060 for_each_set_bit(out_ind, buffer->scan_mask, masklength) {
1061 in_ind = find_next_bit(indio_dev->active_scan_mask,
1062 masklength, in_ind + 1);
1063 while (in_ind != out_ind) {
1064 ret = iio_storage_bytes_for_si(indio_dev, in_ind);
1065 if (ret < 0)
1066 goto error_clear_mux_table;
1067
1068 length = ret;
1069 /* Make sure we are aligned */
1070 in_loc = roundup(in_loc, length) + length;
1071 in_ind = find_next_bit(indio_dev->active_scan_mask,
1072 masklength, in_ind + 1);
1073 }
1074 ret = iio_storage_bytes_for_si(indio_dev, in_ind);
1075 if (ret < 0)
1076 goto error_clear_mux_table;
1077
1078 length = ret;
1079 out_loc = roundup(out_loc, length);
1080 in_loc = roundup(in_loc, length);
1081 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length);
1082 if (ret)
1083 goto error_clear_mux_table;
1084 out_loc += length;
1085 in_loc += length;
1086 }
1087 /* Relies on scan_timestamp being last */
1088 if (buffer->scan_timestamp) {
1089 ret = iio_storage_bytes_for_timestamp(indio_dev);
1090 if (ret < 0)
1091 goto error_clear_mux_table;
1092
1093 length = ret;
1094 out_loc = roundup(out_loc, length);
1095 in_loc = roundup(in_loc, length);
1096 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length);
1097 if (ret)
1098 goto error_clear_mux_table;
1099 out_loc += length;
1100 }
1101 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL);
1102 if (!buffer->demux_bounce) {
1103 ret = -ENOMEM;
1104 goto error_clear_mux_table;
1105 }
1106 return 0;
1107
1108 error_clear_mux_table:
1109 iio_buffer_demux_free(buffer);
1110
1111 return ret;
1112 }
1113
iio_update_demux(struct iio_dev * indio_dev)1114 static int iio_update_demux(struct iio_dev *indio_dev)
1115 {
1116 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1117 struct iio_buffer *buffer;
1118 int ret;
1119
1120 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
1121 ret = iio_buffer_update_demux(indio_dev, buffer);
1122 if (ret < 0)
1123 goto error_clear_mux_table;
1124 }
1125 return 0;
1126
1127 error_clear_mux_table:
1128 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list)
1129 iio_buffer_demux_free(buffer);
1130
1131 return ret;
1132 }
1133
iio_enable_buffers(struct iio_dev * indio_dev,struct iio_device_config * config)1134 static int iio_enable_buffers(struct iio_dev *indio_dev,
1135 struct iio_device_config *config)
1136 {
1137 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1138 struct iio_buffer *buffer, *tmp = NULL;
1139 int ret;
1140
1141 indio_dev->active_scan_mask = config->scan_mask;
1142 ACCESS_PRIVATE(indio_dev, scan_timestamp) = config->scan_timestamp;
1143 indio_dev->scan_bytes = config->scan_bytes;
1144 iio_dev_opaque->currentmode = config->mode;
1145
1146 iio_update_demux(indio_dev);
1147
1148 /* Wind up again */
1149 if (indio_dev->setup_ops->preenable) {
1150 ret = indio_dev->setup_ops->preenable(indio_dev);
1151 if (ret) {
1152 dev_dbg(&indio_dev->dev,
1153 "Buffer not started: buffer preenable failed (%d)\n", ret);
1154 goto err_undo_config;
1155 }
1156 }
1157
1158 if (indio_dev->info->update_scan_mode) {
1159 ret = indio_dev->info
1160 ->update_scan_mode(indio_dev,
1161 indio_dev->active_scan_mask);
1162 if (ret < 0) {
1163 dev_dbg(&indio_dev->dev,
1164 "Buffer not started: update scan mode failed (%d)\n",
1165 ret);
1166 goto err_run_postdisable;
1167 }
1168 }
1169
1170 if (indio_dev->info->hwfifo_set_watermark)
1171 indio_dev->info->hwfifo_set_watermark(indio_dev,
1172 config->watermark);
1173
1174 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
1175 ret = iio_buffer_enable(buffer, indio_dev);
1176 if (ret) {
1177 tmp = buffer;
1178 goto err_disable_buffers;
1179 }
1180 }
1181
1182 if (iio_dev_opaque->currentmode == INDIO_BUFFER_TRIGGERED) {
1183 ret = iio_trigger_attach_poll_func(indio_dev->trig,
1184 indio_dev->pollfunc);
1185 if (ret)
1186 goto err_disable_buffers;
1187 }
1188
1189 if (indio_dev->setup_ops->postenable) {
1190 ret = indio_dev->setup_ops->postenable(indio_dev);
1191 if (ret) {
1192 dev_dbg(&indio_dev->dev,
1193 "Buffer not started: postenable failed (%d)\n", ret);
1194 goto err_detach_pollfunc;
1195 }
1196 }
1197
1198 return 0;
1199
1200 err_detach_pollfunc:
1201 if (iio_dev_opaque->currentmode == INDIO_BUFFER_TRIGGERED) {
1202 iio_trigger_detach_poll_func(indio_dev->trig,
1203 indio_dev->pollfunc);
1204 }
1205 err_disable_buffers:
1206 buffer = list_prepare_entry(tmp, &iio_dev_opaque->buffer_list, buffer_list);
1207 list_for_each_entry_continue_reverse(buffer, &iio_dev_opaque->buffer_list,
1208 buffer_list)
1209 iio_buffer_disable(buffer, indio_dev);
1210 err_run_postdisable:
1211 if (indio_dev->setup_ops->postdisable)
1212 indio_dev->setup_ops->postdisable(indio_dev);
1213 err_undo_config:
1214 iio_dev_opaque->currentmode = INDIO_DIRECT_MODE;
1215 indio_dev->active_scan_mask = NULL;
1216
1217 return ret;
1218 }
1219
iio_disable_buffers(struct iio_dev * indio_dev)1220 static int iio_disable_buffers(struct iio_dev *indio_dev)
1221 {
1222 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1223 struct iio_buffer *buffer;
1224 int ret = 0;
1225 int ret2;
1226
1227 /* Wind down existing buffers - iff there are any */
1228 if (list_empty(&iio_dev_opaque->buffer_list))
1229 return 0;
1230
1231 /*
1232 * If things go wrong at some step in disable we still need to continue
1233 * to perform the other steps, otherwise we leave the device in a
1234 * inconsistent state. We return the error code for the first error we
1235 * encountered.
1236 */
1237
1238 if (indio_dev->setup_ops->predisable) {
1239 ret2 = indio_dev->setup_ops->predisable(indio_dev);
1240 if (ret2 && !ret)
1241 ret = ret2;
1242 }
1243
1244 if (iio_dev_opaque->currentmode == INDIO_BUFFER_TRIGGERED) {
1245 iio_trigger_detach_poll_func(indio_dev->trig,
1246 indio_dev->pollfunc);
1247 }
1248
1249 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) {
1250 ret2 = iio_buffer_disable(buffer, indio_dev);
1251 if (ret2 && !ret)
1252 ret = ret2;
1253 }
1254
1255 if (indio_dev->setup_ops->postdisable) {
1256 ret2 = indio_dev->setup_ops->postdisable(indio_dev);
1257 if (ret2 && !ret)
1258 ret = ret2;
1259 }
1260
1261 iio_free_scan_mask(indio_dev, indio_dev->active_scan_mask);
1262 indio_dev->active_scan_mask = NULL;
1263 iio_dev_opaque->currentmode = INDIO_DIRECT_MODE;
1264
1265 return ret;
1266 }
1267
__iio_update_buffers(struct iio_dev * indio_dev,struct iio_buffer * insert_buffer,struct iio_buffer * remove_buffer)1268 static int __iio_update_buffers(struct iio_dev *indio_dev,
1269 struct iio_buffer *insert_buffer,
1270 struct iio_buffer *remove_buffer)
1271 {
1272 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1273 struct iio_device_config new_config;
1274 int ret;
1275
1276 ret = iio_verify_update(indio_dev, insert_buffer, remove_buffer,
1277 &new_config);
1278 if (ret)
1279 return ret;
1280
1281 if (insert_buffer) {
1282 ret = iio_buffer_request_update(indio_dev, insert_buffer);
1283 if (ret)
1284 goto err_free_config;
1285 }
1286
1287 ret = iio_disable_buffers(indio_dev);
1288 if (ret)
1289 goto err_deactivate_all;
1290
1291 if (remove_buffer)
1292 iio_buffer_deactivate(remove_buffer);
1293 if (insert_buffer)
1294 iio_buffer_activate(indio_dev, insert_buffer);
1295
1296 /* If no buffers in list, we are done */
1297 if (list_empty(&iio_dev_opaque->buffer_list))
1298 return 0;
1299
1300 ret = iio_enable_buffers(indio_dev, &new_config);
1301 if (ret)
1302 goto err_deactivate_all;
1303
1304 return 0;
1305
1306 err_deactivate_all:
1307 /*
1308 * We've already verified that the config is valid earlier. If things go
1309 * wrong in either enable or disable the most likely reason is an IO
1310 * error from the device. In this case there is no good recovery
1311 * strategy. Just make sure to disable everything and leave the device
1312 * in a sane state. With a bit of luck the device might come back to
1313 * life again later and userspace can try again.
1314 */
1315 iio_buffer_deactivate_all(indio_dev);
1316
1317 err_free_config:
1318 iio_free_scan_mask(indio_dev, new_config.scan_mask);
1319 return ret;
1320 }
1321
iio_update_buffers(struct iio_dev * indio_dev,struct iio_buffer * insert_buffer,struct iio_buffer * remove_buffer)1322 int iio_update_buffers(struct iio_dev *indio_dev,
1323 struct iio_buffer *insert_buffer,
1324 struct iio_buffer *remove_buffer)
1325 {
1326 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1327
1328 if (insert_buffer == remove_buffer)
1329 return 0;
1330
1331 if (insert_buffer &&
1332 insert_buffer->direction == IIO_BUFFER_DIRECTION_OUT)
1333 return -EINVAL;
1334
1335 guard(mutex)(&iio_dev_opaque->info_exist_lock);
1336 guard(mutex)(&iio_dev_opaque->mlock);
1337
1338 if (insert_buffer && iio_buffer_is_active(insert_buffer))
1339 insert_buffer = NULL;
1340
1341 if (remove_buffer && !iio_buffer_is_active(remove_buffer))
1342 remove_buffer = NULL;
1343
1344 if (!insert_buffer && !remove_buffer)
1345 return 0;
1346
1347 if (!indio_dev->info)
1348 return -ENODEV;
1349
1350 return __iio_update_buffers(indio_dev, insert_buffer, remove_buffer);
1351 }
1352 EXPORT_SYMBOL_GPL(iio_update_buffers);
1353
iio_disable_all_buffers(struct iio_dev * indio_dev)1354 void iio_disable_all_buffers(struct iio_dev *indio_dev)
1355 {
1356 iio_disable_buffers(indio_dev);
1357 iio_buffer_deactivate_all(indio_dev);
1358 }
1359
enable_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)1360 static ssize_t enable_store(struct device *dev, struct device_attribute *attr,
1361 const char *buf, size_t len)
1362 {
1363 int ret;
1364 bool requested_state;
1365 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
1366 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1367 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1368 bool inlist;
1369
1370 ret = kstrtobool(buf, &requested_state);
1371 if (ret < 0)
1372 return ret;
1373
1374 guard(mutex)(&iio_dev_opaque->mlock);
1375
1376 /* Find out if it is in the list */
1377 inlist = iio_buffer_is_active(buffer);
1378 /* Already in desired state */
1379 if (inlist == requested_state)
1380 return len;
1381
1382 if (requested_state)
1383 ret = __iio_update_buffers(indio_dev, buffer, NULL);
1384 else
1385 ret = __iio_update_buffers(indio_dev, NULL, buffer);
1386 if (ret)
1387 return ret;
1388
1389 return len;
1390 }
1391
watermark_show(struct device * dev,struct device_attribute * attr,char * buf)1392 static ssize_t watermark_show(struct device *dev, struct device_attribute *attr,
1393 char *buf)
1394 {
1395 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1396
1397 return sysfs_emit(buf, "%u\n", buffer->watermark);
1398 }
1399
watermark_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)1400 static ssize_t watermark_store(struct device *dev,
1401 struct device_attribute *attr,
1402 const char *buf, size_t len)
1403 {
1404 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
1405 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1406 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1407 unsigned int val;
1408 int ret;
1409
1410 ret = kstrtouint(buf, 10, &val);
1411 if (ret)
1412 return ret;
1413 if (!val)
1414 return -EINVAL;
1415
1416 guard(mutex)(&iio_dev_opaque->mlock);
1417
1418 if (val > buffer->length)
1419 return -EINVAL;
1420
1421 if (iio_buffer_is_active(buffer))
1422 return -EBUSY;
1423
1424 buffer->watermark = val;
1425
1426 return len;
1427 }
1428
data_available_show(struct device * dev,struct device_attribute * attr,char * buf)1429 static ssize_t data_available_show(struct device *dev,
1430 struct device_attribute *attr, char *buf)
1431 {
1432 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1433
1434 return sysfs_emit(buf, "%zu\n", iio_buffer_data_available(buffer));
1435 }
1436
direction_show(struct device * dev,struct device_attribute * attr,char * buf)1437 static ssize_t direction_show(struct device *dev,
1438 struct device_attribute *attr,
1439 char *buf)
1440 {
1441 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer;
1442
1443 switch (buffer->direction) {
1444 case IIO_BUFFER_DIRECTION_IN:
1445 return sysfs_emit(buf, "in\n");
1446 case IIO_BUFFER_DIRECTION_OUT:
1447 return sysfs_emit(buf, "out\n");
1448 default:
1449 return -EINVAL;
1450 }
1451 }
1452
1453 static DEVICE_ATTR_RW(length);
1454 static struct device_attribute dev_attr_length_ro = __ATTR_RO(length);
1455 static DEVICE_ATTR_RW(enable);
1456 static DEVICE_ATTR_RW(watermark);
1457 static struct device_attribute dev_attr_watermark_ro = __ATTR_RO(watermark);
1458 static DEVICE_ATTR_RO(data_available);
1459 static DEVICE_ATTR_RO(direction);
1460
1461 /*
1462 * When adding new attributes here, put the at the end, at least until
1463 * the code that handles the length/length_ro & watermark/watermark_ro
1464 * assignments gets cleaned up. Otherwise these can create some weird
1465 * duplicate attributes errors under some setups.
1466 */
1467 static struct attribute *iio_buffer_attrs[] = {
1468 &dev_attr_length.attr,
1469 &dev_attr_enable.attr,
1470 &dev_attr_watermark.attr,
1471 &dev_attr_data_available.attr,
1472 &dev_attr_direction.attr,
1473 };
1474
1475 #define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)
1476
iio_buffer_wrap_attr(struct iio_buffer * buffer,struct attribute * attr)1477 static struct attribute *iio_buffer_wrap_attr(struct iio_buffer *buffer,
1478 struct attribute *attr)
1479 {
1480 struct device_attribute *dattr = to_dev_attr(attr);
1481 struct iio_dev_attr *iio_attr;
1482
1483 iio_attr = kzalloc_obj(*iio_attr);
1484 if (!iio_attr)
1485 return NULL;
1486
1487 iio_attr->buffer = buffer;
1488 memcpy(&iio_attr->dev_attr, dattr, sizeof(iio_attr->dev_attr));
1489 iio_attr->dev_attr.attr.name = kstrdup_const(attr->name, GFP_KERNEL);
1490 if (!iio_attr->dev_attr.attr.name) {
1491 kfree(iio_attr);
1492 return NULL;
1493 }
1494
1495 sysfs_attr_init(&iio_attr->dev_attr.attr);
1496
1497 list_add(&iio_attr->l, &buffer->buffer_attr_list);
1498
1499 return &iio_attr->dev_attr.attr;
1500 }
1501
iio_buffer_register_legacy_sysfs_groups(struct iio_dev * indio_dev,struct attribute ** buffer_attrs,int buffer_attrcount,int scan_el_attrcount)1502 static int iio_buffer_register_legacy_sysfs_groups(struct iio_dev *indio_dev,
1503 struct attribute **buffer_attrs,
1504 int buffer_attrcount,
1505 int scan_el_attrcount)
1506 {
1507 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1508 struct attribute_group *group;
1509 struct attribute **attrs;
1510 int ret;
1511
1512 attrs = kzalloc_objs(*attrs, buffer_attrcount + 1);
1513 if (!attrs)
1514 return -ENOMEM;
1515
1516 memcpy(attrs, buffer_attrs, buffer_attrcount * sizeof(*attrs));
1517
1518 group = &iio_dev_opaque->legacy_buffer_group;
1519 group->attrs = attrs;
1520 group->name = "buffer";
1521
1522 ret = iio_device_register_sysfs_group(indio_dev, group);
1523 if (ret)
1524 goto error_free_buffer_attrs;
1525
1526 attrs = kzalloc_objs(*attrs, scan_el_attrcount + 1);
1527 if (!attrs) {
1528 ret = -ENOMEM;
1529 goto error_free_buffer_attrs;
1530 }
1531
1532 memcpy(attrs, &buffer_attrs[buffer_attrcount],
1533 scan_el_attrcount * sizeof(*attrs));
1534
1535 group = &iio_dev_opaque->legacy_scan_el_group;
1536 group->attrs = attrs;
1537 group->name = "scan_elements";
1538
1539 ret = iio_device_register_sysfs_group(indio_dev, group);
1540 if (ret)
1541 goto error_free_scan_el_attrs;
1542
1543 return 0;
1544
1545 error_free_scan_el_attrs:
1546 kfree(iio_dev_opaque->legacy_scan_el_group.attrs);
1547 error_free_buffer_attrs:
1548 kfree(iio_dev_opaque->legacy_buffer_group.attrs);
1549
1550 return ret;
1551 }
1552
iio_buffer_unregister_legacy_sysfs_groups(struct iio_dev * indio_dev)1553 static void iio_buffer_unregister_legacy_sysfs_groups(struct iio_dev *indio_dev)
1554 {
1555 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
1556
1557 kfree(iio_dev_opaque->legacy_buffer_group.attrs);
1558 kfree(iio_dev_opaque->legacy_scan_el_group.attrs);
1559 }
1560
iio_buffer_dmabuf_release(struct kref * ref)1561 static void iio_buffer_dmabuf_release(struct kref *ref)
1562 {
1563 struct iio_dmabuf_priv *priv = container_of(ref, struct iio_dmabuf_priv, ref);
1564 struct dma_buf_attachment *attach = priv->attach;
1565 struct iio_buffer *buffer = priv->buffer;
1566 struct dma_buf *dmabuf = attach->dmabuf;
1567
1568 dma_buf_unmap_attachment_unlocked(attach, priv->sgt, priv->dir);
1569
1570 buffer->access->detach_dmabuf(buffer, priv->block);
1571
1572 dma_buf_detach(attach->dmabuf, attach);
1573 dma_buf_put(dmabuf);
1574 kfree(priv);
1575 }
1576
iio_buffer_dmabuf_get(struct dma_buf_attachment * attach)1577 static void iio_buffer_dmabuf_get(struct dma_buf_attachment *attach)
1578 {
1579 struct iio_dmabuf_priv *priv = attach->importer_priv;
1580
1581 kref_get(&priv->ref);
1582 }
1583
iio_buffer_dmabuf_put(struct dma_buf_attachment * attach)1584 static void iio_buffer_dmabuf_put(struct dma_buf_attachment *attach)
1585 {
1586 struct iio_dmabuf_priv *priv = attach->importer_priv;
1587
1588 kref_put(&priv->ref, iio_buffer_dmabuf_release);
1589 }
1590
iio_buffer_chrdev_release(struct inode * inode,struct file * filep)1591 static int iio_buffer_chrdev_release(struct inode *inode, struct file *filep)
1592 {
1593 struct iio_dev_buffer_pair *ib = filep->private_data;
1594 struct iio_dev *indio_dev = ib->indio_dev;
1595 struct iio_buffer *buffer = ib->buffer;
1596 struct iio_dmabuf_priv *priv, *tmp;
1597
1598 wake_up(&buffer->pollq);
1599
1600 guard(mutex)(&buffer->dmabufs_mutex);
1601
1602 /* Close all attached DMABUFs */
1603 list_for_each_entry_safe(priv, tmp, &buffer->dmabufs, entry) {
1604 list_del_init(&priv->entry);
1605 iio_buffer_dmabuf_put(priv->attach);
1606 }
1607
1608 kfree(ib);
1609 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags);
1610 iio_device_put(indio_dev);
1611
1612 return 0;
1613 }
1614
iio_dma_resv_lock(struct dma_buf * dmabuf,bool nonblock)1615 static int iio_dma_resv_lock(struct dma_buf *dmabuf, bool nonblock)
1616 {
1617 if (!nonblock)
1618 return dma_resv_lock_interruptible(dmabuf->resv, NULL);
1619
1620 if (!dma_resv_trylock(dmabuf->resv))
1621 return -EBUSY;
1622
1623 return 0;
1624 }
1625
iio_buffer_get_dma_dev(const struct iio_dev * indio_dev,struct iio_buffer * buffer)1626 static struct device *iio_buffer_get_dma_dev(const struct iio_dev *indio_dev,
1627 struct iio_buffer *buffer)
1628 {
1629 if (buffer->access->get_dma_dev)
1630 return buffer->access->get_dma_dev(buffer);
1631
1632 return indio_dev->dev.parent;
1633 }
1634
1635 static struct dma_buf_attachment *
iio_buffer_find_attachment(struct iio_dev_buffer_pair * ib,struct dma_buf * dmabuf,bool nonblock)1636 iio_buffer_find_attachment(struct iio_dev_buffer_pair *ib,
1637 struct dma_buf *dmabuf, bool nonblock)
1638 {
1639 struct iio_buffer *buffer = ib->buffer;
1640 struct device *dma_dev = iio_buffer_get_dma_dev(ib->indio_dev, buffer);
1641 struct dma_buf_attachment *attach = NULL;
1642 struct iio_dmabuf_priv *priv;
1643
1644 guard(mutex)(&buffer->dmabufs_mutex);
1645
1646 list_for_each_entry(priv, &buffer->dmabufs, entry) {
1647 if (priv->attach->dev == dma_dev
1648 && priv->attach->dmabuf == dmabuf) {
1649 attach = priv->attach;
1650 break;
1651 }
1652 }
1653
1654 if (attach)
1655 iio_buffer_dmabuf_get(attach);
1656
1657 return attach ?: ERR_PTR(-EPERM);
1658 }
1659
iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair * ib,int __user * user_fd,bool nonblock)1660 static int iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair *ib,
1661 int __user *user_fd, bool nonblock)
1662 {
1663 struct iio_dev *indio_dev = ib->indio_dev;
1664 struct iio_buffer *buffer = ib->buffer;
1665 struct device *dma_dev = iio_buffer_get_dma_dev(indio_dev, buffer);
1666 struct dma_buf_attachment *attach;
1667 struct iio_dmabuf_priv *priv, *each;
1668 struct dma_buf *dmabuf;
1669 int err, fd;
1670
1671 if (!buffer->access->attach_dmabuf
1672 || !buffer->access->detach_dmabuf
1673 || !buffer->access->enqueue_dmabuf)
1674 return -EPERM;
1675
1676 if (copy_from_user(&fd, user_fd, sizeof(fd)))
1677 return -EFAULT;
1678
1679 priv = kzalloc_obj(*priv);
1680 if (!priv)
1681 return -ENOMEM;
1682
1683 spin_lock_init(&priv->lock);
1684 priv->context = dma_fence_context_alloc(1);
1685
1686 dmabuf = dma_buf_get(fd);
1687 if (IS_ERR(dmabuf)) {
1688 err = PTR_ERR(dmabuf);
1689 goto err_free_priv;
1690 }
1691
1692 attach = dma_buf_attach(dmabuf, dma_dev);
1693 if (IS_ERR(attach)) {
1694 err = PTR_ERR(attach);
1695 goto err_dmabuf_put;
1696 }
1697
1698 err = iio_dma_resv_lock(dmabuf, nonblock);
1699 if (err)
1700 goto err_dmabuf_detach;
1701
1702 priv->dir = buffer->direction == IIO_BUFFER_DIRECTION_IN
1703 ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
1704
1705 priv->sgt = dma_buf_map_attachment(attach, priv->dir);
1706 if (IS_ERR(priv->sgt)) {
1707 err = PTR_ERR(priv->sgt);
1708 dev_err(&indio_dev->dev, "Unable to map attachment: %d\n", err);
1709 goto err_resv_unlock;
1710 }
1711
1712 kref_init(&priv->ref);
1713 priv->buffer = buffer;
1714 priv->attach = attach;
1715 attach->importer_priv = priv;
1716
1717 priv->block = buffer->access->attach_dmabuf(buffer, attach);
1718 if (IS_ERR(priv->block)) {
1719 err = PTR_ERR(priv->block);
1720 goto err_dmabuf_unmap_attachment;
1721 }
1722
1723 dma_resv_unlock(dmabuf->resv);
1724
1725 mutex_lock(&buffer->dmabufs_mutex);
1726
1727 /*
1728 * Check whether we already have an attachment for this driver/DMABUF
1729 * combo. If we do, refuse to attach.
1730 */
1731 list_for_each_entry(each, &buffer->dmabufs, entry) {
1732 if (each->attach->dev == dma_dev
1733 && each->attach->dmabuf == dmabuf) {
1734 /*
1735 * We unlocked the reservation object, so going through
1736 * the cleanup code would mean re-locking it first.
1737 * At this stage it is simpler to free the attachment
1738 * using iio_buffer_dma_put().
1739 */
1740 mutex_unlock(&buffer->dmabufs_mutex);
1741 iio_buffer_dmabuf_put(attach);
1742 return -EBUSY;
1743 }
1744 }
1745
1746 /* Otherwise, add the new attachment to our dmabufs list. */
1747 list_add(&priv->entry, &buffer->dmabufs);
1748 mutex_unlock(&buffer->dmabufs_mutex);
1749
1750 return 0;
1751
1752 err_dmabuf_unmap_attachment:
1753 dma_buf_unmap_attachment(attach, priv->sgt, priv->dir);
1754 err_resv_unlock:
1755 dma_resv_unlock(dmabuf->resv);
1756 err_dmabuf_detach:
1757 dma_buf_detach(dmabuf, attach);
1758 err_dmabuf_put:
1759 dma_buf_put(dmabuf);
1760 err_free_priv:
1761 kfree(priv);
1762
1763 return err;
1764 }
1765
iio_buffer_detach_dmabuf(struct iio_dev_buffer_pair * ib,int __user * user_req,bool nonblock)1766 static int iio_buffer_detach_dmabuf(struct iio_dev_buffer_pair *ib,
1767 int __user *user_req, bool nonblock)
1768 {
1769 struct iio_buffer *buffer = ib->buffer;
1770 struct iio_dev *indio_dev = ib->indio_dev;
1771 struct device *dma_dev = iio_buffer_get_dma_dev(indio_dev, buffer);
1772 struct iio_dmabuf_priv *priv;
1773 struct dma_buf *dmabuf;
1774 int dmabuf_fd, ret = -EPERM;
1775
1776 if (copy_from_user(&dmabuf_fd, user_req, sizeof(dmabuf_fd)))
1777 return -EFAULT;
1778
1779 dmabuf = dma_buf_get(dmabuf_fd);
1780 if (IS_ERR(dmabuf))
1781 return PTR_ERR(dmabuf);
1782
1783 guard(mutex)(&buffer->dmabufs_mutex);
1784
1785 list_for_each_entry(priv, &buffer->dmabufs, entry) {
1786 if (priv->attach->dev == dma_dev
1787 && priv->attach->dmabuf == dmabuf) {
1788 list_del(&priv->entry);
1789
1790 /* Unref the reference from iio_buffer_attach_dmabuf() */
1791 iio_buffer_dmabuf_put(priv->attach);
1792 ret = 0;
1793 break;
1794 }
1795 }
1796
1797 dma_buf_put(dmabuf);
1798
1799 return ret;
1800 }
1801
1802 static const char *
iio_buffer_dma_fence_get_driver_name(struct dma_fence * fence)1803 iio_buffer_dma_fence_get_driver_name(struct dma_fence *fence)
1804 {
1805 return "iio";
1806 }
1807
iio_buffer_dma_fence_release(struct dma_fence * fence)1808 static void iio_buffer_dma_fence_release(struct dma_fence *fence)
1809 {
1810 struct iio_dma_fence *iio_fence =
1811 container_of(fence, struct iio_dma_fence, base);
1812
1813 kfree(iio_fence);
1814 }
1815
1816 static const struct dma_fence_ops iio_buffer_dma_fence_ops = {
1817 .get_driver_name = iio_buffer_dma_fence_get_driver_name,
1818 .get_timeline_name = iio_buffer_dma_fence_get_driver_name,
1819 .release = iio_buffer_dma_fence_release,
1820 };
1821
iio_buffer_enqueue_dmabuf(struct iio_dev_buffer_pair * ib,struct iio_dmabuf __user * iio_dmabuf_req,bool nonblock)1822 static int iio_buffer_enqueue_dmabuf(struct iio_dev_buffer_pair *ib,
1823 struct iio_dmabuf __user *iio_dmabuf_req,
1824 bool nonblock)
1825 {
1826 struct iio_buffer *buffer = ib->buffer;
1827 struct iio_dmabuf iio_dmabuf;
1828 struct dma_buf_attachment *attach;
1829 struct iio_dmabuf_priv *priv;
1830 struct iio_dma_fence *fence;
1831 struct dma_buf *dmabuf;
1832 unsigned long timeout;
1833 bool cookie, cyclic, dma_to_ram;
1834 long retl;
1835 u32 seqno;
1836 int ret;
1837
1838 if (copy_from_user(&iio_dmabuf, iio_dmabuf_req, sizeof(iio_dmabuf)))
1839 return -EFAULT;
1840
1841 if (iio_dmabuf.flags & ~IIO_BUFFER_DMABUF_SUPPORTED_FLAGS)
1842 return -EINVAL;
1843
1844 cyclic = iio_dmabuf.flags & IIO_BUFFER_DMABUF_CYCLIC;
1845
1846 /* Cyclic flag is only supported on output buffers */
1847 if (cyclic && buffer->direction != IIO_BUFFER_DIRECTION_OUT)
1848 return -EINVAL;
1849
1850 dmabuf = dma_buf_get(iio_dmabuf.fd);
1851 if (IS_ERR(dmabuf))
1852 return PTR_ERR(dmabuf);
1853
1854 if (!iio_dmabuf.bytes_used || iio_dmabuf.bytes_used > dmabuf->size) {
1855 ret = -EINVAL;
1856 goto err_dmabuf_put;
1857 }
1858
1859 attach = iio_buffer_find_attachment(ib, dmabuf, nonblock);
1860 if (IS_ERR(attach)) {
1861 ret = PTR_ERR(attach);
1862 goto err_dmabuf_put;
1863 }
1864
1865 priv = attach->importer_priv;
1866
1867 fence = kmalloc_obj(*fence);
1868 if (!fence) {
1869 ret = -ENOMEM;
1870 goto err_attachment_put;
1871 }
1872
1873 fence->priv = priv;
1874
1875 seqno = atomic_add_return(1, &priv->seqno);
1876
1877 /*
1878 * The transfers are guaranteed to be processed in the order they are
1879 * enqueued, so we can use a simple incrementing sequence number for
1880 * the dma_fence.
1881 */
1882 dma_fence_init(&fence->base, &iio_buffer_dma_fence_ops,
1883 &priv->lock, priv->context, seqno);
1884
1885 ret = iio_dma_resv_lock(dmabuf, nonblock);
1886 if (ret)
1887 goto err_fence_put;
1888
1889 timeout = nonblock ? 0 : msecs_to_jiffies(DMABUF_ENQUEUE_TIMEOUT_MS);
1890 dma_to_ram = buffer->direction == IIO_BUFFER_DIRECTION_IN;
1891
1892 /* Make sure we don't have writers */
1893 retl = dma_resv_wait_timeout(dmabuf->resv,
1894 dma_resv_usage_rw(dma_to_ram),
1895 true, timeout);
1896 if (retl == 0)
1897 retl = -EBUSY;
1898 if (retl < 0) {
1899 ret = (int)retl;
1900 goto err_resv_unlock;
1901 }
1902
1903 if (buffer->access->lock_queue)
1904 buffer->access->lock_queue(buffer);
1905
1906 ret = dma_resv_reserve_fences(dmabuf->resv, 1);
1907 if (ret)
1908 goto err_queue_unlock;
1909
1910 dma_resv_add_fence(dmabuf->resv, &fence->base,
1911 dma_to_ram ? DMA_RESV_USAGE_WRITE : DMA_RESV_USAGE_READ);
1912 dma_fence_put(&fence->base);
1913 dma_resv_unlock(dmabuf->resv);
1914
1915 cookie = dma_fence_begin_signalling();
1916
1917 ret = buffer->access->enqueue_dmabuf(buffer, priv->block, &fence->base,
1918 priv->sgt, iio_dmabuf.bytes_used,
1919 cyclic);
1920 if (ret) {
1921 /*
1922 * DMABUF enqueue failed, but we already added the fence.
1923 * Signal the error through the fence completion mechanism.
1924 */
1925 iio_buffer_signal_dmabuf_done(&fence->base, ret);
1926 }
1927
1928 if (buffer->access->unlock_queue)
1929 buffer->access->unlock_queue(buffer);
1930
1931 dma_fence_end_signalling(cookie);
1932 dma_buf_put(dmabuf);
1933
1934 return ret;
1935
1936 err_queue_unlock:
1937 if (buffer->access->unlock_queue)
1938 buffer->access->unlock_queue(buffer);
1939 err_resv_unlock:
1940 dma_resv_unlock(dmabuf->resv);
1941 err_fence_put:
1942 dma_fence_put(&fence->base);
1943 err_attachment_put:
1944 iio_buffer_dmabuf_put(attach);
1945 err_dmabuf_put:
1946 dma_buf_put(dmabuf);
1947
1948 return ret;
1949 }
1950
iio_buffer_cleanup(struct work_struct * work)1951 static void iio_buffer_cleanup(struct work_struct *work)
1952 {
1953 struct iio_dma_fence *fence =
1954 container_of(work, struct iio_dma_fence, work);
1955 struct iio_dmabuf_priv *priv = fence->priv;
1956 struct dma_buf_attachment *attach = priv->attach;
1957
1958 dma_fence_put(&fence->base);
1959 iio_buffer_dmabuf_put(attach);
1960 }
1961
iio_buffer_signal_dmabuf_done(struct dma_fence * fence,int ret)1962 void iio_buffer_signal_dmabuf_done(struct dma_fence *fence, int ret)
1963 {
1964 struct iio_dma_fence *iio_fence =
1965 container_of(fence, struct iio_dma_fence, base);
1966 bool cookie = dma_fence_begin_signalling();
1967
1968 /*
1969 * Get a reference to the fence, so that it's not freed as soon as
1970 * it's signaled.
1971 */
1972 dma_fence_get(fence);
1973
1974 fence->error = ret;
1975 dma_fence_signal(fence);
1976 dma_fence_end_signalling(cookie);
1977
1978 /*
1979 * The fence will be unref'd in iio_buffer_cleanup.
1980 * It can't be done here, as the unref functions might try to lock the
1981 * resv object, which can deadlock.
1982 */
1983 INIT_WORK(&iio_fence->work, iio_buffer_cleanup);
1984 schedule_work(&iio_fence->work);
1985 }
1986 EXPORT_SYMBOL_GPL(iio_buffer_signal_dmabuf_done);
1987
iio_buffer_chrdev_ioctl(struct file * filp,unsigned int cmd,unsigned long arg)1988 static long iio_buffer_chrdev_ioctl(struct file *filp,
1989 unsigned int cmd, unsigned long arg)
1990 {
1991 struct iio_dev_buffer_pair *ib = filp->private_data;
1992 void __user *_arg = (void __user *)arg;
1993 bool nonblock = filp->f_flags & O_NONBLOCK;
1994
1995 switch (cmd) {
1996 case IIO_BUFFER_DMABUF_ATTACH_IOCTL:
1997 return iio_buffer_attach_dmabuf(ib, _arg, nonblock);
1998 case IIO_BUFFER_DMABUF_DETACH_IOCTL:
1999 return iio_buffer_detach_dmabuf(ib, _arg, nonblock);
2000 case IIO_BUFFER_DMABUF_ENQUEUE_IOCTL:
2001 return iio_buffer_enqueue_dmabuf(ib, _arg, nonblock);
2002 default:
2003 return -EINVAL;
2004 }
2005 }
2006
2007 static const struct file_operations iio_buffer_chrdev_fileops = {
2008 .owner = THIS_MODULE,
2009 .llseek = noop_llseek,
2010 .read = iio_buffer_read,
2011 .write = iio_buffer_write,
2012 .unlocked_ioctl = iio_buffer_chrdev_ioctl,
2013 .compat_ioctl = compat_ptr_ioctl,
2014 .poll = iio_buffer_poll,
2015 .release = iio_buffer_chrdev_release,
2016 };
2017
iio_device_buffer_getfd(struct iio_dev * indio_dev,unsigned long arg)2018 static long iio_device_buffer_getfd(struct iio_dev *indio_dev, unsigned long arg)
2019 {
2020 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
2021 int __user *ival = (int __user *)arg;
2022 struct iio_dev_buffer_pair *ib;
2023 struct iio_buffer *buffer;
2024 int fd, idx, ret;
2025
2026 if (copy_from_user(&idx, ival, sizeof(idx)))
2027 return -EFAULT;
2028
2029 if (idx >= iio_dev_opaque->attached_buffers_cnt)
2030 return -ENODEV;
2031
2032 iio_device_get(indio_dev);
2033
2034 buffer = iio_dev_opaque->attached_buffers[idx];
2035
2036 if (test_and_set_bit(IIO_BUSY_BIT_POS, &buffer->flags)) {
2037 ret = -EBUSY;
2038 goto error_iio_dev_put;
2039 }
2040
2041 ib = kzalloc_obj(*ib);
2042 if (!ib) {
2043 ret = -ENOMEM;
2044 goto error_clear_busy_bit;
2045 }
2046
2047 ib->indio_dev = indio_dev;
2048 ib->buffer = buffer;
2049
2050 fd = anon_inode_getfd("iio:buffer", &iio_buffer_chrdev_fileops,
2051 ib, O_RDWR | O_CLOEXEC);
2052 if (fd < 0) {
2053 ret = fd;
2054 goto error_free_ib;
2055 }
2056
2057 if (copy_to_user(ival, &fd, sizeof(fd))) {
2058 /*
2059 * "Leak" the fd, as there's not much we can do about this
2060 * anyway. 'fd' might have been closed already, as
2061 * anon_inode_getfd() called fd_install() on it, which made
2062 * it reachable by userland.
2063 *
2064 * Instead of allowing a malicious user to play tricks with
2065 * us, rely on the process exit path to do any necessary
2066 * cleanup, as in releasing the file, if still needed.
2067 */
2068 return -EFAULT;
2069 }
2070
2071 return 0;
2072
2073 error_free_ib:
2074 kfree(ib);
2075 error_clear_busy_bit:
2076 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags);
2077 error_iio_dev_put:
2078 iio_device_put(indio_dev);
2079 return ret;
2080 }
2081
iio_device_buffer_ioctl(struct iio_dev * indio_dev,struct file * filp,unsigned int cmd,unsigned long arg)2082 static long iio_device_buffer_ioctl(struct iio_dev *indio_dev, struct file *filp,
2083 unsigned int cmd, unsigned long arg)
2084 {
2085 switch (cmd) {
2086 case IIO_BUFFER_GET_FD_IOCTL:
2087 return iio_device_buffer_getfd(indio_dev, arg);
2088 default:
2089 return IIO_IOCTL_UNHANDLED;
2090 }
2091 }
2092
iio_channel_validate_scan_type(struct device * dev,int ch,const struct iio_scan_type * scan_type)2093 static int iio_channel_validate_scan_type(struct device *dev, int ch,
2094 const struct iio_scan_type *scan_type)
2095 {
2096 /* Verify that sample bits fit into storage */
2097 if (scan_type->storagebits < scan_type->realbits + scan_type->shift) {
2098 dev_err(dev,
2099 "Channel %d storagebits (%d) < shifted realbits (%d + %d)\n",
2100 ch, scan_type->storagebits,
2101 scan_type->realbits,
2102 scan_type->shift);
2103 return -EINVAL;
2104 }
2105
2106 return 0;
2107 }
2108
__iio_buffer_alloc_sysfs_and_mask(struct iio_buffer * buffer,struct iio_dev * indio_dev,int index)2109 static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer,
2110 struct iio_dev *indio_dev,
2111 int index)
2112 {
2113 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
2114 unsigned int masklength = iio_get_masklength(indio_dev);
2115 struct iio_dev_attr *p;
2116 const struct iio_dev_attr *id_attr;
2117 struct attribute **attr;
2118 int ret, i, attrn, scan_el_attrcount, buffer_attrcount;
2119 const struct iio_chan_spec *channels;
2120
2121 buffer_attrcount = 0;
2122 if (buffer->attrs) {
2123 while (buffer->attrs[buffer_attrcount])
2124 buffer_attrcount++;
2125 }
2126 buffer_attrcount += ARRAY_SIZE(iio_buffer_attrs);
2127
2128 scan_el_attrcount = 0;
2129 INIT_LIST_HEAD(&buffer->buffer_attr_list);
2130 channels = indio_dev->channels;
2131 if (channels) {
2132 /* new magic */
2133 for (i = 0; i < indio_dev->num_channels; i++) {
2134 const struct iio_scan_type *scan_type;
2135
2136 if (channels[i].scan_index < 0)
2137 continue;
2138
2139 if (channels[i].has_ext_scan_type) {
2140 int j;
2141
2142 /*
2143 * get_current_scan_type is required when using
2144 * extended scan types.
2145 */
2146 if (!indio_dev->info->get_current_scan_type) {
2147 ret = -EINVAL;
2148 goto error_cleanup_dynamic;
2149 }
2150
2151 for (j = 0; j < channels[i].num_ext_scan_type; j++) {
2152 scan_type = &channels[i].ext_scan_type[j];
2153
2154 ret = iio_channel_validate_scan_type(
2155 &indio_dev->dev, i, scan_type);
2156 if (ret)
2157 goto error_cleanup_dynamic;
2158 }
2159 } else {
2160 scan_type = &channels[i].scan_type;
2161
2162 ret = iio_channel_validate_scan_type(
2163 &indio_dev->dev, i, scan_type);
2164 if (ret)
2165 goto error_cleanup_dynamic;
2166 }
2167
2168 ret = iio_buffer_add_channel_sysfs(indio_dev, buffer,
2169 &channels[i]);
2170 if (ret < 0)
2171 goto error_cleanup_dynamic;
2172 scan_el_attrcount += ret;
2173 if (channels[i].type == IIO_TIMESTAMP)
2174 iio_dev_opaque->scan_index_timestamp =
2175 channels[i].scan_index;
2176 }
2177 if (masklength && !buffer->scan_mask) {
2178 buffer->scan_mask = bitmap_zalloc(masklength,
2179 GFP_KERNEL);
2180 if (!buffer->scan_mask) {
2181 ret = -ENOMEM;
2182 goto error_cleanup_dynamic;
2183 }
2184 }
2185 }
2186
2187 attrn = buffer_attrcount + scan_el_attrcount;
2188 attr = kzalloc_objs(*attr, attrn + 1);
2189 if (!attr) {
2190 ret = -ENOMEM;
2191 goto error_free_scan_mask;
2192 }
2193
2194 memcpy(attr, iio_buffer_attrs, sizeof(iio_buffer_attrs));
2195 if (!buffer->access->set_length)
2196 attr[0] = &dev_attr_length_ro.attr;
2197
2198 if (buffer->access->flags & INDIO_BUFFER_FLAG_FIXED_WATERMARK)
2199 attr[2] = &dev_attr_watermark_ro.attr;
2200
2201 if (buffer->attrs)
2202 for (i = 0, id_attr = buffer->attrs[i];
2203 (id_attr = buffer->attrs[i]); i++)
2204 attr[ARRAY_SIZE(iio_buffer_attrs) + i] =
2205 (struct attribute *)&id_attr->dev_attr.attr;
2206
2207 buffer->buffer_group.attrs = attr;
2208
2209 for (i = 0; i < buffer_attrcount; i++) {
2210 struct attribute *wrapped;
2211
2212 wrapped = iio_buffer_wrap_attr(buffer, attr[i]);
2213 if (!wrapped) {
2214 ret = -ENOMEM;
2215 goto error_free_buffer_attrs;
2216 }
2217 attr[i] = wrapped;
2218 }
2219
2220 attrn = 0;
2221 list_for_each_entry(p, &buffer->buffer_attr_list, l)
2222 attr[attrn++] = &p->dev_attr.attr;
2223
2224 buffer->buffer_group.name = kasprintf(GFP_KERNEL, "buffer%d", index);
2225 if (!buffer->buffer_group.name) {
2226 ret = -ENOMEM;
2227 goto error_free_buffer_attrs;
2228 }
2229
2230 ret = iio_device_register_sysfs_group(indio_dev, &buffer->buffer_group);
2231 if (ret)
2232 goto error_free_buffer_attr_group_name;
2233
2234 /* we only need to register the legacy groups for the first buffer */
2235 if (index > 0)
2236 return 0;
2237
2238 ret = iio_buffer_register_legacy_sysfs_groups(indio_dev, attr,
2239 buffer_attrcount,
2240 scan_el_attrcount);
2241 if (ret)
2242 goto error_free_buffer_attr_group_name;
2243
2244 return 0;
2245
2246 error_free_buffer_attr_group_name:
2247 kfree(buffer->buffer_group.name);
2248 error_free_buffer_attrs:
2249 kfree(buffer->buffer_group.attrs);
2250 error_free_scan_mask:
2251 bitmap_free(buffer->scan_mask);
2252 error_cleanup_dynamic:
2253 iio_free_chan_devattr_list(&buffer->buffer_attr_list);
2254
2255 return ret;
2256 }
2257
__iio_buffer_free_sysfs_and_mask(struct iio_buffer * buffer,struct iio_dev * indio_dev,int index)2258 static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer,
2259 struct iio_dev *indio_dev,
2260 int index)
2261 {
2262 if (index == 0)
2263 iio_buffer_unregister_legacy_sysfs_groups(indio_dev);
2264 bitmap_free(buffer->scan_mask);
2265 kfree(buffer->buffer_group.name);
2266 kfree(buffer->buffer_group.attrs);
2267 iio_free_chan_devattr_list(&buffer->buffer_attr_list);
2268 }
2269
iio_buffers_alloc_sysfs_and_mask(struct iio_dev * indio_dev)2270 int iio_buffers_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
2271 {
2272 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
2273 const struct iio_chan_spec *channels;
2274 struct iio_buffer *buffer;
2275 int ret, i, idx;
2276 size_t sz;
2277
2278 channels = indio_dev->channels;
2279 if (channels) {
2280 int ml = 0;
2281
2282 for (i = 0; i < indio_dev->num_channels; i++)
2283 ml = max(ml, channels[i].scan_index + 1);
2284 ACCESS_PRIVATE(indio_dev, masklength) = ml;
2285 }
2286
2287 if (!iio_dev_opaque->attached_buffers_cnt)
2288 return 0;
2289
2290 for (idx = 0; idx < iio_dev_opaque->attached_buffers_cnt; idx++) {
2291 buffer = iio_dev_opaque->attached_buffers[idx];
2292 ret = __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev, idx);
2293 if (ret)
2294 goto error_unwind_sysfs_and_mask;
2295 }
2296
2297 sz = sizeof(*iio_dev_opaque->buffer_ioctl_handler);
2298 iio_dev_opaque->buffer_ioctl_handler = kzalloc(sz, GFP_KERNEL);
2299 if (!iio_dev_opaque->buffer_ioctl_handler) {
2300 ret = -ENOMEM;
2301 goto error_unwind_sysfs_and_mask;
2302 }
2303
2304 iio_dev_opaque->buffer_ioctl_handler->ioctl = iio_device_buffer_ioctl;
2305 iio_device_ioctl_handler_register(indio_dev,
2306 iio_dev_opaque->buffer_ioctl_handler);
2307
2308 return 0;
2309
2310 error_unwind_sysfs_and_mask:
2311 while (idx--) {
2312 buffer = iio_dev_opaque->attached_buffers[idx];
2313 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, idx);
2314 }
2315 return ret;
2316 }
2317
iio_buffers_free_sysfs_and_mask(struct iio_dev * indio_dev)2318 void iio_buffers_free_sysfs_and_mask(struct iio_dev *indio_dev)
2319 {
2320 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
2321 struct iio_buffer *buffer;
2322 int i;
2323
2324 if (!iio_dev_opaque->attached_buffers_cnt)
2325 return;
2326
2327 iio_device_ioctl_handler_unregister(iio_dev_opaque->buffer_ioctl_handler);
2328 kfree(iio_dev_opaque->buffer_ioctl_handler);
2329
2330 for (i = iio_dev_opaque->attached_buffers_cnt - 1; i >= 0; i--) {
2331 buffer = iio_dev_opaque->attached_buffers[i];
2332 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, i);
2333 }
2334 }
2335
2336 /**
2337 * iio_validate_scan_mask_onehot() - Validates that exactly one channel is selected
2338 * @indio_dev: the iio device
2339 * @mask: scan mask to be checked
2340 *
2341 * Return true if exactly one bit is set in the scan mask, false otherwise. It
2342 * can be used for devices where only one channel can be active for sampling at
2343 * a time.
2344 */
iio_validate_scan_mask_onehot(struct iio_dev * indio_dev,const unsigned long * mask)2345 bool iio_validate_scan_mask_onehot(struct iio_dev *indio_dev,
2346 const unsigned long *mask)
2347 {
2348 return bitmap_weight(mask, iio_get_masklength(indio_dev)) == 1;
2349 }
2350 EXPORT_SYMBOL_GPL(iio_validate_scan_mask_onehot);
2351
iio_demux(struct iio_buffer * buffer,const void * datain)2352 static const void *iio_demux(struct iio_buffer *buffer,
2353 const void *datain)
2354 {
2355 struct iio_demux_table *t;
2356
2357 if (list_empty(&buffer->demux_list))
2358 return datain;
2359 list_for_each_entry(t, &buffer->demux_list, l)
2360 memcpy(buffer->demux_bounce + t->to,
2361 datain + t->from, t->length);
2362
2363 return buffer->demux_bounce;
2364 }
2365
iio_push_to_buffer(struct iio_buffer * buffer,const void * data)2366 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data)
2367 {
2368 const void *dataout = iio_demux(buffer, data);
2369 int ret;
2370
2371 ret = buffer->access->store_to(buffer, dataout);
2372 if (ret)
2373 return ret;
2374
2375 /*
2376 * We can't just test for watermark to decide if we wake the poll queue
2377 * because read may request less samples than the watermark.
2378 */
2379 wake_up_interruptible_poll(&buffer->pollq, EPOLLIN | EPOLLRDNORM);
2380 return 0;
2381 }
2382
2383 /**
2384 * iio_push_to_buffers() - push to a registered buffer.
2385 * @indio_dev: iio_dev structure for device.
2386 * @data: Full scan.
2387 *
2388 * Context: Any context.
2389 * Return: 0 on success, negative error code on failure.
2390 */
iio_push_to_buffers(struct iio_dev * indio_dev,const void * data)2391 int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data)
2392 {
2393 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
2394 int ret;
2395 struct iio_buffer *buf;
2396
2397 list_for_each_entry(buf, &iio_dev_opaque->buffer_list, buffer_list) {
2398 ret = iio_push_to_buffer(buf, data);
2399 if (ret < 0)
2400 return ret;
2401 }
2402
2403 return 0;
2404 }
2405 EXPORT_SYMBOL_GPL(iio_push_to_buffers);
2406
2407 /**
2408 * iio_push_to_buffers_with_ts_unaligned() - push to registered buffer,
2409 * no alignment or space requirements.
2410 * @indio_dev: iio_dev structure for device.
2411 * @data: channel data excluding the timestamp.
2412 * @data_sz: size of data.
2413 * @timestamp: timestamp for the sample data.
2414 *
2415 * This special variant of iio_push_to_buffers_with_timestamp() does
2416 * not require space for the timestamp, or 8 byte alignment of data.
2417 * It does however require an allocation on first call and additional
2418 * copies on all calls, so should be avoided if possible.
2419 *
2420 * Context: May sleep.
2421 * Return: 0 on success, negative error code on failure.
2422 */
iio_push_to_buffers_with_ts_unaligned(struct iio_dev * indio_dev,const void * data,size_t data_sz,int64_t timestamp)2423 int iio_push_to_buffers_with_ts_unaligned(struct iio_dev *indio_dev,
2424 const void *data,
2425 size_t data_sz,
2426 int64_t timestamp)
2427 {
2428 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
2429
2430 might_sleep();
2431
2432 /*
2433 * Conservative estimate - we can always safely copy the minimum
2434 * of either the data provided or the length of the destination buffer.
2435 * This relaxed limit allows the calling drivers to be lax about
2436 * tracking the size of the data they are pushing, at the cost of
2437 * unnecessary copying of padding.
2438 */
2439 data_sz = min_t(size_t, indio_dev->scan_bytes, data_sz);
2440 if (iio_dev_opaque->bounce_buffer_size != indio_dev->scan_bytes) {
2441 void *bb;
2442
2443 bb = devm_krealloc(&indio_dev->dev,
2444 iio_dev_opaque->bounce_buffer,
2445 indio_dev->scan_bytes, GFP_KERNEL);
2446 if (!bb)
2447 return -ENOMEM;
2448 iio_dev_opaque->bounce_buffer = bb;
2449 iio_dev_opaque->bounce_buffer_size = indio_dev->scan_bytes;
2450 }
2451 memcpy(iio_dev_opaque->bounce_buffer, data, data_sz);
2452 return iio_push_to_buffers_with_timestamp(indio_dev,
2453 iio_dev_opaque->bounce_buffer,
2454 timestamp);
2455 }
2456 EXPORT_SYMBOL_GPL(iio_push_to_buffers_with_ts_unaligned);
2457
2458 /**
2459 * iio_buffer_release() - Free a buffer's resources
2460 * @ref: Pointer to the kref embedded in the iio_buffer struct
2461 *
2462 * This function is called when the last reference to the buffer has been
2463 * dropped. It will typically free all resources allocated by the buffer. Do not
2464 * call this function manually, always use iio_buffer_put() when done using a
2465 * buffer.
2466 */
iio_buffer_release(struct kref * ref)2467 static void iio_buffer_release(struct kref *ref)
2468 {
2469 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref);
2470
2471 mutex_destroy(&buffer->dmabufs_mutex);
2472 buffer->access->release(buffer);
2473 }
2474
2475 /**
2476 * iio_buffer_get() - Grab a reference to the buffer
2477 * @buffer: The buffer to grab a reference for, may be NULL
2478 *
2479 * Returns the pointer to the buffer that was passed into the function.
2480 */
iio_buffer_get(struct iio_buffer * buffer)2481 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer)
2482 {
2483 if (buffer)
2484 kref_get(&buffer->ref);
2485
2486 return buffer;
2487 }
2488 EXPORT_SYMBOL_GPL(iio_buffer_get);
2489
2490 /**
2491 * iio_buffer_put() - Release the reference to the buffer
2492 * @buffer: The buffer to release the reference for, may be NULL
2493 */
iio_buffer_put(struct iio_buffer * buffer)2494 void iio_buffer_put(struct iio_buffer *buffer)
2495 {
2496 if (buffer)
2497 kref_put(&buffer->ref, iio_buffer_release);
2498 }
2499 EXPORT_SYMBOL_GPL(iio_buffer_put);
2500
2501 /**
2502 * iio_device_attach_buffer - Attach a buffer to a IIO device
2503 * @indio_dev: The device the buffer should be attached to
2504 * @buffer: The buffer to attach to the device
2505 *
2506 * Return 0 if successful, negative if error.
2507 *
2508 * This function attaches a buffer to a IIO device. The buffer stays attached to
2509 * the device until the device is freed. For legacy reasons, the first attached
2510 * buffer will also be assigned to 'indio_dev->buffer'.
2511 * The array allocated here, will be free'd via the iio_device_detach_buffers()
2512 * call which is handled by the iio_device_free().
2513 */
iio_device_attach_buffer(struct iio_dev * indio_dev,struct iio_buffer * buffer)2514 int iio_device_attach_buffer(struct iio_dev *indio_dev,
2515 struct iio_buffer *buffer)
2516 {
2517 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
2518 struct iio_buffer **new, **old = iio_dev_opaque->attached_buffers;
2519 unsigned int cnt = iio_dev_opaque->attached_buffers_cnt;
2520
2521 cnt++;
2522
2523 new = krealloc(old, sizeof(*new) * cnt, GFP_KERNEL);
2524 if (!new)
2525 return -ENOMEM;
2526 iio_dev_opaque->attached_buffers = new;
2527
2528 buffer = iio_buffer_get(buffer);
2529
2530 /* first buffer is legacy; attach it to the IIO device directly */
2531 if (!indio_dev->buffer)
2532 indio_dev->buffer = buffer;
2533
2534 iio_dev_opaque->attached_buffers[cnt - 1] = buffer;
2535 iio_dev_opaque->attached_buffers_cnt = cnt;
2536
2537 return 0;
2538 }
2539 EXPORT_SYMBOL_GPL(iio_device_attach_buffer);
2540