/*
* Copyright 2001-2008 Texas Instruments - http://www.ti.com/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* ======== wcdioctl.h ========
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
* 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 ULONG 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 <mem.h>
#include <cmm.h>
#include <strmdefs.h>
#include <dbdcd.h>
typedef union {
/* MGR Module */
struct {
UINT uNode;
struct DSP_NDBPROPS *pNDBProps;
UINT uNDBPropsSize;
UINT *puNumNodes;
} ARGS_MGR_ENUMNODE_INFO;
struct {
UINT uProcessor;
struct DSP_PROCESSORINFO *pProcessorInfo;
UINT uProcessorInfoSize;
UINT *puNumProcs;
} ARGS_MGR_ENUMPROC_INFO;
struct {
struct DSP_UUID *pUuid;
DSP_DCDOBJTYPE objType;
CHAR *pszPathName;
} ARGS_MGR_REGISTEROBJECT;
struct {
struct DSP_UUID *pUuid;
DSP_DCDOBJTYPE objType;
} ARGS_MGR_UNREGISTEROBJECT;
struct {
struct DSP_NOTIFICATION* *aNotifications;
UINT uCount;
UINT *puIndex;
UINT uTimeout;
} ARGS_MGR_WAIT;
/* PROC Module */
struct {
UINT uProcessor;
struct DSP_PROCESSORATTRIN *pAttrIn;
DSP_HPROCESSOR *phProcessor;
} ARGS_PROC_ATTACH;
struct {
DSP_HPROCESSOR hProcessor;
ULONG dwCmd;
struct DSP_CBDATA *pArgs;
} ARGS_PROC_CTRL;
struct {
DSP_HPROCESSOR hProcessor;
} ARGS_PROC_DETACH;
struct {
DSP_HPROCESSOR hProcessor;
DSP_HNODE *aNodeTab;
UINT uNodeTabSize;
UINT *puNumNodes;
UINT *puAllocated;
} ARGS_PROC_ENUMNODE_INFO;
struct {
DSP_HPROCESSOR hProcessor;
UINT uResourceType;
struct DSP_RESOURCEINFO *pResourceInfo;
UINT uResourceInfoSize;
} ARGS_PROC_ENUMRESOURCES;
struct {
DSP_HPROCESSOR hProcessor;
struct DSP_PROCESSORSTATE *pProcStatus;
UINT uStateInfoSize;
} ARGS_PROC_GETSTATE;
struct {
DSP_HPROCESSOR hProcessor;
BYTE *pBuf;
#ifndef RES_CLEANUP_DISABLE
BYTE * pSize;
#endif
UINT uMaxSize;
} ARGS_PROC_GETTRACE;
struct {
DSP_HPROCESSOR hProcessor;
INT iArgc;
CHAR **aArgv;
CHAR **aEnvp;
} ARGS_PROC_LOAD;
struct {
DSP_HPROCESSOR hProcessor;
UINT uEventMask;
UINT uNotifyType;
struct DSP_NOTIFICATION* hNotification;
} ARGS_PROC_REGISTER_NOTIFY;
struct {
DSP_HPROCESSOR hProcessor;
} ARGS_PROC_START;
struct {
DSP_HPROCESSOR hProcessor;
ULONG ulSize;
PVOID *ppRsvAddr;
} ARGS_PROC_RSVMEM;
struct {
DSP_HPROCESSOR hProcessor;
ULONG ulSize;
PVOID pRsvAddr;
} ARGS_PROC_UNRSVMEM;
struct {
DSP_HPROCESSOR hProcessor;
PVOID pMpuAddr;
ULONG ulSize;
PVOID pReqAddr;
PVOID *ppMapAddr;
ULONG ulMapAttr;
} ARGS_PROC_MAPMEM;
struct {
DSP_HPROCESSOR hProcessor;
ULONG ulSize;
PVOID pMapAddr;
} ARGS_PROC_UNMAPMEM;
struct {
DSP_HPROCESSOR hProcessor;
PVOID pMpuAddr;
ULONG ulSize;
ULONG ulFlags;
} ARGS_PROC_FLUSHMEMORY;
struct {
DSP_HPROCESSOR hProcessor;
} ARGS_PROC_STOP;
struct {
DSP_HPROCESSOR hProcessor;
PVOID pMpuAddr;
ULONG ulSize;
} ARGS_PROC_INVALIDATEMEMORY;
/* NODE Module */
struct {
DSP_HPROCESSOR hProcessor;
struct DSP_UUID *pNodeID;
struct DSP_CBDATA *pArgs;
struct DSP_NODEATTRIN *pAttrIn;
DSP_HNODE *phNode;
} ARGS_NODE_ALLOCATE;
struct {
DSP_HNODE hNode;
UINT uSize;
struct DSP_BUFFERATTR *pAttr;
BYTE **pBuffer;
} ARGS_NODE_ALLOCMSGBUF;
struct {
DSP_HNODE hNode;
INT iPriority;
} ARGS_NODE_CHANGEPRIORITY;
struct {
DSP_HNODE hNode;
UINT uStream;
DSP_HNODE hOtherNode;
UINT uOtherStream;
struct DSP_STRMATTR *pAttrs;
struct DSP_CBDATA *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 *pAttr;
BYTE *pBuffer;
} ARGS_NODE_FREEMSGBUF;
struct {
DSP_HNODE hNode;
struct DSP_NODEATTR *pAttr;
UINT uAttrSize;
} ARGS_NODE_GETATTR;
struct {
DSP_HNODE hNode;
struct DSP_MSG *pMessage;
UINT uTimeout;
} ARGS_NODE_GETMESSAGE;
struct {
DSP_HNODE hNode;
} ARGS_NODE_PAUSE;
struct {
DSP_HNODE hNode;
struct DSP_MSG *pMessage;
UINT uTimeout;
} ARGS_NODE_PUTMESSAGE;
struct {
DSP_HNODE hNode;
UINT uEventMask;
UINT uNotifyType;
struct DSP_NOTIFICATION* hNotification;
} ARGS_NODE_REGISTERNOTIFY;
struct {
DSP_HNODE hNode;
} ARGS_NODE_RUN;
struct {
DSP_HNODE hNode;
DSP_STATUS *pStatus;
} ARGS_NODE_TERMINATE;
struct {
DSP_HPROCESSOR hProcessor;
struct DSP_UUID *pNodeID;
struct DSP_NDBPROPS *pNodeProps;
} ARGS_NODE_GETUUIDPROPS;
/* STRM module */
struct {
DSP_HSTREAM hStream;
UINT uSize;
BYTE **apBuffer;
UINT uNumBufs;
} ARGS_STRM_ALLOCATEBUFFER;
struct {
DSP_HSTREAM hStream;
} ARGS_STRM_CLOSE;
struct {
DSP_HSTREAM hStream;
BYTE **apBuffer;
UINT uNumBufs;
} ARGS_STRM_FREEBUFFER;
struct {
DSP_HSTREAM hStream;
HANDLE *phEvent;
} ARGS_STRM_GETEVENTHANDLE;
struct {
DSP_HSTREAM hStream;
struct STRM_INFO *pStreamInfo;
UINT uStreamInfoSize;
} ARGS_STRM_GETINFO;
struct {
DSP_HSTREAM hStream;
bool bFlush;
} ARGS_STRM_IDLE;
struct {
DSP_HSTREAM hStream;
BYTE *pBuffer;
ULONG dwBytes;
ULONG dwBufSize;
DWORD dwArg;
} ARGS_STRM_ISSUE;
struct {
DSP_HNODE hNode;
UINT uDirection;
UINT uIndex;
struct STRM_ATTR *pAttrIn;
DSP_HSTREAM *phStream;
} ARGS_STRM_OPEN;
struct {
DSP_HSTREAM hStream;
BYTE **pBufPtr;
ULONG *pBytes;
ULONG *pBufSize;
DWORD *pdwArg;
} ARGS_STRM_RECLAIM;
struct {
DSP_HSTREAM hStream;
UINT uEventMask;
UINT uNotifyType;
struct DSP_NOTIFICATION* hNotification;
} ARGS_STRM_REGISTERNOTIFY;
struct {
DSP_HSTREAM *aStreamTab;
UINT nStreams;
UINT *pMask;
UINT uTimeout;
} ARGS_STRM_SELECT;
/* CMM Module */
struct {
struct CMM_OBJECT* hCmmMgr;
UINT uSize;
struct CMM_ATTRS *pAttrs;
OUT PVOID *ppBufVA;
} ARGS_CMM_ALLOCBUF;
struct {
struct CMM_OBJECT* hCmmMgr;
PVOID pBufPA;
ULONG ulSegId;
} ARGS_CMM_FREEBUF;
struct {
DSP_HPROCESSOR hProcessor;
struct CMM_OBJECT* *phCmmMgr;
} ARGS_CMM_GETHANDLE;
struct {
struct CMM_OBJECT* hCmmMgr;
struct CMM_INFO *pCmmInfo;
} ARGS_CMM_GETINFO;
/* MEM Module */
struct {
ULONG cBytes;
MEM_POOLATTRS type;
PVOID pMem;
} ARGS_MEM_ALLOC;
struct {
ULONG cBytes;
MEM_POOLATTRS type;
PVOID pMem;
} ARGS_MEM_CALLOC;
struct {
PVOID pMem;
} ARGS_MEM_FREE;
struct {
PVOID pBuffer;
ULONG cSize;
PVOID pLockedBuffer;
} ARGS_MEM_PAGELOCK;
struct {
PVOID pBuffer;
ULONG cSize;
} ARGS_MEM_PAGEUNLOCK;
/* UTIL module */
struct {
INT cArgc;
CHAR **ppArgv;
} ARGS_UTIL_TESTDLL;
} Trapped_Args;
#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
/* MEMRY module offsets */
#define CMD_MEM_BASE_OFFSET (CMD_CMM_END_OFFSET + 1)
#define CMD_MEM_ALLOC_OFFSET (CMD_MEM_BASE_OFFSET + 0)
#define CMD_MEM_CALLOC_OFFSET (CMD_MEM_BASE_OFFSET + 1)
#define CMD_MEM_FREE_OFFSET (CMD_MEM_BASE_OFFSET + 2)
#define CMD_MEM_PAGELOCK_OFFSET (CMD_MEM_BASE_OFFSET + 3)
#define CMD_MEM_PAGEUNLOCK_OFFSET (CMD_MEM_BASE_OFFSET + 4)
#define CMD_MEM_END_OFFSET CMD_MEM_PAGEUNLOCK_OFFSET
/* UTIL module */
#define CMD_UTIL_BASE_OFFSET (CMD_MEM_END_OFFSET + 1)
#define CMD_UTIL_TESTDLL_OFFSET (CMD_UTIL_BASE_OFFSET + 0)
#define CMD_UTIL_END_OFFSET CMD_UTIL_TESTDLL_OFFSET
/* !!! place all command modules before CMD_BASE_END_OFFSET */
#define CMD_BASE_END_OFFSET CMD_UTIL_END_OFFSET
#endif /* WCDIOCTL_ */