@@ -68,6 +68,7 @@
#include <dspbridge/nodedefs.h>
#include <dspbridge/dispdefs.h>
#include <dspbridge/nldrdefs.h>
+#include <dspbridge/drv.h>
/*
* ======== NODE_Allocate ========
@@ -104,7 +105,8 @@
*pArgs,
OPTIONAL IN CONST struct DSP_NODEATTRIN
*pAttrIn,
- OUT struct NODE_OBJECT **phNode);
+ OUT struct NODE_OBJECT **phNode,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== NODE_AllocMsgBuf ========
@@ -307,7 +309,8 @@
* Ensures:
* DSP_SOK: hNode is invalid.
*/
- extern DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode);
+ extern DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== NODE_DeleteMgr ========
@@ -64,6 +64,7 @@
#include <dspbridge/cfgdefs.h>
#include <dspbridge/devdefs.h>
+#include <dspbridge/drv.h>
/*
* ======== PROC_Attach ========
@@ -94,7 +95,8 @@
extern DSP_STATUS PROC_Attach(u32 uProcessor,
OPTIONAL CONST struct DSP_PROCESSORATTRIN
*pAttrIn,
- OUT DSP_HPROCESSOR *phProcessor);
+ OUT DSP_HPROCESSOR *phProcessor,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== PROC_AutoStart =========
@@ -161,7 +163,8 @@
* Ensures:
* PROC Object is destroyed.
*/
- extern DSP_STATUS PROC_Detach(DSP_HPROCESSOR hProcessor);
+ extern DSP_STATUS PROC_Detach(DSP_HPROCESSOR hProcessor,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== PROC_EnumNodes ========
@@ -578,7 +581,8 @@
void *pMpuAddr,
u32 ulSize,
void *pReqAddr,
- void **ppMapAddr, u32 ulMapAttr);
+ void **ppMapAddr, u32 ulMapAttr,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== PROC_ReserveMemory ========
@@ -621,7 +625,8 @@
* Ensures:
* Details:
*/
- extern DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr);
+ extern DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== PROC_UnReserveMemory ========
@@ -59,6 +59,7 @@
#include <dspbridge/dev.h>
#include <dspbridge/strmdefs.h>
+#include <dspbridge/proc.h>
/*
* ======== STRM_AllocateBuffer ========
@@ -83,7 +84,8 @@
extern DSP_STATUS STRM_AllocateBuffer(struct STRM_OBJECT *hStrm,
u32 uSize,
OUT u8 **apBuffer,
- u32 uNumBufs);
+ u32 uNumBufs,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== STRM_Close ========
@@ -101,7 +103,8 @@
* STRM_Init(void) called.
* Ensures:
*/
- extern DSP_STATUS STRM_Close(struct STRM_OBJECT *hStrm);
+ extern DSP_STATUS STRM_Close(struct STRM_OBJECT *hStrm,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== STRM_Create ========
@@ -172,7 +175,8 @@
* Ensures:
*/
extern DSP_STATUS STRM_FreeBuffer(struct STRM_OBJECT *hStrm,
- u8 **apBuffer, u32 uNumBufs);
+ u8 **apBuffer, u32 uNumBufs,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== STRM_GetEventHandle ========
@@ -307,7 +311,8 @@
*/
extern DSP_STATUS STRM_Open(struct NODE_OBJECT *hNode, u32 uDir,
u32 uIndex, IN struct STRM_ATTR *pAttr,
- OUT struct STRM_OBJECT **phStrm);
+ OUT struct STRM_OBJECT **phStrm,
+ struct PROCESS_CONTEXT *pr_ctxt);
/*
* ======== STRM_PrepareBuffer ========
@@ -680,7 +680,7 @@ u32 PROCWRAP_Attach(union Trapped_Args *args, void *pr_ctxt)
}
status = PROC_Attach(args->ARGS_PROC_ATTACH.uProcessor, pAttrIn,
- &processor);
+ &processor, pr_ctxt);
cp_to_usr(args->ARGS_PROC_ATTACH.phProcessor, &processor, status, 1);
func_end:
return status;
@@ -740,7 +740,7 @@ u32 PROCWRAP_Detach(union Trapped_Args *args, void *pr_ctxt)
GT_1trace(WCD_debugMask, GT_ENTER,
"PROCWRAP_Detach: entered args\n0x%x "
"hProceesor \n", args->ARGS_PROC_DETACH.hProcessor);
- retVal = PROC_Detach(args->ARGS_PROC_DETACH.hProcessor);
+ retVal = PROC_Detach(args->ARGS_PROC_DETACH.hProcessor, pr_ctxt);
return retVal;
}
@@ -1019,7 +1019,7 @@ u32 PROCWRAP_Map(union Trapped_Args *args, void *pr_ctxt)
args->ARGS_PROC_MAPMEM.pMpuAddr,
args->ARGS_PROC_MAPMEM.ulSize,
args->ARGS_PROC_MAPMEM.pReqAddr, &pMapAddr,
- args->ARGS_PROC_MAPMEM.ulMapAttr);
+ args->ARGS_PROC_MAPMEM.ulMapAttr, pr_ctxt);
if (DSP_SUCCEEDED(status)) {
if (put_user(pMapAddr, args->ARGS_PROC_MAPMEM.ppMapAddr))
status = DSP_EINVALIDARG;
@@ -1090,7 +1090,7 @@ u32 PROCWRAP_UnMap(union Trapped_Args *args, void *pr_ctxt)
GT_0trace(WCD_debugMask, GT_ENTER, "PROCWRAP_UnMap: entered\n");
status = PROC_UnMap(args->ARGS_PROC_UNMAPMEM.hProcessor,
- args->ARGS_PROC_UNMAPMEM.pMapAddr);
+ args->ARGS_PROC_UNMAPMEM.pMapAddr, pr_ctxt);
return status;
}
@@ -1166,7 +1166,7 @@ u32 NODEWRAP_Allocate(union Trapped_Args *args, void *pr_ctxt)
if (DSP_SUCCEEDED(status)) {
status = NODE_Allocate(args->ARGS_NODE_ALLOCATE.hProcessor,
&nodeId, (struct DSP_CBDATA *)pArgs,
- pAttrIn, &hNode);
+ pAttrIn, &hNode, pr_ctxt);
}
cp_to_usr(args->ARGS_NODE_ALLOCATE.phNode, &hNode, status, 1);
func_cont:
@@ -1292,7 +1292,7 @@ u32 NODEWRAP_Delete(union Trapped_Args *args, void *pr_ctxt)
u32 retVal;
GT_0trace(WCD_debugMask, GT_ENTER, "NODEWRAP_Delete: entered\n");
- retVal = NODE_Delete(args->ARGS_NODE_DELETE.hNode);
+ retVal = NODE_Delete(args->ARGS_NODE_DELETE.hNode, pr_ctxt);
return retVal;
}
@@ -1494,7 +1494,7 @@ u32 STRMWRAP_AllocateBuffer(union Trapped_Args *args, void *pr_ctxt)
status = STRM_AllocateBuffer(args->ARGS_STRM_ALLOCATEBUFFER.hStream,
args->ARGS_STRM_ALLOCATEBUFFER.uSize,
- apBuffer, uNumBufs);
+ apBuffer, uNumBufs, pr_ctxt);
cp_to_usr(args->ARGS_STRM_ALLOCATEBUFFER.apBuffer, apBuffer, status,
uNumBufs);
if (apBuffer)
@@ -1508,11 +1508,7 @@ u32 STRMWRAP_AllocateBuffer(union Trapped_Args *args, void *pr_ctxt)
*/
u32 STRMWRAP_Close(union Trapped_Args *args, void *pr_ctxt)
{
- u32 retVal;
-
- retVal = STRM_Close(args->ARGS_STRM_CLOSE.hStream);
-
- return retVal;
+ return STRM_Close(args->ARGS_STRM_CLOSE.hStream, pr_ctxt);
}
/*
@@ -1533,7 +1529,7 @@ u32 STRMWRAP_FreeBuffer(union Trapped_Args *args, void *pr_ctxt)
if (DSP_SUCCEEDED(status)) {
status = STRM_FreeBuffer(args->ARGS_STRM_FREEBUFFER.hStream,
- apBuffer, uNumBufs);
+ apBuffer, uNumBufs, pr_ctxt);
}
cp_to_usr(args->ARGS_STRM_FREEBUFFER.apBuffer, apBuffer, status,
uNumBufs);
@@ -1627,7 +1623,8 @@ u32 STRMWRAP_Open(union Trapped_Args *args, void *pr_ctxt)
}
status = STRM_Open(args->ARGS_STRM_OPEN.hNode,
args->ARGS_STRM_OPEN.uDirection,
- args->ARGS_STRM_OPEN.uIndex, &attr, &pStrm);
+ args->ARGS_STRM_OPEN.uIndex, &attr, &pStrm,
+ pr_ctxt);
cp_to_usr(args->ARGS_STRM_OPEN.phStream, &pStrm, status, 1);
return status;
}
@@ -449,13 +449,15 @@ static DSP_STATUS DRV_ProcFreeNodeRes(HANDLE hPCtxt)
GT_1trace(curTrace, GT_5CLASS,
"Calling Node_Delete for Node:"
" 0x%x\n", pNodeRes->hNode);
- status = NODE_Delete(pNodeRes->hNode);
+ status = NODE_Delete(pNodeRes->hNode,
+ pCtxt);
GT_1trace(curTrace, GT_5CLASS,
"the status after the NodeDelete %x\n",
status);
} else if ((nState == NODE_ALLOCATED)
|| (nState == NODE_CREATED))
- status = NODE_Delete(pNodeRes->hNode);
+ status = NODE_Delete(pNodeRes->hNode,
+ pCtxt);
}
}
}
@@ -567,7 +569,7 @@ DSP_STATUS DRV_ProcFreeDMMRes(HANDLE hPCtxt)
pDMMList = pDMMList->next;
if (pDMMRes->dmmAllocated) {
status = PROC_UnMap(pDMMRes->hProcessor,
- (void *)pDMMRes->ulDSPResAddr);
+ (void *)pDMMRes->ulDSPResAddr, pCtxt);
status = PROC_UnReserveMemory(pDMMRes->hProcessor,
(void *)pDMMRes->ulDSPResAddr);
pDMMRes->dmmAllocated = 0;
@@ -782,17 +784,18 @@ static DSP_STATUS DRV_ProcFreeSTRMRes(HANDLE hPCtxt)
apBuffer = MEM_Alloc((pSTRMRes->uNumBufs *
sizeof(u8 *)), MEM_NONPAGED);
status = STRM_FreeBuffer(pSTRMRes->hStream, apBuffer,
- pSTRMRes->uNumBufs);
+ pSTRMRes->uNumBufs, pCtxt);
MEM_Free(apBuffer);
}
- status = STRM_Close(pSTRMRes->hStream);
+ status = STRM_Close(pSTRMRes->hStream, pCtxt);
if (DSP_FAILED(status)) {
if (status == DSP_EPENDING) {
status = STRM_Reclaim(pSTRMRes->hStream,
&pBufPtr, &ulBytes,
(u32 *)&ulBufSize, &dwArg);
if (DSP_SUCCEEDED(status))
- status = STRM_Close(pSTRMRes->hStream);
+ status = STRM_Close(pSTRMRes->hStream,
+ pCtxt);
}
}
@@ -445,7 +445,7 @@ static int __devexit omap34xx_bridge_remove(struct platform_device *pdev)
GT_1trace(driverTrace, GT_5CLASS, "***Cleanup of "
"process***%d\n", pCtxtclosed->pid);
DRV_RemoveAllResources(pCtxtclosed);
- PROC_Detach(pCtxtclosed->hProcessor);
+ PROC_Detach(pCtxtclosed->hProcessor, pCtxtclosed);
pTmp = pCtxtclosed->next;
DRV_RemoveProcContext((struct DRV_OBJECT *)hDrvObject,
pCtxtclosed, (void *)pCtxtclosed->pid);
@@ -593,7 +593,7 @@ static int bridge_release(struct inode *ip, struct file *filp)
flush_signals(current);
DRV_RemoveAllResources(pr_ctxt);
if (pr_ctxt->hProcessor)
- PROC_Detach(pr_ctxt->hProcessor);
+ PROC_Detach(pr_ctxt->hProcessor, pr_ctxt);
DRV_RemoveProcContext((struct DRV_OBJECT *)hDrvObject,
pr_ctxt, (void *)pr_ctxt->pid);
} else {
@@ -320,7 +320,8 @@ static struct DSP_BUFFERATTR NODE_DFLTBUFATTRS = {
0, /* uAlignment */
};
-static void DeleteNode(struct NODE_OBJECT *hNode);
+static void DeleteNode(struct NODE_OBJECT *hNode,
+ struct PROCESS_CONTEXT *pr_ctxt);
static void DeleteNodeMgr(struct NODE_MGR *hNodeMgr);
static void FillStreamConnect(struct NODE_OBJECT *hNode1,
struct NODE_OBJECT *hNode2, u32 uStream1,
@@ -387,7 +388,8 @@ DSP_STATUS NODE_Allocate(struct PROC_OBJECT *hProcessor,
IN CONST struct DSP_UUID *pNodeId,
OPTIONAL IN CONST struct DSP_CBDATA *pArgs,
OPTIONAL IN CONST struct DSP_NODEATTRIN *pAttrIn,
- OUT struct NODE_OBJECT **phNode)
+ OUT struct NODE_OBJECT **phNode,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
struct NODE_MGR *hNodeMgr;
struct DEV_OBJECT *hDevObject;
@@ -561,7 +563,7 @@ func_cont:
status = PROC_Map(hProcessor, (void *)pAttrIn->pGPPVirtAddr,
pNode->createArgs.asa.taskArgs.uHeapSize,
(void *)pNode->createArgs.asa.taskArgs.uDSPHeapResAddr,
- (void **)&pMappedAddr, mapAttrs);
+ (void **)&pMappedAddr, mapAttrs, pr_ctxt);
if (DSP_FAILED(status)) {
GT_1trace(NODE_debugMask, GT_5CLASS,
"NODE_Allocate: Failed to map memory"
@@ -774,7 +776,7 @@ func_cont2:
} else {
/* Cleanup */
if (pNode)
- DeleteNode(pNode);
+ DeleteNode(pNode, pr_ctxt);
}
@@ -1621,7 +1623,8 @@ DSP_STATUS NODE_CreateMgr(OUT struct NODE_MGR **phNodeMgr,
* Loads the node's delete function if necessary. Free GPP side resources
* after node's delete function returns.
*/
-DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode)
+DSP_STATUS NODE_Delete(struct NODE_OBJECT *hNode,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
struct NODE_OBJECT *pNode = (struct NODE_OBJECT *)hNode;
struct NODE_MGR *hNodeMgr;
@@ -1783,7 +1786,7 @@ func_cont1:
#endif
func_cont:
GT_0trace(NODE_debugMask, GT_ENTER, "\nNODE_Delete13:\n ");
- DeleteNode(hNode);
+ DeleteNode(hNode, pr_ctxt);
#ifndef RES_CLEANUP_DISABLE
GT_0trace(NODE_debugMask, GT_5CLASS, "\nNODE_Delete2:\n ");
if (pCtxt != NULL)
@@ -2795,7 +2798,8 @@ func_end:
* Purpose:
* Free GPP resources allocated in NODE_Allocate() or NODE_Connect().
*/
-static void DeleteNode(struct NODE_OBJECT *hNode)
+static void DeleteNode(struct NODE_OBJECT *hNode,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
struct NODE_MGR *hNodeMgr;
struct CMM_XLATOROBJECT *hXlator;
@@ -2875,7 +2879,8 @@ static void DeleteNode(struct NODE_OBJECT *hNode)
}
if (taskArgs.uDSPHeapResAddr) {
status = PROC_UnMap(hNode->hProcessor,
- (void *)taskArgs.uDSPHeapAddr);
+ (void *)taskArgs.uDSPHeapAddr,
+ pr_ctxt);
if (DSP_SUCCEEDED(status)) {
GT_0trace(NODE_debugMask, GT_5CLASS,
"DSPProcessor_UnMap succeeded.\n");
@@ -2976,7 +2981,7 @@ static void DeleteNodeMgr(struct NODE_MGR *hNodeMgr)
while ((hNode =
(struct NODE_OBJECT *)LST_GetHead(hNodeMgr->
nodeList)))
- DeleteNode(hNode);
+ DeleteNode(hNode, NULL);
DBC_Assert(LST_IsEmpty(hNodeMgr->nodeList));
LST_Delete(hNodeMgr->nodeList);
@@ -220,7 +220,8 @@ DSP_STATUS PROC_CleanupAllResources(void)
"***Cleanup of "
"process***%d\n", pCtxtclosed->pid);
if (pCtxtclosed->hProcessor)
- PROC_Detach(pCtxtclosed->hProcessor);
+ PROC_Detach(pCtxtclosed->hProcessor,
+ pCtxtclosed);
}
pCtxtclosed = pCtxtclosed->next;
}
@@ -237,7 +238,7 @@ func_end:
*/
DSP_STATUS
PROC_Attach(u32 uProcessor, OPTIONAL CONST struct DSP_PROCESSORATTRIN *pAttrIn,
- OUT DSP_HPROCESSOR *phProcessor)
+ OUT DSP_HPROCESSOR *phProcessor, struct PROCESS_CONTEXT *pr_ctxt)
{
DSP_STATUS status = DSP_SOK;
struct DEV_OBJECT *hDevObject;
@@ -635,7 +636,8 @@ DSP_STATUS PROC_Ctrl(DSP_HPROCESSOR hProcessor, u32 dwCmd,
* Destroys the Processor Object. Removes the notification from the Dev
* List.
*/
-DSP_STATUS PROC_Detach(DSP_HPROCESSOR hProcessor)
+DSP_STATUS PROC_Detach(DSP_HPROCESSOR hProcessor,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
DSP_STATUS status = DSP_SOK;
struct PROC_OBJECT *pProcObject = (struct PROC_OBJECT *)hProcessor;
@@ -1416,7 +1418,8 @@ func_end:
* Maps a MPU buffer to DSP address space.
*/
DSP_STATUS PROC_Map(DSP_HPROCESSOR hProcessor, void *pMpuAddr, u32 ulSize,
- void *pReqAddr, void **ppMapAddr, u32 ulMapAttr)
+ void *pReqAddr, void **ppMapAddr, u32 ulMapAttr,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
u32 vaAlign;
u32 paAlign;
@@ -1809,7 +1812,8 @@ func_end:
* Purpose:
* Removes a MPU buffer mapping from the DSP address space.
*/
-DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr)
+DSP_STATUS PROC_UnMap(DSP_HPROCESSOR hProcessor, void *pMapAddr,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
DSP_STATUS status = DSP_SOK;
struct PROC_OBJECT *pProcObject = (struct PROC_OBJECT *)hProcessor;
@@ -153,7 +153,8 @@ static void DeleteStrmMgr(struct STRM_MGR *hStrmMgr);
* Allocates buffers for a stream.
*/
DSP_STATUS STRM_AllocateBuffer(struct STRM_OBJECT *hStrm, u32 uSize,
- OUT u8 **apBuffer, u32 uNumBufs)
+ OUT u8 **apBuffer, u32 uNumBufs,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
DSP_STATUS status = DSP_SOK;
u32 uAllocated = 0;
@@ -196,7 +197,7 @@ DSP_STATUS STRM_AllocateBuffer(struct STRM_OBJECT *hStrm, u32 uSize,
}
}
if (DSP_FAILED(status))
- STRM_FreeBuffer(hStrm, apBuffer, uAllocated);
+ STRM_FreeBuffer(hStrm, apBuffer, uAllocated, pr_ctxt);
#ifndef RES_CLEANUP_DISABLE
if (DSP_FAILED(status))
@@ -227,7 +228,8 @@ func_end:
* Purpose:
* Close a stream opened with STRM_Open().
*/
-DSP_STATUS STRM_Close(struct STRM_OBJECT *hStrm)
+DSP_STATUS STRM_Close(struct STRM_OBJECT *hStrm,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
struct WMD_DRV_INTERFACE *pIntfFxns;
struct CHNL_INFO chnlInfo;
@@ -393,7 +395,7 @@ void STRM_Exit(void)
* Frees the buffers allocated for a stream.
*/
DSP_STATUS STRM_FreeBuffer(struct STRM_OBJECT *hStrm, u8 **apBuffer,
- u32 uNumBufs)
+ u32 uNumBufs, struct PROCESS_CONTEXT *pr_ctxt)
{
DSP_STATUS status = DSP_SOK;
u32 i = 0;
@@ -625,7 +627,9 @@ DSP_STATUS STRM_Issue(struct STRM_OBJECT *hStrm, IN u8 *pBuf, u32 ulBytes,
* XDAIS socket node on the DSP.
*/
DSP_STATUS STRM_Open(struct NODE_OBJECT *hNode, u32 uDir, u32 uIndex,
- IN struct STRM_ATTR *pAttr, OUT struct STRM_OBJECT **phStrm)
+ IN struct STRM_ATTR *pAttr,
+ OUT struct STRM_OBJECT **phStrm,
+ struct PROCESS_CONTEXT *pr_ctxt)
{
struct STRM_MGR *hStrmMgr;
struct WMD_DRV_INTERFACE *pIntfFxns;