diff packages/hal/mips/arch/current/src/hal_misc.c @ 38:e7ba79f6d3a8 ecos-sw-1999-09-23

Merge from eCos master repository on 1999-09-23-20:10:25-BST
author jlarmour
date Thu, 23 Sep 1999 19:52:27 +0000
parents e97d78785e2d
children a0774359f013
line wrap: on
line diff
--- a/packages/hal/mips/arch/current/src/hal_misc.c
+++ b/packages/hal/mips/arch/current/src/hal_misc.c
@@ -72,7 +72,7 @@ externC void *__mem_fault_handler;
 
 externC cyg_uint8 cyg_hal_mips_process_fpe( HAL_SavedRegisters *regs );
 
-externC void exception_handler(HAL_SavedRegisters *regs)
+externC cyg_uint32 cyg_hal_exception_handler(HAL_SavedRegisters *regs)
 {
 #ifdef  CYGHWR_HAL_MIPS_FPU
     // We may be required to emulate certain unimplemented Floating Point
@@ -84,7 +84,7 @@ externC void exception_handler(HAL_Saved
         // the exception successfully. If so, we just return
 
         if ( cyg_hal_mips_process_fpe(regs) )
-            return;
+            return 0;
     }
 #endif
 
@@ -94,7 +94,7 @@ externC void exception_handler(HAL_Saved
     // and if so jump to the saved address
     if (__mem_fault_handler) {
         regs->pc = (CYG_ADDRWORD)__mem_fault_handler;
-        return; // Caught an exception inside stubs        
+        return 0; // Caught an exception inside stubs        
     }
 
     // Set the pointer to the registers of the current exception
@@ -117,7 +117,7 @@ externC void exception_handler(HAL_Saved
     CYG_FAIL("Exception!!!");
     
 #endif    
-    return;
+    return 0;
 }
 
 /*------------------------------------------------------------------------*/
@@ -137,6 +137,17 @@ externC cyg_uint32 hal_default_isr(CYG_A
         if( result != 0 ) return result;
     }
     
+#if defined(CYG_HAL_USE_ROM_MONITOR_CYGMON)
+#if defined(HAL_DIAG_IRQ_CHECK)
+    {
+        cyg_uint32 ret;
+        /* let ROM monitor handle unexpected interrupts */
+        HAL_DIAG_IRQ_CHECK(vector, ret);
+        if (ret<=0)
+            return ret;
+    }
+#endif // def HAL_DIAG_IRQ_CHECK
+#endif // def CYG_HAL_USE_ROM_MONITOR
 #endif
     
     CYG_TRACE1(true, "Interrupt: %d", vector);