Lines Matching defs:ept

173 static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept);
174 static int virtio_rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len);
175 static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
177 static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
179 static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len);
180 static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
182 static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
219 * @kref: the ept's reference count
221 * This function deallocates an ept, and is invoked when its @kref refcount
228 struct rpmsg_endpoint *ept = container_of(kref, struct rpmsg_endpoint,
231 * At this point no one holds a reference to ept anymore,
234 kfree(ept);
244 struct rpmsg_endpoint *ept;
247 ept = kzalloc(sizeof(*ept), GFP_KERNEL);
248 if (!ept)
251 kref_init(&ept->refcount);
252 mutex_init(&ept->cb_lock);
254 ept->rpdev = rpdev;
255 ept->cb = cb;
256 ept->priv = priv;
257 ept->ops = &virtio_endpoint_ops;
271 id = idr_alloc(&vrp->endpoints, ept, id_min, id_max, GFP_KERNEL);
276 ept->addr = id;
280 return ept;
284 kref_put(&ept->refcount, __ept_release);
300 * @vrp: virtproc which owns this ept
301 * @ept: endpoing to destroy
303 * An internal function which destroy an ept without assuming it is
309 __rpmsg_destroy_ept(struct virtproc_info *vrp, struct rpmsg_endpoint *ept)
311 /* make sure new inbound messages can't find this ept anymore */
313 idr_remove(&vrp->endpoints, ept->addr);
317 mutex_lock(&ept->cb_lock);
318 ept->cb = NULL;
319 mutex_unlock(&ept->cb_lock);
321 kref_put(&ept->refcount, __ept_release);
324 static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
326 struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(ept->rpdev);
328 __rpmsg_destroy_ept(vch->vrp, ept);
339 if (rpdev->announce && rpdev->ept &&
344 nsm.addr = cpu_to_virtio32(vrp->vdev, rpdev->ept->addr);
347 err = rpmsg_sendto(rpdev->ept, &nsm, sizeof(nsm), RPMSG_NS_ADDR);
363 if (rpdev->announce && rpdev->ept &&
368 nsm.addr = cpu_to_virtio32(vrp->vdev, rpdev->ept->addr);
371 err = rpmsg_sendto(rpdev->ept, &nsm, sizeof(nsm), RPMSG_NS_ADDR);
659 static int virtio_rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len)
661 struct rpmsg_device *rpdev = ept->rpdev;
662 u32 src = ept->addr, dst = rpdev->dst;
667 static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
670 struct rpmsg_device *rpdev = ept->rpdev;
671 u32 src = ept->addr;
676 static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
679 struct rpmsg_device *rpdev = ept->rpdev;
684 static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len)
686 struct rpmsg_device *rpdev = ept->rpdev;
687 u32 src = ept->addr, dst = rpdev->dst;
692 static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
695 struct rpmsg_device *rpdev = ept->rpdev;
696 u32 src = ept->addr;
701 static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
704 struct rpmsg_device *rpdev = ept->rpdev;
712 struct rpmsg_endpoint *ept;
740 ept = idr_find(&vrp->endpoints, virtio32_to_cpu(vrp->vdev, msg->dst));
742 /* let's make sure no one deallocates ept while we use it */
743 if (ept)
744 kref_get(&ept->refcount);
748 if (ept) {
749 /* make sure ept->cb doesn't go away while we use it */
750 mutex_lock(&ept->cb_lock);
752 if (ept->cb)
753 ept->cb(ept->rpdev, msg->data, msg_len, ept->priv,
756 mutex_unlock(&ept->cb_lock);
758 /* farewell, ept, we don't need you anymore */
759 kref_put(&ept->refcount, __ept_release);
847 * the name service ept does _not_ belong to a real rpmsg channel,
853 dev_err(dev, "anomaly: ns ept has an rpdev handle\n");
966 dev_err(&vdev->dev, "failed to create the ns ept\n");