1
2
3
4
5
6
7
8
9
10
11
12#ifndef __RPMSG_INTERNAL_H__
13#define __RPMSG_INTERNAL_H__
14
15#include <linux/rpmsg.h>
16#include <linux/poll.h>
17
18#define to_rpmsg_device(d) container_of(d, struct rpmsg_device, dev)
19#define to_rpmsg_driver(d) container_of(d, struct rpmsg_driver, drv)
20
21
22
23
24
25
26
27
28
29
30
31struct rpmsg_device_ops {
32 struct rpmsg_endpoint *(*create_ept)(struct rpmsg_device *rpdev,
33 rpmsg_rx_cb_t cb, void *priv,
34 struct rpmsg_channel_info chinfo);
35
36 int (*announce_create)(struct rpmsg_device *ept);
37 int (*announce_destroy)(struct rpmsg_device *ept);
38};
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54struct rpmsg_endpoint_ops {
55 void (*destroy_ept)(struct rpmsg_endpoint *ept);
56
57 int (*send)(struct rpmsg_endpoint *ept, void *data, int len);
58 int (*sendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
59 int (*send_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
60 void *data, int len);
61
62 int (*trysend)(struct rpmsg_endpoint *ept, void *data, int len);
63 int (*trysendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
64 int (*trysend_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
65 void *data, int len);
66 __poll_t (*poll)(struct rpmsg_endpoint *ept, struct file *filp,
67 poll_table *wait);
68};
69
70int rpmsg_register_device(struct rpmsg_device *rpdev);
71int rpmsg_unregister_device(struct device *parent,
72 struct rpmsg_channel_info *chinfo);
73
74struct device *rpmsg_find_device(struct device *parent,
75 struct rpmsg_channel_info *chinfo);
76
77
78
79
80
81
82
83
84static inline int rpmsg_chrdev_register_device(struct rpmsg_device *rpdev)
85{
86 strcpy(rpdev->id.name, "rpmsg_chrdev");
87 rpdev->driver_override = "rpmsg_chrdev";
88
89 return rpmsg_register_device(rpdev);
90}
91
92#endif
93