changeset 751:fbec1b6fe737

* include/plf_intr.h: Defined CYGNUM_HAL_INTERRUPT_RTC to counter/compare register interrupt. Added implementations of HAL_INTERRUPT_MASK, HAL_INTERRUPT_UNMASK, and HAL_INTERRUPT_ACKNOWLEDGE that will work in eCos rather than just RedBoot. * src/plf_misc.c (hal_platform_init): Changed spelling of eCos for the LED to match the official typography.
author nickg
date Thu, 27 Feb 2003 18:48:49 +0000
parents fc01ee7daddc
children d143472a6538
files packages/hal/mips/atlas/current/ChangeLog packages/hal/mips/atlas/current/include/plf_intr.h packages/hal/mips/atlas/current/src/plf_misc.c
diffstat 3 files changed, 86 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/packages/hal/mips/atlas/current/ChangeLog
+++ b/packages/hal/mips/atlas/current/ChangeLog
@@ -1,3 +1,14 @@
+2003-02-27  Nick Garnett  <nickg@calivar.com>
+
+	* include/plf_intr.h: Defined CYGNUM_HAL_INTERRUPT_RTC to
+	counter/compare register interrupt. Added implementations of
+	HAL_INTERRUPT_MASK, HAL_INTERRUPT_UNMASK, and
+	HAL_INTERRUPT_ACKNOWLEDGE that will work in eCos rather than just
+	RedBoot.
+
+	* src/plf_misc.c (hal_platform_init): Changed spelling of eCos for
+	the LED to match the official typography.
+
 2002-08-06  Gary Thomas  <gary@chez-thomas.org>
 2002-08-06  Motoya Kurotsu <kurotsu@allied-telesis.co.jp>	
 
--- a/packages/hal/mips/atlas/current/include/plf_intr.h
+++ b/packages/hal/mips/atlas/current/include/plf_intr.h
@@ -77,7 +77,7 @@
 #define CYGNUM_HAL_INTERRUPT_TIM0                1
 #define CYGNUM_HAL_INTERRUPT_2                   2
 #define CYGNUM_HAL_INTERRUPT_3                   3
-#define CYGNUM_HAL_INTERRUPT_RTC                 4
+#define CYGNUM_HAL_INTERRUPT_FPGA_RTC            4
 #define CYGNUM_HAL_INTERRUPT_COREHI              5
 #define CYGNUM_HAL_INTERRUPT_CORELO              6
 #define CYGNUM_HAL_INTERRUPT_7                   7
@@ -106,6 +106,8 @@
 
 #define CYGNUM_HAL_INTERRUPT_DEBUG_UART        CYGNUM_HAL_INTERRUPT_SER
 
+#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_HW5
+
 #define CYGHWR_HAL_INTERRUPT_VECTORS_DEFINED
 
 #endif
@@ -119,14 +121,78 @@
 // interrupts.
 externC volatile CYG_BYTE hal_interrupt_level[CYGNUM_HAL_ISR_COUNT];
 
-#define HAL_INTERRUPT_MASK( _vector_ )                       \
-    HAL_WRITE_UINT32( HAL_ATLAS_INTRSTEN, (1<<(_vector_)) );
+#define HAL_INTERRUPT_MASK( _vector_ )                                  \
+{                                                                       \
+    cyg_uint32 __vector = _vector_;                                     \
+                                                                        \
+    if( (_vector_) < CYGNUM_HAL_INTERRUPT_HW1 )                         \
+        HAL_WRITE_UINT32( HAL_ATLAS_INTRSTEN, (1<<(_vector_)) );        \
+    else                                                                \
+    {                                                                   \
+        __vector -= (CYGNUM_HAL_INTERRUPT_HW1-1);                       \
+                                                                        \
+        asm volatile (                                                  \
+            "mfc0   $3,$12\n"                                           \
+            "la     $2,0x00000400\n"                                    \
+            "sllv   $2,$2,%0\n"                                         \
+            "nor    $2,$2,$0\n"                                         \
+            "and    $3,$3,$2\n"                                         \
+            "mtc0   $3,$12\n"                                           \
+            "nop; nop; nop\n"                                           \
+            :                                                           \
+            : "r"(__vector)                                             \
+            : "$2", "$3"                                                \
+            );                                                          \
+    }                                                                   \
+}
 
-#define HAL_INTERRUPT_UNMASK( _vector_ )                     \
-    HAL_WRITE_UINT32( HAL_ATLAS_INTSETEN, (1<<(_vector_)) );
+#define HAL_INTERRUPT_UNMASK( _vector_ )                                \
+{                                                                       \
+    cyg_uint32 __vector = _vector_;                                     \
+                                                                        \
+    if( (__vector) < CYGNUM_HAL_INTERRUPT_HW1 )                         \
+    {                                                                   \
+        HAL_WRITE_UINT32( HAL_ATLAS_INTSETEN, (1<<(__vector)) );        \
+        __vector = 0;                                                   \
+    }                                                                   \
+    else                                                                \
+        __vector -= (CYGNUM_HAL_INTERRUPT_HW1-1);                       \
+                                                                        \
+    asm volatile (                                                      \
+        "mfc0   $3,$12\n"                                               \
+        "la     $2,0x00000400\n"                                        \
+        "sllv   $2,$2,%0\n"                                             \
+        "or     $3,$3,$2\n"                                             \
+        "mtc0   $3,$12\n"                                               \
+        "nop; nop; nop\n"                                               \
+        :                                                               \
+        : "r"(__vector)                                                 \
+        : "$2", "$3"                                                    \
+        );                                                              \
+}
 
-#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ )                \
-{                                                            \
+#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ )           \
+{                                                       \
+    cyg_uint32 __vector = _vector_;                     \
+                                                        \
+    if( __vector >= CYGNUM_HAL_INTERRUPT_HW1 )          \
+        __vector -= (CYGNUM_HAL_INTERRUPT_HW1-1);       \
+    else                                                \
+        __vector = 0;                                   \
+                                                        \
+    asm volatile (                                      \
+        "mfc0   $3,$13\n"                               \
+        "la     $2,0x00000400\n"                        \
+        "sllv   $2,$2,%0\n"                             \
+        "nor    $2,$2,$0\n"                             \
+        "and    $3,$3,$2\n"                             \
+        "mtc0   $3,$13\n"                               \
+        "nop; nop; nop\n"                               \
+        :                                               \
+        : "r"(__vector)                                 \
+        : "$2", "$3"                                    \
+        );                                              \
+                                                        \
 }
 
 #define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ )   \
--- a/packages/hal/mips/atlas/current/src/plf_misc.c
+++ b/packages/hal/mips/atlas/current/src/plf_misc.c
@@ -105,8 +105,8 @@ void hal_platform_init(void)
     HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS1, ' ');
     HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS2, 'e');
     HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS3, 'C');
-    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS4, 'O');
-    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS5, 'S');
+    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS4, 'o');
+    HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS5, 's');
     HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS6, ' ');
     HAL_WRITE_UINT32(HAL_DISPLAY_ASCIIPOS7, ' ');
 #endif