Lines Matching refs:rvdev
326 int rproc_alloc_vring(struct rproc_vdev *rvdev, int i) in rproc_alloc_vring() argument
328 struct rproc *rproc = rvdev->rproc; in rproc_alloc_vring()
330 struct rproc_vring *rvring = &rvdev->vring[i]; in rproc_alloc_vring()
339 rsc = (void *)rproc->table_ptr + rvdev->rsc_offset; in rproc_alloc_vring()
342 mem = rproc_find_carveout_by_name(rproc, "vdev%dvring%d", rvdev->index, in rproc_alloc_vring()
354 rvdev->index, i); in rproc_alloc_vring()
387 rproc_parse_vring(struct rproc_vdev *rvdev, struct fw_rsc_vdev *rsc, int i) in rproc_parse_vring() argument
389 struct rproc *rproc = rvdev->rproc; in rproc_parse_vring()
392 struct rproc_vring *rvring = &rvdev->vring[i]; in rproc_parse_vring()
406 rvring->rvdev = rvdev; in rproc_parse_vring()
413 struct rproc *rproc = rvring->rvdev->rproc; in rproc_free_vring()
414 int idx = rvring - rvring->rvdev->vring; in rproc_free_vring()
431 rsc = (void *)rproc->table_ptr + rvring->rvdev->rsc_offset; in rproc_free_vring()
439 struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev); in rproc_vdev_do_start() local
441 return rproc_add_virtio_dev(rvdev, rvdev->id); in rproc_vdev_do_start()
446 struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev); in rproc_vdev_do_stop() local
449 ret = device_for_each_child(&rvdev->dev, NULL, rproc_remove_virtio_dev); in rproc_vdev_do_stop()
451 dev_warn(&rvdev->dev, "can't remove vdev child device: %d\n", ret); in rproc_vdev_do_stop()
461 struct rproc_vdev *rvdev = container_of(dev, struct rproc_vdev, dev); in rproc_rvdev_release() local
465 kfree(rvdev); in rproc_rvdev_release()
520 struct rproc_vdev *rvdev; in rproc_handle_vdev() local
541 if (rsc->num_of_vrings > ARRAY_SIZE(rvdev->vring)) { in rproc_handle_vdev()
546 rvdev = kzalloc(sizeof(*rvdev), GFP_KERNEL); in rproc_handle_vdev()
547 if (!rvdev) in rproc_handle_vdev()
550 kref_init(&rvdev->refcount); in rproc_handle_vdev()
552 rvdev->id = rsc->id; in rproc_handle_vdev()
553 rvdev->rproc = rproc; in rproc_handle_vdev()
554 rvdev->index = rproc->nb_vdev++; in rproc_handle_vdev()
557 snprintf(name, sizeof(name), "vdev%dbuffer", rvdev->index); in rproc_handle_vdev()
558 rvdev->dev.parent = &rproc->dev; in rproc_handle_vdev()
559 ret = copy_dma_range_map(&rvdev->dev, rproc->dev.parent); in rproc_handle_vdev()
562 rvdev->dev.release = rproc_rvdev_release; in rproc_handle_vdev()
563 dev_set_name(&rvdev->dev, "%s#%s", dev_name(rvdev->dev.parent), name); in rproc_handle_vdev()
564 dev_set_drvdata(&rvdev->dev, rvdev); in rproc_handle_vdev()
566 ret = device_register(&rvdev->dev); in rproc_handle_vdev()
568 put_device(&rvdev->dev); in rproc_handle_vdev()
572 set_dma_ops(&rvdev->dev, get_dma_ops(rproc->dev.parent)); in rproc_handle_vdev()
574 ret = dma_coerce_mask_and_coherent(&rvdev->dev, in rproc_handle_vdev()
584 ret = rproc_parse_vring(rvdev, rsc, i); in rproc_handle_vdev()
590 rvdev->rsc_offset = offset; in rproc_handle_vdev()
594 ret = rproc_alloc_vring(rvdev, i); in rproc_handle_vdev()
599 list_add_tail(&rvdev->node, &rproc->rvdevs); in rproc_handle_vdev()
601 rvdev->subdev.start = rproc_vdev_do_start; in rproc_handle_vdev()
602 rvdev->subdev.stop = rproc_vdev_do_stop; in rproc_handle_vdev()
604 rproc_add_subdev(rproc, &rvdev->subdev); in rproc_handle_vdev()
610 rproc_free_vring(&rvdev->vring[i]); in rproc_handle_vdev()
612 device_unregister(&rvdev->dev); in rproc_handle_vdev()
618 struct rproc_vdev *rvdev = container_of(ref, struct rproc_vdev, refcount); in rproc_vdev_release() local
620 struct rproc *rproc = rvdev->rproc; in rproc_vdev_release()
623 for (id = 0; id < ARRAY_SIZE(rvdev->vring); id++) { in rproc_vdev_release()
624 rvring = &rvdev->vring[id]; in rproc_vdev_release()
628 rproc_remove_subdev(rproc, &rvdev->subdev); in rproc_vdev_release()
629 list_del(&rvdev->node); in rproc_vdev_release()
630 device_unregister(&rvdev->dev); in rproc_vdev_release()
1332 struct rproc_vdev *rvdev, *rvtmp; in rproc_resource_cleanup() local
1367 list_for_each_entry_safe(rvdev, rvtmp, &rproc->rvdevs, node) in rproc_resource_cleanup()
1368 kref_put(&rvdev->refcount, rproc_vdev_release); in rproc_resource_cleanup()