Lines Matching refs:binfo

469 static int build_info_commit_dev(struct build_feature_devs_info *binfo)  in build_info_commit_dev()  argument
471 struct platform_device *fdev = binfo->feature_dev; in build_info_commit_dev()
490 pdata = kzalloc(dfl_feature_platform_data_size(binfo->feature_num), in build_info_commit_dev()
496 pdata->num = binfo->feature_num; in build_info_commit_dev()
497 pdata->dfl_cdev = binfo->cdev; in build_info_commit_dev()
514 fdev->num_resources = binfo->feature_num; in build_info_commit_dev()
515 fdev->resource = kcalloc(binfo->feature_num, sizeof(*fdev->resource), in build_info_commit_dev()
521 list_for_each_entry_safe(finfo, p, &binfo->sub_features, node) { in build_info_commit_dev()
534 ret = platform_device_add(binfo->feature_dev); in build_info_commit_dev()
537 dfl_fpga_cdev_add_port_dev(binfo->cdev, in build_info_commit_dev()
538 binfo->feature_dev); in build_info_commit_dev()
540 binfo->cdev->fme_dev = in build_info_commit_dev()
541 get_device(&binfo->feature_dev->dev); in build_info_commit_dev()
549 binfo->feature_dev = NULL; in build_info_commit_dev()
556 build_info_create_dev(struct build_feature_devs_info *binfo, in build_info_create_dev() argument
566 ret = build_info_commit_dev(binfo); in build_info_create_dev()
578 binfo->feature_dev = fdev; in build_info_create_dev()
579 binfo->feature_num = 0; in build_info_create_dev()
580 binfo->ioaddr = ioaddr; in build_info_create_dev()
581 INIT_LIST_HEAD(&binfo->sub_features); in build_info_create_dev()
587 fdev->dev.parent = &binfo->cdev->region->dev; in build_info_create_dev()
593 static void build_info_free(struct build_feature_devs_info *binfo) in build_info_free() argument
601 if (binfo->feature_dev && binfo->feature_dev->id >= 0) { in build_info_free()
602 dfl_id_free(feature_dev_id_type(binfo->feature_dev), in build_info_free()
603 binfo->feature_dev->id); in build_info_free()
605 list_for_each_entry_safe(finfo, p, &binfo->sub_features, node) { in build_info_free()
611 platform_device_put(binfo->feature_dev); in build_info_free()
613 devm_kfree(binfo->dev, binfo); in build_info_free()
649 create_feature_instance(struct build_feature_devs_info *binfo, in create_feature_instance() argument
672 list_add_tail(&finfo->node, &binfo->sub_features); in create_feature_instance()
673 binfo->feature_num++; in create_feature_instance()
678 static int parse_feature_port_afu(struct build_feature_devs_info *binfo, in parse_feature_port_afu() argument
682 u64 v = readq(binfo->ioaddr + PORT_HDR_CAP); in parse_feature_port_afu()
687 return create_feature_instance(binfo, dfl, ofst, size, FEATURE_ID_AFU); in parse_feature_port_afu()
690 static int parse_feature_afu(struct build_feature_devs_info *binfo, in parse_feature_afu() argument
694 if (!binfo->feature_dev) { in parse_feature_afu()
695 dev_err(binfo->dev, "this AFU does not belong to any FIU.\n"); in parse_feature_afu()
699 switch (feature_dev_id_type(binfo->feature_dev)) { in parse_feature_afu()
701 return parse_feature_port_afu(binfo, dfl, ofst); in parse_feature_afu()
703 dev_info(binfo->dev, "AFU belonging to FIU %s is not supported yet.\n", in parse_feature_afu()
704 binfo->feature_dev->name); in parse_feature_afu()
710 static int parse_feature_fiu(struct build_feature_devs_info *binfo, in parse_feature_fiu() argument
722 ret = build_info_create_dev(binfo, dfh_id_to_type(id), in parse_feature_fiu()
727 ret = create_feature_instance(binfo, dfl, ofst, 0, 0); in parse_feature_fiu()
738 return parse_feature_afu(binfo, dfl, ofst + offset); in parse_feature_fiu()
740 dev_dbg(binfo->dev, "No AFUs detected on FIU %d\n", id); in parse_feature_fiu()
745 static int parse_feature_private(struct build_feature_devs_info *binfo, in parse_feature_private() argument
749 if (!binfo->feature_dev) { in parse_feature_private()
750 dev_err(binfo->dev, "the private feature %llx does not belong to any AFU.\n", in parse_feature_private()
755 return create_feature_instance(binfo, dfl, ofst, 0, 0); in parse_feature_private()
765 static int parse_feature(struct build_feature_devs_info *binfo, in parse_feature() argument
776 return parse_feature_afu(binfo, dfl, ofst); in parse_feature()
778 return parse_feature_private(binfo, dfl, ofst); in parse_feature()
780 return parse_feature_fiu(binfo, dfl, ofst); in parse_feature()
782 dev_info(binfo->dev, in parse_feature()
789 static int parse_feature_list(struct build_feature_devs_info *binfo, in parse_feature_list() argument
801 dev_err(binfo->dev, "The region is too small to contain a feature.\n"); in parse_feature_list()
805 ret = parse_feature(binfo, dfl, start - dfl->ioaddr); in parse_feature_list()
818 return build_info_commit_dev(binfo); in parse_feature_list()
926 struct build_feature_devs_info *binfo; in dfl_fpga_feature_devs_enumerate() local
953 binfo = devm_kzalloc(info->dev, sizeof(*binfo), GFP_KERNEL); in dfl_fpga_feature_devs_enumerate()
954 if (!binfo) { in dfl_fpga_feature_devs_enumerate()
959 binfo->dev = info->dev; in dfl_fpga_feature_devs_enumerate()
960 binfo->cdev = cdev; in dfl_fpga_feature_devs_enumerate()
967 ret = parse_feature_list(binfo, dfl); in dfl_fpga_feature_devs_enumerate()
970 build_info_free(binfo); in dfl_fpga_feature_devs_enumerate()
975 build_info_free(binfo); in dfl_fpga_feature_devs_enumerate()