Lines Matching refs:feature

343 	    struct dfl_feature *feature)  in dfl_dev_add()  argument
372 ddev->feature_id = feature->id; in dfl_dev_add()
373 ddev->revision = feature->revision; in dfl_dev_add()
374 ddev->dfh_version = feature->dfh_version; in dfl_dev_add()
376 if (feature->param_size) { in dfl_dev_add()
377 ddev->params = kmemdup(feature->params, feature->param_size, GFP_KERNEL); in dfl_dev_add()
382 ddev->param_size = feature->param_size; in dfl_dev_add()
386 parent_res = &pdev->resource[feature->resource_index]; in dfl_dev_add()
399 if (feature->nr_irqs) { in dfl_dev_add()
400 ddev->irqs = kcalloc(feature->nr_irqs, in dfl_dev_add()
407 for (i = 0; i < feature->nr_irqs; i++) in dfl_dev_add()
408 ddev->irqs[i] = feature->irq_ctx[i].irq; in dfl_dev_add()
410 ddev->num_irqs = feature->nr_irqs; in dfl_dev_add()
428 struct dfl_feature *feature; in dfl_devs_remove() local
430 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_devs_remove()
431 if (feature->ddev) { in dfl_devs_remove()
432 device_unregister(&feature->ddev->dev); in dfl_devs_remove()
433 feature->ddev = NULL; in dfl_devs_remove()
440 struct dfl_feature *feature; in dfl_devs_add() local
444 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_devs_add()
445 if (feature->ioaddr) in dfl_devs_add()
448 if (feature->ddev) { in dfl_devs_add()
453 ddev = dfl_dev_add(fdata, feature); in dfl_devs_add()
459 feature->ddev = ddev; in dfl_devs_add()
487 #define is_header_feature(feature) ((feature)->id == FEATURE_ID_FIU_HEADER) argument
496 struct dfl_feature *feature; in dfl_fpga_dev_feature_uinit() local
500 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_fpga_dev_feature_uinit()
501 if (feature->ops) { in dfl_fpga_dev_feature_uinit()
502 if (feature->ops->uinit) in dfl_fpga_dev_feature_uinit()
503 feature->ops->uinit(pdev, feature); in dfl_fpga_dev_feature_uinit()
504 feature->ops = NULL; in dfl_fpga_dev_feature_uinit()
511 struct dfl_feature *feature, in dfl_feature_instance_init() argument
517 if (!is_header_feature(feature)) { in dfl_feature_instance_init()
519 feature->resource_index); in dfl_feature_instance_init()
523 feature->id); in dfl_feature_instance_init()
527 feature->ioaddr = base; in dfl_feature_instance_init()
531 ret = drv->ops->init(pdev, feature); in dfl_feature_instance_init()
536 feature->ops = drv->ops; in dfl_feature_instance_init()
541 static bool dfl_feature_drv_match(struct dfl_feature *feature, in dfl_feature_drv_match() argument
548 if (ids->id == feature->id) in dfl_feature_drv_match()
571 struct dfl_feature *feature; in dfl_fpga_dev_feature_init() local
575 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_fpga_dev_feature_init()
576 if (dfl_feature_drv_match(feature, drv)) { in dfl_fpga_dev_feature_init()
577 ret = dfl_feature_instance_init(pdev, feature, drv); in dfl_fpga_dev_feature_init()
800 struct dfl_feature *feature = &fdata->features[index++]; in binfo_create_feature_dev_data() local
805 feature->id = finfo->fid; in binfo_create_feature_dev_data()
806 feature->revision = finfo->revision; in binfo_create_feature_dev_data()
807 feature->dfh_version = finfo->dfh_version; in binfo_create_feature_dev_data()
810 feature->params = devm_kmemdup(binfo->dev, in binfo_create_feature_dev_data()
813 if (!feature->params) in binfo_create_feature_dev_data()
816 feature->param_size = finfo->param_size; in binfo_create_feature_dev_data()
825 if (is_header_feature(feature)) { in binfo_create_feature_dev_data()
826 feature->resource_index = -1; in binfo_create_feature_dev_data()
827 feature->ioaddr = in binfo_create_feature_dev_data()
830 if (IS_ERR(feature->ioaddr)) in binfo_create_feature_dev_data()
831 return ERR_CAST(feature->ioaddr); in binfo_create_feature_dev_data()
833 feature->resource_index = res_idx; in binfo_create_feature_dev_data()
847 feature->irq_ctx = ctx; in binfo_create_feature_dev_data()
848 feature->nr_irqs = finfo->nr_irqs; in binfo_create_feature_dev_data()
869 struct dfl_feature *feature; in feature_dev_register() local
881 dfl_fpga_dev_for_each_feature(fdata, feature) in feature_dev_register()
882 feature->dev = fdev; in feature_dev_register()
905 dfl_fpga_dev_for_each_feature(fdata, feature) in feature_dev_register()
906 feature->dev = NULL; in feature_dev_register()
913 struct dfl_feature *feature; in feature_dev_unregister() local
919 dfl_fpga_dev_for_each_feature(fdata, feature) in feature_dev_unregister()
920 feature->dev = NULL; in feature_dev_unregister()
1868 static int do_set_irq_trigger(struct dfl_feature *feature, unsigned int idx, in do_set_irq_trigger() argument
1871 struct platform_device *pdev = feature->dev; in do_set_irq_trigger()
1875 irq = feature->irq_ctx[idx].irq; in do_set_irq_trigger()
1877 if (feature->irq_ctx[idx].trigger) { in do_set_irq_trigger()
1878 free_irq(irq, feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1879 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1880 eventfd_ctx_put(feature->irq_ctx[idx].trigger); in do_set_irq_trigger()
1881 feature->irq_ctx[idx].trigger = NULL; in do_set_irq_trigger()
1887 feature->irq_ctx[idx].name = in do_set_irq_trigger()
1889 dev_name(&pdev->dev), feature->id); in do_set_irq_trigger()
1890 if (!feature->irq_ctx[idx].name) in do_set_irq_trigger()
1900 feature->irq_ctx[idx].name, trigger); in do_set_irq_trigger()
1902 feature->irq_ctx[idx].trigger = trigger; in do_set_irq_trigger()
1908 kfree(feature->irq_ctx[idx].name); in do_set_irq_trigger()
1928 int dfl_fpga_set_irq_triggers(struct dfl_feature *feature, unsigned int start, in dfl_fpga_set_irq_triggers() argument
1939 if (start + count > feature->nr_irqs) in dfl_fpga_set_irq_triggers()
1945 ret = do_set_irq_trigger(feature, start + i, fd); in dfl_fpga_set_irq_triggers()
1948 do_set_irq_trigger(feature, start + i, -1); in dfl_fpga_set_irq_triggers()
1966 struct dfl_feature *feature, in dfl_feature_ioctl_get_num_irqs() argument
1969 return put_user(feature->nr_irqs, (__u32 __user *)arg); in dfl_feature_ioctl_get_num_irqs()
1982 struct dfl_feature *feature, in dfl_feature_ioctl_set_irq() argument
1990 if (!feature->nr_irqs) in dfl_feature_ioctl_set_irq()
1996 if (!hdr.count || (hdr.start + hdr.count > feature->nr_irqs) || in dfl_feature_ioctl_set_irq()
2006 ret = dfl_fpga_set_irq_triggers(feature, hdr.start, hdr.count, fds); in dfl_feature_ioctl_set_irq()