Lines Matching full:vdev
65 static struct virtqueue *rp_find_vq(struct virtio_device *vdev, in rp_find_vq() argument
70 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rp_find_vq()
71 struct rproc *rproc = vdev_to_rproc(vdev); in rp_find_vq()
88 mem = rproc_find_carveout_by_name(rproc, "vdev%dvring%d", rvdev->index, in rp_find_vq()
108 vq = vring_new_virtqueue(id, len, rvring->align, vdev, false, ctx, in rp_find_vq()
126 static void __rproc_virtio_del_vqs(struct virtio_device *vdev) in __rproc_virtio_del_vqs() argument
131 list_for_each_entry_safe(vq, n, &vdev->vqs, list) { in __rproc_virtio_del_vqs()
138 static void rproc_virtio_del_vqs(struct virtio_device *vdev) in rproc_virtio_del_vqs() argument
140 __rproc_virtio_del_vqs(vdev); in rproc_virtio_del_vqs()
143 static int rproc_virtio_find_vqs(struct virtio_device *vdev, unsigned int nvqs, in rproc_virtio_find_vqs() argument
158 vqs[i] = rp_find_vq(vdev, queue_idx++, callbacks[i], names[i], in rproc_virtio_find_vqs()
169 __rproc_virtio_del_vqs(vdev); in rproc_virtio_find_vqs()
173 static u8 rproc_virtio_get_status(struct virtio_device *vdev) in rproc_virtio_get_status() argument
175 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_get_status()
183 static void rproc_virtio_set_status(struct virtio_device *vdev, u8 status) in rproc_virtio_set_status() argument
185 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_set_status()
191 dev_dbg(&vdev->dev, "status: %d\n", status); in rproc_virtio_set_status()
194 static void rproc_virtio_reset(struct virtio_device *vdev) in rproc_virtio_reset() argument
196 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_reset()
202 dev_dbg(&vdev->dev, "reset !\n"); in rproc_virtio_reset()
205 /* provide the vdev features as retrieved from the firmware */
206 static u64 rproc_virtio_get_features(struct virtio_device *vdev) in rproc_virtio_get_features() argument
208 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_get_features()
216 static void rproc_transport_features(struct virtio_device *vdev) in rproc_transport_features() argument
223 __virtio_clear_bit(vdev, VIRTIO_F_RING_PACKED); in rproc_transport_features()
226 static int rproc_virtio_finalize_features(struct virtio_device *vdev) in rproc_virtio_finalize_features() argument
228 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_finalize_features()
234 vring_transport_features(vdev); in rproc_virtio_finalize_features()
237 rproc_transport_features(vdev); in rproc_virtio_finalize_features()
240 BUG_ON((u32)vdev->features != vdev->features); in rproc_virtio_finalize_features()
243 * Remember the finalized features of our vdev, and provide it in rproc_virtio_finalize_features()
246 rsc->gfeatures = vdev->features; in rproc_virtio_finalize_features()
251 static void rproc_virtio_get(struct virtio_device *vdev, unsigned int offset, in rproc_virtio_get() argument
254 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_get()
262 dev_err(&vdev->dev, "rproc_virtio_get: access out of bounds\n"); in rproc_virtio_get()
269 static void rproc_virtio_set(struct virtio_device *vdev, unsigned int offset, in rproc_virtio_set() argument
272 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_set()
280 dev_err(&vdev->dev, "rproc_virtio_set: access out of bounds\n"); in rproc_virtio_set()
300 * This function is called whenever vdev is released, and is responsible
301 * to decrement the remote processor's refcount which was taken when vdev was
309 struct virtio_device *vdev = dev_to_virtio(dev); in rproc_virtio_dev_release() local
310 struct rproc_vdev *rvdev = vdev_to_rvdev(vdev); in rproc_virtio_dev_release()
311 struct rproc *rproc = vdev_to_rproc(vdev); in rproc_virtio_dev_release()
313 kfree(vdev); in rproc_virtio_dev_release()
322 * @rvdev: the remote vdev
325 * This function registers a virtio device. This vdev's partent is
334 struct virtio_device *vdev; in rproc_add_virtio_dev() local
344 /* Try to find dedicated vdev buffer carveout */ in rproc_add_virtio_dev()
345 mem = rproc_find_carveout_by_name(rproc, "vdev%dbuffer", rvdev->index); in rproc_add_virtio_dev()
352 /* Associate reserved memory to vdev device */ in rproc_add_virtio_dev()
361 dev_warn(dev, "vdev %d buffer already mapped\n", in rproc_add_virtio_dev()
369 /* Associate vdev buffer memory pool to vdev subdev */ in rproc_add_virtio_dev()
393 vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); in rproc_add_virtio_dev()
394 if (!vdev) { in rproc_add_virtio_dev()
398 vdev->id.device = id, in rproc_add_virtio_dev()
399 vdev->config = &rproc_virtio_config_ops, in rproc_add_virtio_dev()
400 vdev->dev.parent = dev; in rproc_add_virtio_dev()
401 vdev->dev.release = rproc_virtio_dev_release; in rproc_add_virtio_dev()
405 * here, because drivers probed with this vdev will indirectly in rproc_add_virtio_dev()
409 * it _only_ when the vdev is released. in rproc_add_virtio_dev()
413 /* Reference the vdev and vring allocations */ in rproc_add_virtio_dev()
416 ret = register_virtio_device(vdev); in rproc_add_virtio_dev()
418 put_device(&vdev->dev); in rproc_add_virtio_dev()
419 dev_err(dev, "failed to register vdev: %d\n", ret); in rproc_add_virtio_dev()
423 dev_info(dev, "registered %s (type %d)\n", dev_name(&vdev->dev), id); in rproc_add_virtio_dev()
440 struct virtio_device *vdev = dev_to_virtio(dev); in rproc_remove_virtio_dev() local
442 unregister_virtio_device(vdev); in rproc_remove_virtio_dev()