Lines Matching refs:fdata
153 struct dfl_fpga_port_ops *dfl_fpga_port_ops_get(struct dfl_feature_dev_data *fdata) in dfl_fpga_port_ops_get() argument
163 if (!strcmp(fdata->pdev_name, ops->name)) { in dfl_fpga_port_ops_get()
219 int dfl_fpga_check_port_id(struct dfl_feature_dev_data *fdata, void *pport_id) in dfl_fpga_check_port_id() argument
223 if (fdata->id != FEATURE_DEV_ID_UNUSED) in dfl_fpga_check_port_id()
224 return fdata->id == *(int *)pport_id; in dfl_fpga_check_port_id()
226 port_ops = dfl_fpga_port_ops_get(fdata); in dfl_fpga_check_port_id()
230 fdata->id = port_ops->get_id(fdata); in dfl_fpga_check_port_id()
233 return fdata->id == *(int *)pport_id; in dfl_fpga_check_port_id()
342 dfl_dev_add(struct dfl_feature_dev_data *fdata, in dfl_dev_add() argument
345 struct platform_device *pdev = fdata->dev; in dfl_dev_add()
371 ddev->type = fdata->type; in dfl_dev_add()
375 ddev->cdev = fdata->dfl_cdev; in dfl_dev_add()
426 static void dfl_devs_remove(struct dfl_feature_dev_data *fdata) in dfl_devs_remove() argument
430 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_devs_remove()
438 static int dfl_devs_add(struct dfl_feature_dev_data *fdata) in dfl_devs_add() argument
444 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_devs_add()
453 ddev = dfl_dev_add(fdata, feature); in dfl_devs_add()
465 dfl_devs_remove(fdata); in dfl_devs_add()
495 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(&pdev->dev); in dfl_fpga_dev_feature_uinit() local
498 dfl_devs_remove(fdata); in dfl_fpga_dev_feature_uinit()
500 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_fpga_dev_feature_uinit()
569 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(&pdev->dev); in dfl_fpga_dev_feature_init() local
575 dfl_fpga_dev_for_each_feature(fdata, feature) { in dfl_fpga_dev_feature_init()
585 ret = dfl_devs_add(fdata); in dfl_fpga_dev_feature_init()
733 struct dfl_feature_dev_data *fdata) in dfl_fpga_cdev_add_port_data() argument
736 list_add(&fdata->node, &cdev->port_dev_list); in dfl_fpga_cdev_add_port_data()
742 struct dfl_feature_dev_data *fdata = arg; in dfl_id_free_action() local
744 dfl_id_free(fdata->type, fdata->pdev_id); in dfl_id_free_action()
752 struct dfl_feature_dev_data *fdata; in binfo_create_feature_dev_data() local
758 fdata = devm_kzalloc(binfo->dev, sizeof(*fdata), GFP_KERNEL); in binfo_create_feature_dev_data()
759 if (!fdata) in binfo_create_feature_dev_data()
762 fdata->features = devm_kcalloc(binfo->dev, binfo->feature_num, in binfo_create_feature_dev_data()
763 sizeof(*fdata->features), GFP_KERNEL); in binfo_create_feature_dev_data()
764 if (!fdata->features) in binfo_create_feature_dev_data()
767 fdata->resources = devm_kcalloc(binfo->dev, binfo->feature_num, in binfo_create_feature_dev_data()
768 sizeof(*fdata->resources), GFP_KERNEL); in binfo_create_feature_dev_data()
769 if (!fdata->resources) in binfo_create_feature_dev_data()
772 fdata->type = type; in binfo_create_feature_dev_data()
774 fdata->pdev_id = dfl_id_alloc(type, binfo->dev); in binfo_create_feature_dev_data()
775 if (fdata->pdev_id < 0) in binfo_create_feature_dev_data()
776 return ERR_PTR(fdata->pdev_id); in binfo_create_feature_dev_data()
778 ret = devm_add_action_or_reset(binfo->dev, dfl_id_free_action, fdata); in binfo_create_feature_dev_data()
782 fdata->pdev_name = dfl_devs[type].name; in binfo_create_feature_dev_data()
783 fdata->num = binfo->feature_num; in binfo_create_feature_dev_data()
784 fdata->dfl_cdev = binfo->cdev; in binfo_create_feature_dev_data()
785 fdata->id = FEATURE_DEV_ID_UNUSED; in binfo_create_feature_dev_data()
786 mutex_init(&fdata->lock); in binfo_create_feature_dev_data()
787 lockdep_set_class_and_name(&fdata->lock, &dfl_pdata_keys[type], in binfo_create_feature_dev_data()
796 WARN_ON(fdata->disable_count); in binfo_create_feature_dev_data()
800 struct dfl_feature *feature = &fdata->features[index++]; in binfo_create_feature_dev_data()
834 fdata->resources[res_idx++] = finfo->mmio_res; in binfo_create_feature_dev_data()
855 fdata->resource_num = res_idx; in binfo_create_feature_dev_data()
857 return fdata; in binfo_create_feature_dev_data()
865 static int feature_dev_register(struct dfl_feature_dev_data *fdata) in feature_dev_register() argument
872 fdev = platform_device_alloc(fdata->pdev_name, fdata->pdev_id); in feature_dev_register()
876 fdata->dev = fdev; in feature_dev_register()
878 fdev->dev.parent = &fdata->dfl_cdev->region->dev; in feature_dev_register()
879 fdev->dev.devt = dfl_get_devt(dfl_devs[fdata->type].devt_type, fdev->id); in feature_dev_register()
881 dfl_fpga_dev_for_each_feature(fdata, feature) in feature_dev_register()
884 ret = platform_device_add_resources(fdev, fdata->resources, in feature_dev_register()
885 fdata->resource_num); in feature_dev_register()
889 pdata.fdata = fdata; in feature_dev_register()
903 fdata->dev = NULL; in feature_dev_register()
905 dfl_fpga_dev_for_each_feature(fdata, feature) in feature_dev_register()
911 static void feature_dev_unregister(struct dfl_feature_dev_data *fdata) in feature_dev_unregister() argument
915 platform_device_unregister(fdata->dev); in feature_dev_unregister()
917 fdata->dev = NULL; in feature_dev_unregister()
919 dfl_fpga_dev_for_each_feature(fdata, feature) in feature_dev_unregister()
925 struct dfl_feature_dev_data *fdata; in build_info_commit_dev() local
928 fdata = binfo_create_feature_dev_data(binfo); in build_info_commit_dev()
929 if (IS_ERR(fdata)) in build_info_commit_dev()
930 return PTR_ERR(fdata); in build_info_commit_dev()
932 ret = feature_dev_register(fdata); in build_info_commit_dev()
937 dfl_fpga_cdev_add_port_data(binfo->cdev, fdata); in build_info_commit_dev()
939 binfo->cdev->fme_dev = get_device(&fdata->dev->dev); in build_info_commit_dev()
1537 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(dev); in remove_feature_dev() local
1539 feature_dev_unregister(fdata); in remove_feature_dev()
1664 struct dfl_feature_dev_data *fdata; in __dfl_fpga_cdev_find_port_data() local
1666 list_for_each_entry(fdata, &cdev->port_dev_list, node) { in __dfl_fpga_cdev_find_port_data()
1667 if (match(fdata, data)) in __dfl_fpga_cdev_find_port_data()
1668 return fdata; in __dfl_fpga_cdev_find_port_data()
1707 struct dfl_feature_dev_data *fdata; in dfl_fpga_cdev_release_port() local
1711 fdata = __dfl_fpga_cdev_find_port_data(cdev, &port_id, in dfl_fpga_cdev_release_port()
1713 if (!fdata) in dfl_fpga_cdev_release_port()
1716 if (!fdata->dev) { in dfl_fpga_cdev_release_port()
1721 mutex_lock(&fdata->lock); in dfl_fpga_cdev_release_port()
1722 ret = dfl_feature_dev_use_begin(fdata, true); in dfl_fpga_cdev_release_port()
1723 mutex_unlock(&fdata->lock); in dfl_fpga_cdev_release_port()
1727 feature_dev_unregister(fdata); in dfl_fpga_cdev_release_port()
1748 struct dfl_feature_dev_data *fdata; in dfl_fpga_cdev_assign_port() local
1752 fdata = __dfl_fpga_cdev_find_port_data(cdev, &port_id, in dfl_fpga_cdev_assign_port()
1754 if (!fdata) in dfl_fpga_cdev_assign_port()
1757 if (fdata->dev) { in dfl_fpga_cdev_assign_port()
1762 ret = feature_dev_register(fdata); in dfl_fpga_cdev_assign_port()
1766 mutex_lock(&fdata->lock); in dfl_fpga_cdev_assign_port()
1767 dfl_feature_dev_use_end(fdata); in dfl_fpga_cdev_assign_port()
1768 mutex_unlock(&fdata->lock); in dfl_fpga_cdev_assign_port()
1780 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(fme_dev); in config_port_access_mode() local
1784 base = dfl_get_feature_ioaddr_by_id(fdata, FME_FEATURE_ID_HEADER); in config_port_access_mode()
1808 struct dfl_feature_dev_data *fdata; in dfl_fpga_cdev_config_ports_pf() local
1811 list_for_each_entry(fdata, &cdev->port_dev_list, node) { in dfl_fpga_cdev_config_ports_pf()
1812 if (fdata->dev) in dfl_fpga_cdev_config_ports_pf()
1815 config_port_pf_mode(cdev->fme_dev, fdata->id); in dfl_fpga_cdev_config_ports_pf()
1834 struct dfl_feature_dev_data *fdata; in dfl_fpga_cdev_config_ports_vf() local
1848 list_for_each_entry(fdata, &cdev->port_dev_list, node) { in dfl_fpga_cdev_config_ports_vf()
1849 if (fdata->dev) in dfl_fpga_cdev_config_ports_vf()
1852 config_port_vf_mode(cdev->fme_dev, fdata->id); in dfl_fpga_cdev_config_ports_vf()
1985 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(&pdev->dev); in dfl_feature_ioctl_set_irq() local
2005 mutex_lock(&fdata->lock); in dfl_feature_ioctl_set_irq()
2007 mutex_unlock(&fdata->lock); in dfl_feature_ioctl_set_irq()