04b13abbaa76aa012fbf7c100bc7750d064e6733
[h-e-n] / arch / arm / plat-omap / include / dspbridge / wcdioctl.h
1 /*
2  * wcdioctl.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * Copyright (C) 2008 Texas Instruments, Inc.
7  *
8  * This package is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
13  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
14  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
15  */
16
17
18 /*
19  *  ======== wcdioctl.h ========
20  *  Purpose:
21  *      Contains structures and commands that are used for interaction
22  *      between the DDSP API and class driver.
23  *
24  *! Revision History
25  *! ================
26  *! 19-Apr-2004 sb  Aligned DMM definitions with Symbian
27  *! 08-Mar-2004 sb  Added the Dynamic Memory Mapping structs & offsets
28  *! 15-Oct-2002 kc  Updated definitions for private PERF module.
29  *! 16-Aug-2002 map Added ARGS_MGR_REGISTEROBJECT & ARGS_MGR_UNREGISTEROBJECT
30  *!              Added CMD_MGR_REGISTEROBJECT_OFFSET &
31  *!              CMD_MGR_UNREGISTEROBJECT_OFFSET
32  *! 15-Jan-2002 ag  Added actaul bufSize to ARGS_STRM_[RECLAIM][ISSUE].
33  *! 15-Nov-2001 ag  change to STRMINFO in ARGS_STRM_GETINFO.
34  *! 11-Sep-2001 ag  ARGS_CMM_GETHANDLE defn uses DSP_HPROCESSOR.
35  *! 23-Apr-2001 jeh Added pStatus to NODE_TERMINATE args.
36  *! 13-Feb-2001 kc  DSP/BIOS Bridge name updates.
37  *! 22-Nov-2000 kc: Added CMD_MGR_GETPERF_DATA_OFFSET for acquiring PERF stats.
38  *! 27-Oct-2000 jeh Added timeouts to NODE_GETMESSAGE, NODE_PUTMESSAGE args.
39  *!              Removed NODE_GETMESSAGESTRM args.
40  *! 11-Oct-2000 ag: Added SM mgr(CMM) args.
41  *! 27-Sep-2000 jeh Removed struct DSP_BUFFERATTR param from
42  *!                 ARGS_STRM_ALLOCATEBUFFER.
43  *! 25-Sep-2000 rr: Updated to Version 0.9
44  *! 07-Sep-2000 jeh Changed HANDLE to DSP_HNOTIFICATION in RegisterNotify args.
45  *!              Added DSP_STRMATTR to DSPNode_Connect args.
46  *! 04-Aug-2000 rr: MEM and UTIL added to RM.
47  *! 27-Jul-2000 rr: NODE, MGR,STRM and PROC added
48  *! 27-Jun-2000 rr: Modifed to Use either PM or DSP/BIOS Bridge
49  *!              IFDEF to build for PM or DSP/BIOS Bridge
50  *! 28-Jan-2000 rr: NT_CMD_FROM_OFFSET moved out to dsptrap.h
51  *! 24-Jan-2000 rr: Merged with Scott's code.
52  *! 21-Jan-2000 sg: In ARGS_CHNL_GETMODE changed mode to be u32 to be
53  *!              consistent with chnldefs.h.
54  *! 11-Jan-2000 rr: CMD_CFG_GETCDVERSION_OFFSET added.
55  *! 12-Nov-1999 rr: CMD_BRD_MONITOR_OFFSET added
56  *! 09-Nov-1999 kc: Added MEMRY and enabled CMD_BRD_IOCTL_OFFSET.
57  *! 05-Nov-1999 ag: Added CHNL.
58  *! 02-Nov-1999 kc: Removed field from ARGS_UTIL_TESTDLL.
59  *! 29-Oct-1999 kc: Cleaned up for code review.
60  *! 08-Oct-1999 rr: Util control offsets added.
61  *! 13-Sep-1999 kc: Added ARGS_UTIL_TESTDLL for PM test infrastructure.
62  *! 19-Aug-1999 rr: Created from WSX. Minimal Implementaion of BRD_Start and BRD
63  *!              and BRD_Stop. IOCTL Offsets and CTRL Code.
64  */
65
66 #ifndef WCDIOCTL_
67 #define WCDIOCTL_
68
69 #include <dspbridge/mem.h>
70 #include <dspbridge/cmm.h>
71 #include <dspbridge/strmdefs.h>
72 #include <dspbridge/dbdcd.h>
73
74 union Trapped_Args {
75
76         /* MGR Module */
77         struct {
78                 u32 uNode;
79                 struct DSP_NDBPROPS __user *pNDBProps;
80                 u32 uNDBPropsSize;
81                 u32 __user *puNumNodes;
82         } ARGS_MGR_ENUMNODE_INFO;
83
84         struct {
85                 u32 uProcessor;
86                 struct DSP_PROCESSORINFO __user *pProcessorInfo;
87                 u32 uProcessorInfoSize;
88                 u32 __user *puNumProcs;
89         } ARGS_MGR_ENUMPROC_INFO;
90
91         struct {
92                 struct DSP_UUID *pUuid;
93                 enum DSP_DCDOBJTYPE objType;
94                 char *pszPathName;
95         } ARGS_MGR_REGISTEROBJECT;
96
97         struct {
98                 struct DSP_UUID *pUuid;
99                 enum DSP_DCDOBJTYPE objType;
100         } ARGS_MGR_UNREGISTEROBJECT;
101
102         struct {
103                 struct DSP_NOTIFICATION  __user*__user *aNotifications;
104                 u32 uCount;
105                 u32 __user *puIndex;
106                 u32 uTimeout;
107         } ARGS_MGR_WAIT;
108
109         /* PROC Module */
110         struct {
111                 u32 uProcessor;
112                 struct DSP_PROCESSORATTRIN __user *pAttrIn;
113                 DSP_HPROCESSOR __user *phProcessor;
114         } ARGS_PROC_ATTACH;
115
116         struct {
117                 DSP_HPROCESSOR hProcessor;
118                 u32 dwCmd;
119                 struct DSP_CBDATA __user *pArgs;
120         } ARGS_PROC_CTRL;
121
122         struct {
123                 DSP_HPROCESSOR hProcessor;
124         } ARGS_PROC_DETACH;
125
126         struct {
127                 DSP_HPROCESSOR hProcessor;
128                 DSP_HNODE __user *aNodeTab;
129                 u32 uNodeTabSize;
130                 u32 __user *puNumNodes;
131                 u32 __user *puAllocated;
132         } ARGS_PROC_ENUMNODE_INFO;
133
134         struct {
135                 DSP_HPROCESSOR hProcessor;
136                 u32 uResourceType;
137                 struct DSP_RESOURCEINFO *pResourceInfo;
138                 u32 uResourceInfoSize;
139         } ARGS_PROC_ENUMRESOURCES;
140
141         struct {
142                 DSP_HPROCESSOR hProcessor;
143                 struct DSP_PROCESSORSTATE __user *pProcStatus;
144                 u32 uStateInfoSize;
145         } ARGS_PROC_GETSTATE;
146
147         struct {
148                 DSP_HPROCESSOR hProcessor;
149                 u8 __user *pBuf;
150
151         #ifndef RES_CLEANUP_DISABLE
152             u8 __user *pSize;
153     #endif
154                 u32 uMaxSize;
155         } ARGS_PROC_GETTRACE;
156
157         struct {
158                 DSP_HPROCESSOR hProcessor;
159                 s32 iArgc;
160                 char __user*__user *aArgv;
161                 char *__user *aEnvp;
162         } ARGS_PROC_LOAD;
163
164         struct {
165                 DSP_HPROCESSOR hProcessor;
166                 u32 uEventMask;
167                 u32 uNotifyType;
168                 struct DSP_NOTIFICATION __user *hNotification;
169         } ARGS_PROC_REGISTER_NOTIFY;
170
171         struct {
172                 DSP_HPROCESSOR hProcessor;
173         } ARGS_PROC_START;
174
175         struct {
176                 DSP_HPROCESSOR hProcessor;
177                 u32 ulSize;
178                 void *__user *ppRsvAddr;
179         } ARGS_PROC_RSVMEM;
180
181         struct {
182                 DSP_HPROCESSOR hProcessor;
183                 u32 ulSize;
184                 void *pRsvAddr;
185         } ARGS_PROC_UNRSVMEM;
186
187         struct {
188                 DSP_HPROCESSOR hProcessor;
189                 void *pMpuAddr;
190                 u32 ulSize;
191                 void *pReqAddr;
192                 void *__user *ppMapAddr;
193                 u32 ulMapAttr;
194         } ARGS_PROC_MAPMEM;
195
196         struct {
197                 DSP_HPROCESSOR hProcessor;
198                 u32 ulSize;
199                 void *pMapAddr;
200         } ARGS_PROC_UNMAPMEM;
201
202         struct {
203                 DSP_HPROCESSOR hProcessor;
204                 void *pMpuAddr;
205                 u32 ulSize;
206                 u32 ulFlags;
207         } ARGS_PROC_FLUSHMEMORY;
208
209         struct {
210                 DSP_HPROCESSOR hProcessor;
211         } ARGS_PROC_STOP;
212
213         struct {
214                 DSP_HPROCESSOR hProcessor;
215                 void *pMpuAddr;
216                 u32 ulSize;
217         } ARGS_PROC_INVALIDATEMEMORY;
218
219
220         /* NODE Module */
221         struct {
222                 DSP_HPROCESSOR hProcessor;
223                 struct DSP_UUID __user *pNodeID;
224                 struct DSP_CBDATA __user *pArgs;
225                 struct DSP_NODEATTRIN __user *pAttrIn;
226                 DSP_HNODE __user *phNode;
227         } ARGS_NODE_ALLOCATE;
228
229         struct {
230                 DSP_HNODE hNode;
231                 u32 uSize;
232                 struct DSP_BUFFERATTR __user *pAttr;
233                 u8 *__user *pBuffer;
234         } ARGS_NODE_ALLOCMSGBUF;
235
236         struct {
237                 DSP_HNODE hNode;
238                 s32 iPriority;
239         } ARGS_NODE_CHANGEPRIORITY;
240
241         struct {
242                 DSP_HNODE hNode;
243                 u32 uStream;
244                 DSP_HNODE hOtherNode;
245                 u32 uOtherStream;
246                 struct DSP_STRMATTR __user *pAttrs;
247                 struct DSP_CBDATA __user *pConnParam;
248         } ARGS_NODE_CONNECT;
249
250         struct {
251                 DSP_HNODE hNode;
252         } ARGS_NODE_CREATE;
253
254         struct {
255                 DSP_HNODE hNode;
256         } ARGS_NODE_DELETE;
257
258         struct {
259                 DSP_HNODE hNode;
260                 struct DSP_BUFFERATTR __user *pAttr;
261                 u8 *pBuffer;
262         } ARGS_NODE_FREEMSGBUF;
263
264         struct {
265                 DSP_HNODE hNode;
266                 struct DSP_NODEATTR __user *pAttr;
267                 u32 uAttrSize;
268         } ARGS_NODE_GETATTR;
269
270         struct {
271                 DSP_HNODE hNode;
272                 struct DSP_MSG __user *pMessage;
273                 u32 uTimeout;
274         } ARGS_NODE_GETMESSAGE;
275
276         struct {
277                 DSP_HNODE hNode;
278         } ARGS_NODE_PAUSE;
279
280         struct {
281                 DSP_HNODE hNode;
282                 struct DSP_MSG __user *pMessage;
283                 u32 uTimeout;
284         } ARGS_NODE_PUTMESSAGE;
285
286         struct {
287                 DSP_HNODE hNode;
288                 u32 uEventMask;
289                 u32 uNotifyType;
290                 struct DSP_NOTIFICATION __user *hNotification;
291         } ARGS_NODE_REGISTERNOTIFY;
292
293         struct {
294                 DSP_HNODE hNode;
295         } ARGS_NODE_RUN;
296
297         struct {
298                 DSP_HNODE hNode;
299                 DSP_STATUS __user *pStatus;
300         } ARGS_NODE_TERMINATE;
301
302         struct {
303                 DSP_HPROCESSOR hProcessor;
304                 struct DSP_UUID __user *pNodeID;
305                 struct DSP_NDBPROPS __user *pNodeProps;
306         } ARGS_NODE_GETUUIDPROPS;
307
308         /* STRM module */
309
310         struct {
311                 DSP_HSTREAM hStream;
312                 u32 uSize;
313                 u8 *__user *apBuffer;
314                 u32 uNumBufs;
315         } ARGS_STRM_ALLOCATEBUFFER;
316
317         struct {
318                 DSP_HSTREAM hStream;
319         } ARGS_STRM_CLOSE;
320
321         struct {
322                 DSP_HSTREAM hStream;
323                 u8 *__user *apBuffer;
324                 u32 uNumBufs;
325         } ARGS_STRM_FREEBUFFER;
326
327         struct {
328                 DSP_HSTREAM hStream;
329                 HANDLE *phEvent;
330         } ARGS_STRM_GETEVENTHANDLE;
331
332         struct {
333                 DSP_HSTREAM hStream;
334                 struct STRM_INFO __user *pStreamInfo;
335                 u32 uStreamInfoSize;
336         } ARGS_STRM_GETINFO;
337
338         struct {
339                 DSP_HSTREAM hStream;
340                 bool bFlush;
341         } ARGS_STRM_IDLE;
342
343         struct {
344                 DSP_HSTREAM hStream;
345                 u8 *pBuffer;
346                 u32 dwBytes;
347                 u32 dwBufSize;
348                 u32 dwArg;
349         } ARGS_STRM_ISSUE;
350
351         struct {
352                 DSP_HNODE hNode;
353                 u32 uDirection;
354                 u32 uIndex;
355                 struct STRM_ATTR __user *pAttrIn;
356                 DSP_HSTREAM __user *phStream;
357         } ARGS_STRM_OPEN;
358
359         struct {
360                 DSP_HSTREAM hStream;
361                 u8 *__user *pBufPtr;
362                 u32 __user *pBytes;
363                 u32 __user *pBufSize;
364                 u32 __user *pdwArg;
365         } ARGS_STRM_RECLAIM;
366
367         struct {
368                 DSP_HSTREAM hStream;
369                 u32 uEventMask;
370                 u32 uNotifyType;
371                 struct DSP_NOTIFICATION __user *hNotification;
372         } ARGS_STRM_REGISTERNOTIFY;
373
374         struct {
375                 DSP_HSTREAM __user *aStreamTab;
376                 u32 nStreams;
377                 u32 __user *pMask;
378                 u32 uTimeout;
379         } ARGS_STRM_SELECT;
380
381         /* CMM Module */
382         struct {
383                 struct CMM_OBJECT *hCmmMgr;
384                 u32 uSize;
385                 struct CMM_ATTRS *pAttrs;
386                 OUT void **ppBufVA;
387         } ARGS_CMM_ALLOCBUF;
388
389         struct {
390                 struct CMM_OBJECT *hCmmMgr;
391                 void *pBufPA;
392                 u32 ulSegId;
393         } ARGS_CMM_FREEBUF;
394
395         struct {
396                 DSP_HPROCESSOR hProcessor;
397                 struct CMM_OBJECT *__user *phCmmMgr;
398         } ARGS_CMM_GETHANDLE;
399
400         struct {
401                 struct CMM_OBJECT *hCmmMgr;
402                 struct CMM_INFO __user *pCmmInfo;
403         } ARGS_CMM_GETINFO;
404
405         /* MEM Module */
406         struct {
407                 u32 cBytes;
408                 enum MEM_POOLATTRS type;
409                 void *pMem;
410         } ARGS_MEM_ALLOC;
411
412         struct {
413                 u32 cBytes;
414                 enum MEM_POOLATTRS type;
415                 void *pMem;
416         } ARGS_MEM_CALLOC;
417
418         struct {
419                 void *pMem;
420         } ARGS_MEM_FREE;
421
422         struct {
423                 void *pBuffer;
424                 u32 cSize;
425                 void *pLockedBuffer;
426         } ARGS_MEM_PAGELOCK;
427
428         struct {
429                 void *pBuffer;
430                 u32 cSize;
431         } ARGS_MEM_PAGEUNLOCK;
432
433         /* UTIL module */
434         struct {
435                 s32 cArgc;
436                 char **ppArgv;
437         } ARGS_UTIL_TESTDLL;
438 } ;
439
440 #define CMD_BASE                    1
441
442 /* MGR module offsets */
443 #define CMD_MGR_BASE_OFFSET          CMD_BASE
444 #define CMD_MGR_ENUMNODE_INFO_OFFSET    (CMD_MGR_BASE_OFFSET + 0)
445 #define CMD_MGR_ENUMPROC_INFO_OFFSET    (CMD_MGR_BASE_OFFSET + 1)
446 #define CMD_MGR_REGISTEROBJECT_OFFSET   (CMD_MGR_BASE_OFFSET + 2)
447 #define CMD_MGR_UNREGISTEROBJECT_OFFSET (CMD_MGR_BASE_OFFSET + 3)
448 #define CMD_MGR_WAIT_OFFSET          (CMD_MGR_BASE_OFFSET + 4)
449
450 #ifndef RES_CLEANUP_DISABLE
451 #define CMD_MGR_RESOUCES_OFFSET  (CMD_MGR_BASE_OFFSET + 5)
452 #define CMD_MGR_END_OFFSET            CMD_MGR_RESOUCES_OFFSET
453 #else
454 #define CMD_MGR_END_OFFSET            CMD_MGR_WAIT_OFFSET
455 #endif
456
457 #define CMD_PROC_BASE_OFFSET        (CMD_MGR_END_OFFSET + 1)
458 #define CMD_PROC_ATTACH_OFFSET    (CMD_PROC_BASE_OFFSET + 0)
459 #define CMD_PROC_CTRL_OFFSET        (CMD_PROC_BASE_OFFSET + 1)
460 #define CMD_PROC_DETACH_OFFSET    (CMD_PROC_BASE_OFFSET + 2)
461 #define CMD_PROC_ENUMNODE_OFFSET        (CMD_PROC_BASE_OFFSET + 3)
462 #define CMD_PROC_ENUMRESOURCES_OFFSET   (CMD_PROC_BASE_OFFSET + 4)
463 #define CMD_PROC_GETSTATE_OFFSET        (CMD_PROC_BASE_OFFSET + 5)
464 #define CMD_PROC_GETTRACE_OFFSET        (CMD_PROC_BASE_OFFSET + 6)
465 #define CMD_PROC_LOAD_OFFSET        (CMD_PROC_BASE_OFFSET + 7)
466 #define CMD_PROC_REGISTERNOTIFY_OFFSET  (CMD_PROC_BASE_OFFSET + 8)
467 #define CMD_PROC_START_OFFSET      (CMD_PROC_BASE_OFFSET + 9)
468 #define CMD_PROC_RSVMEM_OFFSET    (CMD_PROC_BASE_OFFSET + 10)
469 #define CMD_PROC_UNRSVMEM_OFFSET        (CMD_PROC_BASE_OFFSET + 11)
470 #define CMD_PROC_MAPMEM_OFFSET    (CMD_PROC_BASE_OFFSET + 12)
471 #define CMD_PROC_UNMAPMEM_OFFSET        (CMD_PROC_BASE_OFFSET + 13)
472 #define CMD_PROC_FLUSHMEMORY_OFFSET      (CMD_PROC_BASE_OFFSET + 14)
473 #define CMD_PROC_STOP_OFFSET        (CMD_PROC_BASE_OFFSET + 15)
474 #define CMD_PROC_INVALIDATEMEMORY_OFFSET (CMD_PROC_BASE_OFFSET + 16)
475 #define CMD_PROC_END_OFFSET          CMD_PROC_INVALIDATEMEMORY_OFFSET
476
477
478 #define CMD_NODE_BASE_OFFSET        (CMD_PROC_END_OFFSET + 1)
479 #define CMD_NODE_ALLOCATE_OFFSET        (CMD_NODE_BASE_OFFSET + 0)
480 #define CMD_NODE_ALLOCMSGBUF_OFFSET     (CMD_NODE_BASE_OFFSET + 1)
481 #define CMD_NODE_CHANGEPRIORITY_OFFSET  (CMD_NODE_BASE_OFFSET + 2)
482 #define CMD_NODE_CONNECT_OFFSET  (CMD_NODE_BASE_OFFSET + 3)
483 #define CMD_NODE_CREATE_OFFSET    (CMD_NODE_BASE_OFFSET + 4)
484 #define CMD_NODE_DELETE_OFFSET    (CMD_NODE_BASE_OFFSET + 5)
485 #define CMD_NODE_FREEMSGBUF_OFFSET      (CMD_NODE_BASE_OFFSET + 6)
486 #define CMD_NODE_GETATTR_OFFSET  (CMD_NODE_BASE_OFFSET + 7)
487 #define CMD_NODE_GETMESSAGE_OFFSET      (CMD_NODE_BASE_OFFSET + 8)
488 #define CMD_NODE_PAUSE_OFFSET      (CMD_NODE_BASE_OFFSET + 9)
489 #define CMD_NODE_PUTMESSAGE_OFFSET      (CMD_NODE_BASE_OFFSET + 10)
490 #define CMD_NODE_REGISTERNOTIFY_OFFSET  (CMD_NODE_BASE_OFFSET + 11)
491 #define CMD_NODE_RUN_OFFSET          (CMD_NODE_BASE_OFFSET + 12)
492 #define CMD_NODE_TERMINATE_OFFSET       (CMD_NODE_BASE_OFFSET + 13)
493 #define CMD_NODE_GETUUIDPROPS_OFFSET    (CMD_NODE_BASE_OFFSET + 14)
494 #define CMD_NODE_END_OFFSET          CMD_NODE_GETUUIDPROPS_OFFSET
495
496 #define CMD_STRM_BASE_OFFSET        (CMD_NODE_END_OFFSET + 1)
497 #define CMD_STRM_ALLOCATEBUFFER_OFFSET  (CMD_STRM_BASE_OFFSET + 0)
498 #define CMD_STRM_CLOSE_OFFSET      (CMD_STRM_BASE_OFFSET + 1)
499 #define CMD_STRM_FREEBUFFER_OFFSET      (CMD_STRM_BASE_OFFSET + 2)
500 #define CMD_STRM_GETEVENTHANDLE_OFFSET  (CMD_STRM_BASE_OFFSET + 3)
501 #define CMD_STRM_GETINFO_OFFSET  (CMD_STRM_BASE_OFFSET + 4)
502 #define CMD_STRM_IDLE_OFFSET        (CMD_STRM_BASE_OFFSET + 5)
503 #define CMD_STRM_ISSUE_OFFSET      (CMD_STRM_BASE_OFFSET + 6)
504 #define CMD_STRM_OPEN_OFFSET        (CMD_STRM_BASE_OFFSET + 7)
505 #define CMD_STRM_RECLAIM_OFFSET  (CMD_STRM_BASE_OFFSET + 8)
506 #define CMD_STRM_REGISTERNOTIFY_OFFSET  (CMD_STRM_BASE_OFFSET + 9)
507 #define CMD_STRM_SELECT_OFFSET    (CMD_STRM_BASE_OFFSET + 10)
508 #define CMD_STRM_END_OFFSET          CMD_STRM_SELECT_OFFSET
509
510 /* Communication Memory Manager (UCMM) */
511 #define CMD_CMM_BASE_OFFSET          (CMD_STRM_END_OFFSET + 1)
512 #define CMD_CMM_ALLOCBUF_OFFSET  (CMD_CMM_BASE_OFFSET + 0)
513 #define CMD_CMM_FREEBUF_OFFSET    (CMD_CMM_BASE_OFFSET + 1)
514 #define CMD_CMM_GETHANDLE_OFFSET        (CMD_CMM_BASE_OFFSET + 2)
515 #define CMD_CMM_GETINFO_OFFSET    (CMD_CMM_BASE_OFFSET + 3)
516 #define CMD_CMM_END_OFFSET            CMD_CMM_GETINFO_OFFSET
517
518 #define CMD_BASE_END_OFFSET     CMD_CMM_END_OFFSET
519 #endif                          /* WCDIOCTL_ */