Remove DeferredProcedure which is used as a wrapper to call
either IO or MMUfault DPCs. This also removes a custom typedef.

Signed-off-by: Omar Ramirez Luna <omar.rami...@ti.com>
---
 arch/arm/plat-omap/include/dspbridge/dpc.h   |   23 ------------
 arch/arm/plat-omap/include/dspbridge/io_sm.h |    2 +-
 drivers/dsp/bridge/services/dpc.c            |   36 ------------------
 drivers/dsp/bridge/wmd/io_sm.c               |   50 ++++++++++++++++---------
 drivers/dsp/bridge/wmd/mmu_fault.c           |    2 +-
 drivers/dsp/bridge/wmd/mmu_fault.h           |    2 +-
 drivers/dsp/bridge/wmd/ue_deh.c              |    5 +--
 7 files changed, 36 insertions(+), 84 deletions(-)

diff --git a/arch/arm/plat-omap/include/dspbridge/dpc.h 
b/arch/arm/plat-omap/include/dspbridge/dpc.h
index 0c60342..b22140f 100644
--- a/arch/arm/plat-omap/include/dspbridge/dpc.h
+++ b/arch/arm/plat-omap/include/dspbridge/dpc.h
@@ -19,30 +19,10 @@
 #ifndef DPC_
 #define DPC_
 
-/*
- *  ======== DPC_PROC ========
- *  Purpose:
- *      Deferred processing routine.  Typically scheduled from an ISR to
- *      complete I/O processing.
- *  Parameters:
- *      pRefData:   Ptr to user data: passed in via ISR_ScheduleDPC.
- *  Returns:
- *  Requires:
- *      The DPC should not block, or otherwise acquire resources.
- *      Interrupts to the processor are enabled.
- *      DPC_PROC executes in a critical section.
- *  Ensures:
- *      This DPC will not be reenterred on the same thread.
- *      However, the DPC may take hardware interrupts during execution.
- *      Interrupts to the processor are enabled.
- */
-       typedef void(*DPC_PROC) (void *pRefData);
-
 /* The DPC object, passed to our priority event callback routine: */
 struct DPC_OBJECT {
        u32 dwSignature;        /* Used for object validation.   */
        void *pRefData;         /* Argument for client's DPC.    */
-       DPC_PROC pfnDPC;        /* Client's DPC.                 */
        u32 numRequested;       /* Number of requested DPC's.      */
        u32 numScheduled;       /* Number of executed DPC's.      */
        struct tasklet_struct dpc_tasklet;
@@ -81,7 +61,4 @@ struct DPC_OBJECT {
  */
        extern bool DPC_Init(void);
 
-/*  ----------------------------------- Function Prototypes */
- void DPC_DeferredProcedure(IN unsigned long pDeferredContext);
-
 #endif                         /* DPC_ */
diff --git a/arch/arm/plat-omap/include/dspbridge/io_sm.h 
b/arch/arm/plat-omap/include/dspbridge/io_sm.h
index 77f9e25..67e3834 100644
--- a/arch/arm/plat-omap/include/dspbridge/io_sm.h
+++ b/arch/arm/plat-omap/include/dspbridge/io_sm.h
@@ -77,7 +77,7 @@
  *  Ensures:
  *      Non-preemptible (but interruptible).
  */
-       extern void IO_DPC(IN OUT void *pRefData);
+       extern void IO_DPC(IN OUT unsigned long pRefData);
 
 /*
  *  ======== IO_ISR ========
diff --git a/drivers/dsp/bridge/services/dpc.c 
b/drivers/dsp/bridge/services/dpc.c
index 10bd792..bbb2d47 100644
--- a/drivers/dsp/bridge/services/dpc.c
+++ b/drivers/dsp/bridge/services/dpc.c
@@ -66,39 +66,3 @@ bool DPC_Init(void)
        return true;
 }
 
-/*
- *  ======== DeferredProcedure ========
- *  Purpose:
- *      Main DPC routine.  This is called by host OS DPC callback
- *      mechanism with interrupts enabled.
- */
-void DPC_DeferredProcedure(IN unsigned long pDeferredContext)
-{
-       struct DPC_OBJECT *pDPCObject = (struct DPC_OBJECT *)pDeferredContext;
-       /* read numRequested in local variable */
-       u32 requested;
-       u32 serviced;
-
-       DBC_Require(pDPCObject != NULL);
-       requested = pDPCObject->numRequested;
-       serviced = pDPCObject->numScheduled;
-
-       GT_1trace(DPC_DebugMask, GT_ENTER, "> DPC_DeferredProcedure "
-                 "pDeferredContext=%x\n", pDeferredContext);
-       /* Rollover taken care of using != instead of < */
-       if (serviced != requested) {
-               if (pDPCObject->pfnDPC != NULL) {
-                       /* Process pending DPC's: */
-                       do {
-                               /* Call client's DPC: */
-                               (*(pDPCObject->pfnDPC))(pDPCObject->pRefData);
-                               serviced++;
-                       } while (serviced != requested);
-               }
-               pDPCObject->numScheduled = requested;
-       }
-       GT_2trace(DPC_DebugMask, GT_ENTER,
-                 "< DPC_DeferredProcedure requested %d"
-                 " serviced %d\n", requested, serviced);
-}
-
diff --git a/drivers/dsp/bridge/wmd/io_sm.c b/drivers/dsp/bridge/wmd/io_sm.c
index d465763..177dbbc 100644
--- a/drivers/dsp/bridge/wmd/io_sm.c
+++ b/drivers/dsp/bridge/wmd/io_sm.c
@@ -255,10 +255,8 @@ DSP_STATUS WMD_IO_Create(OUT struct IO_MGR **phIOMgr,
                                IO_MGRSIGNATURE);
                if (pIOMgr->hDPC) {
                        tasklet_init(&pIOMgr->hDPC->dpc_tasklet,
-                               DPC_DeferredProcedure, (u32)pIOMgr->hDPC);
+                               IO_DPC, (u32)pIOMgr);
                        /* Fill out our DPC Object */
-                       pIOMgr->hDPC->pRefData = (void *)pIOMgr;
-                       pIOMgr->hDPC->pfnDPC = IO_DPC;
                        pIOMgr->hDPC->numRequested = 0;
                        pIOMgr->hDPC->numScheduled = 0;
 #ifdef DEBUG
@@ -1010,12 +1008,14 @@ static void IO_DispatchPM(struct work_struct *work)
  *      out the dispatch of I/O as a non-preemptible event.It can only be
  *      pre-empted      by an ISR.
  */
-void IO_DPC(IN OUT void *pRefData)
+void IO_DPC(IN OUT unsigned long pRefData)
 {
        struct IO_MGR *pIOMgr = (struct IO_MGR *)pRefData;
        struct CHNL_MGR *pChnlMgr;
        struct MSG_MGR *pMsgMgr;
        struct DEH_MGR *hDehMgr;
+       u32 requested;
+       u32 serviced;
 
        if (!MEM_IsValidHandle(pIOMgr, IO_MGRSIGNATURE))
                goto func_end;
@@ -1025,24 +1025,38 @@ void IO_DPC(IN OUT void *pRefData)
        if (!MEM_IsValidHandle(pChnlMgr, CHNL_MGRSIGNATURE))
                goto func_end;
        DBG_Trace(DBG_LEVEL7, "Entering IO_DPC(0x%x)\n", pRefData);
-       /* Check value of interrupt register to ensure it is a valid error */
-       if ((pIOMgr->wIntrVal > DEH_BASE) && (pIOMgr->wIntrVal < DEH_LIMIT)) {
-               /* Notify DSP/BIOS exception */
-               if (hDehMgr)
-                       WMD_DEH_Notify(hDehMgr, DSP_SYSERROR, pIOMgr->wIntrVal);
-       }
-       IO_DispatchChnl(pIOMgr, NULL, IO_SERVICE);
+
+       requested = pIOMgr->hDPC->numRequested;
+       serviced = pIOMgr->hDPC->numScheduled;
+
+       if (serviced == requested)
+               goto func_end;
+
+       /* Process pending DPC's */
+       do {
+               /* Check value of interrupt reg to ensure it's a valid error */
+               if ((pIOMgr->wIntrVal > DEH_BASE) &&
+                  (pIOMgr->wIntrVal < DEH_LIMIT)) {
+                       /* Notify DSP/BIOS exception */
+                       if (hDehMgr)
+                               WMD_DEH_Notify(hDehMgr, DSP_SYSERROR,
+                                               pIOMgr->wIntrVal);
+               }
+               IO_DispatchChnl(pIOMgr, NULL, IO_SERVICE);
 #ifdef CHNL_MESSAGES
-       if (MEM_IsValidHandle(pMsgMgr, MSGMGR_SIGNATURE))
-               IO_DispatchMsg(pIOMgr, pMsgMgr);
+               if (MEM_IsValidHandle(pMsgMgr, MSGMGR_SIGNATURE))
+                       IO_DispatchMsg(pIOMgr, pMsgMgr);
 #endif
 #ifndef DSP_TRACEBUF_DISABLED
-       if (pIOMgr->wIntrVal & MBX_DBG_CLASS) {
-               /* Notify DSP Trace message */
-               if (pIOMgr->wIntrVal & MBX_DBG_SYSPRINTF)
-                       PrintDSPDebugTrace(pIOMgr);
-       }
+               if (pIOMgr->wIntrVal & MBX_DBG_CLASS) {
+                       /* Notify DSP Trace message */
+                       if (pIOMgr->wIntrVal & MBX_DBG_SYSPRINTF)
+                               PrintDSPDebugTrace(pIOMgr);
+               }
 #endif
+               serviced++;
+       } while (serviced != requested);
+       pIOMgr->hDPC->numScheduled = requested;
 func_end:
        return;
 }
diff --git a/drivers/dsp/bridge/wmd/mmu_fault.c 
b/drivers/dsp/bridge/wmd/mmu_fault.c
index 0e03cd1..b3f0719 100644
--- a/drivers/dsp/bridge/wmd/mmu_fault.c
+++ b/drivers/dsp/bridge/wmd/mmu_fault.c
@@ -54,7 +54,7 @@ static bool MMU_CheckIfFault(struct WMD_DEV_CONTEXT 
*pDevContext);
  *  ======== MMU_FaultDpc ========
  *      Deferred procedure call to handle DSP MMU fault.
  */
-void MMU_FaultDpc(IN void *pRefData)
+void MMU_FaultDpc(IN unsigned long pRefData)
 {
        struct DEH_MGR *hDehMgr = (struct DEH_MGR *)pRefData;
        struct DEH_MGR *pDehMgr = (struct DEH_MGR *)hDehMgr;
diff --git a/drivers/dsp/bridge/wmd/mmu_fault.h 
b/drivers/dsp/bridge/wmd/mmu_fault.h
index bed466c..d3849b5 100644
--- a/drivers/dsp/bridge/wmd/mmu_fault.h
+++ b/drivers/dsp/bridge/wmd/mmu_fault.h
@@ -23,7 +23,7 @@
  *  ======== MMU_FaultDpc ========
  *      Deferred procedure call to handle DSP MMU fault.
  */
-       void MMU_FaultDpc(IN void *pRefData);
+       void MMU_FaultDpc(IN unsigned long pRefData);
 
 /*
  *  ======== MMU_FaultIsr ========
diff --git a/drivers/dsp/bridge/wmd/ue_deh.c b/drivers/dsp/bridge/wmd/ue_deh.c
index 12f73e7..4d0bcf2 100644
--- a/drivers/dsp/bridge/wmd/ue_deh.c
+++ b/drivers/dsp/bridge/wmd/ue_deh.c
@@ -95,11 +95,8 @@ DSP_STATUS WMD_DEH_Create(OUT struct DEH_MGR **phDehMgr,
                                SIGNATURE);
                if (pDehMgr->hMmuFaultDpc) {
                        tasklet_init(&pDehMgr->hMmuFaultDpc->dpc_tasklet,
-                               DPC_DeferredProcedure,
-                               (u32)pDehMgr->hMmuFaultDpc);
+                               MMU_FaultDpc, (u32)pDehMgr);
                        /* Fill out DPC Object */
-                       pDehMgr->hMmuFaultDpc->pRefData = (void *)pDehMgr;
-                       pDehMgr->hMmuFaultDpc->pfnDPC = MMU_FaultDpc;
                        pDehMgr->hMmuFaultDpc->numRequested = 0;
                        pDehMgr->hMmuFaultDpc->numScheduled = 0;
 #ifdef DEBUG
-- 
1.6.2.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to