diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-05-11 17:39:37 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1995-05-11 17:39:37 +0000 |
commit | ac7d5ef06a6d6e8d84abbd1f0b82162725f98326 (patch) | |
tree | 9304cf759a73f2a1c6fd3191948f00e870af3787 /cpukit/sapi/include/rtems | |
download | rtems-ac7d5ef06a6d6e8d84abbd1f0b82162725f98326.tar.bz2 |
Initial revision
Diffstat (limited to 'cpukit/sapi/include/rtems')
-rw-r--r-- | cpukit/sapi/include/rtems/config.h | 321 | ||||
-rw-r--r-- | cpukit/sapi/include/rtems/extension.h | 169 | ||||
-rw-r--r-- | cpukit/sapi/include/rtems/fatal.h | 49 | ||||
-rw-r--r-- | cpukit/sapi/include/rtems/init.h | 101 | ||||
-rw-r--r-- | cpukit/sapi/include/rtems/io.h | 204 | ||||
-rw-r--r-- | cpukit/sapi/include/rtems/mptables.h | 29 |
6 files changed, 873 insertions, 0 deletions
diff --git a/cpukit/sapi/include/rtems/config.h b/cpukit/sapi/include/rtems/config.h new file mode 100644 index 0000000000..b5080b6133 --- /dev/null +++ b/cpukit/sapi/include/rtems/config.h @@ -0,0 +1,321 @@ +/* config.h + * + * This include file contains the table of user defined configuration + * parameters. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_CONFIGURATION_h +#define __RTEMS_CONFIGURATION_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include <rtems/object.h> +#include <rtems/thread.h> + +/* + * The following records define the Initialization Tasks Table. + * Each entry contains the information required by RTEMS to + * create and start a user task automatically at executive + * initialization time. + */ + +typedef struct { + Objects_Name name; /* task name */ + unsigned32 stack_size; /* task stack size */ + rtems_task_priority initial_priority; /* task priority */ + rtems_attribute attribute_set; /* task attributes */ + rtems_task_entry entry_point; /* task entry point */ + rtems_mode mode_set; /* task initial mode */ + unsigned32 argument; /* task argument */ +} rtems_initialization_tasks_table; + +/* + * + * The following defines the types for: + * + * + major and minor numbers + * + the return type of a device driver entry + * + a pointer to a device driver entry + * + an entry in the the Device Driver Address Table. Each entry in this + * table corresponds to an application provided device driver and + * defines the entry points for that device driver. + */ + +typedef unsigned32 rtems_device_major_number; +typedef unsigned32 rtems_device_minor_number; + +typedef void rtems_device_driver; + +typedef rtems_device_driver ( *rtems_device_driver_entry )( + rtems_device_major_number, + rtems_device_minor_number, + void *, + Objects_Id, + unsigned32 * + ); + +typedef struct { + rtems_device_driver_entry initialization; /* initialization procedure */ + rtems_device_driver_entry open; /* open request procedure */ + rtems_device_driver_entry close; /* close request procedure */ + rtems_device_driver_entry read; /* read request procedure */ + rtems_device_driver_entry write; /* write request procedure */ + rtems_device_driver_entry control; /* special functions procedure */ +} rtems_driver_address_table; + +/* + * 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 task and + * the system as a whole. + */ + +typedef void rtems_extension; + +typedef rtems_extension ( *rtems_task_create_extension )( + rtems_tcb *, + rtems_tcb * + ); + +typedef rtems_extension ( *rtems_task_delete_extension )( + rtems_tcb *, + rtems_tcb * + ); + +typedef rtems_extension ( *rtems_task_start_extension )( + rtems_tcb *, + rtems_tcb * + ); + +typedef rtems_extension ( *rtems_task_restart_extension )( + rtems_tcb *, + rtems_tcb * + ); + +typedef rtems_extension ( *rtems_task_switch_extension )( + rtems_tcb *, + rtems_tcb * + ); + +typedef rtems_extension ( *rtems_task_begin_extension )( + rtems_tcb * + ); + +typedef rtems_extension ( *rtems_task_exitted_extension )( + rtems_tcb * + ); + +typedef rtems_extension ( *rtems_fatal_extension )( + unsigned32 + ); + +typedef struct { + rtems_task_create_extension rtems_task_create; + rtems_task_start_extension rtems_task_start; + rtems_task_restart_extension rtems_task_restart; + rtems_task_delete_extension rtems_task_delete; + rtems_task_switch_extension task_switch; + rtems_task_begin_extension task_begin; + rtems_task_exitted_extension task_exitted; + rtems_fatal_extension fatal; +} rtems_extensions_table; + +/* + * The following records define the Multiprocessor Communications + * Interface (MPCI) Table. This table defines the user-provided + * MPCI which is a required part of a multiprocessor RTEMS system. + * + * For non-blocking local operations that become remote operations, + * we need a timeout. This is a per-driver timeout: default_timeout + */ + +/* XXX FORWARD REFERENCES */ + +typedef struct Configuration_Table rtems_configuration_table; +typedef struct Configuration_Table_MP rtems_multiprocessing_table; + +typedef void rtems_mpci_entry; + +typedef rtems_mpci_entry ( *rtems_mpci_initialization_entry )( + rtems_configuration_table *, + rtems_cpu_table *, + rtems_multiprocessing_table * + ); + +typedef rtems_mpci_entry ( *rtems_mpci_get_packet_entry )( + rtems_packet_prefix ** + ); + +typedef rtems_mpci_entry ( *rtems_mpci_return_packet_entry )( + rtems_packet_prefix * + ); + +typedef rtems_mpci_entry ( *rtems_mpci_send_entry )( + unsigned32, + rtems_packet_prefix * + ); + +typedef rtems_mpci_entry ( *rtems_mpci_receive_entry )( + rtems_packet_prefix ** + ); + +typedef struct { + unsigned32 default_timeout; /* in ticks */ + rtems_mpci_initialization_entry initialization; + rtems_mpci_get_packet_entry get_packet; + rtems_mpci_return_packet_entry return_packet; + rtems_mpci_send_entry send_packet; + rtems_mpci_receive_entry receive_packet; +} rtems_mpci_table; + +/* + * The following records define the Multiprocessor Configuration + * Table. This table defines the multiprocessor system + * characteristics which must be known by RTEMS in a multiprocessor + * system. + */ + +struct Configuration_Table_MP { + unsigned32 node; /* local node number */ + unsigned32 maximum_nodes; /* maximum # nodes in system */ + unsigned32 maximum_global_objects; /* maximum # global objects */ + unsigned32 maximum_proxies; /* maximum # proxies */ + rtems_mpci_table *User_mpci_table; + /* pointer to MPCI table */ +}; + +/* + * The following records define the Configuration Table. The + * information contained in this table is required in all + * RTEMS systems, whether single or multiprocessor. This + * table primarily defines the following: + * + * + location and size of the RTEMS Workspace + * + required number of each object type + * + microseconds per clock tick + * + clock ticks per task timeslice + */ + +struct Configuration_Table { + void *work_space_start; + unsigned32 work_space_size; + unsigned32 maximum_tasks; + unsigned32 maximum_timers; + unsigned32 maximum_semaphores; + unsigned32 maximum_message_queues; + unsigned32 maximum_messages; + unsigned32 maximum_partitions; + unsigned32 maximum_regions; + unsigned32 maximum_ports; + unsigned32 maximum_periods; + unsigned32 maximum_extensions; + unsigned32 microseconds_per_tick; + unsigned32 ticks_per_timeslice; + unsigned32 number_of_initialization_tasks; + rtems_initialization_tasks_table *User_initialization_tasks_table; + unsigned32 number_of_device_drivers; + rtems_driver_address_table *Device_driver_table; + rtems_extensions_table *User_extension_table; + rtems_multiprocessing_table *User_multiprocessing_table; +}; + +/* + * The following defines the default Multiprocessing Configuration + * Table. This table is used in a single processor system. + */ + +extern const rtems_multiprocessing_table + _Configuration_Default_multiprocessing_table; + +/* + * The following define the internal pointers to the user's + * configuration information. + */ + +EXTERN rtems_configuration_table *_Configuration_Table; +EXTERN rtems_multiprocessing_table *_Configuration_MP_table; +EXTERN rtems_mpci_table *_Configuration_MPCI_table; + +/* + * + * _Configuration_Handler_initialization + * + * DESCRIPTION: + * + * This routine performs the initialization necessary for this handler. + */ + +STATIC INLINE void _Configuration_Handler_initialization( + rtems_configuration_table *configuration_table, + rtems_multiprocessing_table *multiprocessing_table, + rtems_mpci_table *users_mpci_table +); + +/* + * _Configuration_Is_multiprocessing + * + * DESCRIPTION: + * + * This function determines if a multiprocessing application has been + * configured, if so, TRUE is returned, otherwise FALSE is returned. + */ + +STATIC INLINE boolean _Configuration_Is_multiprocessing( void ); + +/* + * _Configuration_Is_null_driver_address_table_pointer + * + * DESCRIPTION: + * + * This function returns TRUE if the_table is NULL and FALSE otherwise. + */ + +STATIC INLINE boolean _Configuration_Is_null_driver_address_table_pointer( + rtems_driver_address_table *the_table +); + +/* + * _Configuration_Is_null_extension_table_pointer + * + * DESCRIPTION: + * + * This function returns TRUE if the_table is NULL and FALSE otherwise. + */ + +STATIC INLINE boolean _Configuration_Is_null_extension_table_pointer( + rtems_extensions_table *the_table +); + +/* + * _Configuration_Is_null_initialization_tasks_table_pointer + * + * DESCRIPTION: + * + * This function returns TRUE if the_table is NULL and FALSE otherwise. + */ + +STATIC INLINE boolean + _Configuration_Is_null_initialization_tasks_table_pointer( + rtems_initialization_tasks_table *the_table +); + +#include <rtems/config.inl> + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/sapi/include/rtems/extension.h b/cpukit/sapi/include/rtems/extension.h new file mode 100644 index 0000000000..1e20fe6470 --- /dev/null +++ b/cpukit/sapi/include/rtems/extension.h @@ -0,0 +1,169 @@ +/* extension.h + * + * This include file contains all the constants, structures, and + * prototypes associated with the User Extension Manager. This manager + * provides a mechanism for manipulating sets of user-defined extensions. + * + * Directives provided are: + * + * + create user extension set + * + get ID of user extension set + * + delete user extension set + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_EXTENSION_MANAGER_h +#define __RTEMS_EXTENSION_MANAGER_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include <rtems/object.h> +#include <rtems/userext.h> + +/* + * The following defines the information control block used to manage + * this class of objects. + */ + +EXTERN Objects_Information _Extension_Information; + +/* + * The following records define the control block used to manage + * each extension. + */ + +typedef struct { + Objects_Control Object; + User_extensions_Control Extension; +} Extension_Control; + +/* + * _Extension_Manager_initialization + * + * DESCRIPTION: + * + * This routine performs the initialization necessary for this manager. + */ + +void _Extension_Manager_initialization( + unsigned32 maximum_extensions +); + +/* + * rtems_extension_create + * + * DESCRIPTION: + * + * This routine implements the rtems_extension_create directive. The + * extension will have the name name. The entry points of the + * routines which constitute this extension set are in EXTENSION_TABLE. + * It returns the id of the created extension in ID. + */ + +rtems_status_code rtems_extension_create( + Objects_Name name, + rtems_extensions_table *extension_table, + Objects_Id *id +); + +/* + * rtems_extension_ident + * + * DESCRIPTION: + * + * This routine implements the rtems_extension_ident directive. + * This directive returns the extension ID associated with name. + * If more than one extension is named name, then the extension + * to which the ID belongs is arbitrary. + */ + +rtems_status_code rtems_extension_ident( + Objects_Name name, + Objects_Id *id +); + +/* + * rtems_extension_delete + * + * DESCRIPTION: + * + * This routine implements the rtems_extension_delete directive. The + * extension indicated by ID is deleted. + */ + +rtems_status_code rtems_extension_delete( + Objects_Id id +); + +/* + * _Extension_Allocate + * + * DESCRIPTION: + * + * This function allocates a extension control block from + * the inactive chain of free extension control blocks. + */ + +STATIC INLINE Extension_Control *_Extension_Allocate( void ); + +/* + * _Extension_Free + * + * DESCRIPTION: + * + * This routine frees a extension control block to the + * inactive chain of free extension control blocks. + */ + +STATIC INLINE void _Extension_Free ( + Extension_Control *the_extension +); + +/* + * _Extension_Get + * + * DESCRIPTION: + * + * This function maps extension IDs to extension control blocks. + * If ID corresponds to a local extension, then it returns + * the extension control pointer which maps to ID and location + * is set to OBJECTS_LOCAL. Otherwise, location is set + * to OBJECTS_ERROR and the returned value is undefined. + */ + +STATIC INLINE Extension_Control *_Extension_Get ( + Objects_Id id, + Objects_Locations *location +); + +/* + * _Extension_Is_null + * + * DESCRIPTION: + * + * This function returns TRUE if the_extension is NULL and FALSE otherwise. + */ + +STATIC INLINE boolean _Extension_Is_null( + Extension_Control *the_extension +); + +#include <rtems/extension.inl> + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/sapi/include/rtems/fatal.h b/cpukit/sapi/include/rtems/fatal.h new file mode 100644 index 0000000000..f61b4183f3 --- /dev/null +++ b/cpukit/sapi/include/rtems/fatal.h @@ -0,0 +1,49 @@ +/* fatal.h + * + * This include file contains constants and prototypes related + * to the Fatal Error Manager. This manager processes all fatal or + * irrecoverable errors. + * + * This manager provides directives to: + * + * + announce a fatal error has occurred + * + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_FATAL_h +#define __RTEMS_FATAL_h + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * rtems_fatal_error_occurred + * + * DESCRIPTION: + * + * This is the routine which implements the rtems_fatal_error_occurred + * directive. It is invoked when the application or RTEMS + * determines that a fatal error has occurred. + */ + +void volatile rtems_fatal_error_occurred( + unsigned32 the_error +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/sapi/include/rtems/init.h b/cpukit/sapi/include/rtems/init.h new file mode 100644 index 0000000000..a5ed1688b7 --- /dev/null +++ b/cpukit/sapi/include/rtems/init.h @@ -0,0 +1,101 @@ +/* init.h + * + * This include file contains all the constants and structures associated + * with the Initialization Manager. This manager is responsible for + * initializing RTEMS, creating and starting all configured initialization + * tasks, invoking the initialization routine for each user-supplied device + * driver, and initializing the optional multiprocessor layer. + * + * This manager provides directives to: + * + * + initialize the RTEMS executive + * + shutdown the RTEMS executive + * + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_INIT_h +#define __RTEMS_INIT_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include <rtems/config.h> +#include <rtems/intr.h> + +/* + * rtems_initialize_executive + * + * DESCRIPTION: + * + * This routine implements the rtems_initialize_executive directive. This + * directive is invoked at system startup to initialize the RTEMS + * multitasking environment. + */ + +void rtems_initialize_executive( + rtems_configuration_table *configuration_table, + rtems_cpu_table *cpu_table +); + +/* + * rtems_initialize_executive_early + * + * DESCRIPTION: + * + * This routine implements the early portion of rtems_initialize_executive + * directive up to the pretasking hook. This directive is invoked at system + * startup to initialize the RTEMS multitasking environment. + */ + +rtems_interrupt_level rtems_initialize_executive_early( + rtems_configuration_table *configuration_table, + rtems_cpu_table *cpu_table +); + +/* + * rtems_initialize_executive_late + * + * DESCRIPTION: + * + * This routine implements the early portion of rtems_initialize_executive + * directive up to the pretasking hook. This directive is invoked at system + * startup to initialize the RTEMS multitasking environment. + */ + +void rtems_initialize_executive_late( + rtems_interrupt_level bsp_level +); + +/* + * rtems_shutdown_executive + * + * DESCRIPTION: + * + * This routine implements the rtems_shutdown_executive directive. The + * invocation of this directive results in the RTEMS environment being + * shutdown and multitasking halted. From the application's perspective, + * invocation of this directive results in the rtems_initialize_executive + * directive exitting to the startup code which invoked it. + */ + +void rtems_shutdown_executive( + unsigned32 result +); + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/sapi/include/rtems/io.h b/cpukit/sapi/include/rtems/io.h new file mode 100644 index 0000000000..6824377170 --- /dev/null +++ b/cpukit/sapi/include/rtems/io.h @@ -0,0 +1,204 @@ +/* io.h + * + * This include file contains all the constants and structures associated + * with the Input/Output Manager. This manager provides a well defined + * mechanism for accessing device drivers and a structured methodology for + * organizing device drivers. + * + * Directives provided are: + * + * + initialize a device driver + * + open a device driver + * + close a device driver + * + read from a device driver + * + write to a device driver + * + special device services + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_IO_h +#define __RTEMS_IO_h + +#ifdef __cplusplus +extern "C" { +#endif + +#include <rtems/config.h> + +/* + * The following type defines the set of IO operations which are + * recognized by _IO_Handler and can be supported by a RTEMS + * device driver. + */ + +typedef enum { + IO_INITIALIZE_OPERATION = 0, + IO_OPEN_OPERATION = 1, + IO_CLOSE_OPERATION = 2, + IO_READ_OPERATION = 3, + IO_WRITE_OPERATION = 4, + IO_CONTROL_OPERATION = 5 +} IO_operations; + +/* + * The following declare the data required to manage the Device Driver + * Address Table. + */ + +EXTERN unsigned32 _IO_Number_of_drivers; +EXTERN rtems_driver_address_table *_IO_Driver_address_table; + +/* + * _IO_Manager_initialization + * + * DESCRIPTION: + * + * This routine performs the initialization necessary for this manager. + */ + +STATIC INLINE void _IO_Manager_initialization( + rtems_driver_address_table *driver_table, + unsigned32 number_of_drivers +); + +/* + * rtems_io_initialize + * + * DESCRIPTION: + * + * This routine implements the rtems_io_initialize directive. It is invoked + * to initialize a device driver or an individual device. + */ + +rtems_status_code rtems_io_initialize( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument, + unsigned32 *return_value +); + +/* + * rtems_io_open + * + * DESCRIPTION: + * + * This routine implements the rtems_io_open directive. It is invoked + * to open a device. + */ + +rtems_status_code rtems_io_open( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument, + unsigned32 *return_value +); + +/* + * rtems_io_close + * + * DESCRIPTION: + * + * This routine implements the rtems_io_close directive. It is invoked + * to close a device. + */ + +rtems_status_code rtems_io_close( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument, + unsigned32 *return_value +); + +/* + * rtems_io_read + * + * DESCRIPTION: + * + * This routine implements the rtems_io_read directive. It is invoked + * to read from a device. + */ + +rtems_status_code rtems_io_read( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument, + unsigned32 *return_value +); + +/* + * rtems_io_write + * + * DESCRIPTION: + * + * This routine implements the rtems_io_write directive. It is invoked + * to write to a device. + */ + +rtems_status_code rtems_io_write( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument, + unsigned32 *return_value +); + +/* + * rtems_io_control + * + * DESCRIPTION: + * + * This routine implements the rtems_io_control directive. It is invoked + * to perform a device specific operation on a device. + */ + +rtems_status_code rtems_io_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument, + unsigned32 *return_value +); + +/* + * _IO_Initialize_all_drivers + * + * DESCRIPTION: + * + * This routine initializes all of the device drivers configured + * in the Device Driver Address Table. + */ + +void _IO_Initialize_all_drivers( void ); + +/* + * _IO_Handler_routine + * + * DESCRIPTION: + * + * This routine provides the common foundation for all of the IO + * Manager's directives. + */ + +rtems_status_code _IO_Handler_routine( + IO_operations operation, + rtems_device_major_number major, + rtems_device_minor_number minor, + void *argument, + unsigned32 *return_value +); + +#include <rtems/io.inl> + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ diff --git a/cpukit/sapi/include/rtems/mptables.h b/cpukit/sapi/include/rtems/mptables.h new file mode 100644 index 0000000000..b8e4c6de43 --- /dev/null +++ b/cpukit/sapi/include/rtems/mptables.h @@ -0,0 +1,29 @@ +/* mptables.h + * + * This include file contains the executive's pre-initialized tables + * used in a multiprocessor configuration. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_MPTABLES_h +#define __RTEMS_MPTABLES_h + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif +/* end of include file */ |