diff packages/kernel/current/include/instrmnt.h @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/packages/kernel/current/include/instrmnt.h
@@ -0,0 +1,381 @@
+#ifndef CYGONCE_KERNEL_INSTRMNT_HXX
+#define CYGONCE_KERNEL_INSTRMNT_HXX
+
+//==========================================================================
+//
+//	instrmnt.hxx
+//
+//	Kernel Instrumentation mechanism
+//
+//==========================================================================
+//####COPYRIGHTBEGIN####
+//
+// -------------------------------------------
+// The contents of this file are subject to the Cygnus eCos Public License
+// Version 1.0 (the "License"); you may not use this file except in
+// compliance with the License.  You may obtain a copy of the License at
+// http://sourceware.cygnus.com/ecos
+// 
+// Software distributed under the License is distributed on an "AS IS"
+// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the
+// License for the specific language governing rights and limitations under
+// the License.
+// 
+// The Original Code is eCos - Embedded Cygnus Operating System, released
+// 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.
+// -------------------------------------------
+//
+//####COPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): 	nickg
+// Contributors:	nickg
+// Date:	1997-10-24
+// Purpose:	Define kernel instrumentation
+// Description:	A set of definitions and macros used to implement an
+//              instrumentation interface for the kernel.
+// Usage:	#include <cyg/kernel/instrmnt.hxx>
+//
+//####DESCRIPTIONEND####
+//
+//==========================================================================
+
+#include <cyg/kernel/ktypes.h>
+#include <cyg/infra/cyg_ass.h>            // assertion macros
+
+// -------------------------------------------------------------------------
+// Underlying instrumentation function
+
+externC void cyg_instrument( cyg_uint32 type, CYG_ADDRWORD arg1, CYG_ADDRWORD arg2 );
+
+// -------------------------------------------------------------------------
+// The following functions are used to enable and disable specific
+// instrumentation classes and events. The class must be one of the
+// class defines below. The event may be one of the event defines below
+// or zero, in which case all of the events in the class are enabled or
+// disabled.
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_FLAGS
+
+externC void cyg_instrument_enable( cyg_uint32 cl, cyg_uint32 event );
+
+externC void cyg_instrument_disable( cyg_uint32 cl, cyg_uint32 event );
+
+#endif
+
+// -------------------------------------------------------------------------
+// Instrumentation macros
+
+#ifdef CYGPKG_KERNEL_INSTRUMENT
+
+#define CYG_INSTRUMENT(_type_,_arg1_,_arg2_) cyg_instrument(_type_, CYG_ADDRWORD(_arg1_), CYG_ADDRWORD(_arg2_))
+
+#else   // ifdef CYGPKG_KERNEL_INSTRUMENT
+
+#define CYG_INSTRUMENT(_type_,_arg1_,_arg2_)
+
+#endif  // ifdef CYGPKG_KERNEL_INSTRUMENT
+
+// -------------------------------------------------------------------------
+// Type codes.
+// Each code is 16 bit with an event class in the top 8 bits
+// and an event code in the lower 8 bits.
+           
+// Event classes
+#define CYG_INSTRUMENT_CLASS_SCHED              0x0100
+#define CYG_INSTRUMENT_CLASS_THREAD             0x0200
+#define CYG_INSTRUMENT_CLASS_INTR               0x0300
+#define CYG_INSTRUMENT_CLASS_MUTEX              0x0400
+#define CYG_INSTRUMENT_CLASS_CONDVAR            0x0500
+#define CYG_INSTRUMENT_CLASS_BINSEM             0x0600
+#define CYG_INSTRUMENT_CLASS_CNTSEM             0x0700
+#define CYG_INSTRUMENT_CLASS_CLOCK              0x0800
+#define CYG_INSTRUMENT_CLASS_ALARM              0x0900
+#define CYG_INSTRUMENT_CLASS_MBOXT              0x0a00
+
+#define CYG_INSTRUMENT_CLASS_USER               0x0f00
+
+#define CYG_INSTRUMENT_CLASS_MAX                CYG_INSTRUMENT_CLASS_USER
+
+// Scheduler events
+#define CYG_INSTRUMENT_EVENT_SCHED_LOCK         1
+#define CYG_INSTRUMENT_EVENT_SCHED_UNLOCK       2
+#define CYG_INSTRUMENT_EVENT_SCHED_RESCHEDULE   3
+#define CYG_INSTRUMENT_EVENT_SCHED_TIMESLICE    4
+
+// Thread events
+#define CYG_INSTRUMENT_EVENT_THREAD_SWITCH      1
+#define CYG_INSTRUMENT_EVENT_THREAD_SLEEP       2
+#define CYG_INSTRUMENT_EVENT_THREAD_WAKE        3
+#define CYG_INSTRUMENT_EVENT_THREAD_SUSPEND     4
+#define CYG_INSTRUMENT_EVENT_THREAD_RESUME      5
+#define CYG_INSTRUMENT_EVENT_THREAD_PRIORITY    6
+#define CYG_INSTRUMENT_EVENT_THREAD_DELAY       7
+#define CYG_INSTRUMENT_EVENT_THREAD_ALARM       8
+
+// Interrupt events
+#define CYG_INSTRUMENT_EVENT_INTR_RAISE         1
+#define CYG_INSTRUMENT_EVENT_INTR_END           2
+#define CYG_INSTRUMENT_EVENT_INTR_RESTORE       3
+#define CYG_INSTRUMENT_EVENT_INTR_POST_DSR      4
+#define CYG_INSTRUMENT_EVENT_INTR_CALL_DSR      5
+#define CYG_INSTRUMENT_EVENT_INTR_ATTACH        6
+#define CYG_INSTRUMENT_EVENT_INTR_DETACH        7
+#define CYG_INSTRUMENT_EVENT_INTR_SET_VSR       8
+#define CYG_INSTRUMENT_EVENT_INTR_DISABLE       9
+#define CYG_INSTRUMENT_EVENT_INTR_ENABLE        10
+#define CYG_INSTRUMENT_EVENT_INTR_MASK          11
+#define CYG_INSTRUMENT_EVENT_INTR_UNMASK        12
+#define CYG_INSTRUMENT_EVENT_INTR_CONFIGURE     13
+#define CYG_INSTRUMENT_EVENT_INTR_ACK           14
+#define CYG_INSTRUMENT_EVENT_INTR_CHAIN_ISR     15
+
+// Mutex events
+#define CYG_INSTRUMENT_EVENT_MUTEX_LOCK         1
+#define CYG_INSTRUMENT_EVENT_MUTEX_WAIT         2
+#define CYG_INSTRUMENT_EVENT_MUTEX_LOCKED       3
+#define CYG_INSTRUMENT_EVENT_MUTEX_TRY          4
+#define CYG_INSTRUMENT_EVENT_MUTEX_UNLOCK       5
+#define CYG_INSTRUMENT_EVENT_MUTEX_WAKE         6
+
+// Condition variable events
+#define CYG_INSTRUMENT_EVENT_CONDVAR_WAIT       1
+#define CYG_INSTRUMENT_EVENT_CONDVAR_WOKE       2
+#define CYG_INSTRUMENT_EVENT_CONDVAR_SIGNAL     3
+#define CYG_INSTRUMENT_EVENT_CONDVAR_WAKE       4
+#define CYG_INSTRUMENT_EVENT_CONDVAR_BROADCAST  5
+#define CYG_INSTRUMENT_EVENT_CONDVAR_TIMED_WAIT 6
+
+// Binary semaphore events
+#define CYG_INSTRUMENT_EVENT_BINSEM_CLAIM       1
+#define CYG_INSTRUMENT_EVENT_BINSEM_WAIT        2
+#define CYG_INSTRUMENT_EVENT_BINSEM_WOKE        3
+#define CYG_INSTRUMENT_EVENT_BINSEM_TRY         4
+#define CYG_INSTRUMENT_EVENT_BINSEM_POST        5
+#define CYG_INSTRUMENT_EVENT_BINSEM_WAKE        6
+
+// Counting semaphore events
+#define CYG_INSTRUMENT_EVENT_CNTSEM_CLAIM       1
+#define CYG_INSTRUMENT_EVENT_CNTSEM_WAIT        2
+#define CYG_INSTRUMENT_EVENT_CNTSEM_WOKE        3
+#define CYG_INSTRUMENT_EVENT_CNTSEM_TRY         4
+#define CYG_INSTRUMENT_EVENT_CNTSEM_POST        5
+#define CYG_INSTRUMENT_EVENT_CNTSEM_WAKE        6
+#define CYG_INSTRUMENT_EVENT_CNTSEM_TIMEOUT     7
+
+// Clock events
+#define CYG_INSTRUMENT_EVENT_CLOCK_TICK_START   1
+#define CYG_INSTRUMENT_EVENT_CLOCK_TICK_END     2
+#define CYG_INSTRUMENT_EVENT_CLOCK_ISR          3
+
+// Alarm events
+#define CYG_INSTRUMENT_EVENT_ALARM_ADD          1
+#define CYG_INSTRUMENT_EVENT_ALARM_REM          2
+#define CYG_INSTRUMENT_EVENT_ALARM_CALL         3
+#define CYG_INSTRUMENT_EVENT_ALARM_INIT         4
+#define CYG_INSTRUMENT_EVENT_ALARM_TRIGGER      5
+#define CYG_INSTRUMENT_EVENT_ALARM_INTERVAL     6
+
+// Mboxt events
+#define CYG_INSTRUMENT_EVENT_MBOXT_WAIT		1
+#define CYG_INSTRUMENT_EVENT_MBOXT_GET		2
+#define CYG_INSTRUMENT_EVENT_MBOXT_GOT		3
+#define CYG_INSTRUMENT_EVENT_MBOXT_TIMEOUT	4
+#define CYG_INSTRUMENT_EVENT_MBOXT_WAKE		5
+#define CYG_INSTRUMENT_EVENT_MBOXT_TRY		6
+#define CYG_INSTRUMENT_EVENT_MBOXT_PUT		7
+
+
+
+// User events
+
+#define CYG_INSTRUMENT_EVENT_USER_1             1
+#define CYG_INSTRUMENT_EVENT_USER_2             2
+#define CYG_INSTRUMENT_EVENT_USER_3             3
+#define CYG_INSTRUMENT_EVENT_USER_4             4
+#define CYG_INSTRUMENT_EVENT_USER_5             5
+#define CYG_INSTRUMENT_EVENT_USER_6             6
+#define CYG_INSTRUMENT_EVENT_USER_7             7
+#define CYG_INSTRUMENT_EVENT_USER_8             8
+#define CYG_INSTRUMENT_EVENT_USER_9             9
+#define CYG_INSTRUMENT_EVENT_USER_10            10
+#define CYG_INSTRUMENT_EVENT_USER_11            11
+#define CYG_INSTRUMENT_EVENT_USER_12            12
+#define CYG_INSTRUMENT_EVENT_USER_13            13
+#define CYG_INSTRUMENT_EVENT_USER_14            14
+#define CYG_INSTRUMENT_EVENT_USER_15            15
+#define CYG_INSTRUMENT_EVENT_USER_16            16
+#define CYG_INSTRUMENT_EVENT_USER_17            17
+#define CYG_INSTRUMENT_EVENT_USER_18            18
+#define CYG_INSTRUMENT_EVENT_USER_19            19
+
+// -------------------------------------------------------------------------
+// Handy-dandy macro to make event codes.
+// Note that this relies on the definitions above
+// having a well defined form.
+
+#define CYGINST_EVENT(_class_,_event_) \
+((CYG_INSTRUMENT_CLASS_##_class_)|(CYG_INSTRUMENT_EVENT_##_class_##_##_event_))
+
+// -------------------------------------------------------------------------
+// Scheduler instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_SCHED
+            
+#define CYG_INSTRUMENT_SCHED(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(SCHED,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_SCHED(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Thread instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_THREAD
+            
+#define CYG_INSTRUMENT_THREAD(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(THREAD,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_THREAD(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Interrupt instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_INTR
+            
+#define CYG_INSTRUMENT_INTR(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(INTR,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_INTR(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Mutex instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_MUTEX
+            
+#define CYG_INSTRUMENT_MUTEX(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(MUTEX,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_MUTEX(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Condition variable instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_CONDVAR
+            
+#define CYG_INSTRUMENT_CONDVAR(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(CONDVAR,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_CONDVAR(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Binary semaphore instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_BINSEM
+            
+#define CYG_INSTRUMENT_BINSEM(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(BINSEM,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_BINSEM(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Counting semaphore instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_CNTSEM
+            
+#define CYG_INSTRUMENT_CNTSEM(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(CNTSEM,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_CNTSEM(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Clock instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_CLOCK
+            
+#define CYG_INSTRUMENT_CLOCK(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(CLOCK,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_CLOCK(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Alarm instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_ALARM
+            
+#define CYG_INSTRUMENT_ALARM(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(ALARM,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_ALARM(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// Mboxt instrumentation macros
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_MBOXT
+            
+#define CYG_INSTRUMENT_MBOXT(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(MBOXT,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_MBOXT(_event_,_arg1_,_arg2_)
+
+#endif
+
+// -------------------------------------------------------------------------
+// User instrumentation
+
+#ifdef CYGDBG_KERNEL_INSTRUMENT_USER
+            
+#define CYG_INSTRUMENT_USER(_event_,_arg1_,_arg2_) \
+    CYG_INSTRUMENT(CYGINST_EVENT(USER,_event_),_arg1_,_arg2_)
+
+#else
+
+#define CYG_INSTRUMENT_USER(_event_,_arg1_,_arg2_)
+
+#endif
+
+
+// -------------------------------------------------------------------------
+#endif // ifndef CYGONCE_KERNEL_INSTRMNT_HXX
+// EOF instrmnt.hxx