summaryrefslogblamecommitdiffstats
path: root/cpukit/score/include/rtems/score/userext.h
blob: 8215eb5f4504c02771fcabebd8d6f6e29e289c52 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                   


                                                                              
                        



                            
                                                    
  

                                                           
                                         



        

                           
 






                                                 



                  


                               
 

                                                                  




                                                                 
      
 


       
                                     
 


       



                                                             
 


       



                                                                             
 


       



                                                                            
 


       



                                                                              
 


       



                                                                             
 


       



                                                                                
 


       


                                                                            
 


       


                                                                              
 


       


                                                                     
                                                          

               


       
                
                          
                                                              
                          
                                                             
                          
                                                               
                          
                                                              
                          
                                                              
                          
                                                             
                          
                                                               
                          

                                                      
 
      
 


                                                       
                
                          
                                               
                          


                                                        

                                                   


                                                             
   
                
                          
                                      
                          
                                        
                          
                                          

                            

                                                         
   
                                                 
 

                                                         

                 

                                                          
                                         

                                                         
                                
   
                                        


                            
                                         

                                                         
                                  
   
                                     


                            
                                        

                                                         
                               
   
                                    


                            
                                          

                                                         
                                 
   
                                      


                            
                                        

                                                           
                                    
   
                                    


                           
                                          

                                                           
                                   
   
                                      


                           
                                 
  

                                                             
   


                                      
                                   

  
                             
                                  
      




                  

       

                         
/** 
 *  @file userext.h
 *
 *  This include file contains all information about user extensions.  This
 *  Handler provides mechanisms which can be used to initialize and manipulate
 *  all user extensions.
 */

/*
 *  COPYRIGHT (c) 1989-2004.
 *  On-Line Applications Research Corporation (OAR).
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.com/license/LICENSE.
 *
 *  $Id$
 */

#ifndef __USER_EXTENSIONS_h
#define __USER_EXTENSIONS_h

/**
 *  @defgroup ScoreUserExt User Extension Handler
 *
 *  This group contains functionality which XXX
 */
/**@{*/

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/score/interr.h>
#include <rtems/score/chain.h>
#include <rtems/score/thread.h>

/** @defgroup ScoreUserExtStruct User Extension Handler Structures
 *
 *  The following records defines the User Extension Table.
 *  This table defines the application dependent routines which
 *  are invoked at critical points in the life of each thread and
 *  the system as a whole.
 */
/*@{*/

/**
 *  XXX
 */
typedef void User_extensions_routine;

/**
 *  XXX
 */
typedef boolean ( *User_extensions_thread_create_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_delete_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_start_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_restart_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_switch_extension )(
                 Thread_Control *,
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine (
                                *User_extensions_thread_post_switch_extension )(
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_begin_extension )(
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_thread_exitted_extension )(
                 Thread_Control *
             );

/**
 *  XXX
 */
typedef User_extensions_routine ( *User_extensions_fatal_extension )(
                 Internal_errors_Source  /* the_source  */,
                 boolean                 /* is_internal */,
                 uint32_t                /* the_error   */
             );

/**
 *  XXX
 */
typedef struct {
  /** This field is XXX */
  User_extensions_thread_create_extension       thread_create;
  /** This field is XXX */
  User_extensions_thread_start_extension        thread_start;
  /** This field is XXX */
  User_extensions_thread_restart_extension      thread_restart;
  /** This field is XXX */
  User_extensions_thread_delete_extension       thread_delete;
  /** This field is XXX */
  User_extensions_thread_switch_extension       thread_switch;
  /** This field is XXX */
  User_extensions_thread_begin_extension        thread_begin;
  /** This field is XXX */
  User_extensions_thread_exitted_extension      thread_exitted;
  /** This field is XXX */
  User_extensions_fatal_extension               fatal;
}   User_extensions_Table;

/*@}*/

/**
 *  This is used to manage the list of switch handlers.
 */
typedef struct {
  /** This field is XXX */
  Chain_Node                              Node;
  /** This field is XXX */
  User_extensions_thread_switch_extension thread_switch;
}   User_extensions_Switch_control;

/**
 *  This is used to manage each user extension set.
 *  The switch control is part of the extensions control even
 *  if not used due to the extension not having a switch
 *  handler.
 */
typedef struct {
  /** This field is XXX */
  Chain_Node                     Node;
  /** This field is XXX */
  User_extensions_Switch_control Switch;
  /** This field is XXX */
  User_extensions_Table          Callouts;
}   User_extensions_Control;

/**
 *  This is used to manage the list of active extensions.
 */
SCORE_EXTERN Chain_Control _User_extensions_List;

/**
 *  This is used to manage a chain of user extension task
 *  switch nodes.
 */
SCORE_EXTERN Chain_Control _User_extensions_Switches_list;

/** @brief  User extensions Thread create
 *
 *  This routine is used to invoke the user extension for
 *  the thread creation operate.
 */
boolean _User_extensions_Thread_create (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread delete
 *
 *  This routine is used to invoke the user extension for
 *  the thread deletion operation.
 */
void _User_extensions_Thread_delete (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread start
 *
 *  This routine is used to invoke the user extension for
 *  the thread start operation.
 */
void _User_extensions_Thread_start (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread restart
 *
 *  This routine is used to invoke the user extension for
 *  the thread restart operation.
 */
void _User_extensions_Thread_restart (
  Thread_Control *the_thread
);

/** @brief  User extensions Thread begin
 *
 *  This routine is used to invoke the user extension which
 *  is invoked when a thread begins.
 */
void _User_extensions_Thread_begin (
  Thread_Control *executing
);

/** @brief  User extensions Thread exitted
 *
 *  This routine is used to invoke the user extension which
 *  is invoked when a thread exits.
 */
void _User_extensions_Thread_exitted (
  Thread_Control *executing
);

/** @brief  User extensions Fatal
 *
 *  This routine is used to invoke the user extension invoked
 *  when a fatal error occurs.
 */
void _User_extensions_Fatal (
  Internal_errors_Source  the_source,
  boolean                 is_internal,
  uint32_t                the_error
);

#ifndef __RTEMS_APPLICATION__
#include <rtems/score/userext.inl>
#endif

#ifdef __cplusplus
}
#endif

/**@}*/

#endif
/* end of include file */