Lines Matching refs:feature
355 struct dfl_feature *feature) in dfl_dev_add() argument
384 ddev->feature_id = feature->id; in dfl_dev_add()
385 ddev->revision = feature->revision; in dfl_dev_add()
386 ddev->dfh_version = feature->dfh_version; in dfl_dev_add()
388 if (feature->param_size) { in dfl_dev_add()
389 ddev->params = kmemdup(feature->params, feature->param_size, GFP_KERNEL); in dfl_dev_add()
394 ddev->param_size = feature->param_size; in dfl_dev_add()
398 parent_res = &pdev->resource[feature->resource_index]; in dfl_dev_add()
411 if (feature->nr_irqs) { in dfl_dev_add()
412 ddev->irqs = kcalloc(feature->nr_irqs, in dfl_dev_add()
419 for (i = 0; i < feature->nr_irqs; i++) in dfl_dev_add()
420 ddev->irqs[i] = feature->irq_ctx[i].irq; in dfl_dev_add()
422 ddev->num_irqs = feature->nr_irqs; in dfl_dev_add()
440 struct dfl_feature *feature; in dfl_devs_remove() local
442 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_devs_remove()
443 if (feature->ddev) { in dfl_devs_remove()
444 device_unregister(&feature->ddev->dev); in dfl_devs_remove()
445 feature->ddev = NULL; in dfl_devs_remove()
452 struct dfl_feature *feature; in dfl_devs_add() local
456 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_devs_add()
457 if (feature->ioaddr) in dfl_devs_add()
460 if (feature->ddev) { in dfl_devs_add()
465 ddev = dfl_dev_add(pdata, feature); in dfl_devs_add()
471 feature->ddev = ddev; in dfl_devs_add()
499 #define is_header_feature(feature) ((feature)->id == FEATURE_ID_FIU_HEADER) argument
508 struct dfl_feature *feature; in dfl_fpga_dev_feature_uinit() local
512 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_fpga_dev_feature_uinit()
513 if (feature->ops) { in dfl_fpga_dev_feature_uinit()
514 if (feature->ops->uinit) in dfl_fpga_dev_feature_uinit()
515 feature->ops->uinit(pdev, feature); in dfl_fpga_dev_feature_uinit()
516 feature->ops = NULL; in dfl_fpga_dev_feature_uinit()
524 struct dfl_feature *feature, in dfl_feature_instance_init() argument
530 if (!is_header_feature(feature)) { in dfl_feature_instance_init()
532 feature->resource_index); in dfl_feature_instance_init()
536 feature->id); in dfl_feature_instance_init()
540 feature->ioaddr = base; in dfl_feature_instance_init()
544 ret = drv->ops->init(pdev, feature); in dfl_feature_instance_init()
549 feature->ops = drv->ops; in dfl_feature_instance_init()
554 static bool dfl_feature_drv_match(struct dfl_feature *feature, in dfl_feature_drv_match() argument
561 if (ids->id == feature->id) in dfl_feature_drv_match()
584 struct dfl_feature *feature; in dfl_fpga_dev_feature_init() local
588 dfl_fpga_dev_for_each_feature(pdata, feature) { in dfl_fpga_dev_feature_init()
589 if (dfl_feature_drv_match(feature, drv)) { in dfl_fpga_dev_feature_init()
591 feature, drv); in dfl_fpga_dev_feature_init()
811 struct dfl_feature *feature = &pdata->features[index++]; in build_info_commit_dev() local
816 feature->dev = fdev; in build_info_commit_dev()
817 feature->id = finfo->fid; in build_info_commit_dev()
818 feature->revision = finfo->revision; in build_info_commit_dev()
819 feature->dfh_version = finfo->dfh_version; in build_info_commit_dev()
822 feature->params = devm_kmemdup(binfo->dev, in build_info_commit_dev()
825 if (!feature->params) in build_info_commit_dev()
828 feature->param_size = finfo->param_size; in build_info_commit_dev()
837 if (is_header_feature(feature)) { in build_info_commit_dev()
838 feature->resource_index = -1; in build_info_commit_dev()
839 feature->ioaddr = in build_info_commit_dev()
842 if (IS_ERR(feature->ioaddr)) in build_info_commit_dev()
843 return PTR_ERR(feature->ioaddr); in build_info_commit_dev()
845 feature->resource_index = res_idx; in build_info_commit_dev()
859 feature->irq_ctx = ctx; in build_info_commit_dev()
860 feature->nr_irqs = finfo->nr_irqs; in build_info_commit_dev()
1879 static int do_set_irq_trigger(struct dfl_feature *feature, unsigned int idx, in do_set_irq_trigger() argument
1882 struct platform_device *pdev = feature->dev; in do_set_irq_trigger()
1886 irq = feature->irq_ctx[idx].irq; in do_set_irq_trigger()
1888 if (feature->irq_ctx[idx].trigger) { in do_set_irq_trigger()
1889 free_irq(irq, feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1890 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1891 eventfd_ctx_put(feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1892 feature->irq_ctx[idx].trigger = NULL; in do_set_irq_trigger()
1898 feature->irq_ctx[idx].name = in do_set_irq_trigger()
1900 dev_name(&pdev->dev), feature->id); in do_set_irq_trigger()
1901 if (!feature->irq_ctx[idx].name) in do_set_irq_trigger()
1911 feature->irq_ctx[idx].name, trigger); in do_set_irq_trigger()
1913 feature->irq_ctx[idx].trigger = trigger; in do_set_irq_trigger()
1919 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1939 int dfl_fpga_set_irq_triggers(struct dfl_feature *feature, unsigned int start, in dfl_fpga_set_irq_triggers() argument
1950 if (start + count > feature->nr_irqs) in dfl_fpga_set_irq_triggers()
1956 ret = do_set_irq_trigger(feature, start + i, fd); in dfl_fpga_set_irq_triggers()
1959 do_set_irq_trigger(feature, start + i, -1); in dfl_fpga_set_irq_triggers()
1977 struct dfl_feature *feature, in dfl_feature_ioctl_get_num_irqs() argument
1980 return put_user(feature->nr_irqs, (__u32 __user *)arg); in dfl_feature_ioctl_get_num_irqs()
1993 struct dfl_feature *feature, in dfl_feature_ioctl_set_irq() argument
2001 if (!feature->nr_irqs) in dfl_feature_ioctl_set_irq()
2007 if (!hdr.count || (hdr.start + hdr.count > feature->nr_irqs) || in dfl_feature_ioctl_set_irq()
2017 ret = dfl_fpga_set_irq_triggers(feature, hdr.start, hdr.count, fds); in dfl_feature_ioctl_set_irq()