diff src/cs/drivers/drv_app/ffs/board/amdsbdrv.c @ 72:4484ab3f6ab3

FFS interrupt voodoo: made original TMS470 approach work with gcc
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 20 Jul 2018 03:35:25 +0000
parents 559a8b3ef10b
children
line wrap: on
line diff
--- a/src/cs/drivers/drv_app/ffs/board/amdsbdrv.c	Fri Jul 20 02:48:06 2018 +0000
+++ b/src/cs/drivers/drv_app/ffs/board/amdsbdrv.c	Fri Jul 20 03:35:25 2018 +0000
@@ -13,7 +13,6 @@
 #include "ffs/ffs.h"
 #include "ffs/board/drv.h"
 #include "ffs/board/ffstrace.h"
-#include "nucleus.h"
 
 
 // Due to long branches, we disable all tracing and led function calls.
@@ -142,30 +141,48 @@
  * Interrupt Enable/Disable
  ******************************************************************************/
 
-uint32 amd_int_disable(void)
+#ifdef __GNUC__
+#define NOINLINE __attribute__ ((noinline))
+#else
+#define NOINLINE
+#endif
+
+uint32 NOINLINE amd_int_disable(void)
 {
 #ifdef __GNUC__
-	return NU_Control_Interrupts(0xC0);
+    asm("        .code 16");
 #else
     asm("        .state16");
+#endif
     asm("        mov       A1, #0xC0");
     asm("        ldr       A2, tct_amd_disable");
     asm("        bx        A2      ");
 
+#ifdef __GNUC__
+    asm(".balign 4");
+    asm("tct_amd_disable:");
+    asm("        .word     TCT_Control_Interrupts");
+#else
     asm("tct_amd_disable 	.field     _TCT_Control_Interrupts+0,32");
     asm("	                .global	   _TCT_Control_Interrupts");
 #endif
 }
 
-void amd_int_enable(uint32 cpsr)
+void NOINLINE amd_int_enable(uint32 cpsr)
 {
 #ifdef __GNUC__
-	return NU_Control_Interrupts(cpsr);
+    asm("        .code 16");
 #else
     asm("        .state16");
+#endif
     asm("        ldr       A2, tct_amd_enable");
     asm("        bx        A2      ");
 
+#ifdef __GNUC__
+    asm(".balign 4");
+    asm("tct_amd_enable:");
+    asm("        .word     TCT_Control_Interrupts");
+#else
     asm("tct_amd_enable 	.field     _TCT_Control_Interrupts+0,32");
     asm("	                .global	   _TCT_Control_Interrupts");
 #endif