• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2013-2016 Freescale Semiconductor Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of the above-listed copyright holders nor the
12  *       names of any contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  * ALTERNATIVELY, this software may be distributed under the terms of the
16  * GNU General Public License ("GPL") as published by the Free Software
17  * Foundation, either version 2 of that License or (at your option) any
18  * later version.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /*
34  * dprc-cmd.h
35  *
36  * defines dprc portal commands
37  *
38  */
39 
40 #ifndef _FSL_DPRC_CMD_H
41 #define _FSL_DPRC_CMD_H
42 
43 /* Minimal supported DPRC Version */
44 #define DPRC_MIN_VER_MAJOR			6
45 #define DPRC_MIN_VER_MINOR			0
46 
47 /* Command versioning */
48 #define DPRC_CMD_BASE_VERSION			1
49 #define DPRC_CMD_ID_OFFSET			4
50 
51 #define DPRC_CMD(id)	(((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_BASE_VERSION)
52 
53 /* Command IDs */
54 #define DPRC_CMDID_CLOSE                        DPRC_CMD(0x800)
55 #define DPRC_CMDID_OPEN                         DPRC_CMD(0x805)
56 #define DPRC_CMDID_GET_API_VERSION              DPRC_CMD(0xa05)
57 
58 #define DPRC_CMDID_GET_ATTR                     DPRC_CMD(0x004)
59 
60 #define DPRC_CMDID_SET_IRQ                      DPRC_CMD(0x010)
61 #define DPRC_CMDID_GET_IRQ                      DPRC_CMD(0x011)
62 #define DPRC_CMDID_SET_IRQ_ENABLE               DPRC_CMD(0x012)
63 #define DPRC_CMDID_GET_IRQ_ENABLE               DPRC_CMD(0x013)
64 #define DPRC_CMDID_SET_IRQ_MASK                 DPRC_CMD(0x014)
65 #define DPRC_CMDID_GET_IRQ_MASK                 DPRC_CMD(0x015)
66 #define DPRC_CMDID_GET_IRQ_STATUS               DPRC_CMD(0x016)
67 #define DPRC_CMDID_CLEAR_IRQ_STATUS             DPRC_CMD(0x017)
68 
69 #define DPRC_CMDID_GET_CONT_ID                  DPRC_CMD(0x830)
70 #define DPRC_CMDID_GET_OBJ_COUNT                DPRC_CMD(0x159)
71 #define DPRC_CMDID_GET_OBJ                      DPRC_CMD(0x15A)
72 #define DPRC_CMDID_GET_RES_COUNT                DPRC_CMD(0x15B)
73 #define DPRC_CMDID_GET_OBJ_REG                  DPRC_CMD(0x15E)
74 #define DPRC_CMDID_SET_OBJ_IRQ                  DPRC_CMD(0x15F)
75 #define DPRC_CMDID_GET_OBJ_IRQ                  DPRC_CMD(0x160)
76 
77 struct dprc_cmd_open {
78 	__le32 container_id;
79 };
80 
81 struct dprc_cmd_create_container {
82 	/* cmd word 0 */
83 	__le32 options;
84 	__le16 icid;
85 	__le16 pad0;
86 	/* cmd word 1 */
87 	__le32 pad1;
88 	__le32 portal_id;
89 	/* cmd words 2-3 */
90 	u8 label[16];
91 };
92 
93 struct dprc_rsp_create_container {
94 	/* response word 0 */
95 	__le64 pad0;
96 	/* response word 1 */
97 	__le32 child_container_id;
98 	__le32 pad1;
99 	/* response word 2 */
100 	__le64 child_portal_addr;
101 };
102 
103 struct dprc_cmd_destroy_container {
104 	__le32 child_container_id;
105 };
106 
107 struct dprc_cmd_reset_container {
108 	__le32 child_container_id;
109 };
110 
111 struct dprc_cmd_set_irq {
112 	/* cmd word 0 */
113 	__le32 irq_val;
114 	u8 irq_index;
115 	u8 pad[3];
116 	/* cmd word 1 */
117 	__le64 irq_addr;
118 	/* cmd word 2 */
119 	__le32 irq_num;
120 };
121 
122 struct dprc_cmd_get_irq {
123 	__le32 pad;
124 	u8 irq_index;
125 };
126 
127 struct dprc_rsp_get_irq {
128 	/* response word 0 */
129 	__le32 irq_val;
130 	__le32 pad;
131 	/* response word 1 */
132 	__le64 irq_addr;
133 	/* response word 2 */
134 	__le32 irq_num;
135 	__le32 type;
136 };
137 
138 #define DPRC_ENABLE		0x1
139 
140 struct dprc_cmd_set_irq_enable {
141 	u8 enable;
142 	u8 pad[3];
143 	u8 irq_index;
144 };
145 
146 struct dprc_cmd_get_irq_enable {
147 	__le32 pad;
148 	u8 irq_index;
149 };
150 
151 struct dprc_rsp_get_irq_enable {
152 	u8 enabled;
153 };
154 
155 struct dprc_cmd_set_irq_mask {
156 	__le32 mask;
157 	u8 irq_index;
158 };
159 
160 struct dprc_cmd_get_irq_mask {
161 	__le32 pad;
162 	u8 irq_index;
163 };
164 
165 struct dprc_rsp_get_irq_mask {
166 	__le32 mask;
167 };
168 
169 struct dprc_cmd_get_irq_status {
170 	__le32 status;
171 	u8 irq_index;
172 };
173 
174 struct dprc_rsp_get_irq_status {
175 	__le32 status;
176 };
177 
178 struct dprc_cmd_clear_irq_status {
179 	__le32 status;
180 	u8 irq_index;
181 };
182 
183 struct dprc_rsp_get_attributes {
184 	/* response word 0 */
185 	__le32 container_id;
186 	__le16 icid;
187 	__le16 pad;
188 	/* response word 1 */
189 	__le32 options;
190 	__le32 portal_id;
191 };
192 
193 struct dprc_cmd_set_res_quota {
194 	/* cmd word 0 */
195 	__le32 child_container_id;
196 	__le16 quota;
197 	__le16 pad;
198 	/* cmd words 1-2 */
199 	u8 type[16];
200 };
201 
202 struct dprc_cmd_get_res_quota {
203 	/* cmd word 0 */
204 	__le32 child_container_id;
205 	__le32 pad;
206 	/* cmd word 1-2 */
207 	u8 type[16];
208 };
209 
210 struct dprc_rsp_get_res_quota {
211 	__le32 pad;
212 	__le16 quota;
213 };
214 
215 struct dprc_cmd_assign {
216 	/* cmd word 0 */
217 	__le32 container_id;
218 	__le32 options;
219 	/* cmd word 1 */
220 	__le32 num;
221 	__le32 id_base_align;
222 	/* cmd word 2-3 */
223 	u8 type[16];
224 };
225 
226 struct dprc_cmd_unassign {
227 	/* cmd word 0 */
228 	__le32 child_container_id;
229 	__le32 options;
230 	/* cmd word 1 */
231 	__le32 num;
232 	__le32 id_base_align;
233 	/* cmd word 2-3 */
234 	u8 type[16];
235 };
236 
237 struct dprc_rsp_get_pool_count {
238 	__le32 pool_count;
239 };
240 
241 struct dprc_cmd_get_pool {
242 	__le32 pool_index;
243 };
244 
245 struct dprc_rsp_get_pool {
246 	/* response word 0 */
247 	__le64 pad;
248 	/* response word 1-2 */
249 	u8 type[16];
250 };
251 
252 struct dprc_rsp_get_obj_count {
253 	__le32 pad;
254 	__le32 obj_count;
255 };
256 
257 struct dprc_cmd_get_obj {
258 	__le32 obj_index;
259 };
260 
261 struct dprc_rsp_get_obj {
262 	/* response word 0 */
263 	__le32 pad0;
264 	__le32 id;
265 	/* response word 1 */
266 	__le16 vendor;
267 	u8 irq_count;
268 	u8 region_count;
269 	__le32 state;
270 	/* response word 2 */
271 	__le16 version_major;
272 	__le16 version_minor;
273 	__le16 flags;
274 	__le16 pad1;
275 	/* response word 3-4 */
276 	u8 type[16];
277 	/* response word 5-6 */
278 	u8 label[16];
279 };
280 
281 struct dprc_cmd_get_obj_desc {
282 	/* cmd word 0 */
283 	__le32 obj_id;
284 	__le32 pad;
285 	/* cmd word 1-2 */
286 	u8 type[16];
287 };
288 
289 struct dprc_rsp_get_obj_desc {
290 	/* response word 0 */
291 	__le32 pad0;
292 	__le32 id;
293 	/* response word 1 */
294 	__le16 vendor;
295 	u8 irq_count;
296 	u8 region_count;
297 	__le32 state;
298 	/* response word 2 */
299 	__le16 version_major;
300 	__le16 version_minor;
301 	__le16 flags;
302 	__le16 pad1;
303 	/* response word 3-4 */
304 	u8 type[16];
305 	/* response word 5-6 */
306 	u8 label[16];
307 };
308 
309 struct dprc_cmd_get_res_count {
310 	/* cmd word 0 */
311 	__le64 pad;
312 	/* cmd word 1-2 */
313 	u8 type[16];
314 };
315 
316 struct dprc_rsp_get_res_count {
317 	__le32 res_count;
318 };
319 
320 struct dprc_cmd_get_res_ids {
321 	/* cmd word 0 */
322 	u8 pad0[5];
323 	u8 iter_status;
324 	__le16 pad1;
325 	/* cmd word 1 */
326 	__le32 base_id;
327 	__le32 last_id;
328 	/* cmd word 2-3 */
329 	u8 type[16];
330 };
331 
332 struct dprc_rsp_get_res_ids {
333 	/* response word 0 */
334 	u8 pad0[5];
335 	u8 iter_status;
336 	__le16 pad1;
337 	/* response word 1 */
338 	__le32 base_id;
339 	__le32 last_id;
340 };
341 
342 struct dprc_cmd_get_obj_region {
343 	/* cmd word 0 */
344 	__le32 obj_id;
345 	__le16 pad0;
346 	u8 region_index;
347 	u8 pad1;
348 	/* cmd word 1-2 */
349 	__le64 pad2[2];
350 	/* cmd word 3-4 */
351 	u8 obj_type[16];
352 };
353 
354 struct dprc_rsp_get_obj_region {
355 	/* response word 0 */
356 	__le64 pad;
357 	/* response word 1 */
358 	__le64 base_addr;
359 	/* response word 2 */
360 	__le32 size;
361 };
362 
363 struct dprc_cmd_set_obj_label {
364 	/* cmd word 0 */
365 	__le32 obj_id;
366 	__le32 pad;
367 	/* cmd word 1-2 */
368 	u8 label[16];
369 	/* cmd word 3-4 */
370 	u8 obj_type[16];
371 };
372 
373 struct dprc_cmd_set_obj_irq {
374 	/* cmd word 0 */
375 	__le32 irq_val;
376 	u8 irq_index;
377 	u8 pad[3];
378 	/* cmd word 1 */
379 	__le64 irq_addr;
380 	/* cmd word 2 */
381 	__le32 irq_num;
382 	__le32 obj_id;
383 	/* cmd word 3-4 */
384 	u8 obj_type[16];
385 };
386 
387 struct dprc_cmd_get_obj_irq {
388 	/* cmd word 0 */
389 	__le32 obj_id;
390 	u8 irq_index;
391 	u8 pad[3];
392 	/* cmd word 1-2 */
393 	u8 obj_type[16];
394 };
395 
396 struct dprc_rsp_get_obj_irq {
397 	/* response word 0 */
398 	__le32 irq_val;
399 	__le32 pad;
400 	/* response word 1 */
401 	__le64 irq_addr;
402 	/* response word 2 */
403 	__le32 irq_num;
404 	__le32 type;
405 };
406 
407 struct dprc_cmd_connect {
408 	/* cmd word 0 */
409 	__le32 ep1_id;
410 	__le32 ep1_interface_id;
411 	/* cmd word 1 */
412 	__le32 ep2_id;
413 	__le32 ep2_interface_id;
414 	/* cmd word 2-3 */
415 	u8 ep1_type[16];
416 	/* cmd word 4 */
417 	__le32 max_rate;
418 	__le32 committed_rate;
419 	/* cmd word 5-6 */
420 	u8 ep2_type[16];
421 };
422 
423 struct dprc_cmd_disconnect {
424 	/* cmd word 0 */
425 	__le32 id;
426 	__le32 interface_id;
427 	/* cmd word 1-2 */
428 	u8 type[16];
429 };
430 
431 struct dprc_cmd_get_connection {
432 	/* cmd word 0 */
433 	__le32 ep1_id;
434 	__le32 ep1_interface_id;
435 	/* cmd word 1-2 */
436 	u8 ep1_type[16];
437 };
438 
439 struct dprc_rsp_get_connection {
440 	/* response word 0-2 */
441 	__le64 pad[3];
442 	/* response word 3 */
443 	__le32 ep2_id;
444 	__le32 ep2_interface_id;
445 	/* response word 4-5 */
446 	u8 ep2_type[16];
447 	/* response word 6 */
448 	__le32 state;
449 };
450 
451 #endif /* _FSL_DPRC_CMD_H */
452