forked from Imagelibrary/rtems
* Mega patch merge to change the format of the object IDs to
loosen the dependency between the SCORE and the various APIs.
There was considerable work to simplify the object name management
and it appears that the name_table field is no longer needed.
This patch also includes the addition of the internal mutex
which is currently only used to protect some types of allocation
and deallocation. This significantly can reduce context
switch latency under certain circumstances. In particular,
some heap/region operations were O(n) and had dispatching
disabled. This should help enormously. With this merge,
the patch is not as clean as it should be. In particular,
the documentation has not been modified to reflect the new object
ID layout, the IDs in the test screens are not updated, and
_Objects_Get_information needs to be a real routine not inlined.
As part of this patch a lot of MP code for thread/proxy blocking
was made conditional and cleaned up.
* include/confdefs.h, src/exinit.c, src/extension.c, src/itronapi.c,
src/posixapi.c, src/rtemsapi.c: Modified as part of above.
120 lines
3.0 KiB
C
120 lines
3.0 KiB
C
/*
|
|
* ITRON API Initialization Support
|
|
*
|
|
* NOTE:
|
|
*
|
|
* COPYRIGHT (c) 1989-1999.
|
|
* 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.OARcorp.com/rtems/license.html.
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#include <assert.h>
|
|
|
|
/*
|
|
* ITRON_API_INIT is defined so all of the ITRON API
|
|
* data will be included in this object file.
|
|
*/
|
|
|
|
#define ITRON_API_INIT
|
|
|
|
#include <rtems/system.h> /* include this before checking RTEMS_ITRON_API */
|
|
#ifdef RTEMS_ITRON_API
|
|
|
|
#include <itron.h>
|
|
|
|
#include <sys/types.h>
|
|
#include <rtems/config.h>
|
|
#include <rtems/score/object.h>
|
|
|
|
#include <rtems/itron/eventflags.h>
|
|
#include <rtems/itron/fmempool.h>
|
|
#include <rtems/itron/mbox.h>
|
|
#include <rtems/itron/msgbuffer.h>
|
|
#include <rtems/itron/port.h>
|
|
#include <rtems/itron/semaphore.h>
|
|
#include <rtems/itron/task.h>
|
|
#include <rtems/itron/vmempool.h>
|
|
|
|
/*PAGE
|
|
*
|
|
* _ITRON_API_Initialize
|
|
*
|
|
* XXX
|
|
*/
|
|
|
|
itron_api_configuration_table _ITRON_Default_configuration = {
|
|
0, /* maximum_tasks */
|
|
0, /* maximum_semaphores */
|
|
0, /* maximum_eventflags */
|
|
0, /* maximum_mailboxes */
|
|
0, /* maximum_message_buffers */
|
|
0, /* maximum_ports */
|
|
0, /* maximum_memory_pools */
|
|
0, /* maximum_fixed_memory_pools */
|
|
0, /* number_of_initialization_tasks */
|
|
NULL /* User_initialization_tasks_table */
|
|
};
|
|
|
|
Objects_Information *_ITRON_Objects[ OBJECTS_ITRON_CLASSES_LAST + 1 ];
|
|
|
|
void _ITRON_API_Initialize(
|
|
rtems_configuration_table *configuration_table
|
|
)
|
|
{
|
|
itron_api_configuration_table *api_configuration;
|
|
|
|
/* XXX need to assert here based on size assumptions */
|
|
|
|
assert( sizeof(ID) == sizeof(Objects_Id) );
|
|
|
|
api_configuration = configuration_table->ITRON_api_configuration;
|
|
if ( !api_configuration )
|
|
api_configuration = &_ITRON_Default_configuration;
|
|
|
|
_Objects_Information_table[OBJECTS_ITRON_API] = _ITRON_Objects;
|
|
|
|
_ITRON_Task_Manager_initialization(
|
|
api_configuration->maximum_tasks,
|
|
api_configuration->number_of_initialization_tasks,
|
|
api_configuration->User_initialization_tasks_table
|
|
);
|
|
|
|
_ITRON_Semaphore_Manager_initialization(
|
|
api_configuration->maximum_semaphores
|
|
);
|
|
|
|
_ITRON_Eventflags_Manager_initialization(
|
|
api_configuration->maximum_eventflags
|
|
);
|
|
|
|
_ITRON_Fixed_memory_pool_Manager_initialization(
|
|
api_configuration->maximum_fixed_memory_pools
|
|
);
|
|
|
|
_ITRON_Mailbox_Manager_initialization(
|
|
api_configuration->maximum_mailboxes
|
|
);
|
|
|
|
_ITRON_Message_buffer_Manager_initialization(
|
|
api_configuration->maximum_message_buffers
|
|
);
|
|
|
|
_ITRON_Port_Manager_initialization(
|
|
api_configuration->maximum_ports
|
|
);
|
|
|
|
_ITRON_Variable_memory_pool_Manager_initialization(
|
|
api_configuration->maximum_memory_pools
|
|
);
|
|
|
|
|
|
}
|
|
|
|
#endif
|
|
/* end of file */
|