rpmsg: Move endpoint related interface to rpmsg core
Move the rpmsg_send() and rpmsg_destroy_ept() interface to the rpmsg core, so that we eventually can hide the rpmsg_endpoint ops from the public API. Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
This commit is contained in:
parent
8a228ecfe0
commit
c9bd6f4220
@ -69,3 +69,163 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_device *rpdev,
|
|||||||
return rpdev->ops->create_ept(rpdev, cb, priv, chinfo);
|
return rpdev->ops->create_ept(rpdev, cb, priv, chinfo);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rpmsg_create_ept);
|
EXPORT_SYMBOL(rpmsg_create_ept);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpmsg_destroy_ept() - destroy an existing rpmsg endpoint
|
||||||
|
* @ept: endpoing to destroy
|
||||||
|
*
|
||||||
|
* Should be used by drivers to destroy an rpmsg endpoint previously
|
||||||
|
* created with rpmsg_create_ept().
|
||||||
|
*/
|
||||||
|
void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
|
||||||
|
{
|
||||||
|
ept->ops->destroy_ept(ept);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpmsg_destroy_ept);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpmsg_send() - send a message across to the remote processor
|
||||||
|
* @ept: the rpmsg endpoint
|
||||||
|
* @data: payload of message
|
||||||
|
* @len: length of payload
|
||||||
|
*
|
||||||
|
* This function sends @data of length @len on the @ept endpoint.
|
||||||
|
* The message will be sent to the remote processor which the @ept
|
||||||
|
* endpoint belongs to, using @ept's address and its associated rpmsg
|
||||||
|
* device destination addresses.
|
||||||
|
* In case there are no TX buffers available, the function will block until
|
||||||
|
* one becomes available, or a timeout of 15 seconds elapses. When the latter
|
||||||
|
* happens, -ERESTARTSYS is returned.
|
||||||
|
*
|
||||||
|
* Can only be called from process context (for now).
|
||||||
|
*
|
||||||
|
* Returns 0 on success and an appropriate error value on failure.
|
||||||
|
*/
|
||||||
|
int rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len)
|
||||||
|
{
|
||||||
|
return ept->ops->send(ept, data, len);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpmsg_send);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpmsg_sendto() - send a message across to the remote processor, specify dst
|
||||||
|
* @ept: the rpmsg endpoint
|
||||||
|
* @data: payload of message
|
||||||
|
* @len: length of payload
|
||||||
|
* @dst: destination address
|
||||||
|
*
|
||||||
|
* This function sends @data of length @len to the remote @dst address.
|
||||||
|
* The message will be sent to the remote processor which the @ept
|
||||||
|
* endpoint belongs to, using @ept's address as source.
|
||||||
|
* In case there are no TX buffers available, the function will block until
|
||||||
|
* one becomes available, or a timeout of 15 seconds elapses. When the latter
|
||||||
|
* happens, -ERESTARTSYS is returned.
|
||||||
|
*
|
||||||
|
* Can only be called from process context (for now).
|
||||||
|
*
|
||||||
|
* Returns 0 on success and an appropriate error value on failure.
|
||||||
|
*/
|
||||||
|
int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst)
|
||||||
|
{
|
||||||
|
return ept->ops->sendto(ept, data, len, dst);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpmsg_sendto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpmsg_send_offchannel() - send a message using explicit src/dst addresses
|
||||||
|
* @ept: the rpmsg endpoint
|
||||||
|
* @src: source address
|
||||||
|
* @dst: destination address
|
||||||
|
* @data: payload of message
|
||||||
|
* @len: length of payload
|
||||||
|
*
|
||||||
|
* This function sends @data of length @len to the remote @dst address,
|
||||||
|
* and uses @src as the source address.
|
||||||
|
* The message will be sent to the remote processor which the @ept
|
||||||
|
* endpoint belongs to.
|
||||||
|
* In case there are no TX buffers available, the function will block until
|
||||||
|
* one becomes available, or a timeout of 15 seconds elapses. When the latter
|
||||||
|
* happens, -ERESTARTSYS is returned.
|
||||||
|
*
|
||||||
|
* Can only be called from process context (for now).
|
||||||
|
*
|
||||||
|
* Returns 0 on success and an appropriate error value on failure.
|
||||||
|
*/
|
||||||
|
int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||||
|
void *data, int len)
|
||||||
|
{
|
||||||
|
return ept->ops->send_offchannel(ept, src, dst, data, len);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpmsg_send_offchannel);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpmsg_send() - send a message across to the remote processor
|
||||||
|
* @ept: the rpmsg endpoint
|
||||||
|
* @data: payload of message
|
||||||
|
* @len: length of payload
|
||||||
|
*
|
||||||
|
* This function sends @data of length @len on the @ept endpoint.
|
||||||
|
* The message will be sent to the remote processor which the @ept
|
||||||
|
* endpoint belongs to, using @ept's address as source and its associated
|
||||||
|
* rpdev's address as destination.
|
||||||
|
* In case there are no TX buffers available, the function will immediately
|
||||||
|
* return -ENOMEM without waiting until one becomes available.
|
||||||
|
*
|
||||||
|
* Can only be called from process context (for now).
|
||||||
|
*
|
||||||
|
* Returns 0 on success and an appropriate error value on failure.
|
||||||
|
*/
|
||||||
|
int rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len)
|
||||||
|
{
|
||||||
|
return ept->ops->trysend(ept, data, len);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpmsg_trysend);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpmsg_sendto() - send a message across to the remote processor, specify dst
|
||||||
|
* @ept: the rpmsg endpoint
|
||||||
|
* @data: payload of message
|
||||||
|
* @len: length of payload
|
||||||
|
* @dst: destination address
|
||||||
|
*
|
||||||
|
* This function sends @data of length @len to the remote @dst address.
|
||||||
|
* The message will be sent to the remote processor which the @ept
|
||||||
|
* endpoint belongs to, using @ept's address as source.
|
||||||
|
* In case there are no TX buffers available, the function will immediately
|
||||||
|
* return -ENOMEM without waiting until one becomes available.
|
||||||
|
*
|
||||||
|
* Can only be called from process context (for now).
|
||||||
|
*
|
||||||
|
* Returns 0 on success and an appropriate error value on failure.
|
||||||
|
*/
|
||||||
|
int rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst)
|
||||||
|
{
|
||||||
|
return ept->ops->trysendto(ept, data, len, dst);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpmsg_trysendto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rpmsg_send_offchannel() - send a message using explicit src/dst addresses
|
||||||
|
* @ept: the rpmsg endpoint
|
||||||
|
* @src: source address
|
||||||
|
* @dst: destination address
|
||||||
|
* @data: payload of message
|
||||||
|
* @len: length of payload
|
||||||
|
*
|
||||||
|
* This function sends @data of length @len to the remote @dst address,
|
||||||
|
* and uses @src as the source address.
|
||||||
|
* The message will be sent to the remote processor which the @ept
|
||||||
|
* endpoint belongs to.
|
||||||
|
* In case there are no TX buffers available, the function will immediately
|
||||||
|
* return -ENOMEM without waiting until one becomes available.
|
||||||
|
*
|
||||||
|
* Can only be called from process context (for now).
|
||||||
|
*
|
||||||
|
* Returns 0 on success and an appropriate error value on failure.
|
||||||
|
*/
|
||||||
|
int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||||
|
void *data, int len)
|
||||||
|
{
|
||||||
|
return ept->ops->trysend_offchannel(ept, src, dst, data, len);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(rpmsg_trysend_offchannel);
|
||||||
|
@ -299,19 +299,6 @@ __rpmsg_destroy_ept(struct virtproc_info *vrp, struct rpmsg_endpoint *ept)
|
|||||||
kref_put(&ept->refcount, __ept_release);
|
kref_put(&ept->refcount, __ept_release);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* rpmsg_destroy_ept() - destroy an existing rpmsg endpoint
|
|
||||||
* @ept: endpoing to destroy
|
|
||||||
*
|
|
||||||
* Should be used by drivers to destroy an rpmsg endpoint previously
|
|
||||||
* created with rpmsg_create_ept().
|
|
||||||
*/
|
|
||||||
void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
|
|
||||||
{
|
|
||||||
ept->ops->destroy_ept(ept);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(rpmsg_destroy_ept);
|
|
||||||
|
|
||||||
static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
|
static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
|
||||||
{
|
{
|
||||||
__rpmsg_destroy_ept(ept->rpdev->vrp, ept);
|
__rpmsg_destroy_ept(ept->rpdev->vrp, ept);
|
||||||
|
@ -259,150 +259,14 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_device *,
|
|||||||
module_driver(__rpmsg_driver, register_rpmsg_driver, \
|
module_driver(__rpmsg_driver, register_rpmsg_driver, \
|
||||||
unregister_rpmsg_driver)
|
unregister_rpmsg_driver)
|
||||||
|
|
||||||
/**
|
int rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len);
|
||||||
* rpmsg_send() - send a message across to the remote processor
|
int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
|
||||||
* @ept: the rpmsg endpoint
|
|
||||||
* @data: payload of message
|
|
||||||
* @len: length of payload
|
|
||||||
*
|
|
||||||
* This function sends @data of length @len on the @ept endpoint.
|
|
||||||
* The message will be sent to the remote processor which the @ept
|
|
||||||
* endpoint belongs to, using @ept's address and its associated rpmsg
|
|
||||||
* device destination addresses.
|
|
||||||
* In case there are no TX buffers available, the function will block until
|
|
||||||
* one becomes available, or a timeout of 15 seconds elapses. When the latter
|
|
||||||
* happens, -ERESTARTSYS is returned.
|
|
||||||
*
|
|
||||||
* Can only be called from process context (for now).
|
|
||||||
*
|
|
||||||
* Returns 0 on success and an appropriate error value on failure.
|
|
||||||
*/
|
|
||||||
static inline int rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len)
|
|
||||||
{
|
|
||||||
return ept->ops->send(ept, data, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* rpmsg_sendto() - send a message across to the remote processor, specify dst
|
|
||||||
* @ept: the rpmsg endpoint
|
|
||||||
* @data: payload of message
|
|
||||||
* @len: length of payload
|
|
||||||
* @dst: destination address
|
|
||||||
*
|
|
||||||
* This function sends @data of length @len to the remote @dst address.
|
|
||||||
* The message will be sent to the remote processor which the @ept
|
|
||||||
* endpoint belongs to, using @ept's address as source.
|
|
||||||
* In case there are no TX buffers available, the function will block until
|
|
||||||
* one becomes available, or a timeout of 15 seconds elapses. When the latter
|
|
||||||
* happens, -ERESTARTSYS is returned.
|
|
||||||
*
|
|
||||||
* Can only be called from process context (for now).
|
|
||||||
*
|
|
||||||
* Returns 0 on success and an appropriate error value on failure.
|
|
||||||
*/
|
|
||||||
static inline
|
|
||||||
int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst)
|
|
||||||
{
|
|
||||||
return ept->ops->sendto(ept, data, len, dst);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* rpmsg_send_offchannel() - send a message using explicit src/dst addresses
|
|
||||||
* @ept: the rpmsg endpoint
|
|
||||||
* @src: source address
|
|
||||||
* @dst: destination address
|
|
||||||
* @data: payload of message
|
|
||||||
* @len: length of payload
|
|
||||||
*
|
|
||||||
* This function sends @data of length @len to the remote @dst address,
|
|
||||||
* and uses @src as the source address.
|
|
||||||
* The message will be sent to the remote processor which the @ept
|
|
||||||
* endpoint belongs to.
|
|
||||||
* In case there are no TX buffers available, the function will block until
|
|
||||||
* one becomes available, or a timeout of 15 seconds elapses. When the latter
|
|
||||||
* happens, -ERESTARTSYS is returned.
|
|
||||||
*
|
|
||||||
* Can only be called from process context (for now).
|
|
||||||
*
|
|
||||||
* Returns 0 on success and an appropriate error value on failure.
|
|
||||||
*/
|
|
||||||
static inline
|
|
||||||
int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||||
void *data, int len)
|
void *data, int len);
|
||||||
{
|
|
||||||
return ept->ops->send_offchannel(ept, src, dst, data, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
int rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len);
|
||||||
* rpmsg_send() - send a message across to the remote processor
|
int rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
|
||||||
* @ept: the rpmsg endpoint
|
|
||||||
* @data: payload of message
|
|
||||||
* @len: length of payload
|
|
||||||
*
|
|
||||||
* This function sends @data of length @len on the @ept endpoint.
|
|
||||||
* The message will be sent to the remote processor which the @ept
|
|
||||||
* endpoint belongs to, using @ept's address as source and its associated
|
|
||||||
* rpdev's address as destination.
|
|
||||||
* In case there are no TX buffers available, the function will immediately
|
|
||||||
* return -ENOMEM without waiting until one becomes available.
|
|
||||||
*
|
|
||||||
* Can only be called from process context (for now).
|
|
||||||
*
|
|
||||||
* Returns 0 on success and an appropriate error value on failure.
|
|
||||||
*/
|
|
||||||
static inline
|
|
||||||
int rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len)
|
|
||||||
{
|
|
||||||
return ept->ops->trysend(ept, data, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* rpmsg_sendto() - send a message across to the remote processor, specify dst
|
|
||||||
* @ept: the rpmsg endpoint
|
|
||||||
* @data: payload of message
|
|
||||||
* @len: length of payload
|
|
||||||
* @dst: destination address
|
|
||||||
*
|
|
||||||
* This function sends @data of length @len to the remote @dst address.
|
|
||||||
* The message will be sent to the remote processor which the @ept
|
|
||||||
* endpoint belongs to, using @ept's address as source.
|
|
||||||
* In case there are no TX buffers available, the function will immediately
|
|
||||||
* return -ENOMEM without waiting until one becomes available.
|
|
||||||
*
|
|
||||||
* Can only be called from process context (for now).
|
|
||||||
*
|
|
||||||
* Returns 0 on success and an appropriate error value on failure.
|
|
||||||
*/
|
|
||||||
static inline
|
|
||||||
int rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst)
|
|
||||||
{
|
|
||||||
return ept->ops->trysendto(ept, data, len, dst);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* rpmsg_send_offchannel() - send a message using explicit src/dst addresses
|
|
||||||
* @ept: the rpmsg endpoint
|
|
||||||
* @src: source address
|
|
||||||
* @dst: destination address
|
|
||||||
* @data: payload of message
|
|
||||||
* @len: length of payload
|
|
||||||
*
|
|
||||||
* This function sends @data of length @len to the remote @dst address,
|
|
||||||
* and uses @src as the source address.
|
|
||||||
* The message will be sent to the remote processor which the @ept
|
|
||||||
* endpoint belongs to.
|
|
||||||
* In case there are no TX buffers available, the function will immediately
|
|
||||||
* return -ENOMEM without waiting until one becomes available.
|
|
||||||
*
|
|
||||||
* Can only be called from process context (for now).
|
|
||||||
*
|
|
||||||
* Returns 0 on success and an appropriate error value on failure.
|
|
||||||
*/
|
|
||||||
static inline
|
|
||||||
int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||||
void *data, int len)
|
void *data, int len);
|
||||||
{
|
|
||||||
return ept->ops->trysend_offchannel(ept, src, dst, data, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _LINUX_RPMSG_H */
|
#endif /* _LINUX_RPMSG_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user