Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * remote processor messaging bus internals
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * Copyright (c) 2020 The Linux Foundation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  * Copyright (C) 2011 Texas Instruments, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  * Copyright (C) 2011 Google, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9)  * Ohad Ben-Cohen <ohad@wizery.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  * Brian Swetland <swetland@google.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #ifndef __RPMSG_INTERNAL_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define __RPMSG_INTERNAL_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/rpmsg.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <linux/poll.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define to_rpmsg_device(d) container_of(d, struct rpmsg_device, dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define to_rpmsg_driver(d) container_of(d, struct rpmsg_driver, drv)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)  * struct rpmsg_device_ops - indirection table for the rpmsg_device operations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)  * @create_ept:		create backend-specific endpoint, required
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)  * @announce_create:	announce presence of new channel, optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)  * @announce_destroy:	announce destruction of channel, optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)  * Indirection table for the operations that a rpmsg backend should implement.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)  * @announce_create and @announce_destroy are optional as the backend might
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)  * advertise new channels implicitly by creating the endpoints.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) struct rpmsg_device_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	struct rpmsg_endpoint *(*create_ept)(struct rpmsg_device *rpdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 					    rpmsg_rx_cb_t cb, void *priv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 					    struct rpmsg_channel_info chinfo);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	int (*announce_create)(struct rpmsg_device *ept);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	int (*announce_destroy)(struct rpmsg_device *ept);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)  * struct rpmsg_endpoint_ops - indirection table for rpmsg_endpoint operations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)  * @destroy_ept:	see @rpmsg_destroy_ept(), required
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)  * @send:		see @rpmsg_send(), required
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)  * @sendto:		see @rpmsg_sendto(), optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)  * @send_offchannel:	see @rpmsg_send_offchannel(), optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)  * @trysend:		see @rpmsg_trysend(), required
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)  * @trysendto:		see @rpmsg_trysendto(), optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)  * @trysend_offchannel:	see @rpmsg_trysend_offchannel(), optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)  * @poll:		see @rpmsg_poll(), optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)  * @get_signals:	see @rpmsg_get_signals(), optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)  * @set_signals:	see @rpmsg_set_signals(), optional
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)  * Indirection table for the operations that a rpmsg backend should implement.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)  * In addition to @destroy_ept, the backend must at least implement @send and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)  * @trysend, while the variants sending data off-channel are optional.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) struct rpmsg_endpoint_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 	void (*destroy_ept)(struct rpmsg_endpoint *ept);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	int (*send)(struct rpmsg_endpoint *ept, void *data, int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	int (*sendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 	int (*send_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 				  void *data, int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	int (*trysend)(struct rpmsg_endpoint *ept, void *data, int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	int (*trysendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 	int (*trysend_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 			     void *data, int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 	__poll_t (*poll)(struct rpmsg_endpoint *ept, struct file *filp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 			     poll_table *wait);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 	int (*get_signals)(struct rpmsg_endpoint *ept);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 	int (*set_signals)(struct rpmsg_endpoint *ept, u32 set, u32 clear);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) int rpmsg_register_device(struct rpmsg_device *rpdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) int rpmsg_unregister_device(struct device *parent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 			    struct rpmsg_channel_info *chinfo);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) struct device *rpmsg_find_device(struct device *parent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 				 struct rpmsg_channel_info *chinfo);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)  * rpmsg_chrdev_register_device() - register chrdev device based on rpdev
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)  * @rpdev:	prepared rpdev to be used for creating endpoints
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)  * This function wraps rpmsg_register_device() preparing the rpdev for use as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)  * basis for the rpmsg chrdev.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) static inline int rpmsg_chrdev_register_device(struct rpmsg_device *rpdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) 	strcpy(rpdev->id.name, "rpmsg_chrdev");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) 	rpdev->driver_override = "rpmsg_chrdev";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) 	return rpmsg_register_device(rpdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #endif