diff packages/kernel/current/tests/kcache1.c @ 2:443894e2e912 ecos-v1_2_1-release

Block commit of eCos version 1.2.1
author jlarmour
date Tue, 11 May 1999 12:24:34 +0000
parents 3111d98ba7b3
children d3fbcdfa1b2f
line wrap: on
line diff
--- a/packages/kernel/current/tests/kcache1.c
+++ b/packages/kernel/current/tests/kcache1.c
@@ -22,7 +22,7 @@
 // September 30, 1998.
 // 
 // The Initial Developer of the Original Code is Cygnus.  Portions created
-// by Cygnus are Copyright (C) 1998 Cygnus Solutions.  All Rights Reserved.
+// by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions.  All Rights Reserved.
 // -------------------------------------------
 //
 //####COPYRIGHTEND####
@@ -35,6 +35,8 @@
 //####DESCRIPTIONEND####
 */
 
+#include <cyg/hal/hal_arch.h>           // CYGNUM_HAL_STACK_SIZE_TYPICAL
+
 #include <cyg/kernel/kapi.h>
 
 #include <cyg/infra/testcase.h>
@@ -44,6 +46,7 @@
 
 #include <cyg/infra/diag.h>
 #include <cyg/hal/hal_cache.h>
+#include <cyg/hal/hal_intr.h>
 
 // -------------------------------------------------------------------------
 // If the HAL does not supply this, we supply our own version
@@ -68,7 +71,7 @@ CYG_MACRO_END
 // -------------------------------------------------------------------------
 
 #define NTHREADS 1
-#define STACKSIZE 4096
+#define STACKSIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
 
 static cyg_handle_t thread[NTHREADS];
 
@@ -79,6 +82,10 @@ static char stack[NTHREADS][STACKSIZE];
 
 volatile char m[MAXSIZE];
 
+#ifndef MAX_STRIDE
+#define MAX_STRIDE 64
+#endif
+
 // -------------------------------------------------------------------------
 
 static void time0(register cyg_uint32 stride)
@@ -90,7 +97,11 @@ static void time0(register cyg_uint32 st
 
     count0 = cyg_current_time();
 
-    for(k=0; k<4000;k++) {
+    k = 0;
+    if ( cyg_test_is_simulator )
+        k = 3960;
+
+    for(; k<4000;k++) {
         for(j=0; j<(HAL_DCACHE_SIZE/HAL_DCACHE_LINE_SIZE); j++) {
             c=m[stride*j];
         }
@@ -107,7 +118,7 @@ void time1(void)
 {
     cyg_uint32 i;
 
-    for(i=1; i<65; i+=i) {
+    for(i=1; i<=MAX_STRIDE; i+=i) {
         time0(i);
     }
 }
@@ -118,48 +129,59 @@ void time1(void)
 
 static void entry0( cyg_addrword_t data )
 {
+    register CYG_INTERRUPT_STATE oldints;
+    
+    HAL_DISABLE_INTERRUPTS(oldints);
     HAL_DCACHE_PURGE_ALL();
     HAL_ICACHE_INVALIDATE_ALL();
     HAL_DCACHE_INVALIDATE_ALL();
     HAL_ICACHE_DISABLE();
     HAL_DCACHE_DISABLE();
+    HAL_RESTORE_INTERRUPTS(oldints);
     CYG_TEST_INFO("Dcache off Icache off");
     time1();
 
+    HAL_DISABLE_INTERRUPTS(oldints);
     HAL_DCACHE_PURGE_ALL();
     HAL_ICACHE_INVALIDATE_ALL();
     HAL_DCACHE_INVALIDATE_ALL();
     HAL_ICACHE_DISABLE();
     HAL_DCACHE_ENABLE();
+    HAL_RESTORE_INTERRUPTS(oldints);    
     CYG_TEST_INFO("Dcache on  Icache off");
     time1();
 
+    HAL_DISABLE_INTERRUPTS(oldints);
     HAL_DCACHE_PURGE_ALL();
     HAL_ICACHE_INVALIDATE_ALL();
     HAL_DCACHE_INVALIDATE_ALL();
     HAL_ICACHE_ENABLE();
     HAL_DCACHE_DISABLE();
+    HAL_RESTORE_INTERRUPTS(oldints);    
     CYG_TEST_INFO("Dcache off Icache on");
     time1();
 
+    HAL_DISABLE_INTERRUPTS(oldints);
     HAL_DCACHE_PURGE_ALL();
     HAL_ICACHE_INVALIDATE_ALL();
     HAL_DCACHE_INVALIDATE_ALL();
     HAL_ICACHE_ENABLE();
     HAL_DCACHE_ENABLE();
+    HAL_RESTORE_INTERRUPTS(oldints);    
     CYG_TEST_INFO("Dcache on Icache on");
     time1();
 
 
+    HAL_DISABLE_INTERRUPTS(oldints);
     HAL_DCACHE_PURGE_ALL();
     HAL_ICACHE_INVALIDATE_ALL();
     HAL_DCACHE_INVALIDATE_ALL();
     HAL_ICACHE_DISABLE();
     HAL_DCACHE_DISABLE();
+    HAL_RESTORE_INTERRUPTS(oldints);    
     CYG_TEST_INFO("Dcache off Icache off");
     time1();
 
-    
     CYG_TEST_PASS_FINISH("End of test");
 }
 
@@ -170,7 +192,7 @@ void kcache2_main( void )
     CYG_TEST_INIT();
 
     cyg_thread_create(4, entry0 , (cyg_addrword_t)0, "kcache1",
-    	(void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]);
+        (void *)stack[0], STACKSIZE, &thread[0], &thread_obj[0]);
     cyg_thread_resume(thread[0]);
 
     cyg_scheduler_start();
@@ -198,7 +220,7 @@ externC void
 cyg_start( void )
 {
     CYG_TEST_INIT();
-    CYG_TEST_PASS_FINISH("N/A: " N_A_MSG);
+    CYG_TEST_NA( N_A_MSG );
 }
 #endif // N_A_MSG