diff options
author | Bjorn Andersson <bjorn.andersson@linaro.org> | 2016-09-01 15:27:58 -0700 |
---|---|---|
committer | Bjorn Andersson <bjorn.andersson@linaro.org> | 2016-09-08 22:15:20 -0700 |
commit | 36b72c7dca718717108120cdff7b56258a8862b4 (patch) | |
tree | e1a982d2a3e1f9eeb08692f6963d5091600455a3 /include/linux | |
parent | 92e1de51bf2cb8d49adc8925abe56ce84911a232 (diff) | |
download | lwn-36b72c7dca718717108120cdff7b56258a8862b4.tar.gz lwn-36b72c7dca718717108120cdff7b56258a8862b4.zip |
rpmsg: Introduce indirection table for rpmsg_device operations
To allow for multiple backend implementations add an indireection table
for rpmsg_device related operations and move the virtio implementation
behind this table.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/rpmsg.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h index 35a0f39fd09b..9fdcfc7c7837 100644 --- a/include/linux/rpmsg.h +++ b/include/linux/rpmsg.h @@ -96,6 +96,8 @@ enum rpmsg_ns_flags { #define RPMSG_ADDR_ANY 0xFFFFFFFF struct virtproc_info; +struct rpmsg_endpoint; +struct rpmsg_device_ops; /** * struct rpmsg_channel_info - channel info representation @@ -127,11 +129,32 @@ struct rpmsg_device { u32 dst; struct rpmsg_endpoint *ept; bool announce; + + const struct rpmsg_device_ops *ops; }; typedef void (*rpmsg_rx_cb_t)(struct rpmsg_device *, void *, int, void *, u32); /** + * struct rpmsg_device_ops - indirection table for the rpmsg_device operations + * @create_ept: create backend-specific endpoint, requried + * @announce_create: announce presence of new channel, optional + * @announce_destroy: announce destruction of channel, optional + * + * Indirection table for the operations that a rpmsg backend should implement. + * @announce_create and @announce_destroy are optional as the backend might + * advertise new channels implicitly by creating the endpoints. + */ +struct rpmsg_device_ops { + struct rpmsg_endpoint *(*create_ept)(struct rpmsg_device *rpdev, + rpmsg_rx_cb_t cb, void *priv, + struct rpmsg_channel_info chinfo); + + int (*announce_create)(struct rpmsg_device *ept); + int (*announce_destroy)(struct rpmsg_device *ept); +}; + +/** * struct rpmsg_endpoint - binds a local rpmsg address to its user * @rpdev: rpmsg channel device * @refcount: when this drops to zero, the ept is deallocated |