Lines Matching refs:priv

194 	struct fpga_device *priv;  member
201 struct fpga_device *priv = container_of(ref, struct fpga_device, ref); in fpga_device_release() local
204 mutex_destroy(&priv->mutex); in fpga_device_release()
205 kfree(priv); in fpga_device_release()
343 static void data_free_buffers(struct fpga_device *priv) in data_free_buffers() argument
348 BUG_ON(priv->inflight != NULL); in data_free_buffers()
350 list_for_each_entry_safe(buf, tmp, &priv->free, entry) { in data_free_buffers()
352 carma_dma_unmap(priv->dev, buf); in data_free_buffers()
356 list_for_each_entry_safe(buf, tmp, &priv->used, entry) { in data_free_buffers()
358 carma_dma_unmap(priv->dev, buf); in data_free_buffers()
362 priv->num_buffers = 0; in data_free_buffers()
363 priv->bufsize = 0; in data_free_buffers()
384 static int data_alloc_buffers(struct fpga_device *priv) in data_alloc_buffers() argument
392 buf = data_alloc_buffer(priv->bufsize); in data_alloc_buffers()
397 ret = carma_dma_map(priv->dev, buf); in data_alloc_buffers()
404 list_add_tail(&buf->entry, &priv->free); in data_alloc_buffers()
405 priv->num_buffers++; in data_alloc_buffers()
409 if (priv->num_buffers < MIN_DATA_BUFS) { in data_alloc_buffers()
410 dev_err(priv->dev, "Unable to allocate enough data buffers\n"); in data_alloc_buffers()
411 data_free_buffers(priv); in data_alloc_buffers()
416 if (priv->num_buffers < MAX_DATA_BUFS) { in data_alloc_buffers()
417 dev_warn(priv->dev, in data_alloc_buffers()
434 static dma_addr_t fpga_start_addr(struct fpga_device *priv, unsigned int fpga) in fpga_start_addr() argument
436 return priv->phys_addr + 0x400000 + (0x80000 * fpga); in fpga_start_addr()
445 static dma_addr_t fpga_block_addr(struct fpga_device *priv, unsigned int fpga, in fpga_block_addr() argument
448 return fpga_start_addr(priv, fpga) + (0x10000 * (1 + blknum)); in fpga_block_addr()
463 static int data_setup_corl_table(struct fpga_device *priv) in data_setup_corl_table() argument
465 struct sg_table *table = &priv->corl_table; in data_setup_corl_table()
471 priv->corl_nents = (1 + NUM_FPGA) * REG_BLOCK_SIZE; in data_setup_corl_table()
473 priv->corl_nents += priv->info[i].num_lag_ram; in data_setup_corl_table()
476 ret = sg_alloc_table(table, priv->corl_nents, GFP_KERNEL); in data_setup_corl_table()
478 dev_err(priv->dev, "unable to allocate DMA table\n"); in data_setup_corl_table()
485 sg_dma_address(sg) = fpga_start_addr(priv, i); in data_setup_corl_table()
497 info = &priv->info[i]; in data_setup_corl_table()
499 sg_dma_address(sg) = fpga_block_addr(priv, i, j); in data_setup_corl_table()
516 static void fpga_write_reg(struct fpga_device *priv, unsigned int fpga, in fpga_write_reg() argument
520 iowrite32be(val, priv->regs + fpga_start + reg); in fpga_write_reg()
523 static u32 fpga_read_reg(struct fpga_device *priv, unsigned int fpga, in fpga_read_reg() argument
527 return ioread32be(priv->regs + fpga_start + reg); in fpga_read_reg()
541 static int data_calculate_bufsize(struct fpga_device *priv) in data_calculate_bufsize() argument
549 priv->bufsize = (1 + NUM_FPGA) * REG_BLOCK_SIZE; in data_calculate_bufsize()
553 version = fpga_read_reg(priv, i, MMAP_REG_VERSION); in data_calculate_bufsize()
554 conf1 = fpga_read_reg(priv, i, MMAP_REG_CORL_CONF1); in data_calculate_bufsize()
555 conf2 = fpga_read_reg(priv, i, MMAP_REG_CORL_CONF2); in data_calculate_bufsize()
575 priv->info[i].num_lag_ram = num_lag_ram; in data_calculate_bufsize()
576 priv->info[i].blk_size = blk_size; in data_calculate_bufsize()
577 priv->bufsize += num_lag_ram * blk_size; in data_calculate_bufsize()
579 dev_dbg(priv->dev, "FPGA %d NUM_CORL: %d\n", i, num_corl); in data_calculate_bufsize()
580 dev_dbg(priv->dev, "FPGA %d NUM_PACK: %d\n", i, num_pack); in data_calculate_bufsize()
581 dev_dbg(priv->dev, "FPGA %d NUM_LAGS: %d\n", i, num_lags); in data_calculate_bufsize()
582 dev_dbg(priv->dev, "FPGA %d NUM_META: %d\n", i, num_meta); in data_calculate_bufsize()
583 dev_dbg(priv->dev, "FPGA %d NUM_QCNT: %d\n", i, num_qcnt); in data_calculate_bufsize()
584 dev_dbg(priv->dev, "FPGA %d BLK_SIZE: %d\n", i, blk_size); in data_calculate_bufsize()
587 dev_dbg(priv->dev, "TOTAL BUFFER SIZE: %zu bytes\n", priv->bufsize); in data_calculate_bufsize()
603 static void data_disable_interrupts(struct fpga_device *priv) in data_disable_interrupts() argument
606 iowrite32be(0x2F, priv->regs + SYS_IRQ_SOURCE_CTL); in data_disable_interrupts()
618 static void data_enable_interrupts(struct fpga_device *priv) in data_enable_interrupts() argument
621 fpga_write_reg(priv, 0, MMAP_REG_STATUS, 0x0); in data_enable_interrupts()
622 fpga_write_reg(priv, 1, MMAP_REG_STATUS, 0x0); in data_enable_interrupts()
623 fpga_write_reg(priv, 2, MMAP_REG_STATUS, 0x0); in data_enable_interrupts()
624 fpga_write_reg(priv, 3, MMAP_REG_STATUS, 0x0); in data_enable_interrupts()
627 fpga_read_reg(priv, 0, MMAP_REG_STATUS); in data_enable_interrupts()
628 fpga_read_reg(priv, 1, MMAP_REG_STATUS); in data_enable_interrupts()
629 fpga_read_reg(priv, 2, MMAP_REG_STATUS); in data_enable_interrupts()
630 fpga_read_reg(priv, 3, MMAP_REG_STATUS); in data_enable_interrupts()
633 iowrite32be(0x3F, priv->regs + SYS_IRQ_SOURCE_CTL); in data_enable_interrupts()
650 struct fpga_device *priv = data; in data_dma_cb() local
653 spin_lock_irqsave(&priv->lock, flags); in data_dma_cb()
656 BUG_ON(priv->inflight == NULL); in data_dma_cb()
659 list_move_tail(&priv->inflight->entry, &priv->used); in data_dma_cb()
660 priv->inflight = NULL; in data_dma_cb()
666 if (priv->enabled) in data_dma_cb()
667 data_enable_interrupts(priv); in data_dma_cb()
669 spin_unlock_irqrestore(&priv->lock, flags); in data_dma_cb()
675 wake_up(&priv->wait); in data_dma_cb()
691 static int data_submit_dma(struct fpga_device *priv, struct data_buf *buf) in data_submit_dma() argument
695 struct dma_chan *chan = priv->chan; in data_submit_dma()
704 src_sg = priv->corl_table.sgl; in data_submit_dma()
705 src_nents = priv->corl_nents; in data_submit_dma()
719 dev_err(priv->dev, "unable to prep scatterlist DMA\n"); in data_submit_dma()
726 dev_err(priv->dev, "unable to submit scatterlist DMA\n"); in data_submit_dma()
737 dev_err(priv->dev, "unable to prep SYS-FPGA DMA\n"); in data_submit_dma()
743 tx->callback_param = priv; in data_submit_dma()
748 dev_err(priv->dev, "unable to submit SYS-FPGA DMA\n"); in data_submit_dma()
760 struct fpga_device *priv = dev_id; in data_irq() local
768 status = fpga_read_reg(priv, i, MMAP_REG_STATUS); in data_irq()
770 dev_err(priv->dev, "spurious irq detected (FPGA)\n"); in data_irq()
776 status = ioread32be(priv->regs + SYS_IRQ_INPUT_DATA); in data_irq()
778 dev_err(priv->dev, "spurious irq detected (IRQ)\n"); in data_irq()
782 spin_lock(&priv->lock); in data_irq()
791 BUG_ON(priv->inflight != NULL); in data_irq()
794 data_disable_interrupts(priv); in data_irq()
797 if (list_empty(&priv->free)) { in data_irq()
798 priv->num_dropped++; in data_irq()
802 buf = list_first_entry(&priv->free, struct data_buf, entry); in data_irq()
804 BUG_ON(buf->size != priv->bufsize); in data_irq()
807 if (data_submit_dma(priv, buf)) { in data_irq()
808 dev_err(priv->dev, "Unable to setup DMA transfer\n"); in data_irq()
809 list_move_tail(&buf->entry, &priv->free); in data_irq()
814 priv->inflight = buf; in data_irq()
818 dma_async_issue_pending(priv->chan); in data_irq()
823 data_enable_interrupts(priv); in data_irq()
825 spin_unlock(&priv->lock); in data_irq()
845 static int data_device_enable(struct fpga_device *priv) in data_device_enable() argument
852 spin_lock_irq(&priv->lock); in data_device_enable()
853 enabled = priv->enabled; in data_device_enable()
854 spin_unlock_irq(&priv->lock); in data_device_enable()
859 val = ioread32be(priv->regs + SYS_FPGA_CONFIG_STATUS); in data_device_enable()
861 dev_err(priv->dev, "DATA-FPGAs are not enabled\n"); in data_device_enable()
866 ret = data_calculate_bufsize(priv); in data_device_enable()
868 dev_err(priv->dev, "unable to calculate buffer size\n"); in data_device_enable()
873 ret = data_alloc_buffers(priv); in data_device_enable()
875 dev_err(priv->dev, "unable to allocate buffers\n"); in data_device_enable()
880 ret = data_setup_corl_table(priv); in data_device_enable()
882 dev_err(priv->dev, "unable to setup correlation DMA table\n"); in data_device_enable()
887 data_disable_interrupts(priv); in data_device_enable()
890 ret = request_irq(priv->irq, data_irq, IRQF_SHARED, drv_name, priv); in data_device_enable()
892 dev_err(priv->dev, "unable to request IRQ handler\n"); in data_device_enable()
897 spin_lock_irq(&priv->lock); in data_device_enable()
898 priv->enabled = true; in data_device_enable()
899 spin_unlock_irq(&priv->lock); in data_device_enable()
902 data_enable_interrupts(priv); in data_device_enable()
906 sg_free_table(&priv->corl_table); in data_device_enable()
907 priv->corl_nents = 0; in data_device_enable()
909 data_free_buffers(priv); in data_device_enable()
926 static int data_device_disable(struct fpga_device *priv) in data_device_disable() argument
928 spin_lock_irq(&priv->lock); in data_device_disable()
931 if (!priv->enabled) { in data_device_disable()
932 spin_unlock_irq(&priv->lock); in data_device_disable()
941 priv->enabled = false; in data_device_disable()
944 data_disable_interrupts(priv); in data_device_disable()
947 while (priv->inflight != NULL) { in data_device_disable()
948 spin_unlock_irq(&priv->lock); in data_device_disable()
949 wait_event(priv->wait, priv->inflight == NULL); in data_device_disable()
950 spin_lock_irq(&priv->lock); in data_device_disable()
953 spin_unlock_irq(&priv->lock); in data_device_disable()
956 free_irq(priv->irq, priv); in data_device_disable()
959 sg_free_table(&priv->corl_table); in data_device_disable()
960 priv->corl_nents = 0; in data_device_disable()
963 data_free_buffers(priv); in data_device_disable()
988 struct fpga_device *priv = f->private; in data_debug_show() local
990 spin_lock_irq(&priv->lock); in data_debug_show()
992 seq_printf(f, "enabled: %d\n", priv->enabled); in data_debug_show()
993 seq_printf(f, "bufsize: %d\n", priv->bufsize); in data_debug_show()
994 seq_printf(f, "num_buffers: %d\n", priv->num_buffers); in data_debug_show()
995 seq_printf(f, "num_free: %d\n", list_num_entries(&priv->free)); in data_debug_show()
996 seq_printf(f, "inflight: %d\n", priv->inflight != NULL); in data_debug_show()
997 seq_printf(f, "num_used: %d\n", list_num_entries(&priv->used)); in data_debug_show()
998 seq_printf(f, "num_dropped: %d\n", priv->num_dropped); in data_debug_show()
1000 spin_unlock_irq(&priv->lock); in data_debug_show()
1017 static int data_debugfs_init(struct fpga_device *priv) in data_debugfs_init() argument
1019 priv->dbg_entry = debugfs_create_file(drv_name, S_IRUGO, NULL, priv, in data_debugfs_init()
1021 return PTR_ERR_OR_ZERO(priv->dbg_entry); in data_debugfs_init()
1024 static void data_debugfs_exit(struct fpga_device *priv) in data_debugfs_exit() argument
1026 debugfs_remove(priv->dbg_entry); in data_debugfs_exit()
1031 static inline int data_debugfs_init(struct fpga_device *priv) in data_debugfs_init() argument
1036 static inline void data_debugfs_exit(struct fpga_device *priv) in data_debugfs_exit() argument
1049 struct fpga_device *priv = dev_get_drvdata(dev); in data_en_show() local
1052 spin_lock_irq(&priv->lock); in data_en_show()
1053 ret = snprintf(buf, PAGE_SIZE, "%u\n", priv->enabled); in data_en_show()
1054 spin_unlock_irq(&priv->lock); in data_en_show()
1062 struct fpga_device *priv = dev_get_drvdata(dev); in data_en_set() local
1068 dev_err(priv->dev, "unable to parse enable input\n"); in data_en_set()
1073 ret = mutex_lock_interruptible(&priv->mutex); in data_en_set()
1078 ret = data_device_enable(priv); in data_en_set()
1080 ret = data_device_disable(priv); in data_en_set()
1083 dev_err(priv->dev, "device %s failed\n", in data_en_set()
1090 mutex_unlock(&priv->mutex); in data_en_set()
1116 struct fpga_device *priv = container_of(filp->private_data, in data_open() local
1126 reader->priv = priv; in data_open()
1132 dev_err(priv->dev, "nonseekable-open failed\n"); in data_open()
1141 kref_get(&priv->ref); in data_open()
1148 struct fpga_device *priv = reader->priv; in data_release() local
1156 kref_put(&priv->ref, fpga_device_release); in data_release()
1164 struct fpga_device *priv = reader->priv; in data_read() local
1165 struct list_head *used = &priv->used; in data_read()
1178 spin_lock_irq(&priv->lock); in data_read()
1182 spin_unlock_irq(&priv->lock); in data_read()
1187 ret = wait_event_interruptible(priv->wait, !list_empty(used)); in data_read()
1191 spin_lock_irq(&priv->lock); in data_read()
1198 spin_unlock_irq(&priv->lock); in data_read()
1201 carma_dma_unmap(priv->dev, dbuf); in data_read()
1238 ret = carma_dma_map(priv->dev, dbuf); in data_read()
1240 dev_err(priv->dev, "unable to remap buffer for DMA\n"); in data_read()
1245 spin_lock_irq(&priv->lock); in data_read()
1258 if (!priv->enabled || dbuf->size != priv->bufsize) { in data_read()
1264 list_add_tail(&dbuf->entry, &priv->free); in data_read()
1267 spin_unlock_irq(&priv->lock); in data_read()
1270 carma_dma_unmap(priv->dev, dbuf); in data_read()
1280 struct fpga_device *priv = reader->priv; in data_poll() local
1283 poll_wait(filp, &priv->wait, tbl); in data_poll()
1285 if (!list_empty(&priv->used)) in data_poll()
1294 struct fpga_device *priv = reader->priv; in data_mmap() local
1300 psize = priv->phys_size - offset; in data_mmap()
1301 addr = (priv->phys_addr + offset) >> PAGE_SHIFT; in data_mmap()
1305 dev_err(priv->dev, "requested mmap mapping too large\n"); in data_mmap()
1347 struct fpga_device *priv; in data_of_probe() local
1353 priv = kzalloc(sizeof(*priv), GFP_KERNEL); in data_of_probe()
1354 if (!priv) { in data_of_probe()
1360 platform_set_drvdata(op, priv); in data_of_probe()
1361 priv->dev = &op->dev; in data_of_probe()
1362 kref_init(&priv->ref); in data_of_probe()
1363 mutex_init(&priv->mutex); in data_of_probe()
1365 dev_set_drvdata(priv->dev, priv); in data_of_probe()
1366 spin_lock_init(&priv->lock); in data_of_probe()
1367 INIT_LIST_HEAD(&priv->free); in data_of_probe()
1368 INIT_LIST_HEAD(&priv->used); in data_of_probe()
1369 init_waitqueue_head(&priv->wait); in data_of_probe()
1372 priv->miscdev.minor = MISC_DYNAMIC_MINOR; in data_of_probe()
1373 priv->miscdev.name = drv_name; in data_of_probe()
1374 priv->miscdev.fops = &data_fops; in data_of_probe()
1384 priv->phys_addr = res.start; in data_of_probe()
1385 priv->phys_size = resource_size(&res); in data_of_probe()
1388 priv->regs = of_iomap(of_node, 0); in data_of_probe()
1389 if (!priv->regs) { in data_of_probe()
1402 priv->chan = dma_request_channel(mask, dma_filter, NULL); in data_of_probe()
1403 if (!priv->chan) { in data_of_probe()
1410 priv->irq = irq_of_parse_and_map(of_node, 0); in data_of_probe()
1411 if (priv->irq == NO_IRQ) { in data_of_probe()
1418 iowrite32be(IRQ_CORL_DONE, priv->regs + SYS_IRQ_OUTPUT_DATA); in data_of_probe()
1421 ret = misc_register(&priv->miscdev); in data_of_probe()
1428 ret = data_debugfs_init(priv); in data_of_probe()
1435 this_device = priv->miscdev.this_device; in data_of_probe()
1436 dev_set_drvdata(this_device, priv); in data_of_probe()
1447 data_debugfs_exit(priv); in data_of_probe()
1449 misc_deregister(&priv->miscdev); in data_of_probe()
1451 irq_dispose_mapping(priv->irq); in data_of_probe()
1453 dma_release_channel(priv->chan); in data_of_probe()
1455 iounmap(priv->regs); in data_of_probe()
1457 kref_put(&priv->ref, fpga_device_release); in data_of_probe()
1464 struct fpga_device *priv = platform_get_drvdata(op); in data_of_remove() local
1465 struct device *this_device = priv->miscdev.this_device; in data_of_remove()
1471 data_debugfs_exit(priv); in data_of_remove()
1474 data_device_disable(priv); in data_of_remove()
1477 misc_deregister(&priv->miscdev); in data_of_remove()
1480 irq_dispose_mapping(priv->irq); in data_of_remove()
1481 dma_release_channel(priv->chan); in data_of_remove()
1482 iounmap(priv->regs); in data_of_remove()
1485 kref_put(&priv->ref, fpga_device_release); in data_of_remove()