>From 60000e23ab5efb98dbdcff47620627099cc220d1 Mon Sep 17 00:00:00 2001
From: Fernando Guzman Lugo <[EMAIL PROTECTED]>
Date: Fri, 12 Sep 2008 21:04:03 -0500
Subject: [PATCH] BRIDGE: Module ISR removed
This patch removes all the ISR wrapper functions
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/Kbuild | 2 +-
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 +-
13 files changed, 39 insertions(+), 464 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/Kbuild b/drivers/dsp/bridge/Kbuild
index 9fd1800..e2287cc 100644
--- a/drivers/dsp/bridge/Kbuild
+++ b/drivers/dsp/bridge/Kbuild
@@ -2,7 +2,7 @@ obj-$(CONFIG_MPU_BRIDGE) += bridgedriver.o
libgen = gen/gb.o gen/gt.o gen/gs.o gen/gh.o gen/_gt_para.o gen/uuidutil.o
libservices = services/csl.o services/mem.o services/list.o services/dpc.o \
- services/isr.o services/kfile.o services/sync.o \
+ services/kfile.o services/sync.o \
services/clk.o services/cfg.o services/reg.o \
services/regsup.o services/prcs.o services/ntfy.o \
services/dbg.o services/services.o
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.5.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