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 70 static bool iio_buffer_is_active(struct iio_buffer *buf) 71 { 72 return !list_empty(&buf->buffer_list); 73 } 74 75 static size_t iio_buffer_data_available(struct iio_buffer *buf) 76 { 77 return buf->access->data_available(buf); 78 } 79 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 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 **/ 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 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 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 */ 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 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 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 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 */ 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 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 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 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 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 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 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. */ 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 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 */ 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 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 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 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 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 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 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 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 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 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 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 *= roundup_pow_of_two(scan_type->repeat); 754 755 return bytes; 756 } 757 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 766 static int iio_compute_scan_bytes(struct iio_dev *indio_dev, 767 const unsigned long *mask, bool timestamp, 768 unsigned int *scan_bytes, 769 unsigned int *timestamp_offset) 770 { 771 unsigned int bytes = 0; 772 int length, i, largest = 0; 773 774 /* How much space will the demuxed element take? */ 775 for_each_set_bit(i, mask, iio_get_masklength(indio_dev)) { 776 length = iio_storage_bytes_for_si(indio_dev, i); 777 if (length < 0) 778 return length; 779 780 bytes = ALIGN(bytes, length); 781 bytes += length; 782 largest = max(largest, length); 783 } 784 785 if (timestamp) { 786 length = iio_storage_bytes_for_timestamp(indio_dev); 787 if (length < 0) 788 return length; 789 790 bytes = ALIGN(bytes, length); 791 792 if (timestamp_offset) 793 *timestamp_offset = bytes; 794 795 bytes += length; 796 largest = max(largest, length); 797 } 798 799 *scan_bytes = ALIGN(bytes, largest); 800 801 return 0; 802 } 803 804 static void iio_buffer_activate(struct iio_dev *indio_dev, 805 struct iio_buffer *buffer) 806 { 807 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 808 809 iio_buffer_get(buffer); 810 list_add(&buffer->buffer_list, &iio_dev_opaque->buffer_list); 811 } 812 813 static void iio_buffer_deactivate(struct iio_buffer *buffer) 814 { 815 list_del_init(&buffer->buffer_list); 816 wake_up_interruptible(&buffer->pollq); 817 iio_buffer_put(buffer); 818 } 819 820 static void iio_buffer_deactivate_all(struct iio_dev *indio_dev) 821 { 822 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 823 struct iio_buffer *buffer, *_buffer; 824 825 list_for_each_entry_safe(buffer, _buffer, 826 &iio_dev_opaque->buffer_list, buffer_list) 827 iio_buffer_deactivate(buffer); 828 } 829 830 static int iio_buffer_enable(struct iio_buffer *buffer, 831 struct iio_dev *indio_dev) 832 { 833 if (!buffer->access->enable) 834 return 0; 835 return buffer->access->enable(buffer, indio_dev); 836 } 837 838 static int iio_buffer_disable(struct iio_buffer *buffer, 839 struct iio_dev *indio_dev) 840 { 841 if (!buffer->access->disable) 842 return 0; 843 return buffer->access->disable(buffer, indio_dev); 844 } 845 846 static int iio_buffer_update_bytes_per_datum(struct iio_dev *indio_dev, 847 struct iio_buffer *buffer) 848 { 849 unsigned int bytes; 850 int ret; 851 852 if (!buffer->access->set_bytes_per_datum) 853 return 0; 854 855 ret = iio_compute_scan_bytes(indio_dev, buffer->scan_mask, 856 buffer->scan_timestamp, &bytes, NULL); 857 if (ret) 858 return ret; 859 860 buffer->access->set_bytes_per_datum(buffer, bytes); 861 862 return 0; 863 } 864 865 static int iio_buffer_request_update(struct iio_dev *indio_dev, 866 struct iio_buffer *buffer) 867 { 868 int ret; 869 870 ret = iio_buffer_update_bytes_per_datum(indio_dev, buffer); 871 if (ret) 872 return ret; 873 874 if (buffer->access->request_update) { 875 ret = buffer->access->request_update(buffer); 876 if (ret) { 877 dev_dbg(&indio_dev->dev, 878 "Buffer not started: buffer parameter update failed (%d)\n", 879 ret); 880 return ret; 881 } 882 } 883 884 return 0; 885 } 886 887 static void iio_free_scan_mask(struct iio_dev *indio_dev, 888 const unsigned long *mask) 889 { 890 /* If the mask is dynamically allocated free it, otherwise do nothing */ 891 if (!indio_dev->available_scan_masks) 892 bitmap_free(mask); 893 } 894 895 struct iio_device_config { 896 unsigned int mode; 897 unsigned int watermark; 898 const unsigned long *scan_mask; 899 unsigned int scan_bytes; 900 unsigned int scan_timestamp_offset; 901 bool scan_timestamp; 902 }; 903 904 static int iio_verify_update(struct iio_dev *indio_dev, 905 struct iio_buffer *insert_buffer, 906 struct iio_buffer *remove_buffer, 907 struct iio_device_config *config) 908 { 909 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 910 unsigned int masklength = iio_get_masklength(indio_dev); 911 unsigned long *compound_mask; 912 const unsigned long *scan_mask; 913 bool strict_scanmask = false; 914 struct iio_buffer *buffer; 915 bool scan_timestamp; 916 unsigned int modes; 917 int ret; 918 919 if (insert_buffer && 920 bitmap_empty(insert_buffer->scan_mask, masklength)) { 921 dev_dbg(&indio_dev->dev, 922 "At least one scan element must be enabled first\n"); 923 return -EINVAL; 924 } 925 926 memset(config, 0, sizeof(*config)); 927 config->watermark = ~0; 928 929 /* 930 * If there is just one buffer and we are removing it there is nothing 931 * to verify. 932 */ 933 if (remove_buffer && !insert_buffer && 934 list_is_singular(&iio_dev_opaque->buffer_list)) 935 return 0; 936 937 modes = indio_dev->modes; 938 939 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { 940 if (buffer == remove_buffer) 941 continue; 942 modes &= buffer->access->modes; 943 config->watermark = min(config->watermark, buffer->watermark); 944 } 945 946 if (insert_buffer) { 947 modes &= insert_buffer->access->modes; 948 config->watermark = min(config->watermark, 949 insert_buffer->watermark); 950 } 951 952 /* Definitely possible for devices to support both of these. */ 953 if ((modes & INDIO_BUFFER_TRIGGERED) && indio_dev->trig) { 954 config->mode = INDIO_BUFFER_TRIGGERED; 955 } else if (modes & INDIO_BUFFER_HARDWARE) { 956 /* 957 * Keep things simple for now and only allow a single buffer to 958 * be connected in hardware mode. 959 */ 960 if (insert_buffer && !list_empty(&iio_dev_opaque->buffer_list)) 961 return -EINVAL; 962 config->mode = INDIO_BUFFER_HARDWARE; 963 strict_scanmask = true; 964 } else if (modes & INDIO_BUFFER_SOFTWARE) { 965 config->mode = INDIO_BUFFER_SOFTWARE; 966 } else { 967 /* Can only occur on first buffer */ 968 if (indio_dev->modes & INDIO_BUFFER_TRIGGERED) 969 dev_dbg(&indio_dev->dev, "Buffer not started: no trigger\n"); 970 return -EINVAL; 971 } 972 973 /* What scan mask do we actually have? */ 974 compound_mask = bitmap_zalloc(masklength, GFP_KERNEL); 975 if (!compound_mask) 976 return -ENOMEM; 977 978 scan_timestamp = false; 979 980 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { 981 if (buffer == remove_buffer) 982 continue; 983 bitmap_or(compound_mask, compound_mask, buffer->scan_mask, 984 masklength); 985 scan_timestamp |= buffer->scan_timestamp; 986 } 987 988 if (insert_buffer) { 989 bitmap_or(compound_mask, compound_mask, 990 insert_buffer->scan_mask, masklength); 991 scan_timestamp |= insert_buffer->scan_timestamp; 992 } 993 994 if (indio_dev->available_scan_masks) { 995 scan_mask = iio_scan_mask_match(indio_dev->available_scan_masks, 996 masklength, compound_mask, 997 strict_scanmask); 998 bitmap_free(compound_mask); 999 if (!scan_mask) 1000 return -EINVAL; 1001 } else { 1002 scan_mask = compound_mask; 1003 } 1004 1005 ret = iio_compute_scan_bytes(indio_dev, scan_mask, scan_timestamp, 1006 &config->scan_bytes, 1007 &config->scan_timestamp_offset); 1008 if (ret) 1009 return ret; 1010 1011 config->scan_mask = scan_mask; 1012 config->scan_timestamp = scan_timestamp; 1013 1014 return 0; 1015 } 1016 1017 /** 1018 * struct iio_demux_table - table describing demux memcpy ops 1019 * @from: index to copy from 1020 * @to: index to copy to 1021 * @length: how many bytes to copy 1022 * @l: list head used for management 1023 */ 1024 struct iio_demux_table { 1025 unsigned int from; 1026 unsigned int to; 1027 unsigned int length; 1028 struct list_head l; 1029 }; 1030 1031 static void iio_buffer_demux_free(struct iio_buffer *buffer) 1032 { 1033 struct iio_demux_table *p, *q; 1034 1035 list_for_each_entry_safe(p, q, &buffer->demux_list, l) { 1036 list_del(&p->l); 1037 kfree(p); 1038 } 1039 } 1040 1041 static int iio_buffer_add_demux(struct iio_buffer *buffer, 1042 struct iio_demux_table **p, unsigned int in_loc, 1043 unsigned int out_loc, 1044 unsigned int length) 1045 { 1046 if (*p && (*p)->from + (*p)->length == in_loc && 1047 (*p)->to + (*p)->length == out_loc) { 1048 (*p)->length += length; 1049 } else { 1050 *p = kmalloc_obj(**p); 1051 if (!(*p)) 1052 return -ENOMEM; 1053 (*p)->from = in_loc; 1054 (*p)->to = out_loc; 1055 (*p)->length = length; 1056 list_add_tail(&(*p)->l, &buffer->demux_list); 1057 } 1058 1059 return 0; 1060 } 1061 1062 static int iio_buffer_update_demux(struct iio_dev *indio_dev, 1063 struct iio_buffer *buffer) 1064 { 1065 unsigned int masklength = iio_get_masklength(indio_dev); 1066 int ret, in_ind = -1, out_ind, length; 1067 unsigned int in_loc = 0, out_loc = 0; 1068 struct iio_demux_table *p = NULL; 1069 1070 /* Clear out any old demux */ 1071 iio_buffer_demux_free(buffer); 1072 kfree(buffer->demux_bounce); 1073 buffer->demux_bounce = NULL; 1074 1075 /* First work out which scan mode we will actually have */ 1076 if (bitmap_equal(indio_dev->active_scan_mask, 1077 buffer->scan_mask, masklength)) 1078 return 0; 1079 1080 /* Now we have the two masks, work from least sig and build up sizes */ 1081 for_each_set_bit(out_ind, buffer->scan_mask, masklength) { 1082 in_ind = find_next_bit(indio_dev->active_scan_mask, 1083 masklength, in_ind + 1); 1084 while (in_ind != out_ind) { 1085 ret = iio_storage_bytes_for_si(indio_dev, in_ind); 1086 if (ret < 0) 1087 goto error_clear_mux_table; 1088 1089 length = ret; 1090 /* Make sure we are aligned */ 1091 in_loc = roundup(in_loc, length) + length; 1092 in_ind = find_next_bit(indio_dev->active_scan_mask, 1093 masklength, in_ind + 1); 1094 } 1095 ret = iio_storage_bytes_for_si(indio_dev, in_ind); 1096 if (ret < 0) 1097 goto error_clear_mux_table; 1098 1099 length = ret; 1100 out_loc = roundup(out_loc, length); 1101 in_loc = roundup(in_loc, length); 1102 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); 1103 if (ret) 1104 goto error_clear_mux_table; 1105 out_loc += length; 1106 in_loc += length; 1107 } 1108 /* Relies on scan_timestamp being last */ 1109 if (buffer->scan_timestamp) { 1110 ret = iio_storage_bytes_for_timestamp(indio_dev); 1111 if (ret < 0) 1112 goto error_clear_mux_table; 1113 1114 length = ret; 1115 out_loc = roundup(out_loc, length); 1116 in_loc = roundup(in_loc, length); 1117 ret = iio_buffer_add_demux(buffer, &p, in_loc, out_loc, length); 1118 if (ret) 1119 goto error_clear_mux_table; 1120 out_loc += length; 1121 } 1122 buffer->demux_bounce = kzalloc(out_loc, GFP_KERNEL); 1123 if (!buffer->demux_bounce) { 1124 ret = -ENOMEM; 1125 goto error_clear_mux_table; 1126 } 1127 return 0; 1128 1129 error_clear_mux_table: 1130 iio_buffer_demux_free(buffer); 1131 1132 return ret; 1133 } 1134 1135 static int iio_update_demux(struct iio_dev *indio_dev) 1136 { 1137 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1138 struct iio_buffer *buffer; 1139 int ret; 1140 1141 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { 1142 ret = iio_buffer_update_demux(indio_dev, buffer); 1143 if (ret < 0) 1144 goto error_clear_mux_table; 1145 } 1146 return 0; 1147 1148 error_clear_mux_table: 1149 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) 1150 iio_buffer_demux_free(buffer); 1151 1152 return ret; 1153 } 1154 1155 static int iio_enable_buffers(struct iio_dev *indio_dev, 1156 struct iio_device_config *config) 1157 { 1158 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1159 struct iio_buffer *buffer, *tmp = NULL; 1160 int ret; 1161 1162 indio_dev->active_scan_mask = config->scan_mask; 1163 ACCESS_PRIVATE(indio_dev, scan_timestamp) = config->scan_timestamp; 1164 indio_dev->scan_bytes = config->scan_bytes; 1165 ACCESS_PRIVATE(indio_dev, scan_timestamp_offset) = config->scan_timestamp_offset; 1166 iio_dev_opaque->currentmode = config->mode; 1167 1168 iio_update_demux(indio_dev); 1169 1170 /* Wind up again */ 1171 if (indio_dev->setup_ops->preenable) { 1172 ret = indio_dev->setup_ops->preenable(indio_dev); 1173 if (ret) { 1174 dev_dbg(&indio_dev->dev, 1175 "Buffer not started: buffer preenable failed (%d)\n", ret); 1176 goto err_undo_config; 1177 } 1178 } 1179 1180 if (indio_dev->info->update_scan_mode) { 1181 ret = indio_dev->info 1182 ->update_scan_mode(indio_dev, 1183 indio_dev->active_scan_mask); 1184 if (ret < 0) { 1185 dev_dbg(&indio_dev->dev, 1186 "Buffer not started: update scan mode failed (%d)\n", 1187 ret); 1188 goto err_run_postdisable; 1189 } 1190 } 1191 1192 if (indio_dev->info->hwfifo_set_watermark) 1193 indio_dev->info->hwfifo_set_watermark(indio_dev, 1194 config->watermark); 1195 1196 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { 1197 ret = iio_buffer_enable(buffer, indio_dev); 1198 if (ret) { 1199 tmp = buffer; 1200 goto err_disable_buffers; 1201 } 1202 } 1203 1204 if (iio_dev_opaque->currentmode == INDIO_BUFFER_TRIGGERED) { 1205 ret = iio_trigger_attach_poll_func(indio_dev->trig, 1206 indio_dev->pollfunc); 1207 if (ret) 1208 goto err_disable_buffers; 1209 } 1210 1211 if (indio_dev->setup_ops->postenable) { 1212 ret = indio_dev->setup_ops->postenable(indio_dev); 1213 if (ret) { 1214 dev_dbg(&indio_dev->dev, 1215 "Buffer not started: postenable failed (%d)\n", ret); 1216 goto err_detach_pollfunc; 1217 } 1218 } 1219 1220 return 0; 1221 1222 err_detach_pollfunc: 1223 if (iio_dev_opaque->currentmode == INDIO_BUFFER_TRIGGERED) { 1224 iio_trigger_detach_poll_func(indio_dev->trig, 1225 indio_dev->pollfunc); 1226 } 1227 err_disable_buffers: 1228 buffer = list_prepare_entry(tmp, &iio_dev_opaque->buffer_list, buffer_list); 1229 list_for_each_entry_continue_reverse(buffer, &iio_dev_opaque->buffer_list, 1230 buffer_list) 1231 iio_buffer_disable(buffer, indio_dev); 1232 err_run_postdisable: 1233 if (indio_dev->setup_ops->postdisable) 1234 indio_dev->setup_ops->postdisable(indio_dev); 1235 err_undo_config: 1236 iio_dev_opaque->currentmode = INDIO_DIRECT_MODE; 1237 indio_dev->active_scan_mask = NULL; 1238 1239 return ret; 1240 } 1241 1242 static int iio_disable_buffers(struct iio_dev *indio_dev) 1243 { 1244 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1245 struct iio_buffer *buffer; 1246 int ret = 0; 1247 int ret2; 1248 1249 /* Wind down existing buffers - iff there are any */ 1250 if (list_empty(&iio_dev_opaque->buffer_list)) 1251 return 0; 1252 1253 /* 1254 * If things go wrong at some step in disable we still need to continue 1255 * to perform the other steps, otherwise we leave the device in a 1256 * inconsistent state. We return the error code for the first error we 1257 * encountered. 1258 */ 1259 1260 if (indio_dev->setup_ops->predisable) { 1261 ret2 = indio_dev->setup_ops->predisable(indio_dev); 1262 if (ret2 && !ret) 1263 ret = ret2; 1264 } 1265 1266 if (iio_dev_opaque->currentmode == INDIO_BUFFER_TRIGGERED) { 1267 iio_trigger_detach_poll_func(indio_dev->trig, 1268 indio_dev->pollfunc); 1269 } 1270 1271 list_for_each_entry(buffer, &iio_dev_opaque->buffer_list, buffer_list) { 1272 ret2 = iio_buffer_disable(buffer, indio_dev); 1273 if (ret2 && !ret) 1274 ret = ret2; 1275 } 1276 1277 if (indio_dev->setup_ops->postdisable) { 1278 ret2 = indio_dev->setup_ops->postdisable(indio_dev); 1279 if (ret2 && !ret) 1280 ret = ret2; 1281 } 1282 1283 iio_free_scan_mask(indio_dev, indio_dev->active_scan_mask); 1284 indio_dev->active_scan_mask = NULL; 1285 iio_dev_opaque->currentmode = INDIO_DIRECT_MODE; 1286 1287 return ret; 1288 } 1289 1290 static int __iio_update_buffers(struct iio_dev *indio_dev, 1291 struct iio_buffer *insert_buffer, 1292 struct iio_buffer *remove_buffer) 1293 { 1294 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1295 struct iio_device_config new_config; 1296 int ret; 1297 1298 ret = iio_verify_update(indio_dev, insert_buffer, remove_buffer, 1299 &new_config); 1300 if (ret) 1301 return ret; 1302 1303 if (insert_buffer) { 1304 ret = iio_buffer_request_update(indio_dev, insert_buffer); 1305 if (ret) 1306 goto err_free_config; 1307 } 1308 1309 ret = iio_disable_buffers(indio_dev); 1310 if (ret) 1311 goto err_deactivate_all; 1312 1313 if (remove_buffer) 1314 iio_buffer_deactivate(remove_buffer); 1315 if (insert_buffer) 1316 iio_buffer_activate(indio_dev, insert_buffer); 1317 1318 /* If no buffers in list, we are done */ 1319 if (list_empty(&iio_dev_opaque->buffer_list)) 1320 return 0; 1321 1322 ret = iio_enable_buffers(indio_dev, &new_config); 1323 if (ret) 1324 goto err_deactivate_all; 1325 1326 return 0; 1327 1328 err_deactivate_all: 1329 /* 1330 * We've already verified that the config is valid earlier. If things go 1331 * wrong in either enable or disable the most likely reason is an IO 1332 * error from the device. In this case there is no good recovery 1333 * strategy. Just make sure to disable everything and leave the device 1334 * in a sane state. With a bit of luck the device might come back to 1335 * life again later and userspace can try again. 1336 */ 1337 iio_buffer_deactivate_all(indio_dev); 1338 1339 err_free_config: 1340 iio_free_scan_mask(indio_dev, new_config.scan_mask); 1341 return ret; 1342 } 1343 1344 int iio_update_buffers(struct iio_dev *indio_dev, 1345 struct iio_buffer *insert_buffer, 1346 struct iio_buffer *remove_buffer) 1347 { 1348 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1349 1350 if (insert_buffer == remove_buffer) 1351 return 0; 1352 1353 if (insert_buffer && 1354 insert_buffer->direction == IIO_BUFFER_DIRECTION_OUT) 1355 return -EINVAL; 1356 1357 guard(mutex)(&iio_dev_opaque->info_exist_lock); 1358 guard(mutex)(&iio_dev_opaque->mlock); 1359 1360 if (insert_buffer && iio_buffer_is_active(insert_buffer)) 1361 insert_buffer = NULL; 1362 1363 if (remove_buffer && !iio_buffer_is_active(remove_buffer)) 1364 remove_buffer = NULL; 1365 1366 if (!insert_buffer && !remove_buffer) 1367 return 0; 1368 1369 if (!indio_dev->info) 1370 return -ENODEV; 1371 1372 return __iio_update_buffers(indio_dev, insert_buffer, remove_buffer); 1373 } 1374 EXPORT_SYMBOL_GPL(iio_update_buffers); 1375 1376 void iio_disable_all_buffers(struct iio_dev *indio_dev) 1377 { 1378 iio_disable_buffers(indio_dev); 1379 iio_buffer_deactivate_all(indio_dev); 1380 } 1381 1382 static ssize_t enable_store(struct device *dev, struct device_attribute *attr, 1383 const char *buf, size_t len) 1384 { 1385 int ret; 1386 bool requested_state; 1387 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 1388 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1389 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; 1390 bool inlist; 1391 1392 ret = kstrtobool(buf, &requested_state); 1393 if (ret < 0) 1394 return ret; 1395 1396 guard(mutex)(&iio_dev_opaque->mlock); 1397 1398 /* Find out if it is in the list */ 1399 inlist = iio_buffer_is_active(buffer); 1400 /* Already in desired state */ 1401 if (inlist == requested_state) 1402 return len; 1403 1404 if (requested_state) 1405 ret = __iio_update_buffers(indio_dev, buffer, NULL); 1406 else 1407 ret = __iio_update_buffers(indio_dev, NULL, buffer); 1408 if (ret) 1409 return ret; 1410 1411 return len; 1412 } 1413 1414 static ssize_t watermark_show(struct device *dev, struct device_attribute *attr, 1415 char *buf) 1416 { 1417 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; 1418 1419 return sysfs_emit(buf, "%u\n", buffer->watermark); 1420 } 1421 1422 static ssize_t watermark_store(struct device *dev, 1423 struct device_attribute *attr, 1424 const char *buf, size_t len) 1425 { 1426 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 1427 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1428 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; 1429 unsigned int val; 1430 int ret; 1431 1432 ret = kstrtouint(buf, 10, &val); 1433 if (ret) 1434 return ret; 1435 if (!val) 1436 return -EINVAL; 1437 1438 guard(mutex)(&iio_dev_opaque->mlock); 1439 1440 if (val > buffer->length) 1441 return -EINVAL; 1442 1443 if (iio_buffer_is_active(buffer)) 1444 return -EBUSY; 1445 1446 buffer->watermark = val; 1447 1448 return len; 1449 } 1450 1451 static ssize_t data_available_show(struct device *dev, 1452 struct device_attribute *attr, char *buf) 1453 { 1454 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; 1455 1456 return sysfs_emit(buf, "%zu\n", iio_buffer_data_available(buffer)); 1457 } 1458 1459 static ssize_t direction_show(struct device *dev, 1460 struct device_attribute *attr, 1461 char *buf) 1462 { 1463 struct iio_buffer *buffer = to_iio_dev_attr(attr)->buffer; 1464 1465 switch (buffer->direction) { 1466 case IIO_BUFFER_DIRECTION_IN: 1467 return sysfs_emit(buf, "in\n"); 1468 case IIO_BUFFER_DIRECTION_OUT: 1469 return sysfs_emit(buf, "out\n"); 1470 default: 1471 return -EINVAL; 1472 } 1473 } 1474 1475 static DEVICE_ATTR_RW(length); 1476 static struct device_attribute dev_attr_length_ro = __ATTR_RO(length); 1477 static DEVICE_ATTR_RW(enable); 1478 static DEVICE_ATTR_RW(watermark); 1479 static struct device_attribute dev_attr_watermark_ro = __ATTR_RO(watermark); 1480 static DEVICE_ATTR_RO(data_available); 1481 static DEVICE_ATTR_RO(direction); 1482 1483 /* 1484 * When adding new attributes here, put the at the end, at least until 1485 * the code that handles the length/length_ro & watermark/watermark_ro 1486 * assignments gets cleaned up. Otherwise these can create some weird 1487 * duplicate attributes errors under some setups. 1488 */ 1489 static struct attribute *iio_buffer_attrs[] = { 1490 &dev_attr_length.attr, 1491 &dev_attr_enable.attr, 1492 &dev_attr_watermark.attr, 1493 &dev_attr_data_available.attr, 1494 &dev_attr_direction.attr, 1495 }; 1496 1497 #define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr) 1498 1499 static struct attribute *iio_buffer_wrap_attr(struct iio_buffer *buffer, 1500 struct attribute *attr) 1501 { 1502 struct device_attribute *dattr = to_dev_attr(attr); 1503 struct iio_dev_attr *iio_attr; 1504 1505 iio_attr = kzalloc_obj(*iio_attr); 1506 if (!iio_attr) 1507 return NULL; 1508 1509 iio_attr->buffer = buffer; 1510 memcpy(&iio_attr->dev_attr, dattr, sizeof(iio_attr->dev_attr)); 1511 iio_attr->dev_attr.attr.name = kstrdup_const(attr->name, GFP_KERNEL); 1512 if (!iio_attr->dev_attr.attr.name) { 1513 kfree(iio_attr); 1514 return NULL; 1515 } 1516 1517 sysfs_attr_init(&iio_attr->dev_attr.attr); 1518 1519 list_add(&iio_attr->l, &buffer->buffer_attr_list); 1520 1521 return &iio_attr->dev_attr.attr; 1522 } 1523 1524 static int iio_buffer_register_legacy_sysfs_groups(struct iio_dev *indio_dev, 1525 struct attribute **buffer_attrs, 1526 int buffer_attrcount, 1527 int scan_el_attrcount) 1528 { 1529 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1530 struct attribute_group *group; 1531 struct attribute **attrs; 1532 int ret; 1533 1534 attrs = kzalloc_objs(*attrs, buffer_attrcount + 1); 1535 if (!attrs) 1536 return -ENOMEM; 1537 1538 memcpy(attrs, buffer_attrs, buffer_attrcount * sizeof(*attrs)); 1539 1540 group = &iio_dev_opaque->legacy_buffer_group; 1541 group->attrs = attrs; 1542 group->name = "buffer"; 1543 1544 ret = iio_device_register_sysfs_group(indio_dev, group); 1545 if (ret) 1546 goto error_free_buffer_attrs; 1547 1548 attrs = kzalloc_objs(*attrs, scan_el_attrcount + 1); 1549 if (!attrs) { 1550 ret = -ENOMEM; 1551 goto error_free_buffer_attrs; 1552 } 1553 1554 memcpy(attrs, &buffer_attrs[buffer_attrcount], 1555 scan_el_attrcount * sizeof(*attrs)); 1556 1557 group = &iio_dev_opaque->legacy_scan_el_group; 1558 group->attrs = attrs; 1559 group->name = "scan_elements"; 1560 1561 ret = iio_device_register_sysfs_group(indio_dev, group); 1562 if (ret) 1563 goto error_free_scan_el_attrs; 1564 1565 return 0; 1566 1567 error_free_scan_el_attrs: 1568 kfree(iio_dev_opaque->legacy_scan_el_group.attrs); 1569 error_free_buffer_attrs: 1570 kfree(iio_dev_opaque->legacy_buffer_group.attrs); 1571 1572 return ret; 1573 } 1574 1575 static void iio_buffer_unregister_legacy_sysfs_groups(struct iio_dev *indio_dev) 1576 { 1577 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 1578 1579 kfree(iio_dev_opaque->legacy_buffer_group.attrs); 1580 kfree(iio_dev_opaque->legacy_scan_el_group.attrs); 1581 } 1582 1583 static void iio_buffer_dmabuf_release(struct kref *ref) 1584 { 1585 struct iio_dmabuf_priv *priv = container_of(ref, struct iio_dmabuf_priv, ref); 1586 struct dma_buf_attachment *attach = priv->attach; 1587 struct iio_buffer *buffer = priv->buffer; 1588 struct dma_buf *dmabuf = attach->dmabuf; 1589 1590 dma_buf_unmap_attachment_unlocked(attach, priv->sgt, priv->dir); 1591 1592 buffer->access->detach_dmabuf(buffer, priv->block); 1593 1594 dma_buf_detach(attach->dmabuf, attach); 1595 dma_buf_put(dmabuf); 1596 kfree(priv); 1597 } 1598 1599 static void iio_buffer_dmabuf_get(struct dma_buf_attachment *attach) 1600 { 1601 struct iio_dmabuf_priv *priv = attach->importer_priv; 1602 1603 kref_get(&priv->ref); 1604 } 1605 1606 static void iio_buffer_dmabuf_put(struct dma_buf_attachment *attach) 1607 { 1608 struct iio_dmabuf_priv *priv = attach->importer_priv; 1609 1610 kref_put(&priv->ref, iio_buffer_dmabuf_release); 1611 } 1612 1613 static int iio_buffer_chrdev_release(struct inode *inode, struct file *filep) 1614 { 1615 struct iio_dev_buffer_pair *ib = filep->private_data; 1616 struct iio_dev *indio_dev = ib->indio_dev; 1617 struct iio_buffer *buffer = ib->buffer; 1618 struct iio_dmabuf_priv *priv, *tmp; 1619 1620 wake_up(&buffer->pollq); 1621 1622 guard(mutex)(&buffer->dmabufs_mutex); 1623 1624 /* Close all attached DMABUFs */ 1625 list_for_each_entry_safe(priv, tmp, &buffer->dmabufs, entry) { 1626 list_del_init(&priv->entry); 1627 iio_buffer_dmabuf_put(priv->attach); 1628 } 1629 1630 kfree(ib); 1631 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags); 1632 iio_device_put(indio_dev); 1633 1634 return 0; 1635 } 1636 1637 static int iio_dma_resv_lock(struct dma_buf *dmabuf, bool nonblock) 1638 { 1639 if (!nonblock) 1640 return dma_resv_lock_interruptible(dmabuf->resv, NULL); 1641 1642 if (!dma_resv_trylock(dmabuf->resv)) 1643 return -EBUSY; 1644 1645 return 0; 1646 } 1647 1648 static struct device *iio_buffer_get_dma_dev(const struct iio_dev *indio_dev, 1649 struct iio_buffer *buffer) 1650 { 1651 if (buffer->access->get_dma_dev) 1652 return buffer->access->get_dma_dev(buffer); 1653 1654 return indio_dev->dev.parent; 1655 } 1656 1657 static struct dma_buf_attachment * 1658 iio_buffer_find_attachment(struct iio_dev_buffer_pair *ib, 1659 struct dma_buf *dmabuf, bool nonblock) 1660 { 1661 struct iio_buffer *buffer = ib->buffer; 1662 struct device *dma_dev = iio_buffer_get_dma_dev(ib->indio_dev, buffer); 1663 struct dma_buf_attachment *attach = NULL; 1664 struct iio_dmabuf_priv *priv; 1665 1666 guard(mutex)(&buffer->dmabufs_mutex); 1667 1668 list_for_each_entry(priv, &buffer->dmabufs, entry) { 1669 if (priv->attach->dev == dma_dev 1670 && priv->attach->dmabuf == dmabuf) { 1671 attach = priv->attach; 1672 break; 1673 } 1674 } 1675 1676 if (attach) 1677 iio_buffer_dmabuf_get(attach); 1678 1679 return attach ?: ERR_PTR(-EPERM); 1680 } 1681 1682 static int iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair *ib, 1683 int __user *user_fd, bool nonblock) 1684 { 1685 struct iio_dev *indio_dev = ib->indio_dev; 1686 struct iio_buffer *buffer = ib->buffer; 1687 struct device *dma_dev = iio_buffer_get_dma_dev(indio_dev, buffer); 1688 struct dma_buf_attachment *attach; 1689 struct iio_dmabuf_priv *priv, *each; 1690 struct dma_buf *dmabuf; 1691 int err, fd; 1692 1693 if (!buffer->access->attach_dmabuf 1694 || !buffer->access->detach_dmabuf 1695 || !buffer->access->enqueue_dmabuf) 1696 return -EPERM; 1697 1698 if (copy_from_user(&fd, user_fd, sizeof(fd))) 1699 return -EFAULT; 1700 1701 priv = kzalloc_obj(*priv); 1702 if (!priv) 1703 return -ENOMEM; 1704 1705 spin_lock_init(&priv->lock); 1706 priv->context = dma_fence_context_alloc(1); 1707 1708 dmabuf = dma_buf_get(fd); 1709 if (IS_ERR(dmabuf)) { 1710 err = PTR_ERR(dmabuf); 1711 goto err_free_priv; 1712 } 1713 1714 attach = dma_buf_attach(dmabuf, dma_dev); 1715 if (IS_ERR(attach)) { 1716 err = PTR_ERR(attach); 1717 goto err_dmabuf_put; 1718 } 1719 1720 err = iio_dma_resv_lock(dmabuf, nonblock); 1721 if (err) 1722 goto err_dmabuf_detach; 1723 1724 priv->dir = buffer->direction == IIO_BUFFER_DIRECTION_IN 1725 ? DMA_FROM_DEVICE : DMA_TO_DEVICE; 1726 1727 priv->sgt = dma_buf_map_attachment(attach, priv->dir); 1728 if (IS_ERR(priv->sgt)) { 1729 err = PTR_ERR(priv->sgt); 1730 dev_err(&indio_dev->dev, "Unable to map attachment: %d\n", err); 1731 goto err_resv_unlock; 1732 } 1733 1734 kref_init(&priv->ref); 1735 priv->buffer = buffer; 1736 priv->attach = attach; 1737 attach->importer_priv = priv; 1738 1739 priv->block = buffer->access->attach_dmabuf(buffer, attach); 1740 if (IS_ERR(priv->block)) { 1741 err = PTR_ERR(priv->block); 1742 goto err_dmabuf_unmap_attachment; 1743 } 1744 1745 dma_resv_unlock(dmabuf->resv); 1746 1747 mutex_lock(&buffer->dmabufs_mutex); 1748 1749 /* 1750 * Check whether we already have an attachment for this driver/DMABUF 1751 * combo. If we do, refuse to attach. 1752 */ 1753 list_for_each_entry(each, &buffer->dmabufs, entry) { 1754 if (each->attach->dev == dma_dev 1755 && each->attach->dmabuf == dmabuf) { 1756 /* 1757 * We unlocked the reservation object, so going through 1758 * the cleanup code would mean re-locking it first. 1759 * At this stage it is simpler to free the attachment 1760 * using iio_buffer_dma_put(). 1761 */ 1762 mutex_unlock(&buffer->dmabufs_mutex); 1763 iio_buffer_dmabuf_put(attach); 1764 return -EBUSY; 1765 } 1766 } 1767 1768 /* Otherwise, add the new attachment to our dmabufs list. */ 1769 list_add(&priv->entry, &buffer->dmabufs); 1770 mutex_unlock(&buffer->dmabufs_mutex); 1771 1772 return 0; 1773 1774 err_dmabuf_unmap_attachment: 1775 dma_buf_unmap_attachment(attach, priv->sgt, priv->dir); 1776 err_resv_unlock: 1777 dma_resv_unlock(dmabuf->resv); 1778 err_dmabuf_detach: 1779 dma_buf_detach(dmabuf, attach); 1780 err_dmabuf_put: 1781 dma_buf_put(dmabuf); 1782 err_free_priv: 1783 kfree(priv); 1784 1785 return err; 1786 } 1787 1788 static int iio_buffer_detach_dmabuf(struct iio_dev_buffer_pair *ib, 1789 int __user *user_req, bool nonblock) 1790 { 1791 struct iio_buffer *buffer = ib->buffer; 1792 struct iio_dev *indio_dev = ib->indio_dev; 1793 struct device *dma_dev = iio_buffer_get_dma_dev(indio_dev, buffer); 1794 struct iio_dmabuf_priv *priv; 1795 struct dma_buf *dmabuf; 1796 int dmabuf_fd, ret = -EPERM; 1797 1798 if (copy_from_user(&dmabuf_fd, user_req, sizeof(dmabuf_fd))) 1799 return -EFAULT; 1800 1801 dmabuf = dma_buf_get(dmabuf_fd); 1802 if (IS_ERR(dmabuf)) 1803 return PTR_ERR(dmabuf); 1804 1805 guard(mutex)(&buffer->dmabufs_mutex); 1806 1807 list_for_each_entry(priv, &buffer->dmabufs, entry) { 1808 if (priv->attach->dev == dma_dev 1809 && priv->attach->dmabuf == dmabuf) { 1810 list_del(&priv->entry); 1811 1812 /* Unref the reference from iio_buffer_attach_dmabuf() */ 1813 iio_buffer_dmabuf_put(priv->attach); 1814 ret = 0; 1815 break; 1816 } 1817 } 1818 1819 dma_buf_put(dmabuf); 1820 1821 return ret; 1822 } 1823 1824 static const char * 1825 iio_buffer_dma_fence_get_driver_name(struct dma_fence *fence) 1826 { 1827 return "iio"; 1828 } 1829 1830 static void iio_buffer_dma_fence_release(struct dma_fence *fence) 1831 { 1832 struct iio_dma_fence *iio_fence = 1833 container_of(fence, struct iio_dma_fence, base); 1834 1835 kfree(iio_fence); 1836 } 1837 1838 static const struct dma_fence_ops iio_buffer_dma_fence_ops = { 1839 .get_driver_name = iio_buffer_dma_fence_get_driver_name, 1840 .get_timeline_name = iio_buffer_dma_fence_get_driver_name, 1841 .release = iio_buffer_dma_fence_release, 1842 }; 1843 1844 static int iio_buffer_enqueue_dmabuf(struct iio_dev_buffer_pair *ib, 1845 struct iio_dmabuf __user *iio_dmabuf_req, 1846 bool nonblock) 1847 { 1848 struct iio_buffer *buffer = ib->buffer; 1849 struct iio_dmabuf iio_dmabuf; 1850 struct dma_buf_attachment *attach; 1851 struct iio_dmabuf_priv *priv; 1852 struct iio_dma_fence *fence; 1853 struct dma_buf *dmabuf; 1854 unsigned long timeout; 1855 bool cookie, cyclic, dma_to_ram; 1856 long retl; 1857 u32 seqno; 1858 int ret; 1859 1860 if (copy_from_user(&iio_dmabuf, iio_dmabuf_req, sizeof(iio_dmabuf))) 1861 return -EFAULT; 1862 1863 if (iio_dmabuf.flags & ~IIO_BUFFER_DMABUF_SUPPORTED_FLAGS) 1864 return -EINVAL; 1865 1866 cyclic = iio_dmabuf.flags & IIO_BUFFER_DMABUF_CYCLIC; 1867 1868 /* Cyclic flag is only supported on output buffers */ 1869 if (cyclic && buffer->direction != IIO_BUFFER_DIRECTION_OUT) 1870 return -EINVAL; 1871 1872 dmabuf = dma_buf_get(iio_dmabuf.fd); 1873 if (IS_ERR(dmabuf)) 1874 return PTR_ERR(dmabuf); 1875 1876 if (!iio_dmabuf.bytes_used || iio_dmabuf.bytes_used > dmabuf->size) { 1877 ret = -EINVAL; 1878 goto err_dmabuf_put; 1879 } 1880 1881 attach = iio_buffer_find_attachment(ib, dmabuf, nonblock); 1882 if (IS_ERR(attach)) { 1883 ret = PTR_ERR(attach); 1884 goto err_dmabuf_put; 1885 } 1886 1887 priv = attach->importer_priv; 1888 1889 fence = kmalloc_obj(*fence); 1890 if (!fence) { 1891 ret = -ENOMEM; 1892 goto err_attachment_put; 1893 } 1894 1895 fence->priv = priv; 1896 1897 seqno = atomic_add_return(1, &priv->seqno); 1898 1899 /* 1900 * The transfers are guaranteed to be processed in the order they are 1901 * enqueued, so we can use a simple incrementing sequence number for 1902 * the dma_fence. 1903 */ 1904 dma_fence_init(&fence->base, &iio_buffer_dma_fence_ops, 1905 &priv->lock, priv->context, seqno); 1906 1907 ret = iio_dma_resv_lock(dmabuf, nonblock); 1908 if (ret) 1909 goto err_fence_put; 1910 1911 timeout = nonblock ? 0 : msecs_to_jiffies(DMABUF_ENQUEUE_TIMEOUT_MS); 1912 dma_to_ram = buffer->direction == IIO_BUFFER_DIRECTION_IN; 1913 1914 /* Make sure we don't have writers */ 1915 retl = dma_resv_wait_timeout(dmabuf->resv, 1916 dma_resv_usage_rw(dma_to_ram), 1917 true, timeout); 1918 if (retl == 0) 1919 retl = -EBUSY; 1920 if (retl < 0) { 1921 ret = (int)retl; 1922 goto err_resv_unlock; 1923 } 1924 1925 if (buffer->access->lock_queue) 1926 buffer->access->lock_queue(buffer); 1927 1928 ret = dma_resv_reserve_fences(dmabuf->resv, 1); 1929 if (ret) 1930 goto err_queue_unlock; 1931 1932 dma_resv_add_fence(dmabuf->resv, &fence->base, 1933 dma_to_ram ? DMA_RESV_USAGE_WRITE : DMA_RESV_USAGE_READ); 1934 dma_fence_put(&fence->base); 1935 dma_resv_unlock(dmabuf->resv); 1936 1937 cookie = dma_fence_begin_signalling(); 1938 1939 ret = buffer->access->enqueue_dmabuf(buffer, priv->block, &fence->base, 1940 priv->sgt, iio_dmabuf.bytes_used, 1941 cyclic); 1942 if (ret) { 1943 /* 1944 * DMABUF enqueue failed, but we already added the fence. 1945 * Signal the error through the fence completion mechanism. 1946 */ 1947 iio_buffer_signal_dmabuf_done(&fence->base, ret); 1948 } 1949 1950 if (buffer->access->unlock_queue) 1951 buffer->access->unlock_queue(buffer); 1952 1953 dma_fence_end_signalling(cookie); 1954 dma_buf_put(dmabuf); 1955 1956 return ret; 1957 1958 err_queue_unlock: 1959 if (buffer->access->unlock_queue) 1960 buffer->access->unlock_queue(buffer); 1961 err_resv_unlock: 1962 dma_resv_unlock(dmabuf->resv); 1963 err_fence_put: 1964 dma_fence_put(&fence->base); 1965 err_attachment_put: 1966 iio_buffer_dmabuf_put(attach); 1967 err_dmabuf_put: 1968 dma_buf_put(dmabuf); 1969 1970 return ret; 1971 } 1972 1973 static void iio_buffer_cleanup(struct work_struct *work) 1974 { 1975 struct iio_dma_fence *fence = 1976 container_of(work, struct iio_dma_fence, work); 1977 struct iio_dmabuf_priv *priv = fence->priv; 1978 struct dma_buf_attachment *attach = priv->attach; 1979 1980 dma_fence_put(&fence->base); 1981 iio_buffer_dmabuf_put(attach); 1982 } 1983 1984 void iio_buffer_signal_dmabuf_done(struct dma_fence *fence, int ret) 1985 { 1986 struct iio_dma_fence *iio_fence = 1987 container_of(fence, struct iio_dma_fence, base); 1988 bool cookie = dma_fence_begin_signalling(); 1989 1990 /* 1991 * Get a reference to the fence, so that it's not freed as soon as 1992 * it's signaled. 1993 */ 1994 dma_fence_get(fence); 1995 1996 fence->error = ret; 1997 dma_fence_signal(fence); 1998 dma_fence_end_signalling(cookie); 1999 2000 /* 2001 * The fence will be unref'd in iio_buffer_cleanup. 2002 * It can't be done here, as the unref functions might try to lock the 2003 * resv object, which can deadlock. 2004 */ 2005 INIT_WORK(&iio_fence->work, iio_buffer_cleanup); 2006 schedule_work(&iio_fence->work); 2007 } 2008 EXPORT_SYMBOL_GPL(iio_buffer_signal_dmabuf_done); 2009 2010 static long iio_buffer_chrdev_ioctl(struct file *filp, 2011 unsigned int cmd, unsigned long arg) 2012 { 2013 struct iio_dev_buffer_pair *ib = filp->private_data; 2014 void __user *_arg = (void __user *)arg; 2015 bool nonblock = filp->f_flags & O_NONBLOCK; 2016 2017 switch (cmd) { 2018 case IIO_BUFFER_DMABUF_ATTACH_IOCTL: 2019 return iio_buffer_attach_dmabuf(ib, _arg, nonblock); 2020 case IIO_BUFFER_DMABUF_DETACH_IOCTL: 2021 return iio_buffer_detach_dmabuf(ib, _arg, nonblock); 2022 case IIO_BUFFER_DMABUF_ENQUEUE_IOCTL: 2023 return iio_buffer_enqueue_dmabuf(ib, _arg, nonblock); 2024 default: 2025 return -EINVAL; 2026 } 2027 } 2028 2029 static const struct file_operations iio_buffer_chrdev_fileops = { 2030 .owner = THIS_MODULE, 2031 .llseek = noop_llseek, 2032 .read = iio_buffer_read, 2033 .write = iio_buffer_write, 2034 .unlocked_ioctl = iio_buffer_chrdev_ioctl, 2035 .compat_ioctl = compat_ptr_ioctl, 2036 .poll = iio_buffer_poll, 2037 .release = iio_buffer_chrdev_release, 2038 }; 2039 2040 static long iio_device_buffer_getfd(struct iio_dev *indio_dev, unsigned long arg) 2041 { 2042 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 2043 int __user *ival = (int __user *)arg; 2044 struct iio_dev_buffer_pair *ib; 2045 struct iio_buffer *buffer; 2046 int fd, idx, ret; 2047 2048 if (copy_from_user(&idx, ival, sizeof(idx))) 2049 return -EFAULT; 2050 2051 if (idx >= iio_dev_opaque->attached_buffers_cnt) 2052 return -ENODEV; 2053 2054 iio_device_get(indio_dev); 2055 2056 buffer = iio_dev_opaque->attached_buffers[idx]; 2057 2058 if (test_and_set_bit(IIO_BUSY_BIT_POS, &buffer->flags)) { 2059 ret = -EBUSY; 2060 goto error_iio_dev_put; 2061 } 2062 2063 ib = kzalloc_obj(*ib); 2064 if (!ib) { 2065 ret = -ENOMEM; 2066 goto error_clear_busy_bit; 2067 } 2068 2069 ib->indio_dev = indio_dev; 2070 ib->buffer = buffer; 2071 2072 fd = anon_inode_getfd("iio:buffer", &iio_buffer_chrdev_fileops, 2073 ib, O_RDWR | O_CLOEXEC); 2074 if (fd < 0) { 2075 ret = fd; 2076 goto error_free_ib; 2077 } 2078 2079 if (copy_to_user(ival, &fd, sizeof(fd))) { 2080 /* 2081 * "Leak" the fd, as there's not much we can do about this 2082 * anyway. 'fd' might have been closed already, as 2083 * anon_inode_getfd() called fd_install() on it, which made 2084 * it reachable by userland. 2085 * 2086 * Instead of allowing a malicious user to play tricks with 2087 * us, rely on the process exit path to do any necessary 2088 * cleanup, as in releasing the file, if still needed. 2089 */ 2090 return -EFAULT; 2091 } 2092 2093 return 0; 2094 2095 error_free_ib: 2096 kfree(ib); 2097 error_clear_busy_bit: 2098 clear_bit(IIO_BUSY_BIT_POS, &buffer->flags); 2099 error_iio_dev_put: 2100 iio_device_put(indio_dev); 2101 return ret; 2102 } 2103 2104 static long iio_device_buffer_ioctl(struct iio_dev *indio_dev, struct file *filp, 2105 unsigned int cmd, unsigned long arg) 2106 { 2107 switch (cmd) { 2108 case IIO_BUFFER_GET_FD_IOCTL: 2109 return iio_device_buffer_getfd(indio_dev, arg); 2110 default: 2111 return IIO_IOCTL_UNHANDLED; 2112 } 2113 } 2114 2115 static int iio_channel_validate_scan_type(struct device *dev, int ch, 2116 const struct iio_scan_type *scan_type) 2117 { 2118 /* Verify that sample bits fit into storage */ 2119 if (scan_type->storagebits < scan_type->realbits + scan_type->shift) { 2120 dev_err(dev, 2121 "Channel %d storagebits (%d) < shifted realbits (%d + %d)\n", 2122 ch, scan_type->storagebits, 2123 scan_type->realbits, 2124 scan_type->shift); 2125 return -EINVAL; 2126 } 2127 2128 return 0; 2129 } 2130 2131 static int __iio_buffer_alloc_sysfs_and_mask(struct iio_buffer *buffer, 2132 struct iio_dev *indio_dev, 2133 int index) 2134 { 2135 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 2136 unsigned int masklength = iio_get_masklength(indio_dev); 2137 struct iio_dev_attr *p; 2138 const struct iio_dev_attr *id_attr; 2139 struct attribute **attr; 2140 int ret, i, attrn, scan_el_attrcount, buffer_attrcount; 2141 const struct iio_chan_spec *channels; 2142 2143 buffer_attrcount = 0; 2144 if (buffer->attrs) { 2145 while (buffer->attrs[buffer_attrcount]) 2146 buffer_attrcount++; 2147 } 2148 buffer_attrcount += ARRAY_SIZE(iio_buffer_attrs); 2149 2150 scan_el_attrcount = 0; 2151 INIT_LIST_HEAD(&buffer->buffer_attr_list); 2152 channels = indio_dev->channels; 2153 if (channels) { 2154 /* new magic */ 2155 for (i = 0; i < indio_dev->num_channels; i++) { 2156 const struct iio_scan_type *scan_type; 2157 2158 if (channels[i].scan_index < 0) 2159 continue; 2160 2161 if (channels[i].has_ext_scan_type) { 2162 int j; 2163 2164 /* 2165 * get_current_scan_type is required when using 2166 * extended scan types. 2167 */ 2168 if (!indio_dev->info->get_current_scan_type) { 2169 ret = -EINVAL; 2170 goto error_cleanup_dynamic; 2171 } 2172 2173 for (j = 0; j < channels[i].num_ext_scan_type; j++) { 2174 scan_type = &channels[i].ext_scan_type[j]; 2175 2176 ret = iio_channel_validate_scan_type( 2177 &indio_dev->dev, i, scan_type); 2178 if (ret) 2179 goto error_cleanup_dynamic; 2180 } 2181 } else { 2182 scan_type = &channels[i].scan_type; 2183 2184 ret = iio_channel_validate_scan_type( 2185 &indio_dev->dev, i, scan_type); 2186 if (ret) 2187 goto error_cleanup_dynamic; 2188 } 2189 2190 ret = iio_buffer_add_channel_sysfs(indio_dev, buffer, 2191 &channels[i]); 2192 if (ret < 0) 2193 goto error_cleanup_dynamic; 2194 scan_el_attrcount += ret; 2195 if (channels[i].type == IIO_TIMESTAMP) 2196 iio_dev_opaque->scan_index_timestamp = 2197 channels[i].scan_index; 2198 } 2199 if (masklength && !buffer->scan_mask) { 2200 buffer->scan_mask = bitmap_zalloc(masklength, 2201 GFP_KERNEL); 2202 if (!buffer->scan_mask) { 2203 ret = -ENOMEM; 2204 goto error_cleanup_dynamic; 2205 } 2206 } 2207 } 2208 2209 attrn = buffer_attrcount + scan_el_attrcount; 2210 attr = kzalloc_objs(*attr, attrn + 1); 2211 if (!attr) { 2212 ret = -ENOMEM; 2213 goto error_free_scan_mask; 2214 } 2215 2216 memcpy(attr, iio_buffer_attrs, sizeof(iio_buffer_attrs)); 2217 if (!buffer->access->set_length) 2218 attr[0] = &dev_attr_length_ro.attr; 2219 2220 if (buffer->access->flags & INDIO_BUFFER_FLAG_FIXED_WATERMARK) 2221 attr[2] = &dev_attr_watermark_ro.attr; 2222 2223 if (buffer->attrs) 2224 for (i = 0, id_attr = buffer->attrs[i]; 2225 (id_attr = buffer->attrs[i]); i++) 2226 attr[ARRAY_SIZE(iio_buffer_attrs) + i] = 2227 (struct attribute *)&id_attr->dev_attr.attr; 2228 2229 buffer->buffer_group.attrs = attr; 2230 2231 for (i = 0; i < buffer_attrcount; i++) { 2232 struct attribute *wrapped; 2233 2234 wrapped = iio_buffer_wrap_attr(buffer, attr[i]); 2235 if (!wrapped) { 2236 ret = -ENOMEM; 2237 goto error_free_buffer_attrs; 2238 } 2239 attr[i] = wrapped; 2240 } 2241 2242 attrn = 0; 2243 list_for_each_entry(p, &buffer->buffer_attr_list, l) 2244 attr[attrn++] = &p->dev_attr.attr; 2245 2246 buffer->buffer_group.name = kasprintf(GFP_KERNEL, "buffer%d", index); 2247 if (!buffer->buffer_group.name) { 2248 ret = -ENOMEM; 2249 goto error_free_buffer_attrs; 2250 } 2251 2252 ret = iio_device_register_sysfs_group(indio_dev, &buffer->buffer_group); 2253 if (ret) 2254 goto error_free_buffer_attr_group_name; 2255 2256 /* we only need to register the legacy groups for the first buffer */ 2257 if (index > 0) 2258 return 0; 2259 2260 ret = iio_buffer_register_legacy_sysfs_groups(indio_dev, attr, 2261 buffer_attrcount, 2262 scan_el_attrcount); 2263 if (ret) 2264 goto error_free_buffer_attr_group_name; 2265 2266 return 0; 2267 2268 error_free_buffer_attr_group_name: 2269 kfree(buffer->buffer_group.name); 2270 error_free_buffer_attrs: 2271 kfree(buffer->buffer_group.attrs); 2272 error_free_scan_mask: 2273 bitmap_free(buffer->scan_mask); 2274 error_cleanup_dynamic: 2275 iio_free_chan_devattr_list(&buffer->buffer_attr_list); 2276 2277 return ret; 2278 } 2279 2280 static void __iio_buffer_free_sysfs_and_mask(struct iio_buffer *buffer, 2281 struct iio_dev *indio_dev, 2282 int index) 2283 { 2284 if (index == 0) 2285 iio_buffer_unregister_legacy_sysfs_groups(indio_dev); 2286 bitmap_free(buffer->scan_mask); 2287 kfree(buffer->buffer_group.name); 2288 kfree(buffer->buffer_group.attrs); 2289 iio_free_chan_devattr_list(&buffer->buffer_attr_list); 2290 } 2291 2292 int iio_buffers_alloc_sysfs_and_mask(struct iio_dev *indio_dev) 2293 { 2294 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 2295 const struct iio_chan_spec *channels; 2296 struct iio_buffer *buffer; 2297 int ret, i, idx; 2298 size_t sz; 2299 2300 channels = indio_dev->channels; 2301 if (channels) { 2302 int ml = 0; 2303 2304 for (i = 0; i < indio_dev->num_channels; i++) 2305 ml = max(ml, channels[i].scan_index + 1); 2306 ACCESS_PRIVATE(indio_dev, masklength) = ml; 2307 } 2308 2309 if (!iio_dev_opaque->attached_buffers_cnt) 2310 return 0; 2311 2312 for (idx = 0; idx < iio_dev_opaque->attached_buffers_cnt; idx++) { 2313 buffer = iio_dev_opaque->attached_buffers[idx]; 2314 ret = __iio_buffer_alloc_sysfs_and_mask(buffer, indio_dev, idx); 2315 if (ret) 2316 goto error_unwind_sysfs_and_mask; 2317 } 2318 2319 sz = sizeof(*iio_dev_opaque->buffer_ioctl_handler); 2320 iio_dev_opaque->buffer_ioctl_handler = kzalloc(sz, GFP_KERNEL); 2321 if (!iio_dev_opaque->buffer_ioctl_handler) { 2322 ret = -ENOMEM; 2323 goto error_unwind_sysfs_and_mask; 2324 } 2325 2326 iio_dev_opaque->buffer_ioctl_handler->ioctl = iio_device_buffer_ioctl; 2327 iio_device_ioctl_handler_register(indio_dev, 2328 iio_dev_opaque->buffer_ioctl_handler); 2329 2330 return 0; 2331 2332 error_unwind_sysfs_and_mask: 2333 while (idx--) { 2334 buffer = iio_dev_opaque->attached_buffers[idx]; 2335 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, idx); 2336 } 2337 return ret; 2338 } 2339 2340 void iio_buffers_free_sysfs_and_mask(struct iio_dev *indio_dev) 2341 { 2342 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 2343 struct iio_buffer *buffer; 2344 int i; 2345 2346 if (!iio_dev_opaque->attached_buffers_cnt) 2347 return; 2348 2349 iio_device_ioctl_handler_unregister(iio_dev_opaque->buffer_ioctl_handler); 2350 kfree(iio_dev_opaque->buffer_ioctl_handler); 2351 2352 for (i = iio_dev_opaque->attached_buffers_cnt - 1; i >= 0; i--) { 2353 buffer = iio_dev_opaque->attached_buffers[i]; 2354 __iio_buffer_free_sysfs_and_mask(buffer, indio_dev, i); 2355 } 2356 } 2357 2358 /** 2359 * iio_validate_scan_mask_onehot() - Validates that exactly one channel is selected 2360 * @indio_dev: the iio device 2361 * @mask: scan mask to be checked 2362 * 2363 * Return true if exactly one bit is set in the scan mask, false otherwise. It 2364 * can be used for devices where only one channel can be active for sampling at 2365 * a time. 2366 */ 2367 bool iio_validate_scan_mask_onehot(struct iio_dev *indio_dev, 2368 const unsigned long *mask) 2369 { 2370 return bitmap_weight(mask, iio_get_masklength(indio_dev)) == 1; 2371 } 2372 EXPORT_SYMBOL_GPL(iio_validate_scan_mask_onehot); 2373 2374 static const void *iio_demux(struct iio_buffer *buffer, 2375 const void *datain) 2376 { 2377 struct iio_demux_table *t; 2378 2379 if (list_empty(&buffer->demux_list)) 2380 return datain; 2381 list_for_each_entry(t, &buffer->demux_list, l) 2382 memcpy(buffer->demux_bounce + t->to, 2383 datain + t->from, t->length); 2384 2385 return buffer->demux_bounce; 2386 } 2387 2388 static int iio_push_to_buffer(struct iio_buffer *buffer, const void *data) 2389 { 2390 const void *dataout = iio_demux(buffer, data); 2391 int ret; 2392 2393 ret = buffer->access->store_to(buffer, dataout); 2394 if (ret) 2395 return ret; 2396 2397 /* 2398 * We can't just test for watermark to decide if we wake the poll queue 2399 * because read may request less samples than the watermark. 2400 */ 2401 wake_up_interruptible_poll(&buffer->pollq, EPOLLIN | EPOLLRDNORM); 2402 return 0; 2403 } 2404 2405 /** 2406 * iio_push_to_buffers() - push to a registered buffer. 2407 * @indio_dev: iio_dev structure for device. 2408 * @data: Full scan. 2409 * 2410 * Context: Any context. 2411 * Return: 0 on success, negative error code on failure. 2412 */ 2413 int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data) 2414 { 2415 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 2416 int ret; 2417 struct iio_buffer *buf; 2418 2419 list_for_each_entry(buf, &iio_dev_opaque->buffer_list, buffer_list) { 2420 ret = iio_push_to_buffer(buf, data); 2421 if (ret < 0) 2422 return ret; 2423 } 2424 2425 return 0; 2426 } 2427 EXPORT_SYMBOL_GPL(iio_push_to_buffers); 2428 2429 /** 2430 * iio_push_to_buffers_with_ts_unaligned() - push to registered buffer, 2431 * no alignment or space requirements. 2432 * @indio_dev: iio_dev structure for device. 2433 * @data: channel data excluding the timestamp. 2434 * @data_sz: size of data. 2435 * @timestamp: timestamp for the sample data. 2436 * 2437 * This special variant of iio_push_to_buffers_with_timestamp() does 2438 * not require space for the timestamp, or 8 byte alignment of data. 2439 * It does however require an allocation on first call and additional 2440 * copies on all calls, so should be avoided if possible. 2441 * 2442 * Context: May sleep. 2443 * Return: 0 on success, negative error code on failure. 2444 */ 2445 int iio_push_to_buffers_with_ts_unaligned(struct iio_dev *indio_dev, 2446 const void *data, 2447 size_t data_sz, 2448 s64 timestamp) 2449 { 2450 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 2451 2452 might_sleep(); 2453 2454 /* 2455 * Conservative estimate - we can always safely copy the minimum 2456 * of either the data provided or the length of the destination buffer. 2457 * This relaxed limit allows the calling drivers to be lax about 2458 * tracking the size of the data they are pushing, at the cost of 2459 * unnecessary copying of padding. 2460 */ 2461 data_sz = min_t(size_t, indio_dev->scan_bytes, data_sz); 2462 if (iio_dev_opaque->bounce_buffer_size != indio_dev->scan_bytes) { 2463 void *bb; 2464 2465 bb = devm_krealloc(&indio_dev->dev, 2466 iio_dev_opaque->bounce_buffer, 2467 indio_dev->scan_bytes, GFP_KERNEL); 2468 if (!bb) 2469 return -ENOMEM; 2470 iio_dev_opaque->bounce_buffer = bb; 2471 iio_dev_opaque->bounce_buffer_size = indio_dev->scan_bytes; 2472 } 2473 memcpy(iio_dev_opaque->bounce_buffer, data, data_sz); 2474 return iio_push_to_buffers_with_timestamp(indio_dev, 2475 iio_dev_opaque->bounce_buffer, 2476 timestamp); 2477 } 2478 EXPORT_SYMBOL_GPL(iio_push_to_buffers_with_ts_unaligned); 2479 2480 /** 2481 * iio_buffer_release() - Free a buffer's resources 2482 * @ref: Pointer to the kref embedded in the iio_buffer struct 2483 * 2484 * This function is called when the last reference to the buffer has been 2485 * dropped. It will typically free all resources allocated by the buffer. Do not 2486 * call this function manually, always use iio_buffer_put() when done using a 2487 * buffer. 2488 */ 2489 static void iio_buffer_release(struct kref *ref) 2490 { 2491 struct iio_buffer *buffer = container_of(ref, struct iio_buffer, ref); 2492 2493 mutex_destroy(&buffer->dmabufs_mutex); 2494 buffer->access->release(buffer); 2495 } 2496 2497 /** 2498 * iio_buffer_get() - Grab a reference to the buffer 2499 * @buffer: The buffer to grab a reference for, may be NULL 2500 * 2501 * Returns the pointer to the buffer that was passed into the function. 2502 */ 2503 struct iio_buffer *iio_buffer_get(struct iio_buffer *buffer) 2504 { 2505 if (buffer) 2506 kref_get(&buffer->ref); 2507 2508 return buffer; 2509 } 2510 EXPORT_SYMBOL_GPL(iio_buffer_get); 2511 2512 /** 2513 * iio_buffer_put() - Release the reference to the buffer 2514 * @buffer: The buffer to release the reference for, may be NULL 2515 */ 2516 void iio_buffer_put(struct iio_buffer *buffer) 2517 { 2518 if (buffer) 2519 kref_put(&buffer->ref, iio_buffer_release); 2520 } 2521 EXPORT_SYMBOL_GPL(iio_buffer_put); 2522 2523 /** 2524 * iio_device_attach_buffer - Attach a buffer to a IIO device 2525 * @indio_dev: The device the buffer should be attached to 2526 * @buffer: The buffer to attach to the device 2527 * 2528 * Return 0 if successful, negative if error. 2529 * 2530 * This function attaches a buffer to a IIO device. The buffer stays attached to 2531 * the device until the device is freed. For legacy reasons, the first attached 2532 * buffer will also be assigned to 'indio_dev->buffer'. 2533 * The array allocated here, will be free'd via the iio_device_detach_buffers() 2534 * call which is handled by the iio_device_free(). 2535 */ 2536 int iio_device_attach_buffer(struct iio_dev *indio_dev, 2537 struct iio_buffer *buffer) 2538 { 2539 struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev); 2540 struct iio_buffer **new, **old = iio_dev_opaque->attached_buffers; 2541 unsigned int cnt = iio_dev_opaque->attached_buffers_cnt; 2542 2543 cnt++; 2544 2545 new = krealloc(old, sizeof(*new) * cnt, GFP_KERNEL); 2546 if (!new) 2547 return -ENOMEM; 2548 iio_dev_opaque->attached_buffers = new; 2549 2550 buffer = iio_buffer_get(buffer); 2551 2552 /* first buffer is legacy; attach it to the IIO device directly */ 2553 if (!indio_dev->buffer) 2554 indio_dev->buffer = buffer; 2555 2556 iio_dev_opaque->attached_buffers[cnt - 1] = buffer; 2557 iio_dev_opaque->attached_buffers_cnt = cnt; 2558 2559 return 0; 2560 } 2561 EXPORT_SYMBOL_GPL(iio_device_attach_buffer); 2562