This patch removes ISR module completely

Signed-off-by: Fernando Guzman Lugo <[EMAIL PROTECTED]>
---
 arch/arm/plat-omap/include/mach/bridge/_chnl_sm.h |    1 -
 arch/arm/plat-omap/include/mach/bridge/io_sm.h    |    3 +-
 arch/arm/plat-omap/include/mach/bridge/isr.h      |  154 ------------
 drivers/dsp/bridge/pmgr/chnl.c                    |    1 -
 drivers/dsp/bridge/services/isr.c                 |  261 ---------------------
 drivers/dsp/bridge/services/services.c            |   10 +-
 drivers/dsp/bridge/wmd/_deh.h                     |    2 -
 drivers/dsp/bridge/wmd/io_sm.c                    |   46 ++--
 drivers/dsp/bridge/wmd/mmu_fault.c                |    6 +-
 drivers/dsp/bridge/wmd/mmu_fault.h                |    2 +-
 drivers/dsp/bridge/wmd/tiomap_sm.c                |    1 -
 drivers/dsp/bridge/wmd/ue_deh.c                   |   14 +-
 12 files changed, 38 insertions(+), 463 deletions(-)
 delete mode 100644 arch/arm/plat-omap/include/mach/bridge/isr.h
 delete mode 100644 drivers/dsp/bridge/services/isr.c

diff --git a/arch/arm/plat-omap/include/mach/bridge/_chnl_sm.h 
b/arch/arm/plat-omap/include/mach/bridge/_chnl_sm.h
index f6a6c69..4e82639 100644
--- a/arch/arm/plat-omap/include/mach/bridge/_chnl_sm.h
+++ b/arch/arm/plat-omap/include/mach/bridge/_chnl_sm.h
@@ -57,7 +57,6 @@

 #include <wcd.h>
 #include <wmd.h>
-#include <isr.h>
 #include <dpc.h>

 #include <list.h>
diff --git a/arch/arm/plat-omap/include/mach/bridge/io_sm.h 
b/arch/arm/plat-omap/include/mach/bridge/io_sm.h
index 413108f..892c06a 100644
--- a/arch/arm/plat-omap/include/mach/bridge/io_sm.h
+++ b/arch/arm/plat-omap/include/mach/bridge/io_sm.h
@@ -132,8 +132,7 @@
  *      Interrupts are disabled and EOI for this interrupt has been sent.
  *  Ensures:
  */
-       extern bool IO_ISR(IN void *pRefData);
-
+       irqreturn_t IO_ISR(int irq, IN void *pRefData);
 /*
  *  ======== IO_RequestChnl ========
  *  Purpose:
diff --git a/arch/arm/plat-omap/include/mach/bridge/isr.h 
b/arch/arm/plat-omap/include/mach/bridge/isr.h
deleted file mode 100644
index fb397bb..0000000
--- a/arch/arm/plat-omap/include/mach/bridge/isr.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * bridge/inc/isr.h
- *
- * DSP-BIOS Bridge driver support functions for TI OMAP processors.
- *
- * Copyright (C) 2005-2006 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.
- */
-
-
-/*
- *  ======== isr.h ========
- *  Purpose:
- *      Interrupt services.
- *
- *  Public Functions:
- *      ISR_Exit
- *      ISR_Init
- *      ISR_Install
- *      ISR_Uninstall
- *
- *  Notes:
- *
- *! Revision History:
- *! ================
- *! 01-Mar-2004 vp:  Added IVA related functions.
- *! 06-Feb-2003 kc:  Added ISR_MAILBOX1 (renamed from DSP_MAILBOX1).
- *! 05-Nov-2001 kc:  Added interrupt type param to ISR_Install.
- *! 31-Jan-2000 rr:  Comments modified after code review.
- *! 29-Oct-1999 kc:  Moved header files to within ifdefed 'extern "C"'.
- *! 17-Sep-1997 gp:  Added CFG_HOSTRES struct as argument to ISR_Install, thus
- *!                  breaking backward compatibility with Ver. 1.0 mini 
drivers.
- *! 18-Aug-1997 cr:  Added explicit CDECL identifiers.
- *! 03-Feb-1996 gp:  Changed behaviour of ISR_SimulateInt.
- *! 24-Jul-1996 gp:  Created.
- */
-
-#ifndef ISR_
-#define ISR_
-#include <host_os.h>
-#include <cfg.h>
-
-/* Interrupt Object handle: */
-       struct ISR_IRQ;
-
-/* ISR install type (private) */
-#define ISR_MAILBOX1            0x00000080     /* Arbitrary value */
-#define ISR_MAILBOX2                   0x00000081
-
-/* Temporary until the baseport defines it */
-#define MAIL_U3_MPU_IRQ        34
-/*
- *  ======== ISR_PROC ========
- *  Purpose:
- *      Routine to service an interrupt.
- *  Parameters:
- *      pRefData:   Ptr to user data: passed in via ISR_Install.
- *  Returns:
- *      TRUE if the interrupt was handled; FALSE otherwise.
- *  Requires:
- *      ISR code must be in locked memory.
- *      All data touched must be locked.
- *      No resources should be acquired within the ISR.
- *      May only call asynchrounous services.
- *  Ensures:
- *      This routine must not affect the state of the physical PIC.
- *      (i.e.; don't send an EOI).
- */
-       typedef bool (CDECL *ISR_PROC) (void *pRefData);
-
-/*
- *  ======== ISR_Exit ========
- *  Purpose:
- *      Discontinue usage of the ISR module.
- *  Parameters:
- *  Returns:
- *  Requires:
- *      ISR_Init() was previously called.
- *  Ensures:
- *      Resources acquired in ISR_Init() are freed.
- */
-       extern void CDECL ISR_Exit();
-
-/*
- *  ======== ISR_Init ========
- *  Purpose:
- *      Initialize the ISR module's private state.
- *  Parameters:
- *  Returns:
- *      TRUE if initialized; FALSE if error occured.
- *  Requires:
- *  Ensures:
- *      A requirement for each of the other public ISR functions.
- */
-       extern bool CDECL ISR_Init();
-
-/*
- *  ======== ISR_Install ========
- *  Purpose:
- *      Register an ISR for a given IRQ with the system's interrupt manager.
- *  Parameters:
- *      phIRQ:          Ptr to store a handle to an interrupt object.
- *      pHostConfig:    Ptr to a host resource structure, containing both
- *                      interrupt and bus info.
- *      pfnISR:         ISR function.  See definition of ISR_PROC.
- *      dwIntrType:     Type of interrupt.
- *      pRefData:       Pointer to user-defined reference data.
- *  Returns:
- *      DSP_SOK:        ISR installed.
- *      DSP_EPOINTER:   phIRQ == NULL.
- *      DSP_EMEMORY:    Insufficient memory.
- *      DSP_EFAIL:      Error registering the ISR for the IRQ.
- *  Requires:
- *      pHostConfig is a valid pointer to assigned host resources;
- *      iIRQ number is valid for this (host) processor.
- *      See requirements for ISR_PROC.
- *  Ensures:
- *      DSP_SOK:    ISR is installed, and the IRQ is unmasked. The ISR can be
- *                  called at any time until ISR_Uninstall() is called for this
- *                  IRQ.
- *      else:       *phIRQ is set to NULL.
- */
-       extern DSP_STATUS CDECL ISR_Install(OUT struct ISR_IRQ **phIRQ,
-                                           IN CONST struct CFG_HOSTRES
-                                           *pHostConfig,
-                                           IN ISR_PROC pfnISR,
-                                           IN u32 dwIntrType,
-                                           IN void *pRefData);
-
-
-
-/*
- *  ======== ISR_Uninstall ========
- *  Purpose:
- *      Deregister the ISR previously installed by ISR_Install().
- *  Parameters:
- *      hIRQ:           Handle to an IRQ object returned from ISR_Install().
- *  Returns:
- *      DSP_SOK:        Success.
- *      DSP_EHANDLE:    Invalid hIRQ.
- *  Requires:
- *  Ensures:
- *      (SUCCESS && hDPC is NULL) or DSP_EFAILED status
- */
-       extern DSP_STATUS CDECL ISR_Uninstall(IN struct ISR_IRQ *hIRQ);
-
-#endif                         /* ISR_ */
diff --git a/drivers/dsp/bridge/pmgr/chnl.c b/drivers/dsp/bridge/pmgr/chnl.c
index 9742dac..def2080 100644
--- a/drivers/dsp/bridge/pmgr/chnl.c
+++ b/drivers/dsp/bridge/pmgr/chnl.c
@@ -78,7 +78,6 @@
 #include <cfg.h>
 #include <csl.h>
 #include <dpc.h>
-#include <isr.h>
 #include <list.h>
 #include <mem.h>
 #include <sync.h>
diff --git a/drivers/dsp/bridge/services/isr.c 
b/drivers/dsp/bridge/services/isr.c
deleted file mode 100644
index 781a19c..0000000
--- a/drivers/dsp/bridge/services/isr.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * linux/drivers/dsp/bridge/services/isr.c
- *
- * DSP-BIOS Bridge driver support functions for TI OMAP processors.
- *
- * Copyright (C) 2005-2006 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.
- */
-
-
-/*
- *  ======== isrce.c ========
- *  Purpose:
- *      Interrupt services.
- *
- *  Public Functions:
- *      ISR_Exit
- *      ISR_Init
- *      ISR_Install
- *      ISR_Uninstall
- *
- *
- *! Revision History:
- *! ================
- *! 06-Feb-2003 kc: Renamed DSP_MAILBOX1 to ISR_MAILBOX1.
- *! 14-Mar-2002 rr: Added HELEN1_V1 flag while installing the interrupt.
- *! 05-Nov-2001 kc: Updated ISR_Install to support multiple HW interrupts.
- *! 27-Jul-2001 rr: Interrupt Id is based on x86 or ARM define.
- *! 24-Apr-2001 ag: Replaced nkintr.h with hw.h.
- *! 10-Oct-2000 rr: CeSetThreadPriority used instead of SetThreadPriority.
- *! 11-Aug-2000 ag: Removed #include <stdwin.h>
- *! 10-Aug-2000 rr: InterruptInitialize happens before the IST creation.
- *! 15-Feb-2000 rr: InterruptInitialize return value checked.
- *! 03-Feb-2000 rr: Module init/exit is handled by SERVICES Init/Exit.
- *!             GT Changes.
- *! 31-Jan-2000 rr: Changes after code review.Terminate thread,handle
- *!                 modified.ISR_UnInstall frees the ISR_Object only on
- *!                 Successful termination of the thread and the handle.
- *! 19-Jan-2000 rr: Code Cleaned up after code review.
- *! 06-Jan-2000 rr: Bus type included in the IRQ object. It is checked
- *!                 during the install and uninstall.
- *! 29-Dec-1999 rr: WaitForSingleObject removed during ISR_UnInstall
- *! 22-Nov-1999 rr: Event gets created before CardRequestIRQ
- *! 05-Nov-1999 rr: ISR_Install does not intialize the interrupt for PCMCIA
- *!                 For other bus type this will happen. IST function return
- *!                 value not checked as anyway we have to say InterruptDone
- *! 29-Oct-1999 rr: Hardware IST is created here.
- *! 25-Oct-1999 rr: New Isr design.
- *! 13-Sep-1999 a0216266: Stubbed from isrnt.c.
- */
-
-/*  ----------------------------------- Host OS */
-#include <host_os.h>
-
-/*  ----------------------------------- DSP/BIOS Bridge */
-#include <std.h>
-#include <dbdefs.h>
-#include <errbase.h>
-
-/*  ----------------------------------- Trace & Debug */
-#include <dbc.h>
-#include <gt.h>
-
-/*  ----------------------------------- OS Adaptation Layer */
-#include <list.h>
-#include <mem.h>
-
-/*  ----------------------------------- This */
-#include <isr.h>
-
-/*  ----------------------------------- Defines, Data Structures, Typedefs */
-#define SIGNATURE       0x5f525349     /* "ISR_" (in reverse). */
-
-/* The IRQ object, passed to our hardware and virtual interrupt routines: */
-struct ISR_IRQ {
-       u32 dwSignature;        /* Used for object validation.   */
-       void *pRefData;         /* Argument for client's ISR.    */
-       ISR_PROC pfnISR;        /* Client's ISR.                 */
-
-       u32 dwIntrID;           /* hardware intertupt identifier */
-};
-
-/*  ----------------------------------- Globals & Defines */
-#if GT_TRACE
-static struct GT_Mask ISR_DebugMask = { NULL, NULL };  /* ISR Debug Mask */
-#endif
-
-/*  ----------------------------------- Function Prototypes */
-static irqreturn_t HardwareIST(int irq, void *hIRQ);
-
-/*
- *  ======== ISR_Exit ========
- *  Purpose:
- *      Discontinue usage of the ISR module.
- */
-void ISR_Exit(void)
-{
-       GT_0trace(ISR_DebugMask, GT_ENTER, "Entered ISR_Exit\n");
-}
-
-/*
- *  ======== ISR_Init ========
- *  Purpose:
- *      Initialize the ISR module's private state.
- */
-bool ISR_Init(void)
-{
-       GT_create(&ISR_DebugMask, "IS");
-
-       GT_0trace(ISR_DebugMask, GT_5CLASS, "Entered ISR_Init\n");
-
-       return true;
-}
-
-/*
- *  ======== ISR_Install ========
- *  Purpose:
- *      Register an ISR for a given IRQ with the system's interrupt manager.
- */
-DSP_STATUS ISR_Install(OUT struct ISR_IRQ **phIRQ,
-                      IN CONST struct CFG_HOSTRES *pHostConfig,
-                      ISR_PROC pfnISR, u32 dwIntrType, void *pRefData)
-{
-       DSP_STATUS status = DSP_SOK;
-       struct ISR_IRQ *pIRQObject = NULL;
-
-       DBC_Require(pHostConfig);
-       DBC_Require(pRefData != NULL);
-
-       GT_5trace(ISR_DebugMask, GT_ENTER,
-                 "Entered ISR_Install, args:" "\n\thIRQ:"
-                 "0x%x\n\tpHostConfig: 0x%x\n\tpfnISR: 0x%x\n" "\tpRefData:"
-                 "0x%x\n \tdwIntrType 0x%x\n", phIRQ, pHostConfig, pfnISR,
-                 pRefData, dwIntrType);
-
-       if (phIRQ != NULL) {
-               *phIRQ = NULL;
-               /*
-                *  Allocate an IRQ object to store information allowing our
-                *  interrupt handler to dispatch to the client's interrupt
-                *  routines.
-                */
-               MEM_AllocObject(pIRQObject, struct ISR_IRQ, SIGNATURE);
-               if (pIRQObject != NULL) {
-                       /* Fill out the Object: */
-                       pIRQObject->pRefData = pRefData;
-                       pIRQObject->pfnISR = pfnISR;
-
-                       /* Install different HW interrupts based on interrupt
-                        * type. */
-                               switch (dwIntrType) {
-                               case ISR_MAILBOX1:
-                               pIRQObject->dwIntrID = INT_MAIL_MPU_IRQ;
-
-                               GT_0trace(ISR_DebugMask, GT_1CLASS,
-                                         "Setting intr id for "
-                                         "ISR_MAILBOX1\n");
-                               break;
-
-                               case ISR_MAILBOX2:
-                               pIRQObject->dwIntrID = MAIL_U3_MPU_IRQ;
-                               GT_0trace(ISR_DebugMask, GT_1CLASS,
-                                         "Setting intr id for "
-                                         "ISR_MAILBOX2\n");
-
-                               break;
-
-                               case DSP_MMUFAULT:
-                               pIRQObject->dwIntrID = INT_DSP_MMU_IRQ;
-                               GT_0trace(ISR_DebugMask, GT_1CLASS,
-                                         "Setting intr id for "
-                                         "DSP_MMUFAULT\n");
-                               break;
-
-                               default:
-                               pIRQObject->dwIntrID = (u32) 0x00;
-                               GT_0trace(ISR_DebugMask, GT_1CLASS,
-                                         "Setting intr id to NULL\n");
-                               break;
-                       }
-
-                       if (pIRQObject->dwIntrID != 0) {
-                               status = request_irq(pIRQObject->dwIntrID,
-                                                    HardwareIST, 0,
-                                                   "DspBridge", pIRQObject);
-                       } else {
-                               status = DSP_EINVALIDARG;
-                       }
-               }
-               if (DSP_SUCCEEDED(status)) {
-                       *phIRQ = pIRQObject;
-                       GT_1trace(ISR_DebugMask, GT_1CLASS,
-                                 "ISR:IRQ Object 0x%x \n",
-                                 pIRQObject);
-               } else {
-                       MEM_FreeObject(pIRQObject);
-               }
-       }
-       DBC_Ensure(DSP_SUCCEEDED(status) || (!phIRQ || *phIRQ == NULL));
-       return status;
-}
-
-/*
- *  ======== ISR_Uninstall ========
- *  Purpose:
- *      Deregister the ISR previously installed by ISR_Install().
- *      if it fails we do not delete the IRQ object.
- */
-DSP_STATUS ISR_Uninstall(struct ISR_IRQ *hIRQ)
-{
-       DSP_STATUS status = DSP_SOK;
-       struct ISR_IRQ *pIRQObject = (struct ISR_IRQ *)hIRQ;
-
-       DBC_Require(hIRQ > 0);
-
-       GT_1trace(ISR_DebugMask, GT_ENTER,
-                 "Entered ISR_Uninstall, hIRQ: 0x%x\n", hIRQ);
-
-       if (MEM_IsValidHandle(hIRQ, SIGNATURE)) {
-               /* Linux function to uninstall ISR */
-               free_irq(pIRQObject->dwIntrID, pIRQObject);
-               pIRQObject->dwIntrID = (u32) -1;
-       } else {
-               status = DSP_EHANDLE;
-       }
-
-       /* Free our IRQ object: */
-       if (DSP_SUCCEEDED(status)) {
-               MEM_FreeObject(pIRQObject);
-               pIRQObject = NULL;
-       }
-
-       DBC_Ensure((DSP_SUCCEEDED(status) && pIRQObject == NULL) ||
-                  DSP_FAILED(status));
-
-       return status;
-}
-
-/*
- *  ======== HardwareIST ========
- *  Purpose:
- *      Linux calls this IRQ handler on interrupt.
- */
-static irqreturn_t HardwareIST(int irq, void *hIRQ)
-{
-       struct ISR_IRQ *pIRQObject = (struct ISR_IRQ *)hIRQ;
-
-       DBC_Require(irq == pIRQObject->dwIntrID);
-
-       /* Call the function registered in ISR_Install */
-       (*(pIRQObject->pfnISR)) (pIRQObject->pRefData);
-
-       return IRQ_HANDLED;
-}
diff --git a/drivers/dsp/bridge/services/services.c 
b/drivers/dsp/bridge/services/services.c
index a41c3ad..572e4f2 100644
--- a/drivers/dsp/bridge/services/services.c
+++ b/drivers/dsp/bridge/services/services.c
@@ -47,7 +47,6 @@
 #include <csl.h>
 #include <dbg.h>
 #include <dpc.h>
-#include <isr.h>
 #include <kfile.h>
 #include <list.h>
 #include <mem.h>
@@ -92,7 +91,6 @@ void SERVICES_Exit(void)
                PRCS_Exit();
                LST_Exit();
                KFILE_Exit();
-               ISR_Exit();
                DPC_Exit();
                DBG_Exit();
                CSL_Exit();
@@ -113,7 +111,7 @@ void SERVICES_Exit(void)
 bool SERVICES_Init(void)
 {
        bool fInit = true;
-       bool fCFG, fCSL, fDBG, fDPC, fISR, fKFILE, fLST, fMEM;
+       bool fCFG, fCSL, fDBG, fDPC, fKFILE, fLST, fMEM;
        bool fPRCS, fREG, fSYNC, fCLK, fUTIL, fNTFY;

        DBC_Require(cRefs >= 0);
@@ -133,7 +131,6 @@ bool SERVICES_Init(void)
                fCSL = CSL_Init();
                fDBG = DBG_Init();
                fDPC = DPC_Init();
-               fISR = ISR_Init();
                fKFILE = KFILE_Init();
                fLST = LST_Init();
                fPRCS = PRCS_Init();
@@ -143,7 +140,7 @@ bool SERVICES_Init(void)
                fUTIL = UTIL_Init();
                fNTFY = NTFY_Init();

-               fInit = fCFG && fCSL && fDBG && fDPC && fISR && fKFILE &&
+               fInit = fCFG && fCSL && fDBG && fDPC && fKFILE &&
                        fLST && fMEM && fPRCS && fREG && fSYNC && fCLK && fUTIL;

                if (!fInit) {
@@ -171,9 +168,6 @@ bool SERVICES_Init(void)
                        if (fKFILE)
                                KFILE_Exit();

-                       if (fISR)
-                               ISR_Exit();
-
                        if (fDPC)
                                DPC_Exit();

diff --git a/drivers/dsp/bridge/wmd/_deh.h b/drivers/dsp/bridge/wmd/_deh.h
index 4306501..586c939 100644
--- a/drivers/dsp/bridge/wmd/_deh.h
+++ b/drivers/dsp/bridge/wmd/_deh.h
@@ -29,7 +29,6 @@
 #define _DEH_

 #include <dpc.h>
-#include <isr.h>
 #include <ntfy.h>
 #include <wmd.h>

@@ -41,7 +40,6 @@ struct DEH_MGR {
        struct WMD_DEV_CONTEXT *hWmdContext;    /* WMD device context. */
        struct NTFY_OBJECT *hNtfy;      /* NTFY object                  */
        struct DPC_OBJECT *hMmuFaultDpc;        /* DPC object handle.  */
-       struct ISR_IRQ *hMmuFaultIsr;   /* DSP MMU ISR handle.          */
        struct DSP_ERRORINFO errInfo;   /* DSP exception info.          */
 } ;

diff --git a/drivers/dsp/bridge/wmd/io_sm.c b/drivers/dsp/bridge/wmd/io_sm.c
index d08421c..09ea3b1 100644
--- a/drivers/dsp/bridge/wmd/io_sm.c
+++ b/drivers/dsp/bridge/wmd/io_sm.c
@@ -196,7 +196,6 @@ struct IO_MGR {
        u8 *pMsgInput;  /* Address of input messages    */
        u8 *pMsgOutput;         /* Address of output messages   */
        u32 uSMBufSize;         /* Size of a shared memory I/O channel */
-       struct ISR_IRQ *hIRQ;           /* Virutalized IRQ handle       */
        bool fSharedIRQ;        /* Is this IRQ shared?    */
        struct DPC_OBJECT *hDPC;        /* DPC object handle        */
        struct SYNC_CSOBJECT *hCSObj;   /* Critical section object handle */
@@ -335,18 +334,19 @@ DSP_STATUS WMD_IO_Create(OUT struct IO_MGR **phIOMgr,
                IO_DisableInterrupt(hWmdContext);
                if (devType == DSP_UNIT) {
                        /* Plug the channel ISR:. */
-                       status = ISR_Install(&pIOMgr->hIRQ, &hostRes, IO_ISR,
-                                ISR_MAILBOX1, (void *)pIOMgr);
+                       if ((request_irq(INT_MAIL_MPU_IRQ, IO_ISR, 0,
+                                           "DspBridge", (void *)pIOMgr)) == 0)
+                               status = DSP_SOK;
+                       else
+                               status = DSP_EFAIL;
                }
-               if (DSP_SUCCEEDED(status)) {
-                       /* Enable interrupt used for dsp i/o link */
-                       /* moved  IO_EnableInterrupt(hWmdContext); */
-               } else {
+               if (DSP_SUCCEEDED(status))
+                       DBG_Trace(DBG_LEVEL1, "ISR_IRQ Object 0x%x \n",
+                                                pIOMgr);
+               else
                        status = CHNL_E_ISR;
-               }
-       } else {
+       } else
                status = CHNL_E_ISR;
-       }
 func_cont:
        if (DSP_FAILED(status)) {
                /* Cleanup: */
@@ -371,15 +371,15 @@ DSP_STATUS WMD_IO_Destroy(struct IO_MGR *hIOMgr)
        struct WMD_DEV_CONTEXT *hWmdContext;
        if (MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE)) {
                /* Unplug IRQ:    */
-               if (hIOMgr->hIRQ) {
-                       /* Disable interrupts from the board:  */
-                       if (DSP_SUCCEEDED(DEV_GetWMDContext(hIOMgr->hDevObject,
-                          &hWmdContext)))
-                               DBC_Assert(hWmdContext);
-                       (void)CHNLSM_DisableInterrupt(hWmdContext);
-                       (void)ISR_Uninstall(hIOMgr->hIRQ);
-                       (void)DPC_Destroy(hIOMgr->hDPC);
+               /* Disable interrupts from the board:  */
+               if (DSP_SUCCEEDED(DEV_GetWMDContext(hIOMgr->hDevObject,
+                  &hWmdContext))) {
+                       DBC_Assert(hWmdContext);
                }
+               (void)CHNLSM_DisableInterrupt(hWmdContext);
+               /* Linux function to uninstall ISR */
+               free_irq(INT_MAIL_MPU_IRQ, (void *)hIOMgr);
+               (void)DPC_Destroy(hIOMgr->hDPC);
 #ifndef DSP_TRACEBUF_DISABLED
                if (hIOMgr->pMsg)
                        MEM_Free(hIOMgr->pMsg);
@@ -1056,10 +1056,11 @@ void IO_DPC(IN OUT void *pRefData)
  *      Calls the WMD's CHNL_ISR to determine if this interrupt is ours, then
  *      schedules a DPC to dispatch I/O.
  */
-bool IO_ISR(IN void *pRefData)
+irqreturn_t IO_ISR(int irq, IN void *pRefData)
 {
        struct IO_MGR *hIOMgr = (struct IO_MGR *)pRefData;
        bool fSchedDPC;
+       DBC_Require(irq == INT_MAIL_MPU_IRQ);
        DBC_Require(MEM_IsValidHandle(hIOMgr, IO_MGRSIGNATURE));
        DBG_Trace(DBG_LEVEL3, "Entering IO_ISR(0x%x)\n", pRefData);
        /* Call WMD's CHNLSM_ISR() to see if interrupt is ours, and process. */
@@ -1082,13 +1083,10 @@ bool IO_ISR(IN void *pRefData)
                                DPC_Schedule(hIOMgr->hDPC);
                        }
                }
-               return true;
-       } else {
+       } else
                /* Ensure that, if WMD didn't claim it, the IRQ is shared. */
                DBC_Ensure(hIOMgr->fSharedIRQ);
-               /* If not ours, return false. */
-               return false;
-       }
+       return IRQ_HANDLED;
 }

 /*
diff --git a/drivers/dsp/bridge/wmd/mmu_fault.c 
b/drivers/dsp/bridge/wmd/mmu_fault.c
index b4abee1..936af22 100644
--- a/drivers/dsp/bridge/wmd/mmu_fault.c
+++ b/drivers/dsp/bridge/wmd/mmu_fault.c
@@ -55,6 +55,7 @@

 /*  ----------------------------------- This */
 #include "_deh.h"
+#include <cfg.h>
 #include "_tiomap_mmu.h"
 #include "_tiomap.h"
 #include "mmu_fault.h"
@@ -85,7 +86,7 @@ void MMU_FaultDpc(IN void *pRefData)
  *  ======== MMU_FaultIsr ========
  *      ISR to be triggered by a DSP MMU fault interrupt.
  */
-void MMU_FaultIsr(IN void *pRefData)
+irqreturn_t  MMU_FaultIsr(int irq, IN void *pRefData)
 {
        struct DEH_MGR *pDehMgr = (struct DEH_MGR *)pRefData;
        struct WMD_DEV_CONTEXT *pDevContext;
@@ -94,7 +95,7 @@ void MMU_FaultIsr(IN void *pRefData)


        DBG_Trace(DBG_LEVEL1, "Entering DEH_DspMmuIsr: 0x%x\n", pRefData);
-
+       DBC_Require(irq == INT_DSP_MMU_IRQ);
        DBC_Require(MEM_IsValidHandle(pDehMgr, SIGNATURE));

        if (MEM_IsValidHandle(pDehMgr, SIGNATURE)) {
@@ -138,6 +139,7 @@ void MMU_FaultIsr(IN void *pRefData)
                }
                PrintDspTraceBuffer(pDehMgr);
        }
+       return IRQ_HANDLED;
 }


diff --git a/drivers/dsp/bridge/wmd/mmu_fault.h 
b/drivers/dsp/bridge/wmd/mmu_fault.h
index 47602a9..009382a 100644
--- a/drivers/dsp/bridge/wmd/mmu_fault.h
+++ b/drivers/dsp/bridge/wmd/mmu_fault.h
@@ -39,7 +39,7 @@
  *  ======== MMU_FaultIsr ========
  *      ISR to be triggered by a DSP MMU fault interrupt.
  */
-       void MMU_FaultIsr(IN void *pRefData);
+irqreturn_t  MMU_FaultIsr(int irq, IN void *pRefData);

 /*
  *  ========PrintDspTraceBuffer ========
diff --git a/drivers/dsp/bridge/wmd/tiomap_sm.c 
b/drivers/dsp/bridge/wmd/tiomap_sm.c
index 35f6a77..ce5e53c 100644
--- a/drivers/dsp/bridge/wmd/tiomap_sm.c
+++ b/drivers/dsp/bridge/wmd/tiomap_sm.c
@@ -49,7 +49,6 @@
 /*  ----------------------------------- OS Adaptation Layer */
 #include <cfg.h>
 #include <drv.h>
-#include <isr.h>
 #include <util.h>

 /*  ----------------------------------- Mini Driver */
diff --git a/drivers/dsp/bridge/wmd/ue_deh.c b/drivers/dsp/bridge/wmd/ue_deh.c
index 0345b84..b5a016d 100644
--- a/drivers/dsp/bridge/wmd/ue_deh.c
+++ b/drivers/dsp/bridge/wmd/ue_deh.c
@@ -47,7 +47,6 @@
 #include <csl.h>
 #include <cfg.h>
 #include <dpc.h>
-#include <isr.h>
 #include <mem.h>
 #include <ntfy.h>
 #include <drv.h>
@@ -119,9 +118,11 @@ DSP_STATUS WMD_DEH_Create(OUT struct DEH_MGR **phDehMgr,
                        pDehMgr->errInfo.dwVal2 = 0L;
                        pDehMgr->errInfo.dwVal3 = 0L;
                        /* Install ISR function for DSP MMU fault */
-                       status = ISR_Install(&pDehMgr->hMmuFaultIsr,
-                                &cfgHostRes, (ISR_PROC)MMU_FaultIsr,
-                                DSP_MMUFAULT, (void *)pDehMgr);
+                       if ((request_irq(INT_DSP_MMU_IRQ, MMU_FaultIsr, 0,
+                                           "DspBridge", (void *)pDehMgr)) == 0)
+                               status = DSP_SOK;
+                       else
+                               status = DSP_EFAIL;
                }
        }
        if (DSP_FAILED(status)) {
@@ -130,6 +131,8 @@ DSP_STATUS WMD_DEH_Create(OUT struct DEH_MGR **phDehMgr,
                *phDehMgr = NULL;
        } else {
                *phDehMgr = (struct DEH_MGR *)pDehMgr;
+               DBG_Trace(DBG_LEVEL1, "ISR_IRQ Object 0x%x \n",
+                                        pDehMgr);
        }
        DBG_Trace(DBG_LEVEL1, "Exiting DEH_Create.\n");
        return status;
@@ -149,9 +152,8 @@ DSP_STATUS WMD_DEH_Destroy(struct DEH_MGR *hDehMgr)
                /* If notification object exists, delete it */
                if (pDehMgr->hNtfy)
                        (void)NTFY_Delete(pDehMgr->hNtfy);
-
                /* Disable DSP MMU fault */
-               (void)ISR_Uninstall(pDehMgr->hMmuFaultIsr);
+               free_irq(INT_DSP_MMU_IRQ, pDehMgr);
                (void)DPC_Destroy(pDehMgr->hMmuFaultDpc);
                /* Deallocate the DEH manager object */
                MEM_FreeObject(pDehMgr);
--
1.5.6.4

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

Reply via email to