upload tizen1.0 source
[kernel/linux-2.6.36.git] / drivers / staging / tidspbridge / include / dspbridge / dspapi-ioctl.h
1 /*
2  * dspapi-ioctl.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * Contains structures and commands that are used for interaction
7  * between the DDSP API and Bridge driver.
8  *
9  * Copyright (C) 2008 Texas Instruments, Inc.
10  *
11  * This package is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2 as
13  * published by the Free Software Foundation.
14  *
15  * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
17  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
18  */
19
20 #ifndef DSPAPIIOCTL_
21 #define DSPAPIIOCTL_
22
23 #include <dspbridge/cmm.h>
24 #include <dspbridge/strmdefs.h>
25 #include <dspbridge/dbdcd.h>
26
27 union trapped_args {
28
29         /* MGR Module */
30         struct {
31                 u32 node_id;
32                 struct dsp_ndbprops __user *pndb_props;
33                 u32 undb_props_size;
34                 u32 __user *pu_num_nodes;
35         } args_mgr_enumnode_info;
36
37         struct {
38                 u32 processor_id;
39                 struct dsp_processorinfo __user *processor_info;
40                 u32 processor_info_size;
41                 u32 __user *pu_num_procs;
42         } args_mgr_enumproc_info;
43
44         struct {
45                 struct dsp_uuid *uuid_obj;
46                 enum dsp_dcdobjtype obj_type;
47                 char *psz_path_name;
48         } args_mgr_registerobject;
49
50         struct {
51                 struct dsp_uuid *uuid_obj;
52                 enum dsp_dcdobjtype obj_type;
53         } args_mgr_unregisterobject;
54
55         struct {
56                 struct dsp_notification __user *__user *anotifications;
57                 u32 count;
58                 u32 __user *pu_index;
59                 u32 utimeout;
60         } args_mgr_wait;
61
62         /* PROC Module */
63         struct {
64                 u32 processor_id;
65                 struct dsp_processorattrin __user *attr_in;
66                 void *__user *ph_processor;
67         } args_proc_attach;
68
69         struct {
70                 void *hprocessor;
71                 u32 dw_cmd;
72                 struct dsp_cbdata __user *pargs;
73         } args_proc_ctrl;
74
75         struct {
76                 void *hprocessor;
77         } args_proc_detach;
78
79         struct {
80                 void *hprocessor;
81                 void *__user *node_tab;
82                 u32 node_tab_size;
83                 u32 __user *pu_num_nodes;
84                 u32 __user *pu_allocated;
85         } args_proc_enumnode_info;
86
87         struct {
88                 void *hprocessor;
89                 u32 resource_type;
90                 struct dsp_resourceinfo *resource_info;
91                 u32 resource_info_size;
92         } args_proc_enumresources;
93
94         struct {
95                 void *hprocessor;
96                 struct dsp_processorstate __user *proc_state_obj;
97                 u32 state_info_size;
98         } args_proc_getstate;
99
100         struct {
101                 void *hprocessor;
102                 u8 __user *pbuf;
103                 u8 __user *psize;
104                 u32 max_size;
105         } args_proc_gettrace;
106
107         struct {
108                 void *hprocessor;
109                 s32 argc_index;
110                 char __user *__user *user_args;
111                 char *__user *user_envp;
112         } args_proc_load;
113
114         struct {
115                 void *hprocessor;
116                 u32 event_mask;
117                 u32 notify_type;
118                 struct dsp_notification __user *hnotification;
119         } args_proc_register_notify;
120
121         struct {
122                 void *hprocessor;
123         } args_proc_start;
124
125         struct {
126                 void *hprocessor;
127                 u32 ul_size;
128                 void *__user *pp_rsv_addr;
129         } args_proc_rsvmem;
130
131         struct {
132                 void *hprocessor;
133                 u32 ul_size;
134                 void *prsv_addr;
135         } args_proc_unrsvmem;
136
137         struct {
138                 void *hprocessor;
139                 void *pmpu_addr;
140                 u32 ul_size;
141                 void *req_addr;
142                 void *__user *pp_map_addr;
143                 u32 ul_map_attr;
144         } args_proc_mapmem;
145
146         struct {
147                 void *hprocessor;
148                 u32 ul_size;
149                 void *map_addr;
150         } args_proc_unmapmem;
151
152         struct {
153                 void *hprocessor;
154                 void *pmpu_addr;
155                 u32 ul_size;
156                 u32 dir;
157         } args_proc_dma;
158
159         struct {
160                 void *hprocessor;
161                 void *pmpu_addr;
162                 u32 ul_size;
163                 u32 ul_flags;
164         } args_proc_flushmemory;
165
166         struct {
167                 void *hprocessor;
168         } args_proc_stop;
169
170         struct {
171                 void *hprocessor;
172                 void *pmpu_addr;
173                 u32 ul_size;
174         } args_proc_invalidatememory;
175
176         /* NODE Module */
177         struct {
178                 void *hprocessor;
179                 struct dsp_uuid __user *node_id_ptr;
180                 struct dsp_cbdata __user *pargs;
181                 struct dsp_nodeattrin __user *attr_in;
182                 void *__user *ph_node;
183         } args_node_allocate;
184
185         struct {
186                 void *hnode;
187                 u32 usize;
188                 struct dsp_bufferattr __user *pattr;
189                 u8 *__user *pbuffer;
190         } args_node_allocmsgbuf;
191
192         struct {
193                 void *hnode;
194                 s32 prio;
195         } args_node_changepriority;
196
197         struct {
198                 void *hnode;
199                 u32 stream_id;
200                 void *other_node;
201                 u32 other_stream;
202                 struct dsp_strmattr __user *pattrs;
203                 struct dsp_cbdata __user *conn_param;
204         } args_node_connect;
205
206         struct {
207                 void *hnode;
208         } args_node_create;
209
210         struct {
211                 void *hnode;
212         } args_node_delete;
213
214         struct {
215                 void *hnode;
216                 struct dsp_bufferattr __user *pattr;
217                 u8 *pbuffer;
218         } args_node_freemsgbuf;
219
220         struct {
221                 void *hnode;
222                 struct dsp_nodeattr __user *pattr;
223                 u32 attr_size;
224         } args_node_getattr;
225
226         struct {
227                 void *hnode;
228                 struct dsp_msg __user *message;
229                 u32 utimeout;
230         } args_node_getmessage;
231
232         struct {
233                 void *hnode;
234         } args_node_pause;
235
236         struct {
237                 void *hnode;
238                 struct dsp_msg __user *message;
239                 u32 utimeout;
240         } args_node_putmessage;
241
242         struct {
243                 void *hnode;
244                 u32 event_mask;
245                 u32 notify_type;
246                 struct dsp_notification __user *hnotification;
247         } args_node_registernotify;
248
249         struct {
250                 void *hnode;
251         } args_node_run;
252
253         struct {
254                 void *hnode;
255                 int __user *pstatus;
256         } args_node_terminate;
257
258         struct {
259                 void *hprocessor;
260                 struct dsp_uuid __user *node_id_ptr;
261                 struct dsp_ndbprops __user *node_props;
262         } args_node_getuuidprops;
263
264         /* STRM module */
265
266         struct {
267                 void *hstream;
268                 u32 usize;
269                 u8 *__user *ap_buffer;
270                 u32 num_bufs;
271         } args_strm_allocatebuffer;
272
273         struct {
274                 void *hstream;
275         } args_strm_close;
276
277         struct {
278                 void *hstream;
279                 u8 *__user *ap_buffer;
280                 u32 num_bufs;
281         } args_strm_freebuffer;
282
283         struct {
284                 void *hstream;
285                 void **ph_event;
286         } args_strm_geteventhandle;
287
288         struct {
289                 void *hstream;
290                 struct stream_info __user *stream_info;
291                 u32 stream_info_size;
292         } args_strm_getinfo;
293
294         struct {
295                 void *hstream;
296                 bool flush_flag;
297         } args_strm_idle;
298
299         struct {
300                 void *hstream;
301                 u8 *pbuffer;
302                 u32 dw_bytes;
303                 u32 dw_buf_size;
304                 u32 dw_arg;
305         } args_strm_issue;
306
307         struct {
308                 void *hnode;
309                 u32 direction;
310                 u32 index;
311                 struct strm_attr __user *attr_in;
312                 void *__user *ph_stream;
313         } args_strm_open;
314
315         struct {
316                 void *hstream;
317                 u8 *__user *buf_ptr;
318                 u32 __user *bytes;
319                 u32 __user *buf_size_ptr;
320                 u32 __user *pdw_arg;
321         } args_strm_reclaim;
322
323         struct {
324                 void *hstream;
325                 u32 event_mask;
326                 u32 notify_type;
327                 struct dsp_notification __user *hnotification;
328         } args_strm_registernotify;
329
330         struct {
331                 void *__user *stream_tab;
332                 u32 strm_num;
333                 u32 __user *pmask;
334                 u32 utimeout;
335         } args_strm_select;
336
337         /* CMM Module */
338         struct {
339                 struct cmm_object *hcmm_mgr;
340                 u32 usize;
341                 struct cmm_attrs *pattrs;
342                 void **pp_buf_va;
343         } args_cmm_allocbuf;
344
345         struct {
346                 struct cmm_object *hcmm_mgr;
347                 void *buf_pa;
348                 u32 ul_seg_id;
349         } args_cmm_freebuf;
350
351         struct {
352                 void *hprocessor;
353                 struct cmm_object *__user *ph_cmm_mgr;
354         } args_cmm_gethandle;
355
356         struct {
357                 struct cmm_object *hcmm_mgr;
358                 struct cmm_info __user *cmm_info_obj;
359         } args_cmm_getinfo;
360
361         /* UTIL module */
362         struct {
363                 s32 util_argc;
364                 char **pp_argv;
365         } args_util_testdll;
366 };
367
368 /*
369  * Dspbridge Ioctl numbering scheme
370  *
371  *    7                           0
372  *  ---------------------------------
373  *  |  Module   |   Ioctl Number    |
374  *  ---------------------------------
375  *  | x | x | x | 0 | 0 | 0 | 0 | 0 |
376  *  ---------------------------------
377  */
378
379 /* Ioctl driver identifier */
380 #define DB              0xDB
381
382 /*
383  * Following are used to distinguish between module ioctls, this is needed
384  * in case new ioctls are introduced.
385  */
386 #define DB_MODULE_MASK          0xE0
387 #define DB_IOC_MASK             0x1F
388
389 /* Ioctl module masks */
390 #define DB_MGR          0x0
391 #define DB_PROC         0x20
392 #define DB_NODE         0x40
393 #define DB_STRM         0x60
394 #define DB_CMM          0x80
395
396 #define DB_MODULE_SHIFT         5
397
398 /* Used to calculate the ioctl per dspbridge module */
399 #define DB_IOC(module, num) \
400                         (((module) & DB_MODULE_MASK) | ((num) & DB_IOC_MASK))
401 /* Used to get dspbridge ioctl module */
402 #define DB_GET_MODULE(cmd)      ((cmd) & DB_MODULE_MASK)
403 /* Used to get dspbridge ioctl number */
404 #define DB_GET_IOC(cmd)         ((cmd) & DB_IOC_MASK)
405
406 /* TODO: Remove deprecated and not implemented */
407
408 /* MGR Module */
409 #define MGR_ENUMNODE_INFO       _IOWR(DB, DB_IOC(DB_MGR, 0), unsigned long)
410 #define MGR_ENUMPROC_INFO       _IOWR(DB, DB_IOC(DB_MGR, 1), unsigned long)
411 #define MGR_REGISTEROBJECT      _IOWR(DB, DB_IOC(DB_MGR, 2), unsigned long)
412 #define MGR_UNREGISTEROBJECT    _IOWR(DB, DB_IOC(DB_MGR, 3), unsigned long)
413 #define MGR_WAIT                _IOWR(DB, DB_IOC(DB_MGR, 4), unsigned long)
414 /* MGR_GET_PROC_RES Deprecated */
415 #define MGR_GET_PROC_RES        _IOR(DB, DB_IOC(DB_MGR, 5), unsigned long)
416
417 /* PROC Module */
418 #define PROC_ATTACH             _IOWR(DB, DB_IOC(DB_PROC, 0), unsigned long)
419 #define PROC_CTRL               _IOR(DB, DB_IOC(DB_PROC, 1), unsigned long)
420 /* PROC_DETACH Deprecated */
421 #define PROC_DETACH             _IOR(DB, DB_IOC(DB_PROC, 2), unsigned long)
422 #define PROC_ENUMNODE           _IOWR(DB, DB_IOC(DB_PROC, 3), unsigned long)
423 #define PROC_ENUMRESOURCES      _IOWR(DB, DB_IOC(DB_PROC, 4), unsigned long)
424 #define PROC_GET_STATE          _IOWR(DB, DB_IOC(DB_PROC, 5), unsigned long)
425 #define PROC_GET_TRACE          _IOWR(DB, DB_IOC(DB_PROC, 6), unsigned long)
426 #define PROC_LOAD               _IOW(DB, DB_IOC(DB_PROC, 7), unsigned long)
427 #define PROC_REGISTERNOTIFY     _IOWR(DB, DB_IOC(DB_PROC, 8), unsigned long)
428 #define PROC_START              _IOW(DB, DB_IOC(DB_PROC, 9), unsigned long)
429 #define PROC_RSVMEM             _IOWR(DB, DB_IOC(DB_PROC, 10), unsigned long)
430 #define PROC_UNRSVMEM           _IOW(DB, DB_IOC(DB_PROC, 11), unsigned long)
431 #define PROC_MAPMEM             _IOWR(DB, DB_IOC(DB_PROC, 12), unsigned long)
432 #define PROC_UNMAPMEM           _IOR(DB, DB_IOC(DB_PROC, 13), unsigned long)
433 #define PROC_FLUSHMEMORY        _IOW(DB, DB_IOC(DB_PROC, 14), unsigned long)
434 #define PROC_STOP               _IOWR(DB, DB_IOC(DB_PROC, 15), unsigned long)
435 #define PROC_INVALIDATEMEMORY   _IOW(DB, DB_IOC(DB_PROC, 16), unsigned long)
436 #define PROC_BEGINDMA           _IOW(DB, DB_IOC(DB_PROC, 17), unsigned long)
437 #define PROC_ENDDMA             _IOW(DB, DB_IOC(DB_PROC, 18), unsigned long)
438
439 /* NODE Module */
440 #define NODE_ALLOCATE           _IOWR(DB, DB_IOC(DB_NODE, 0), unsigned long)
441 #define NODE_ALLOCMSGBUF        _IOWR(DB, DB_IOC(DB_NODE, 1), unsigned long)
442 #define NODE_CHANGEPRIORITY     _IOW(DB, DB_IOC(DB_NODE, 2), unsigned long)
443 #define NODE_CONNECT            _IOW(DB, DB_IOC(DB_NODE, 3), unsigned long)
444 #define NODE_CREATE             _IOW(DB, DB_IOC(DB_NODE, 4), unsigned long)
445 #define NODE_DELETE             _IOW(DB, DB_IOC(DB_NODE, 5), unsigned long)
446 #define NODE_FREEMSGBUF         _IOW(DB, DB_IOC(DB_NODE, 6), unsigned long)
447 #define NODE_GETATTR            _IOWR(DB, DB_IOC(DB_NODE, 7), unsigned long)
448 #define NODE_GETMESSAGE         _IOWR(DB, DB_IOC(DB_NODE, 8), unsigned long)
449 #define NODE_PAUSE              _IOW(DB, DB_IOC(DB_NODE, 9), unsigned long)
450 #define NODE_PUTMESSAGE         _IOW(DB, DB_IOC(DB_NODE, 10), unsigned long)
451 #define NODE_REGISTERNOTIFY     _IOWR(DB, DB_IOC(DB_NODE, 11), unsigned long)
452 #define NODE_RUN                _IOW(DB, DB_IOC(DB_NODE, 12), unsigned long)
453 #define NODE_TERMINATE          _IOWR(DB, DB_IOC(DB_NODE, 13), unsigned long)
454 #define NODE_GETUUIDPROPS       _IOWR(DB, DB_IOC(DB_NODE, 14), unsigned long)
455
456 /* STRM Module */
457 #define STRM_ALLOCATEBUFFER     _IOWR(DB, DB_IOC(DB_STRM, 0), unsigned long)
458 #define STRM_CLOSE              _IOW(DB, DB_IOC(DB_STRM, 1), unsigned long)
459 #define STRM_FREEBUFFER         _IOWR(DB, DB_IOC(DB_STRM, 2), unsigned long)
460 #define STRM_GETEVENTHANDLE     _IO(DB, DB_IOC(DB_STRM, 3))     /* Not Impl'd */
461 #define STRM_GETINFO            _IOWR(DB, DB_IOC(DB_STRM, 4), unsigned long)
462 #define STRM_IDLE               _IOW(DB, DB_IOC(DB_STRM, 5), unsigned long)
463 #define STRM_ISSUE              _IOW(DB, DB_IOC(DB_STRM, 6), unsigned long)
464 #define STRM_OPEN               _IOWR(DB, DB_IOC(DB_STRM, 7), unsigned long)
465 #define STRM_RECLAIM            _IOWR(DB, DB_IOC(DB_STRM, 8), unsigned long)
466 #define STRM_REGISTERNOTIFY     _IOWR(DB, DB_IOC(DB_STRM, 9), unsigned long)
467 #define STRM_SELECT             _IOWR(DB, DB_IOC(DB_STRM, 10), unsigned long)
468
469 /* CMM Module */
470 #define CMM_ALLOCBUF            _IO(DB, DB_IOC(DB_CMM, 0))      /* Not Impl'd */
471 #define CMM_FREEBUF             _IO(DB, DB_IOC(DB_CMM, 1))      /* Not Impl'd */
472 #define CMM_GETHANDLE           _IOR(DB, DB_IOC(DB_CMM, 2), unsigned long)
473 #define CMM_GETINFO             _IOR(DB, DB_IOC(DB_CMM, 3), unsigned long)
474
475 #endif /* DSPAPIIOCTL_ */