Lines Matching defs:ept
140 static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept);
141 static int virtio_rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len);
142 static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
144 static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
146 static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len);
147 static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
149 static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
151 static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept);
190 * @kref: the ept's reference count
192 * This function deallocates an ept, and is invoked when its @kref refcount
199 struct rpmsg_endpoint *ept = container_of(kref, struct rpmsg_endpoint,
202 * At this point no one holds a reference to ept anymore,
205 kfree(ept);
215 struct rpmsg_endpoint *ept;
218 ept = kzalloc(sizeof(*ept), GFP_KERNEL);
219 if (!ept)
222 kref_init(&ept->refcount);
223 mutex_init(&ept->cb_lock);
225 ept->rpdev = rpdev;
226 ept->cb = cb;
227 ept->priv = priv;
228 ept->ops = &virtio_endpoint_ops;
242 id = idr_alloc(&vrp->endpoints, ept, id_min, id_max, GFP_KERNEL);
247 ept->addr = id;
251 return ept;
255 kref_put(&ept->refcount, __ept_release);
289 * @vrp: virtproc which owns this ept
290 * @ept: endpoing to destroy
292 * An internal function which destroy an ept without assuming it is
298 __rpmsg_destroy_ept(struct virtproc_info *vrp, struct rpmsg_endpoint *ept)
300 /* make sure new inbound messages can't find this ept anymore */
302 idr_remove(&vrp->endpoints, ept->addr);
306 mutex_lock(&ept->cb_lock);
307 ept->cb = NULL;
308 mutex_unlock(&ept->cb_lock);
310 kref_put(&ept->refcount, __ept_release);
313 static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
315 struct virtio_rpmsg_channel *vch = to_virtio_rpmsg_channel(ept->rpdev);
317 __rpmsg_destroy_ept(vch->vrp, ept);
328 if (rpdev->announce && rpdev->ept &&
333 nsm.addr = cpu_to_rpmsg32(rpdev, rpdev->ept->addr);
336 err = rpmsg_sendto(rpdev->ept, &nsm, sizeof(nsm), RPMSG_NS_ADDR);
352 if (rpdev->announce && rpdev->ept &&
357 nsm.addr = cpu_to_rpmsg32(rpdev, rpdev->ept->addr);
360 err = rpmsg_sendto(rpdev->ept, &nsm, sizeof(nsm), RPMSG_NS_ADDR);
651 static int virtio_rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len)
653 struct rpmsg_device *rpdev = ept->rpdev;
654 u32 src = ept->addr, dst = rpdev->dst;
659 static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
662 struct rpmsg_device *rpdev = ept->rpdev;
663 u32 src = ept->addr;
668 static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
671 struct rpmsg_device *rpdev = ept->rpdev;
676 static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len)
678 struct rpmsg_device *rpdev = ept->rpdev;
679 u32 src = ept->addr, dst = rpdev->dst;
684 static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
687 struct rpmsg_device *rpdev = ept->rpdev;
688 u32 src = ept->addr;
693 static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
696 struct rpmsg_device *rpdev = ept->rpdev;
701 static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept)
703 struct rpmsg_device *rpdev = ept->rpdev;
712 struct rpmsg_endpoint *ept;
741 ept = idr_find(&vrp->endpoints, __rpmsg32_to_cpu(little_endian, msg->dst));
743 /* let's make sure no one deallocates ept while we use it */
744 if (ept)
745 kref_get(&ept->refcount);
749 if (ept) {
750 /* make sure ept->cb doesn't go away while we use it */
751 mutex_lock(&ept->cb_lock);
753 if (ept->cb)
754 ept->cb(ept->rpdev, msg->data, msg_len, ept->priv,
757 mutex_unlock(&ept->cb_lock);
759 /* farewell, ept, we don't need you anymore */
760 kref_put(&ept->refcount, __ept_release);