changeset 2838:6960dfdbb4ff

* src/if_cs8900a.c: Fixed interrupt hooking block in cs8900a_init() to prevent assertion fail on cyg_interrupt_attach() when interrupt is not used.
author asl
date Mon, 02 Mar 2009 21:16:52 +0000
parents 221027e214f7
children 7e4011e5ffbb
files packages/devs/eth/cl/cs8900a/current/ChangeLog packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
diffstat 2 files changed, 21 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/packages/devs/eth/cl/cs8900a/current/ChangeLog
+++ b/packages/devs/eth/cl/cs8900a/current/ChangeLog
@@ -1,3 +1,9 @@
+ 2009-02-28  Sergei Gavrikov  <sergei.gavrikov@gmail.com>
+	
+        * src/if_cs8900a.c: Fixed interrupt hooking block in cs8900a_init() to
+        prevent assertion fail on cyg_interrupt_attach() when interrupt is not
+        used.
+	
 2008-11-07  Sergei Gavrikov <sergei.gavrikov@gmail.com>
 
 	* cdl/cl_cs8900a_eth_drivers.cdl: Added
--- a/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
+++ b/packages/devs/eth/cl/cs8900a/current/src/if_cs8900a.c
@@ -168,6 +168,19 @@ cs8900a_init(struct cyg_netdevtab_entry 
     CYGHWR_CL_CS8900A_PLF_INIT(cpd);
 
 #ifdef CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
+# ifdef CYGSEM_DEVS_ETH_CL_CS8900A_NOINTS
+    // The olpce2994 target uses 8-bit, non-interrupt driven mode for CS8900A.
+    cyg_thread_create(1,                 // Priority
+                      cs8900a_fake_int,  // entry
+                      (cyg_addrword_t)sc,// entry parameter
+                      "CS8900 int",      // Name
+                      &cs8900a_fake_int_stack[0],      // Stack
+                      STACK_SIZE,                      // Size
+                      &cs8900a_fake_int_thread_handle, // Handle
+                      &cs8900a_fake_int_thread_data    // Thread data structure
+            );
+    cyg_thread_resume(cs8900a_fake_int_thread_handle);  // Start it
+# else
     // Initialize environment, setup interrupt handler
     cyg_drv_interrupt_create(cpd->interrupt,
                              cpd->priority,
@@ -179,20 +192,8 @@ cs8900a_init(struct cyg_netdevtab_entry 
     cyg_drv_interrupt_attach(cpd->interrupt_handle);
     cyg_drv_interrupt_acknowledge(cpd->interrupt);
     cyg_drv_interrupt_unmask(cpd->interrupt);
-
-#ifdef CYGSEM_DEVS_ETH_CL_CS8900A_NOINTS
-    cyg_thread_create(1,                 // Priority
-                      cs8900a_fake_int,   // entry
-                      (cyg_addrword_t)sc, // entry parameter
-                      "CS8900 int",      // Name
-                      &cs8900a_fake_int_stack[0],         // Stack
-                      STACK_SIZE,        // Size
-                      &cs8900a_fake_int_thread_handle,    // Handle
-                      &cs8900a_fake_int_thread_data       // Thread data structure
-            );
-    cyg_thread_resume(cs8900a_fake_int_thread_handle);  // Start it
-#endif
-#endif
+# endif // CYGSEM_DEVS_ETH_CL_CS8900A_NOINTS
+#endif // CYGINT_IO_ETH_INT_SUPPORT_REQUIRED
 
     // Read controller ID - the first is a dummy read, since (on some
     // platforms) the first access to the controller seems to skip the