Maemo patchset 20101501+0m5
[h-e-n] / arch / arm / plat-omap / include / dspbridge / wcdioctl.h
diff --git a/arch/arm/plat-omap/include/dspbridge/wcdioctl.h b/arch/arm/plat-omap/include/dspbridge/wcdioctl.h
new file mode 100644 (file)
index 0000000..04b13ab
--- /dev/null
@@ -0,0 +1,519 @@
+/*
+ * wcdioctl.h
+ *
+ * DSP-BIOS Bridge driver support functions for TI OMAP processors.
+ *
+ * Copyright (C) 2008 Texas Instruments, Inc.
+ *
+ * This package is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+
+/*
+ *  ======== wcdioctl.h ========
+ *  Purpose:
+ *      Contains structures and commands that are used for interaction
+ *      between the DDSP API and class driver.
+ *
+ *! Revision History
+ *! ================
+ *! 19-Apr-2004 sb  Aligned DMM definitions with Symbian
+ *! 08-Mar-2004 sb  Added the Dynamic Memory Mapping structs & offsets
+ *! 15-Oct-2002 kc  Updated definitions for private PERF module.
+ *! 16-Aug-2002 map Added ARGS_MGR_REGISTEROBJECT & ARGS_MGR_UNREGISTEROBJECT
+ *!             Added CMD_MGR_REGISTEROBJECT_OFFSET &
+ *!             CMD_MGR_UNREGISTEROBJECT_OFFSET
+ *! 15-Jan-2002 ag  Added actaul bufSize to ARGS_STRM_[RECLAIM][ISSUE].
+ *! 15-Nov-2001 ag  change to STRMINFO in ARGS_STRM_GETINFO.
+ *! 11-Sep-2001 ag  ARGS_CMM_GETHANDLE defn uses DSP_HPROCESSOR.
+ *! 23-Apr-2001 jeh Added pStatus to NODE_TERMINATE args.
+ *! 13-Feb-2001 kc  DSP/BIOS Bridge name updates.
+ *! 22-Nov-2000 kc: Added CMD_MGR_GETPERF_DATA_OFFSET for acquiring PERF stats.
+ *! 27-Oct-2000 jeh Added timeouts to NODE_GETMESSAGE, NODE_PUTMESSAGE args.
+ *!             Removed NODE_GETMESSAGESTRM args.
+ *! 11-Oct-2000 ag: Added SM mgr(CMM) args.
+ *! 27-Sep-2000 jeh Removed struct DSP_BUFFERATTR param from
+ *!                ARGS_STRM_ALLOCATEBUFFER.
+ *! 25-Sep-2000 rr: Updated to Version 0.9
+ *! 07-Sep-2000 jeh Changed HANDLE to DSP_HNOTIFICATION in RegisterNotify args.
+ *!             Added DSP_STRMATTR to DSPNode_Connect args.
+ *! 04-Aug-2000 rr: MEM and UTIL added to RM.
+ *! 27-Jul-2000 rr: NODE, MGR,STRM and PROC added
+ *! 27-Jun-2000 rr: Modifed to Use either PM or DSP/BIOS Bridge
+ *!             IFDEF to build for PM or DSP/BIOS Bridge
+ *! 28-Jan-2000 rr: NT_CMD_FROM_OFFSET moved out to dsptrap.h
+ *! 24-Jan-2000 rr: Merged with Scott's code.
+ *! 21-Jan-2000 sg: In ARGS_CHNL_GETMODE changed mode to be u32 to be
+ *!             consistent with chnldefs.h.
+ *! 11-Jan-2000 rr: CMD_CFG_GETCDVERSION_OFFSET added.
+ *! 12-Nov-1999 rr: CMD_BRD_MONITOR_OFFSET added
+ *! 09-Nov-1999 kc: Added MEMRY and enabled CMD_BRD_IOCTL_OFFSET.
+ *! 05-Nov-1999 ag: Added CHNL.
+ *! 02-Nov-1999 kc: Removed field from ARGS_UTIL_TESTDLL.
+ *! 29-Oct-1999 kc: Cleaned up for code review.
+ *! 08-Oct-1999 rr: Util control offsets added.
+ *! 13-Sep-1999 kc: Added ARGS_UTIL_TESTDLL for PM test infrastructure.
+ *! 19-Aug-1999 rr: Created from WSX. Minimal Implementaion of BRD_Start and BRD
+ *!             and BRD_Stop. IOCTL Offsets and CTRL Code.
+ */
+
+#ifndef WCDIOCTL_
+#define WCDIOCTL_
+
+#include <dspbridge/mem.h>
+#include <dspbridge/cmm.h>
+#include <dspbridge/strmdefs.h>
+#include <dspbridge/dbdcd.h>
+
+union Trapped_Args {
+
+       /* MGR Module */
+       struct {
+               u32 uNode;
+               struct DSP_NDBPROPS __user *pNDBProps;
+               u32 uNDBPropsSize;
+               u32 __user *puNumNodes;
+       } ARGS_MGR_ENUMNODE_INFO;
+
+       struct {
+               u32 uProcessor;
+               struct DSP_PROCESSORINFO __user *pProcessorInfo;
+               u32 uProcessorInfoSize;
+               u32 __user *puNumProcs;
+       } ARGS_MGR_ENUMPROC_INFO;
+
+       struct {
+               struct DSP_UUID *pUuid;
+               enum DSP_DCDOBJTYPE objType;
+               char *pszPathName;
+       } ARGS_MGR_REGISTEROBJECT;
+
+       struct {
+               struct DSP_UUID *pUuid;
+               enum DSP_DCDOBJTYPE objType;
+       } ARGS_MGR_UNREGISTEROBJECT;
+
+       struct {
+               struct DSP_NOTIFICATION  __user*__user *aNotifications;
+               u32 uCount;
+               u32 __user *puIndex;
+               u32 uTimeout;
+       } ARGS_MGR_WAIT;
+
+       /* PROC Module */
+       struct {
+               u32 uProcessor;
+               struct DSP_PROCESSORATTRIN __user *pAttrIn;
+               DSP_HPROCESSOR __user *phProcessor;
+       } ARGS_PROC_ATTACH;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               u32 dwCmd;
+               struct DSP_CBDATA __user *pArgs;
+       } ARGS_PROC_CTRL;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+       } ARGS_PROC_DETACH;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               DSP_HNODE __user *aNodeTab;
+               u32 uNodeTabSize;
+               u32 __user *puNumNodes;
+               u32 __user *puAllocated;
+       } ARGS_PROC_ENUMNODE_INFO;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               u32 uResourceType;
+               struct DSP_RESOURCEINFO *pResourceInfo;
+               u32 uResourceInfoSize;
+       } ARGS_PROC_ENUMRESOURCES;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               struct DSP_PROCESSORSTATE __user *pProcStatus;
+               u32 uStateInfoSize;
+       } ARGS_PROC_GETSTATE;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               u8 __user *pBuf;
+
+       #ifndef RES_CLEANUP_DISABLE
+           u8 __user *pSize;
+    #endif
+               u32 uMaxSize;
+       } ARGS_PROC_GETTRACE;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               s32 iArgc;
+               char __user*__user *aArgv;
+               char *__user *aEnvp;
+       } ARGS_PROC_LOAD;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               u32 uEventMask;
+               u32 uNotifyType;
+               struct DSP_NOTIFICATION __user *hNotification;
+       } ARGS_PROC_REGISTER_NOTIFY;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+       } ARGS_PROC_START;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               u32 ulSize;
+               void *__user *ppRsvAddr;
+       } ARGS_PROC_RSVMEM;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               u32 ulSize;
+               void *pRsvAddr;
+       } ARGS_PROC_UNRSVMEM;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               void *pMpuAddr;
+               u32 ulSize;
+               void *pReqAddr;
+               void *__user *ppMapAddr;
+               u32 ulMapAttr;
+       } ARGS_PROC_MAPMEM;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               u32 ulSize;
+               void *pMapAddr;
+       } ARGS_PROC_UNMAPMEM;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               void *pMpuAddr;
+               u32 ulSize;
+               u32 ulFlags;
+       } ARGS_PROC_FLUSHMEMORY;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+       } ARGS_PROC_STOP;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               void *pMpuAddr;
+               u32 ulSize;
+       } ARGS_PROC_INVALIDATEMEMORY;
+
+
+       /* NODE Module */
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               struct DSP_UUID __user *pNodeID;
+               struct DSP_CBDATA __user *pArgs;
+               struct DSP_NODEATTRIN __user *pAttrIn;
+               DSP_HNODE __user *phNode;
+       } ARGS_NODE_ALLOCATE;
+
+       struct {
+               DSP_HNODE hNode;
+               u32 uSize;
+               struct DSP_BUFFERATTR __user *pAttr;
+               u8 *__user *pBuffer;
+       } ARGS_NODE_ALLOCMSGBUF;
+
+       struct {
+               DSP_HNODE hNode;
+               s32 iPriority;
+       } ARGS_NODE_CHANGEPRIORITY;
+
+       struct {
+               DSP_HNODE hNode;
+               u32 uStream;
+               DSP_HNODE hOtherNode;
+               u32 uOtherStream;
+               struct DSP_STRMATTR __user *pAttrs;
+               struct DSP_CBDATA __user *pConnParam;
+       } ARGS_NODE_CONNECT;
+
+       struct {
+               DSP_HNODE hNode;
+       } ARGS_NODE_CREATE;
+
+       struct {
+               DSP_HNODE hNode;
+       } ARGS_NODE_DELETE;
+
+       struct {
+               DSP_HNODE hNode;
+               struct DSP_BUFFERATTR __user *pAttr;
+               u8 *pBuffer;
+       } ARGS_NODE_FREEMSGBUF;
+
+       struct {
+               DSP_HNODE hNode;
+               struct DSP_NODEATTR __user *pAttr;
+               u32 uAttrSize;
+       } ARGS_NODE_GETATTR;
+
+       struct {
+               DSP_HNODE hNode;
+               struct DSP_MSG __user *pMessage;
+               u32 uTimeout;
+       } ARGS_NODE_GETMESSAGE;
+
+       struct {
+               DSP_HNODE hNode;
+       } ARGS_NODE_PAUSE;
+
+       struct {
+               DSP_HNODE hNode;
+               struct DSP_MSG __user *pMessage;
+               u32 uTimeout;
+       } ARGS_NODE_PUTMESSAGE;
+
+       struct {
+               DSP_HNODE hNode;
+               u32 uEventMask;
+               u32 uNotifyType;
+               struct DSP_NOTIFICATION __user *hNotification;
+       } ARGS_NODE_REGISTERNOTIFY;
+
+       struct {
+               DSP_HNODE hNode;
+       } ARGS_NODE_RUN;
+
+       struct {
+               DSP_HNODE hNode;
+               DSP_STATUS __user *pStatus;
+       } ARGS_NODE_TERMINATE;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               struct DSP_UUID __user *pNodeID;
+               struct DSP_NDBPROPS __user *pNodeProps;
+       } ARGS_NODE_GETUUIDPROPS;
+
+       /* STRM module */
+
+       struct {
+               DSP_HSTREAM hStream;
+               u32 uSize;
+               u8 *__user *apBuffer;
+               u32 uNumBufs;
+       } ARGS_STRM_ALLOCATEBUFFER;
+
+       struct {
+               DSP_HSTREAM hStream;
+       } ARGS_STRM_CLOSE;
+
+       struct {
+               DSP_HSTREAM hStream;
+               u8 *__user *apBuffer;
+               u32 uNumBufs;
+       } ARGS_STRM_FREEBUFFER;
+
+       struct {
+               DSP_HSTREAM hStream;
+               HANDLE *phEvent;
+       } ARGS_STRM_GETEVENTHANDLE;
+
+       struct {
+               DSP_HSTREAM hStream;
+               struct STRM_INFO __user *pStreamInfo;
+               u32 uStreamInfoSize;
+       } ARGS_STRM_GETINFO;
+
+       struct {
+               DSP_HSTREAM hStream;
+               bool bFlush;
+       } ARGS_STRM_IDLE;
+
+       struct {
+               DSP_HSTREAM hStream;
+               u8 *pBuffer;
+               u32 dwBytes;
+               u32 dwBufSize;
+               u32 dwArg;
+       } ARGS_STRM_ISSUE;
+
+       struct {
+               DSP_HNODE hNode;
+               u32 uDirection;
+               u32 uIndex;
+               struct STRM_ATTR __user *pAttrIn;
+               DSP_HSTREAM __user *phStream;
+       } ARGS_STRM_OPEN;
+
+       struct {
+               DSP_HSTREAM hStream;
+               u8 *__user *pBufPtr;
+               u32 __user *pBytes;
+               u32 __user *pBufSize;
+               u32 __user *pdwArg;
+       } ARGS_STRM_RECLAIM;
+
+       struct {
+               DSP_HSTREAM hStream;
+               u32 uEventMask;
+               u32 uNotifyType;
+               struct DSP_NOTIFICATION __user *hNotification;
+       } ARGS_STRM_REGISTERNOTIFY;
+
+       struct {
+               DSP_HSTREAM __user *aStreamTab;
+               u32 nStreams;
+               u32 __user *pMask;
+               u32 uTimeout;
+       } ARGS_STRM_SELECT;
+
+       /* CMM Module */
+       struct {
+               struct CMM_OBJECT *hCmmMgr;
+               u32 uSize;
+               struct CMM_ATTRS *pAttrs;
+               OUT void **ppBufVA;
+       } ARGS_CMM_ALLOCBUF;
+
+       struct {
+               struct CMM_OBJECT *hCmmMgr;
+               void *pBufPA;
+               u32 ulSegId;
+       } ARGS_CMM_FREEBUF;
+
+       struct {
+               DSP_HPROCESSOR hProcessor;
+               struct CMM_OBJECT *__user *phCmmMgr;
+       } ARGS_CMM_GETHANDLE;
+
+       struct {
+               struct CMM_OBJECT *hCmmMgr;
+               struct CMM_INFO __user *pCmmInfo;
+       } ARGS_CMM_GETINFO;
+
+       /* MEM Module */
+       struct {
+               u32 cBytes;
+               enum MEM_POOLATTRS type;
+               void *pMem;
+       } ARGS_MEM_ALLOC;
+
+       struct {
+               u32 cBytes;
+               enum MEM_POOLATTRS type;
+               void *pMem;
+       } ARGS_MEM_CALLOC;
+
+       struct {
+               void *pMem;
+       } ARGS_MEM_FREE;
+
+       struct {
+               void *pBuffer;
+               u32 cSize;
+               void *pLockedBuffer;
+       } ARGS_MEM_PAGELOCK;
+
+       struct {
+               void *pBuffer;
+               u32 cSize;
+       } ARGS_MEM_PAGEUNLOCK;
+
+       /* UTIL module */
+       struct {
+               s32 cArgc;
+               char **ppArgv;
+       } ARGS_UTIL_TESTDLL;
+} ;
+
+#define CMD_BASE                   1
+
+/* MGR module offsets */
+#define CMD_MGR_BASE_OFFSET         CMD_BASE
+#define CMD_MGR_ENUMNODE_INFO_OFFSET    (CMD_MGR_BASE_OFFSET + 0)
+#define CMD_MGR_ENUMPROC_INFO_OFFSET    (CMD_MGR_BASE_OFFSET + 1)
+#define CMD_MGR_REGISTEROBJECT_OFFSET   (CMD_MGR_BASE_OFFSET + 2)
+#define CMD_MGR_UNREGISTEROBJECT_OFFSET (CMD_MGR_BASE_OFFSET + 3)
+#define CMD_MGR_WAIT_OFFSET         (CMD_MGR_BASE_OFFSET + 4)
+
+#ifndef RES_CLEANUP_DISABLE
+#define CMD_MGR_RESOUCES_OFFSET         (CMD_MGR_BASE_OFFSET + 5)
+#define CMD_MGR_END_OFFSET           CMD_MGR_RESOUCES_OFFSET
+#else
+#define CMD_MGR_END_OFFSET           CMD_MGR_WAIT_OFFSET
+#endif
+
+#define CMD_PROC_BASE_OFFSET       (CMD_MGR_END_OFFSET + 1)
+#define CMD_PROC_ATTACH_OFFSET   (CMD_PROC_BASE_OFFSET + 0)
+#define CMD_PROC_CTRL_OFFSET       (CMD_PROC_BASE_OFFSET + 1)
+#define CMD_PROC_DETACH_OFFSET   (CMD_PROC_BASE_OFFSET + 2)
+#define CMD_PROC_ENUMNODE_OFFSET       (CMD_PROC_BASE_OFFSET + 3)
+#define CMD_PROC_ENUMRESOURCES_OFFSET   (CMD_PROC_BASE_OFFSET + 4)
+#define CMD_PROC_GETSTATE_OFFSET       (CMD_PROC_BASE_OFFSET + 5)
+#define CMD_PROC_GETTRACE_OFFSET       (CMD_PROC_BASE_OFFSET + 6)
+#define CMD_PROC_LOAD_OFFSET       (CMD_PROC_BASE_OFFSET + 7)
+#define CMD_PROC_REGISTERNOTIFY_OFFSET  (CMD_PROC_BASE_OFFSET + 8)
+#define CMD_PROC_START_OFFSET     (CMD_PROC_BASE_OFFSET + 9)
+#define CMD_PROC_RSVMEM_OFFSET   (CMD_PROC_BASE_OFFSET + 10)
+#define CMD_PROC_UNRSVMEM_OFFSET       (CMD_PROC_BASE_OFFSET + 11)
+#define CMD_PROC_MAPMEM_OFFSET   (CMD_PROC_BASE_OFFSET + 12)
+#define CMD_PROC_UNMAPMEM_OFFSET       (CMD_PROC_BASE_OFFSET + 13)
+#define CMD_PROC_FLUSHMEMORY_OFFSET      (CMD_PROC_BASE_OFFSET + 14)
+#define CMD_PROC_STOP_OFFSET       (CMD_PROC_BASE_OFFSET + 15)
+#define CMD_PROC_INVALIDATEMEMORY_OFFSET (CMD_PROC_BASE_OFFSET + 16)
+#define CMD_PROC_END_OFFSET         CMD_PROC_INVALIDATEMEMORY_OFFSET
+
+
+#define CMD_NODE_BASE_OFFSET       (CMD_PROC_END_OFFSET + 1)
+#define CMD_NODE_ALLOCATE_OFFSET       (CMD_NODE_BASE_OFFSET + 0)
+#define CMD_NODE_ALLOCMSGBUF_OFFSET     (CMD_NODE_BASE_OFFSET + 1)
+#define CMD_NODE_CHANGEPRIORITY_OFFSET  (CMD_NODE_BASE_OFFSET + 2)
+#define CMD_NODE_CONNECT_OFFSET         (CMD_NODE_BASE_OFFSET + 3)
+#define CMD_NODE_CREATE_OFFSET   (CMD_NODE_BASE_OFFSET + 4)
+#define CMD_NODE_DELETE_OFFSET   (CMD_NODE_BASE_OFFSET + 5)
+#define CMD_NODE_FREEMSGBUF_OFFSET      (CMD_NODE_BASE_OFFSET + 6)
+#define CMD_NODE_GETATTR_OFFSET         (CMD_NODE_BASE_OFFSET + 7)
+#define CMD_NODE_GETMESSAGE_OFFSET      (CMD_NODE_BASE_OFFSET + 8)
+#define CMD_NODE_PAUSE_OFFSET     (CMD_NODE_BASE_OFFSET + 9)
+#define CMD_NODE_PUTMESSAGE_OFFSET      (CMD_NODE_BASE_OFFSET + 10)
+#define CMD_NODE_REGISTERNOTIFY_OFFSET  (CMD_NODE_BASE_OFFSET + 11)
+#define CMD_NODE_RUN_OFFSET         (CMD_NODE_BASE_OFFSET + 12)
+#define CMD_NODE_TERMINATE_OFFSET       (CMD_NODE_BASE_OFFSET + 13)
+#define CMD_NODE_GETUUIDPROPS_OFFSET    (CMD_NODE_BASE_OFFSET + 14)
+#define CMD_NODE_END_OFFSET         CMD_NODE_GETUUIDPROPS_OFFSET
+
+#define CMD_STRM_BASE_OFFSET       (CMD_NODE_END_OFFSET + 1)
+#define CMD_STRM_ALLOCATEBUFFER_OFFSET  (CMD_STRM_BASE_OFFSET + 0)
+#define CMD_STRM_CLOSE_OFFSET     (CMD_STRM_BASE_OFFSET + 1)
+#define CMD_STRM_FREEBUFFER_OFFSET      (CMD_STRM_BASE_OFFSET + 2)
+#define CMD_STRM_GETEVENTHANDLE_OFFSET  (CMD_STRM_BASE_OFFSET + 3)
+#define CMD_STRM_GETINFO_OFFSET         (CMD_STRM_BASE_OFFSET + 4)
+#define CMD_STRM_IDLE_OFFSET       (CMD_STRM_BASE_OFFSET + 5)
+#define CMD_STRM_ISSUE_OFFSET     (CMD_STRM_BASE_OFFSET + 6)
+#define CMD_STRM_OPEN_OFFSET       (CMD_STRM_BASE_OFFSET + 7)
+#define CMD_STRM_RECLAIM_OFFSET         (CMD_STRM_BASE_OFFSET + 8)
+#define CMD_STRM_REGISTERNOTIFY_OFFSET  (CMD_STRM_BASE_OFFSET + 9)
+#define CMD_STRM_SELECT_OFFSET   (CMD_STRM_BASE_OFFSET + 10)
+#define CMD_STRM_END_OFFSET         CMD_STRM_SELECT_OFFSET
+
+/* Communication Memory Manager (UCMM) */
+#define CMD_CMM_BASE_OFFSET         (CMD_STRM_END_OFFSET + 1)
+#define CMD_CMM_ALLOCBUF_OFFSET         (CMD_CMM_BASE_OFFSET + 0)
+#define CMD_CMM_FREEBUF_OFFSET   (CMD_CMM_BASE_OFFSET + 1)
+#define CMD_CMM_GETHANDLE_OFFSET       (CMD_CMM_BASE_OFFSET + 2)
+#define CMD_CMM_GETINFO_OFFSET   (CMD_CMM_BASE_OFFSET + 3)
+#define CMD_CMM_END_OFFSET           CMD_CMM_GETINFO_OFFSET
+
+#define CMD_BASE_END_OFFSET    CMD_CMM_END_OFFSET
+#endif                         /* WCDIOCTL_ */