• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * OMX offloading remote processor driver
3  *
4  * Copyright(c) 2011 Texas Instruments. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * * Redistributions of source code must retain the above copyright
11  *   notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in
14  *   the documentation and/or other materials provided with the
15  *   distribution.
16  * * Neither the name Texas Instruments nor the names of its
17  *   contributors may be used to endorse or promote products derived
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef RPMSG_OMX_H
34 #define RPMSG_OMX_H
35 
36 #include <linux/ioctl.h>
37 
38 #define OMX_IOC_MAGIC	'X'
39 
40 #define OMX_IOCCONNECT		_IOW(OMX_IOC_MAGIC, 1, char *)
41 #define OMX_IOCIONREGISTER	_IOWR(OMX_IOC_MAGIC, 2, struct ion_fd_data)
42 #define OMX_IOCIONUNREGISTER	_IOWR(OMX_IOC_MAGIC, 3, struct ion_fd_data)
43 
44 #define OMX_IOC_MAXNR	(3)
45 
46 #ifdef __KERNEL__
47 
48 /**
49  * enum omx_msg_types - various message types currently supported
50  *
51  * @OMX_CONN_REQ: a connection request message type. the message should carry
52  * the name of the OMX service which we try to connect to. An instance of
53  * that service will be created remotely, and its address will be sent as
54  * a reply.
55  *
56  * @OMX_CONN_RSP: a response to a connection request. the message will carry
57  * an error code (success/failure), and if connection established successfully,
58  * the addr field will carry the address of the newly created OMX instance.
59  *
60  * @OMX_DISCONNECT: disconnect remote OMX instance. this message tells
61  * remote processor to release the resources coupled with this connection
62  *
63  * @OMX_RAW_MSG: a message that should be propagated as-is to the user.
64  * this would immediately enable user space development to start.
65  * as we progress, most likely this message won't be needed anymore.
66  */
67 enum omx_msg_types {
68 	OMX_CONN_REQ = 0,
69 	OMX_CONN_RSP = 1,
70 	OMX_DISCONNECT = 4,
71 	OMX_RAW_MSG = 5,
72 	/* todo: do we need a disconnect response ? ION refcounts should allow
73 	 * asynchronous release of relevant buffers */
74 };
75 
76 /**
77  * enum omx_error_codes - various error codes that will be used
78  *
79  * @OMX_SUCCESS: success
80  *
81  * @OMX_NOTSUPP: not supported
82  *
83  * @OMX_NOMEM: remote processor is out of memory
84  */
85 enum omx_error_codes {
86 	OMX_SUCCESS = 0,
87 	OMX_NOTSUPP = 1,
88 	OMX_NOMEM = 2,
89 };
90 
91 /* keep documenting... */
92 enum omx_state {
93 	OMX_UNCONNECTED,
94 	OMX_CONNECTED,
95 	OMX_FAIL,
96 };
97 
98 /**
99  * struct omx_msg_hdr - common header for all OMX messages
100  * @type:	type of message, see enum omx_msg_types
101  * @flags:	currently unused, should be zero
102  * @len:	length of msg payload (in bytes)
103  * @data:	the msg payload (depends on the message type)
104  *
105  * All OMX messages will start with this common header (which will begin
106  * right after the standard rpmsg header ends).
107  */
108 struct omx_msg_hdr {
109 	u32 type;
110 	u32 flags;
111 	u32 len;
112 	char data[0];
113 } __packed;
114 
115 struct omx_conn_rsp {
116 	u32 status;
117 	u32 addr;
118 } __packed;
119 
120 struct omx_disc_req {
121 	u32 addr;
122 } __packed;
123 
124 
125 #endif /* __KERNEL__ */
126 
127 /* temporarily exposed to user space too */
128 struct omx_conn_req {
129 	char name[48];
130 } __packed;
131 
132 /* the packet structure (actual message sent to omx service) */
133 struct omx_packet {
134 	uint16_t      desc;	/* descriptor, and omx service status */
135 	uint16_t      msg_id;	/* message id */
136 	uint32_t      flags;	/* Set to a fixed value for now. */
137 	uint32_t      fxn_idx;	/* Index into OMX service's function table.*/
138 	int32_t       result;	/* The OMX function status. */
139 	uint32_t      data_size;/* Size of in/out data to/from the function. */
140 	uint32_t      data[0];	/* Payload of data_size char's passed to
141 				   function. */
142 };
143 
144 #endif /* RPMSG_OMX_H */
145