Lines Matching refs:rvdev

317 int rproc_alloc_vring(struct rproc_vdev *rvdev, int i)  in rproc_alloc_vring()  argument
319 struct rproc *rproc = rvdev->rproc; in rproc_alloc_vring()
321 struct rproc_vring *rvring = &rvdev->vring[i]; in rproc_alloc_vring()
329 rsc = (void *)rproc->table_ptr + rvdev->rsc_offset; in rproc_alloc_vring()
332 mem = rproc_find_carveout_by_name(rproc, "vdev%dvring%d", rvdev->index, in rproc_alloc_vring()
343 rvdev->index, i); in rproc_alloc_vring()
376 rproc_parse_vring(struct rproc_vdev *rvdev, struct fw_rsc_vdev *rsc, int i) in rproc_parse_vring() argument
378 struct rproc *rproc = rvdev->rproc; in rproc_parse_vring()
381 struct rproc_vring *rvring = &rvdev->vring[i]; in rproc_parse_vring()
395 rvring->rvdev = rvdev; in rproc_parse_vring()
402 struct rproc *rproc = rvring->rvdev->rproc; in rproc_free_vring()
403 int idx = rvring->rvdev->vring - rvring; in rproc_free_vring()
409 rsc = (void *)rproc->table_ptr + rvring->rvdev->rsc_offset; in rproc_free_vring()
416 struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev); in rproc_vdev_do_start() local
418 return rproc_add_virtio_dev(rvdev, rvdev->id); in rproc_vdev_do_start()
423 struct rproc_vdev *rvdev = container_of(subdev, struct rproc_vdev, subdev); in rproc_vdev_do_stop() local
426 ret = device_for_each_child(&rvdev->dev, NULL, rproc_remove_virtio_dev); in rproc_vdev_do_stop()
428 dev_warn(&rvdev->dev, "can't remove vdev child device: %d\n", ret); in rproc_vdev_do_stop()
438 struct rproc_vdev *rvdev = container_of(dev, struct rproc_vdev, dev); in rproc_rvdev_release() local
442 kfree(rvdev); in rproc_rvdev_release()
476 struct rproc_vdev *rvdev; in rproc_handle_vdev() local
497 if (rsc->num_of_vrings > ARRAY_SIZE(rvdev->vring)) { in rproc_handle_vdev()
502 rvdev = kzalloc(sizeof(*rvdev), GFP_KERNEL); in rproc_handle_vdev()
503 if (!rvdev) in rproc_handle_vdev()
506 kref_init(&rvdev->refcount); in rproc_handle_vdev()
508 rvdev->id = rsc->id; in rproc_handle_vdev()
509 rvdev->rproc = rproc; in rproc_handle_vdev()
510 rvdev->index = rproc->nb_vdev++; in rproc_handle_vdev()
513 snprintf(name, sizeof(name), "vdev%dbuffer", rvdev->index); in rproc_handle_vdev()
514 rvdev->dev.parent = rproc->dev.parent; in rproc_handle_vdev()
515 rvdev->dev.dma_pfn_offset = rproc->dev.parent->dma_pfn_offset; in rproc_handle_vdev()
516 rvdev->dev.release = rproc_rvdev_release; in rproc_handle_vdev()
517 dev_set_name(&rvdev->dev, "%s#%s", dev_name(rvdev->dev.parent), name); in rproc_handle_vdev()
518 dev_set_drvdata(&rvdev->dev, rvdev); in rproc_handle_vdev()
520 ret = device_register(&rvdev->dev); in rproc_handle_vdev()
522 put_device(&rvdev->dev); in rproc_handle_vdev()
526 set_dma_ops(&rvdev->dev, get_dma_ops(rproc->dev.parent)); in rproc_handle_vdev()
528 ret = dma_coerce_mask_and_coherent(&rvdev->dev, in rproc_handle_vdev()
538 ret = rproc_parse_vring(rvdev, rsc, i); in rproc_handle_vdev()
544 rvdev->rsc_offset = offset; in rproc_handle_vdev()
548 ret = rproc_alloc_vring(rvdev, i); in rproc_handle_vdev()
553 list_add_tail(&rvdev->node, &rproc->rvdevs); in rproc_handle_vdev()
555 rvdev->subdev.start = rproc_vdev_do_start; in rproc_handle_vdev()
556 rvdev->subdev.stop = rproc_vdev_do_stop; in rproc_handle_vdev()
558 rproc_add_subdev(rproc, &rvdev->subdev); in rproc_handle_vdev()
564 rproc_free_vring(&rvdev->vring[i]); in rproc_handle_vdev()
566 device_unregister(&rvdev->dev); in rproc_handle_vdev()
572 struct rproc_vdev *rvdev = container_of(ref, struct rproc_vdev, refcount); in rproc_vdev_release() local
574 struct rproc *rproc = rvdev->rproc; in rproc_vdev_release()
577 for (id = 0; id < ARRAY_SIZE(rvdev->vring); id++) { in rproc_vdev_release()
578 rvring = &rvdev->vring[id]; in rproc_vdev_release()
582 rproc_remove_subdev(rproc, &rvdev->subdev); in rproc_vdev_release()
583 list_del(&rvdev->node); in rproc_vdev_release()
584 device_unregister(&rvdev->dev); in rproc_vdev_release()
1256 struct rproc_vdev *rvdev, *rvtmp; in rproc_resource_cleanup() local
1291 list_for_each_entry_safe(rvdev, rvtmp, &rproc->rvdevs, node) in rproc_resource_cleanup()
1292 kref_put(&rvdev->refcount, rproc_vdev_release); in rproc_resource_cleanup()