diff packages/kernel/current/src/common/kapi.cxx @ 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 1d7f19c9e4d1
line wrap: on
line diff
--- a/packages/kernel/current/src/common/kapi.cxx
+++ b/packages/kernel/current/src/common/kapi.cxx
@@ -1,8 +1,8 @@
 //==========================================================================
 //
-//	common/kapi.cxx
+//      common/kapi.cxx
 //
-//	C API Implementation
+//      C API Implementation
 //
 //==========================================================================
 //####COPYRIGHTBEGIN####
@@ -22,18 +22,18 @@
 // 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####
 //==========================================================================
 //#####DESCRIPTIONBEGIN####
 //
-// Author(s): 	nickg, dsm
-// Contributors:	nickg
-// Date:	1998-03-02
-// Purpose:	C API Implementation
-// Description:	C++ implementation of the C API
+// Author(s):   nickg, dsm
+// Contributors:        nickg
+// Date:        1998-03-02
+// Purpose:     C API Implementation
+// Description: C++ implementation of the C API
 //              
 //
 //####DESCRIPTIONEND####
@@ -134,9 +134,9 @@ externC void cyg_scheduler_unlock(void)
 /* Thread operations */
 
 externC void cyg_thread_create(
-    cyg_addrword_t        sched_info,             /* scheduling info (eg pri)  */
+    cyg_addrword_t      sched_info,             /* scheduling info (eg pri)  */
     cyg_thread_entry_t  *entry,                 /* entry point function      */
-    cyg_addrword_t        entry_data,             /* entry data                */
+    cyg_addrword_t      entry_data,             /* entry data                */
     char                *name,                  /* optional thread name      */
     void                *stack_base,            /* stack base, NULL = alloc  */
     cyg_ucount32        stack_size,             /* stack size, 0 = default   */
@@ -151,8 +151,8 @@ externC void cyg_thread_create(
         (cyg_thread_entry *)entry,
         (CYG_ADDRWORD) entry_data,
         name,
-	(CYG_ADDRWORD) stack_base,
-	stack_size
+        (CYG_ADDRWORD) stack_base,
+        stack_size
         );
     t=t;
     
@@ -165,6 +165,14 @@ externC void cyg_thread_exit()
     Cyg_Thread::exit();
 }
 
+externC void cyg_thread_delete( cyg_handle_t thread )
+{
+    Cyg_Thread *th = (Cyg_Thread *)thread;
+    if( th->get_state() != Cyg_Thread::EXITED )
+        th->kill();
+    th->~Cyg_Thread();    
+}
+
 externC void cyg_thread_suspend(cyg_handle_t thread)
 {
     ((Cyg_Thread *)thread)->suspend();
@@ -188,6 +196,11 @@ externC void cyg_thread_kill( cyg_handle
     ((Cyg_Thread *)thread)->kill();    
 }
 
+externC void cyg_thread_release( cyg_handle_t thread)
+{
+    ((Cyg_Thread *)thread)->release();    
+}
+
 externC void cyg_thread_yield()
 {
     Cyg_Thread::yield();
@@ -226,6 +239,37 @@ externC void cyg_thread_delay(cyg_tick_c
     Cyg_Thread::self()->delay(delay);
 }
 
+/*---------------------------------------------------------------------------*/
+/* Per-thread data                                                           */
+
+#ifdef CYGVAR_KERNEL_THREADS_DATA
+
+externC cyg_ucount32 cyg_thread_new_data_index()
+{
+        return Cyg_Thread::new_data_index();
+}
+
+externC void cyg_thread_free_data_index(cyg_ucount32 index)
+{
+        Cyg_Thread::free_data_index(index);
+}
+
+externC CYG_ADDRWORD cyg_thread_get_data(cyg_ucount32 index)
+{
+        return Cyg_Thread::get_data(index);
+}
+
+externC CYG_ADDRWORD *cyg_thread_get_data_ptr(cyg_ucount32 index)
+{
+        return Cyg_Thread::get_data_ptr(index);
+}
+
+externC void cyg_thread_set_data(cyg_ucount32 index, CYG_ADDRWORD 
+data)
+{
+        Cyg_Thread::self()->set_data(index, data);
+}
+#endif
 
 /*---------------------------------------------------------------------------*/
 /* Exception handling.                                                       */
@@ -234,9 +278,9 @@ externC void cyg_thread_delay(cyg_tick_c
 externC void cyg_exception_set_handler(
     cyg_code_t                  exception_number,
     cyg_exception_handler_t     *new_handler,
-    cyg_addrword_t                new_data,
+    cyg_addrword_t              new_data,
     cyg_exception_handler_t     **old_handler,
-    cyg_addrword_t                *old_data
+    cyg_addrword_t              *old_data
 )
 {
     Cyg_Thread::register_exception(
@@ -260,7 +304,7 @@ externC void cyg_exception_clear_handler
 externC void cyg_exception_call_handler(
     cyg_handle_t                thread,
     cyg_code_t                  exception_number,
-    cyg_code_t                  error_code
+    cyg_addrword_t              error_code
 )
 {
     Cyg_Thread *t = (Cyg_Thread *)thread;
@@ -275,7 +319,7 @@ externC void cyg_exception_call_handler(
 externC void cyg_interrupt_create(
     cyg_vector_t        vector,         /* Vector to attach to               */
     cyg_priority_t      priority,       /* Queue priority                    */
-    cyg_addrword_t        data,           /* Data pointer                      */
+    cyg_addrword_t      data,           /* Data pointer                      */
     cyg_ISR_t           *isr,           /* Interrupt Service Routine         */
     cyg_DSR_t           *dsr,           /* Deferred Service Routine          */
     cyg_handle_t        *handle,        /* returned handle                   */
@@ -489,7 +533,7 @@ externC cyg_tick_count_t cyg_current_tim
 externC void cyg_alarm_create(
     cyg_handle_t        counter,        /* Attached to this counter          */
     cyg_alarm_t         *alarmfn,       /* Call-back function                */
-    cyg_addrword_t        data,           /* Call-back data                    */
+    cyg_addrword_t      data,           /* Call-back data                    */
     cyg_handle_t        *handle,        /* Returned alarm object             */
     cyg_alarm           *alarm          /* put alarm here                    */
 )
@@ -498,8 +542,8 @@ externC void cyg_alarm_create(
 
     Cyg_Alarm *t = new((void *)alarm) Cyg_Alarm (
         (Cyg_Counter *)counter,
-	(cyg_alarm_fn *)alarmfn,
-	(CYG_ADDRWORD)data
+        (cyg_alarm_fn *)alarmfn,
+        (CYG_ADDRWORD)data
     );
     t=t;
 
@@ -520,8 +564,8 @@ externC void cyg_alarm_initialize(
 )
 {
     ((Cyg_Alarm *)alarm)->initialize(
-	(cyg_tick_count)trigger,
-	(cyg_tick_count)interval);
+        (cyg_tick_count)trigger,
+        (cyg_tick_count)interval);
 }
 
 externC void cyg_alarm_enable( cyg_handle_t alarm )
@@ -635,7 +679,7 @@ externC void cyg_mempool_var_create(
 
     Cyg_Mempool_Variable *t = new((void *)var) Cyg_Mempool_Variable (
         (cyg_uint8 *)base,
-	size
+        size
     );
     t=t;
 
@@ -728,7 +772,7 @@ externC void cyg_mempool_fix_create(
 
     Cyg_Mempool_Fixed *t = new((void *)fix) Cyg_Mempool_Fixed (
         (cyg_uint8 *)base,
-	size,
+        size,
         blocksize
     );
     t=t;
@@ -807,7 +851,7 @@ externC void cyg_mempool_fix_get_info(
 
 externC void      cyg_semaphore_init(
     cyg_sem_t           *sem,            /* Semaphore to init                */
-    cyg_ucount32        val              /* Initial semaphore value          */
+    cyg_count32         val              /* Initial semaphore value          */
 )
 {
     CYG_ASSERT_SIZES( cyg_sem_t, Cyg_Counting_Semaphore );
@@ -847,7 +891,7 @@ externC void cyg_semaphore_post( cyg_sem
     ((Cyg_Counting_Semaphore *)sem)->post();
 }
 
-externC void cyg_semaphore_peek( cyg_sem_t *sem, cyg_ucount32 *val )
+externC void cyg_semaphore_peek( cyg_sem_t *sem, cyg_count32 *val )
 {
     CYG_CHECK_DATA_PTR( val, "Bad val parameter" );
 
@@ -950,9 +994,9 @@ externC void cyg_mutex_destroy( cyg_mute
     // no need to do anything here
 }
 
-externC void cyg_mutex_lock( cyg_mutex_t *mutex )
+externC cyg_bool_t cyg_mutex_lock( cyg_mutex_t *mutex )
 {
-    ((Cyg_Mutex *)mutex)->lock();
+    return ((Cyg_Mutex *)mutex)->lock();
 }
 
 externC cyg_bool_t cyg_mutex_trylock( cyg_mutex_t *mutex )
@@ -965,6 +1009,11 @@ externC void cyg_mutex_unlock( cyg_mutex
     ((Cyg_Mutex *)mutex)->unlock();
 }
 
+externC void cyg_mutex_release( cyg_mutex_t *mutex )
+{
+    ((Cyg_Mutex *)mutex)->release();
+}
+
 /*---------------------------------------------------------------------------*/
 /* Condition Variables                                                       */