[rtems commit] sparc: Add SPARC_INTERRUPT_TRAP_TO_SOURCE()

Sebastian Huber sebh at rtems.org
Fri Nov 6 13:07:26 UTC 2020


Module:    rtems
Branch:    master
Commit:    828114778d8ba52fac1cf401978f2aacaedb572c
Changeset: http://git.rtems.org/rtems/commit/?id=828114778d8ba52fac1cf401978f2aacaedb572c

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Nov  5 09:50:36 2020 +0100

sparc: Add SPARC_INTERRUPT_TRAP_TO_SOURCE()

Update #4171.

---

 bsps/sparc/erc32/include/erc32.h                   |  2 +-
 bsps/sparc/erc32/start/setvec.c                    |  2 +-
 bsps/sparc/leon2/include/leon.h                    |  2 +-
 bsps/sparc/leon2/start/setvec.c                    |  2 +-
 bsps/sparc/leon3/include/leon.h                    |  2 +-
 bsps/sparc/leon3/start/setvec.c                    |  2 +-
 cpukit/score/cpu/sparc/include/rtems/score/sparc.h | 17 +++++++++++++++++
 7 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/bsps/sparc/erc32/include/erc32.h b/bsps/sparc/erc32/include/erc32.h
index 2d278fc..6d79772 100644
--- a/bsps/sparc/erc32/include/erc32.h
+++ b/bsps/sparc/erc32/include/erc32.h
@@ -85,7 +85,7 @@ extern "C" {
 
 #define ERC32_TRAP_TYPE( _source ) SPARC_ASYNCHRONOUS_TRAP((_source) + 0x10)
 
-#define ERC32_TRAP_SOURCE( _trap ) ((_trap) - 0x10)
+#define ERC32_TRAP_SOURCE( _trap ) SPARC_INTERRUPT_TRAP_TO_SOURCE( _trap )
 
 #define ERC32_Is_MEC_Trap( _trap ) SPARC_IS_INTERRUPT_TRAP( _trap )
 
diff --git a/bsps/sparc/erc32/start/setvec.c b/bsps/sparc/erc32/start/setvec.c
index 73bcc99..50b6266 100644
--- a/bsps/sparc/erc32/start/setvec.c
+++ b/bsps/sparc/erc32/start/setvec.c
@@ -51,7 +51,7 @@ rtems_isr_entry set_vector(                   /* returns old vector */
   if ( SPARC_IS_INTERRUPT_TRAP( vector ) ) {
     uint32_t source;
 
-    source = ERC32_TRAP_SOURCE( SPARC_REAL_TRAP_NUMBER( vector ) );
+    source = SPARC_INTERRUPT_TRAP_TO_SOURCE( vector );
 
     ERC32_Clear_interrupt( source );
     ERC32_Unmask_interrupt( source );
diff --git a/bsps/sparc/leon2/include/leon.h b/bsps/sparc/leon2/include/leon.h
index 49af308..1d58aa7 100644
--- a/bsps/sparc/leon2/include/leon.h
+++ b/bsps/sparc/leon2/include/leon.h
@@ -82,7 +82,7 @@ extern "C" {
 
 #define LEON_TRAP_TYPE( _source ) SPARC_ASYNCHRONOUS_TRAP((_source) + 0x10)
 
-#define LEON_TRAP_SOURCE( _trap ) ((_trap) - 0x10)
+#define LEON_TRAP_SOURCE( _trap ) SPARC_INTERRUPT_TRAP_TO_SOURCE( _trap )
 
 #define LEON_INT_TRAP( _trap ) SPARC_IS_INTERRUPT_TRAP( _trap )
 
diff --git a/bsps/sparc/leon2/start/setvec.c b/bsps/sparc/leon2/start/setvec.c
index 51647e3..1557c77 100644
--- a/bsps/sparc/leon2/start/setvec.c
+++ b/bsps/sparc/leon2/start/setvec.c
@@ -52,7 +52,7 @@ rtems_isr_entry set_vector(                   /* returns old vector */
   if ( SPARC_IS_INTERRUPT_TRAP( vector ) ) {
     uint32_t source;
 
-    source = LEON_TRAP_SOURCE( SPARC_REAL_TRAP_NUMBER( vector ) );
+    source = SPARC_INTERRUPT_TRAP_TO_SOURCE( vector );
 
     LEON_Clear_interrupt( source );
     LEON_Unmask_interrupt( source );
diff --git a/bsps/sparc/leon3/include/leon.h b/bsps/sparc/leon3/include/leon.h
index 5ab0d45..0e86dbe 100644
--- a/bsps/sparc/leon3/include/leon.h
+++ b/bsps/sparc/leon3/include/leon.h
@@ -44,7 +44,7 @@ extern "C" {
 
 #define LEON_TRAP_TYPE( _source ) SPARC_ASYNCHRONOUS_TRAP((_source) + 0x10)
 
-#define LEON_TRAP_SOURCE( _trap ) ((_trap) - 0x10)
+#define LEON_TRAP_SOURCE( _trap ) SPARC_INTERRUPT_TRAP_TO_SOURCE( _trap )
 
 #define LEON_INT_TRAP( _trap ) SPARC_IS_INTERRUPT_TRAP( _trap )
 
diff --git a/bsps/sparc/leon3/start/setvec.c b/bsps/sparc/leon3/start/setvec.c
index 987e505..f9bccd4 100644
--- a/bsps/sparc/leon3/start/setvec.c
+++ b/bsps/sparc/leon3/start/setvec.c
@@ -51,7 +51,7 @@ rtems_isr_entry set_vector(                   /* returns old vector */
   if ( SPARC_IS_INTERRUPT_TRAP( vector ) ) {
     uint32_t source;
 
-    source = LEON_TRAP_SOURCE( SPARC_REAL_TRAP_NUMBER( vector ) );
+    source = SPARC_INTERRUPT_TRAP_TO_SOURCE( vector );
 
     LEON_Clear_interrupt( source );
     LEON_Unmask_interrupt( source );
diff --git a/cpukit/score/cpu/sparc/include/rtems/score/sparc.h b/cpukit/score/cpu/sparc/include/rtems/score/sparc.h
index 0cf8b2d..182281f 100644
--- a/cpukit/score/cpu/sparc/include/rtems/score/sparc.h
+++ b/cpukit/score/cpu/sparc/include/rtems/score/sparc.h
@@ -223,6 +223,23 @@ extern "C" {
   ( SPARC_REAL_TRAP_NUMBER( _trap ) >= 0x11 && \
     SPARC_REAL_TRAP_NUMBER( _trap ) <= 0x1f )
 
+/**
+ * @brief Maps the interrupt trap number to the associated interrupt source
+ *   number.
+ *
+ * Interrupt trap numbers are real hardware vector numbers, synchronous trap
+ * numbers, and asynchronous trap numbers for which SPARC_IS_INTERRUPT_TRAP()
+ * returns true.
+ *
+ * @param _trap is the real hardware vector number, synchronous trap number, or
+ *   asynchronous trap number to map.
+ *
+ * @return Returns the interrupt source number associated with the interrupt
+ *   trap number.
+ */
+#define SPARC_INTERRUPT_TRAP_TO_SOURCE( _trap ) \
+  ( SPARC_REAL_TRAP_NUMBER( _trap ) - 0x10 )
+
 #ifndef ASM
 
 /**



More information about the vc mailing list