forked from Imagelibrary/rtems
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7dd27391ef |
@@ -21,10 +21,10 @@ The following persons/organizations have made contributions:
|
||||
Research to port RTEMS to the Hewlett-Packard PA-RISC architecture (V1.1)
|
||||
and the addition of HP-UX as a development host. Tony Bennett
|
||||
(tbennett@divnc.com) was assisted in this effort by Joel Sherrill
|
||||
(joel@OARcorp.com). Tony also deserves a big pat on the back for
|
||||
contributing significantly to the overall organization of the development
|
||||
environment and directory structure. RTEMS is much easier to build
|
||||
because of Tony.
|
||||
(jsherril@redstone.army.mil). Tony also deserves a big pat on the
|
||||
back for contributing significantly to the overall organization
|
||||
of the development environment and directory structure. RTEMS
|
||||
is much easier to build because of Tony.
|
||||
|
||||
+ Greg Allen of Division Inc. of Chapel Hill, NC for
|
||||
porting RTEMS to HP-UX. This port treats a UNIX computer as simply
|
||||
@@ -75,10 +75,6 @@ The following persons/organizations have made contributions:
|
||||
Laboratory submitted the support for the Motorola MC68360 CPU
|
||||
including the `gen68360' BSP.
|
||||
|
||||
+ Dominique le Campion (Dominique.LECAMPION@enst-bretagne.fr), for
|
||||
Telecom Bretagne and T.N.I. (Brest, France) submitted the BSP for
|
||||
the Motorola MVME147 board (68030 CPU + 68881 FPU).
|
||||
|
||||
Finally, the RTEMS project would like to thank those who have contributed
|
||||
to the other free software efforts which RTEMS utilizes. The primary RTEMS
|
||||
development environment is from the Free Software Foundation (the GNU
|
||||
|
||||
@@ -54,16 +54,6 @@ typedef enum {
|
||||
EVENT_SYNC_SATISFIED
|
||||
} Event_Sync_states;
|
||||
|
||||
/*
|
||||
* Event_Manager_initialization
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This routine performs the initialization necessary for this manager.
|
||||
*/
|
||||
|
||||
void _Event_Manager_initialization( void );
|
||||
|
||||
/*
|
||||
* rtems_event_send
|
||||
*
|
||||
|
||||
@@ -85,9 +85,7 @@ extern "C" {
|
||||
#define RTEMS_MILLISECONDS_TO_TICKS(_ms) \
|
||||
TOD_MILLISECONDS_TO_TICKS(_ms)
|
||||
|
||||
#ifndef __RTEMS_APPLICATION__
|
||||
#include <rtems/rtems/support.inl>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -17,5 +17,24 @@
|
||||
#ifndef __MACROS_EVENT_inl
|
||||
#define __MACROS_EVENT_inl
|
||||
|
||||
/*
|
||||
* Event_Manager_initialization
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This routine performs the initialization necessary for this manager.
|
||||
*/
|
||||
|
||||
STATIC INLINE void _Event_Manager_initialization( void )
|
||||
{
|
||||
_Event_Sync_state = EVENT_SYNC_SYNCHRONIZED;
|
||||
|
||||
/*
|
||||
* Register the MP Process Packet routine.
|
||||
*/
|
||||
|
||||
_MPCI_Register_packet_processor( MP_PACKET_EVENT, _Event_MP_Process_packet );
|
||||
}
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
|
||||
@@ -17,5 +17,24 @@
|
||||
#ifndef __MACROS_EVENT_h
|
||||
#define __MACROS_EVENT_h
|
||||
|
||||
/*
|
||||
* Event_Manager_initialization
|
||||
*/
|
||||
|
||||
#define _Event_Manager_initialization() \
|
||||
do { \
|
||||
\
|
||||
_Event_Sync_state = EVENT_SYNC_SYNCHRONIZED; \
|
||||
\
|
||||
/* \
|
||||
* Register the MP Process Packet routine. \
|
||||
*/ \
|
||||
\
|
||||
_MPCI_Register_packet_processor( \
|
||||
MP_PACKET_EVENT, \
|
||||
_Event_MP_Process_packet \
|
||||
); \
|
||||
} while ( 0 )
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#include <rtems/score/address.h>
|
||||
#include <rtems/score/object.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
#include <rtems/rtems/status.h>
|
||||
#include <rtems/rtems/types.h>
|
||||
@@ -36,11 +35,6 @@ rtems_status_code rtems_port_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -49,11 +43,6 @@ rtems_status_code rtems_port_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -61,11 +50,6 @@ rtems_status_code rtems_port_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -75,11 +59,6 @@ rtems_status_code rtems_port_internal_to_external(
|
||||
void **external
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -89,10 +68,5 @@ rtems_status_code rtems_port_external_to_internal(
|
||||
void **internal
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -20,22 +20,12 @@
|
||||
#include <rtems/rtems/options.h>
|
||||
#include <rtems/score/states.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _Event_Manager_initialization( void )
|
||||
{
|
||||
}
|
||||
|
||||
rtems_status_code rtems_event_send(
|
||||
Objects_Id id,
|
||||
rtems_event_set event_in
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -46,11 +36,6 @@ rtems_status_code rtems_event_receive(
|
||||
rtems_event_set *event_out
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <rtems/score/tqdata.h>
|
||||
#include <rtems/score/watchdog.h>
|
||||
#include <rtems/score/sysstate.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _Multiprocessing_Manager_initialization ( void )
|
||||
{
|
||||
@@ -34,11 +33,6 @@ void _Multiprocessing_Manager_initialization ( void )
|
||||
|
||||
void rtems_multiprocessing_announce ( void )
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
void _MPCI_Handler_initialization(
|
||||
@@ -66,11 +60,6 @@ void _MPCI_Register_packet_processor(
|
||||
|
||||
MP_packet_Prefix *_MPCI_Get_packet ( void )
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -78,11 +67,6 @@ void _MPCI_Return_packet (
|
||||
MP_packet_Prefix *the_packet
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
void _MPCI_Send_process_packet (
|
||||
@@ -90,11 +74,6 @@ void _MPCI_Send_process_packet (
|
||||
MP_packet_Prefix *the_packet
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
unsigned32 _MPCI_Send_request_packet (
|
||||
@@ -103,11 +82,6 @@ unsigned32 _MPCI_Send_request_packet (
|
||||
States_Control extra_state
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -116,20 +90,10 @@ void _MPCI_Send_response_packet (
|
||||
MP_packet_Prefix *the_packet
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
MP_packet_Prefix *_MPCI_Receive_packet ( void )
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -137,11 +101,6 @@ Thread_Control *_MPCI_Process_response (
|
||||
MP_packet_Prefix *the_packet
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -149,20 +108,10 @@ Thread _MPCI_Receive_server(
|
||||
unsigned32 ignore
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
void _MPCI_Announce ( void )
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -170,31 +119,16 @@ void _MPCI_Internal_packets_Send_process_packet (
|
||||
MPCI_Internal_Remote_operations operation
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
void _MPCI_Internal_packets_Process_packet (
|
||||
MP_packet_Prefix *the_packet_prefix
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
MPCI_Internal_packet *_MPCI_Internal_packets_Get_packet ( void )
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
#include <rtems/score/states.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/wkspace.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _Message_queue_Manager_initialization(
|
||||
unsigned32 maximum_message_queues
|
||||
@@ -40,11 +39,6 @@ rtems_status_code rtems_message_queue_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -54,11 +48,6 @@ rtems_status_code rtems_message_queue_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -66,11 +55,6 @@ rtems_status_code rtems_message_queue_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -80,11 +64,6 @@ rtems_status_code rtems_message_queue_send(
|
||||
unsigned32 size
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -94,11 +73,6 @@ rtems_status_code rtems_message_queue_urgent(
|
||||
unsigned32 size
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -109,11 +83,6 @@ rtems_status_code rtems_message_queue_broadcast(
|
||||
unsigned32 *count
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -125,11 +94,6 @@ rtems_status_code rtems_message_queue_receive(
|
||||
rtems_interval timeout
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -138,11 +102,6 @@ rtems_status_code rtems_message_queue_flush(
|
||||
unsigned32 *count
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -150,12 +109,6 @@ unsigned32 _Message_queue_Flush_support(
|
||||
Message_queue_Control *the_message_queue
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -166,12 +119,6 @@ boolean _Message_queue_Seize(
|
||||
unsigned32 *size_p
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
_Thread_Executing->Wait.return_code = RTEMS_UNSATISFIED;
|
||||
return TRUE;
|
||||
}
|
||||
@@ -183,10 +130,5 @@ rtems_status_code _Message_queue_Submit(
|
||||
Message_queue_Submit_types submit_type
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <rtems/score/object.h>
|
||||
#include <rtems/rtems/part.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _Partition_Manager_initialization(
|
||||
unsigned32 maximum_partitions
|
||||
@@ -36,11 +35,6 @@ rtems_status_code rtems_partition_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -50,11 +44,6 @@ rtems_status_code rtems_partition_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -62,11 +51,6 @@ rtems_status_code rtems_partition_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -75,11 +59,6 @@ rtems_status_code rtems_partition_get_buffer(
|
||||
void **buffer
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -88,10 +67,5 @@ rtems_status_code rtems_partition_return_buffer(
|
||||
void *buffer
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <rtems/rtems/region.h>
|
||||
#include <rtems/score/states.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _Region_Manager_initialization(
|
||||
unsigned32 maximum_regions
|
||||
@@ -37,11 +36,6 @@ rtems_status_code rtems_region_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -50,11 +44,6 @@ rtems_status_code rtems_region_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -62,11 +51,6 @@ rtems_status_code rtems_region_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -78,11 +62,6 @@ rtems_status_code rtems_region_get_segment(
|
||||
void **segment
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -92,11 +71,6 @@ rtems_status_code rtems_region_get_segment_size(
|
||||
unsigned32 *size
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -105,10 +79,5 @@ rtems_status_code rtems_region_return_segment(
|
||||
void *segment
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include <rtems/score/isr.h>
|
||||
#include <rtems/score/object.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
#include <rtems/rtems/types.h>
|
||||
#include <rtems/rtems/ratemon.h>
|
||||
@@ -34,11 +33,6 @@ rtems_status_code rtems_rate_monotonic_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -47,11 +41,6 @@ rtems_status_code rtems_rate_monotonic_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -59,11 +48,6 @@ rtems_status_code rtems_rate_monotonic_cancel(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -71,11 +55,6 @@ rtems_status_code rtems_rate_monotonic_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -84,11 +63,6 @@ rtems_status_code rtems_rate_monotonic_period(
|
||||
rtems_interval length
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -97,21 +71,11 @@ void _Rate_monotonic_Timeout(
|
||||
void *ignored
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
}
|
||||
|
||||
boolean _Rate_monotonic_Set_state(
|
||||
Rate_monotonic_Control *the_period
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return FALSE;
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include <rtems/score/states.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/threadq.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _Semaphore_Manager_initialization(
|
||||
unsigned32 maximum_semaphores
|
||||
@@ -39,11 +38,6 @@ rtems_status_code rtems_semaphore_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -53,11 +47,6 @@ rtems_status_code rtems_semaphore_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -65,11 +54,6 @@ rtems_status_code rtems_semaphore_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -79,11 +63,6 @@ rtems_status_code rtems_semaphore_obtain(
|
||||
rtems_interval timeout
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -91,11 +70,6 @@ rtems_status_code rtems_semaphore_release(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -104,11 +78,6 @@ boolean _Semaphore_Seize(
|
||||
rtems_option option_set
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
_Thread_Executing->Wait.return_code = RTEMS_UNSATISFIED;
|
||||
return TRUE;
|
||||
return( TRUE );
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <rtems/rtems/status.h>
|
||||
#include <rtems/score/isr.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
#include <rtems/rtems/asr.h>
|
||||
#include <rtems/rtems/modes.h>
|
||||
@@ -32,11 +31,6 @@ rtems_status_code rtems_signal_catch(
|
||||
rtems_mode mode_set
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -45,11 +39,6 @@ rtems_status_code rtems_signal_send(
|
||||
rtems_signal_set signal_set
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/tod.h>
|
||||
#include <rtems/score/watchdog.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
#include <rtems/rtems/types.h>
|
||||
#include <rtems/rtems/timer.h>
|
||||
@@ -35,11 +34,6 @@ rtems_status_code rtems_timer_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -48,11 +42,6 @@ rtems_status_code rtems_timer_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -60,11 +49,6 @@ rtems_status_code rtems_timer_cancel(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -72,11 +56,6 @@ rtems_status_code rtems_timer_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -87,11 +66,6 @@ rtems_status_code rtems_timer_fire_after(
|
||||
void *user_data
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -102,11 +76,6 @@ rtems_status_code rtems_timer_fire_when(
|
||||
void *user_data
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -114,10 +83,5 @@ rtems_status_code rtems_timer_reset(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -22,26 +22,6 @@
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/rtems/tasks.h>
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Event_Manager_initialization
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This routine performs the initialization necessary for this manager.
|
||||
*/
|
||||
|
||||
void _Event_Manager_initialization( void )
|
||||
{
|
||||
_Event_Sync_state = EVENT_SYNC_SYNCHRONIZED;
|
||||
|
||||
/*
|
||||
* Register the MP Process Packet routine.
|
||||
*/
|
||||
|
||||
_MPCI_Register_packet_processor( MP_PACKET_EVENT, _Event_MP_Process_packet );
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_event_send
|
||||
|
||||
@@ -170,8 +170,6 @@ rtems_status_code rtems_semaphore_create(
|
||||
|
||||
/* Add priority ceiling code here ????? */
|
||||
|
||||
the_mutex_attributes.priority_ceiling = priority_ceiling;
|
||||
|
||||
if ( count == 1 )
|
||||
lock = CORE_MUTEX_UNLOCKED;
|
||||
else
|
||||
@@ -191,13 +189,6 @@ rtems_status_code rtems_semaphore_create(
|
||||
else
|
||||
the_semaphore_attributes.discipline = CORE_SEMAPHORE_DISCIPLINES_FIFO;
|
||||
|
||||
/*
|
||||
* The following are just to make Purify happy.
|
||||
*/
|
||||
|
||||
the_mutex_attributes.allow_nesting = TRUE;
|
||||
the_mutex_attributes.priority_ceiling = PRIORITY_MINIMUM;
|
||||
|
||||
_CORE_semaphore_Initialize(
|
||||
&the_semaphore->Core_control.semaphore,
|
||||
OBJECTS_RTEMS_SEMAPHORES,
|
||||
|
||||
@@ -62,7 +62,7 @@ const rtems_multiprocessing_table
|
||||
*/
|
||||
|
||||
const char _RTEMS_version[] =
|
||||
"RTEMS RELEASE V3.5.15 snapshot (" CPU_NAME "/" CPU_MODEL_NAME ")";
|
||||
"RTEMS RELEASE V3.5.1 (" CPU_NAME "/" CPU_MODEL_NAME ")";
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <rtems/score/object.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/extension.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _Extension_Manager_initialization(
|
||||
unsigned32 maximum_extensions
|
||||
@@ -33,11 +32,6 @@ rtems_status_code rtems_extension_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -46,11 +40,6 @@ rtems_status_code rtems_extension_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -58,10 +47,5 @@ rtems_status_code rtems_extension_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <rtems/io.h>
|
||||
#include <rtems/score/isr.h>
|
||||
#include <rtems/score/thread.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
void _IO_Manager_initialization(
|
||||
rtems_driver_address_table *driver_table,
|
||||
@@ -37,26 +36,16 @@ rtems_status_code rtems_io_register_name(
|
||||
char *device_name,
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor
|
||||
)
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
rtems_status_code rtems_io_lookup_name(
|
||||
const char *pathname,
|
||||
rtems_driver_name_t **rnp
|
||||
)
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -66,11 +55,6 @@ rtems_status_code rtems_io_initialize(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -80,11 +64,6 @@ rtems_status_code rtems_io_open(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -94,11 +73,6 @@ rtems_status_code rtems_io_close(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -108,11 +82,6 @@ rtems_status_code rtems_io_read(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -122,11 +91,6 @@ rtems_status_code rtems_io_write(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -136,10 +100,5 @@ rtems_status_code rtems_io_control(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
/*
|
||||
* RTEMS API Initialization Support
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <rtems/system.h>
|
||||
|
||||
#define INIT
|
||||
|
||||
#include <rtems/posix/cond.h>
|
||||
#include <rtems/posix/condmp.h>
|
||||
#include <rtems/posix/config.h>
|
||||
#include <rtems/posix/key.h>
|
||||
#include <rtems/posix/mutex.h>
|
||||
#include <rtems/posix/mutexmp.h>
|
||||
#include <rtems/posix/priority.h>
|
||||
#include <rtems/posix/pthread.h>
|
||||
#include <rtems/posix/pthreadmp.h>
|
||||
#include <rtems/posix/time.h>
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _POSIX_API_Initialize
|
||||
*
|
||||
* XXX
|
||||
*/
|
||||
|
||||
void _POSIX_API_Initialize(
|
||||
rtems_configuration_table *configuration_table
|
||||
)
|
||||
{
|
||||
posix_api_configuration_table *api_configuration;
|
||||
|
||||
api_configuration = configuration_table->POSIX_api_configuration;
|
||||
|
||||
assert( api_configuration );
|
||||
|
||||
_RTEMS_tasks_Manager_initialization(
|
||||
api_configuration->maximum_tasks
|
||||
#if 0
|
||||
,
|
||||
api_configuration->number_of_initialization_tasks,
|
||||
api_configuration->User_initialization_tasks_table
|
||||
#endif
|
||||
);
|
||||
|
||||
_POSIX_Condition_variables_Manager_initialization(
|
||||
api_configuration->maximum_condition_variables
|
||||
);
|
||||
|
||||
void _POSIX_Key_Manager_initialization( api_configuration->maximum_keys );
|
||||
|
||||
_POSIX_Mutex_Manager_initialization(
|
||||
api_configuration->maximum_mutexes
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/* end of file */
|
||||
@@ -104,9 +104,6 @@ typedef struct {
|
||||
boolean do_zero_of_workspace;
|
||||
unsigned32 interrupt_stack_size;
|
||||
unsigned32 extra_mpci_receive_server_stack;
|
||||
void * (*stack_allocate_hook)( unsigned32 );
|
||||
void (*stack_free_hook)( void* );
|
||||
/* end of fields required on all CPUs */
|
||||
|
||||
unsigned32 interrupt_table_segment;
|
||||
void *interrupt_table_offset;
|
||||
|
||||
@@ -146,10 +146,6 @@ typedef struct {
|
||||
boolean do_zero_of_workspace;
|
||||
unsigned32 interrupt_stack_size;
|
||||
unsigned32 extra_mpci_receive_server_stack;
|
||||
void * (*stack_allocate_hook)( unsigned32 );
|
||||
void (*stack_free_hook)( void* );
|
||||
/* end of fields required on all CPUs */
|
||||
|
||||
#if defined(__i960CA__) || defined(__i960_CA__) || defined(__i960CA)
|
||||
i960ca_PRCB *Prcb;
|
||||
#endif
|
||||
|
||||
@@ -139,10 +139,6 @@ typedef struct {
|
||||
boolean do_zero_of_workspace;
|
||||
unsigned32 interrupt_stack_size;
|
||||
unsigned32 extra_mpci_receive_server_stack;
|
||||
void * (*stack_allocate_hook)( unsigned32 );
|
||||
void (*stack_free_hook)( void* );
|
||||
/* end of fields required on all CPUs */
|
||||
|
||||
m68k_isr *interrupt_vector_table;
|
||||
} rtems_cpu_table;
|
||||
|
||||
@@ -337,7 +333,7 @@ unsigned32 _CPU_ISR_Get_level( void );
|
||||
/* duplicates BFFFO results for 16 bits (i.e., 15-(_priority) in
|
||||
_CPU_Priority_bits_index is not needed), handles the 0 case, and
|
||||
does not molest _value -- jsg */
|
||||
#if ( M68K_HAS_EXTB_L == 1 )
|
||||
#ifndef m68000
|
||||
#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
|
||||
{ \
|
||||
extern const unsigned char __BFFFOtable[256]; \
|
||||
@@ -375,7 +371,7 @@ unsigned32 _CPU_ISR_Get_level( void );
|
||||
: "d" ((_value)), "ao" ((__BFFFOtable)) \
|
||||
: "cc" ) ; \
|
||||
}
|
||||
#endif /* M68K_HAS_EXTB_L */
|
||||
#endif /* m68000 */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,880 +0,0 @@
|
||||
/*
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
** **
|
||||
** MOTOROLA MC68360 QUAD INTEGRATED COMMUNICATIONS CONTROLLER (QUICC) **
|
||||
** **
|
||||
** HARDWARE DECLARATIONS **
|
||||
** **
|
||||
** **
|
||||
** Submitted By: **
|
||||
** **
|
||||
** W. Eric Norum **
|
||||
** Saskatchewan Accelerator Laboratory **
|
||||
** University of Saskatchewan **
|
||||
** 107 North Road **
|
||||
** Saskatoon, Saskatchewan, CANADA **
|
||||
** S7N 5C6 **
|
||||
** **
|
||||
** eric@skatter.usask.ca **
|
||||
** **
|
||||
** $Id$ **
|
||||
** **
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __MC68360_h
|
||||
#define __MC68360_h
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* REGISTER SUBBLOCKS *
|
||||
*************************************************************************
|
||||
*/
|
||||
|
||||
/*
|
||||
* Memory controller registers
|
||||
*/
|
||||
typedef struct m360MEMCRegisters_ {
|
||||
rtems_unsigned32 br;
|
||||
rtems_unsigned32 or;
|
||||
rtems_unsigned32 _pad[2];
|
||||
} m360MEMCRegisters_t;
|
||||
|
||||
/*
|
||||
* Serial Communications Controller registers
|
||||
*/
|
||||
typedef struct m360SCCRegisters_ {
|
||||
rtems_unsigned32 gsmr_l;
|
||||
rtems_unsigned32 gsmr_h;
|
||||
rtems_unsigned16 psmr;
|
||||
rtems_unsigned16 _pad0;
|
||||
rtems_unsigned16 todr;
|
||||
rtems_unsigned16 dsr;
|
||||
rtems_unsigned16 scce;
|
||||
rtems_unsigned16 _pad1;
|
||||
rtems_unsigned16 sccm;
|
||||
rtems_unsigned8 _pad2;
|
||||
rtems_unsigned8 sccs;
|
||||
rtems_unsigned32 _pad3[2];
|
||||
} m360SCCRegisters_t;
|
||||
|
||||
/*
|
||||
* Serial Management Controller registers
|
||||
*/
|
||||
typedef struct m360SMCRegisters_ {
|
||||
rtems_unsigned16 _pad0;
|
||||
rtems_unsigned16 smcmr;
|
||||
rtems_unsigned16 _pad1;
|
||||
rtems_unsigned8 smce;
|
||||
rtems_unsigned8 _pad2;
|
||||
rtems_unsigned16 _pad3;
|
||||
rtems_unsigned8 smcm;
|
||||
rtems_unsigned8 _pad4;
|
||||
rtems_unsigned32 _pad5;
|
||||
} m360SMCRegisters_t;
|
||||
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* Miscellaneous Parameters *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360MiscParms_ {
|
||||
rtems_unsigned16 rev_num;
|
||||
rtems_unsigned16 _res1;
|
||||
rtems_unsigned32 _res2;
|
||||
rtems_unsigned32 _res3;
|
||||
} m360MiscParms_t;
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* RISC Timers *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360TimerParms_ {
|
||||
rtems_unsigned16 tm_base;
|
||||
rtems_unsigned16 _tm_ptr;
|
||||
rtems_unsigned16 _r_tmr;
|
||||
rtems_unsigned16 _r_tmv;
|
||||
rtems_unsigned32 tm_cmd;
|
||||
rtems_unsigned32 tm_cnt;
|
||||
} m360TimerParms_t;
|
||||
|
||||
/*
|
||||
* RISC Controller Configuration Register (RCCR)
|
||||
* All other bits in this register are either reserved or
|
||||
* used only with a Motorola-supplied RAM microcode packge.
|
||||
*/
|
||||
#define M360_RCCR_TIME (1<<15) /* Enable timer */
|
||||
#define M360_RCCR_TIMEP(x) ((x)<<8) /* Timer period */
|
||||
|
||||
/*
|
||||
* Command register
|
||||
* Set up this register before issuing a M360_CR_OP_SET_TIMER command.
|
||||
*/
|
||||
#define M360_TM_CMD_V (1<<31) /* Set to enable timer */
|
||||
#define M360_TM_CMD_R (1<<30) /* Set for automatic restart */
|
||||
#define M360_TM_CMD_TIMER(x) ((x)<<16) /* Select timer */
|
||||
#define M360_TM_CMD_PERIOD(x) (x) /* Timer period (16 bits) */
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* DMA Controllers *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360IDMAparms_ {
|
||||
rtems_unsigned16 ibase;
|
||||
rtems_unsigned16 ibptr;
|
||||
rtems_unsigned32 _istate;
|
||||
rtems_unsigned32 _itemp;
|
||||
} m360IDMAparms_t;
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* Serial Communication Controllers *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360SCCparms_ {
|
||||
rtems_unsigned16 rbase;
|
||||
rtems_unsigned16 tbase;
|
||||
rtems_unsigned8 rfcr;
|
||||
rtems_unsigned8 tfcr;
|
||||
rtems_unsigned16 mrblr;
|
||||
rtems_unsigned32 _rstate;
|
||||
rtems_unsigned32 _pad0;
|
||||
rtems_unsigned16 _rbptr;
|
||||
rtems_unsigned16 _pad1;
|
||||
rtems_unsigned32 _pad2;
|
||||
rtems_unsigned32 _tstate;
|
||||
rtems_unsigned32 _pad3;
|
||||
rtems_unsigned16 _tbptr;
|
||||
rtems_unsigned16 _pad4;
|
||||
rtems_unsigned32 _pad5;
|
||||
rtems_unsigned32 _rcrc;
|
||||
rtems_unsigned32 _tcrc;
|
||||
union {
|
||||
struct {
|
||||
rtems_unsigned32 _res0;
|
||||
rtems_unsigned32 _res1;
|
||||
rtems_unsigned16 max_idl;
|
||||
rtems_unsigned16 _idlc;
|
||||
rtems_unsigned16 brkcr;
|
||||
rtems_unsigned16 parec;
|
||||
rtems_unsigned16 frmec;
|
||||
rtems_unsigned16 nosec;
|
||||
rtems_unsigned16 brkec;
|
||||
rtems_unsigned16 brklen;
|
||||
rtems_unsigned16 uaddr[2];
|
||||
rtems_unsigned16 _rtemp;
|
||||
rtems_unsigned16 toseq;
|
||||
rtems_unsigned16 character[8];
|
||||
rtems_unsigned16 rccm;
|
||||
rtems_unsigned16 rccr;
|
||||
rtems_unsigned16 rlbc;
|
||||
} uart;
|
||||
} un;
|
||||
} m360SCCparms_t;
|
||||
|
||||
typedef struct m360SCCENparms_ {
|
||||
rtems_unsigned16 rbase;
|
||||
rtems_unsigned16 tbase;
|
||||
rtems_unsigned8 rfcr;
|
||||
rtems_unsigned8 tfcr;
|
||||
rtems_unsigned16 mrblr;
|
||||
rtems_unsigned32 _rstate;
|
||||
rtems_unsigned32 _pad0;
|
||||
rtems_unsigned16 _rbptr;
|
||||
rtems_unsigned16 _pad1;
|
||||
rtems_unsigned32 _pad2;
|
||||
rtems_unsigned32 _tstate;
|
||||
rtems_unsigned32 _pad3;
|
||||
rtems_unsigned16 _tbptr;
|
||||
rtems_unsigned16 _pad4;
|
||||
rtems_unsigned32 _pad5;
|
||||
rtems_unsigned32 _rcrc;
|
||||
rtems_unsigned32 _tcrc;
|
||||
union {
|
||||
struct {
|
||||
rtems_unsigned32 _res0;
|
||||
rtems_unsigned32 _res1;
|
||||
rtems_unsigned16 max_idl;
|
||||
rtems_unsigned16 _idlc;
|
||||
rtems_unsigned16 brkcr;
|
||||
rtems_unsigned16 parec;
|
||||
rtems_unsigned16 frmec;
|
||||
rtems_unsigned16 nosec;
|
||||
rtems_unsigned16 brkec;
|
||||
rtems_unsigned16 brklen;
|
||||
rtems_unsigned16 uaddr[2];
|
||||
rtems_unsigned16 _rtemp;
|
||||
rtems_unsigned16 toseq;
|
||||
rtems_unsigned16 character[8];
|
||||
rtems_unsigned16 rccm;
|
||||
rtems_unsigned16 rccr;
|
||||
rtems_unsigned16 rlbc;
|
||||
} uart;
|
||||
struct {
|
||||
rtems_unsigned32 c_pres;
|
||||
rtems_unsigned32 c_mask;
|
||||
rtems_unsigned32 crcec;
|
||||
rtems_unsigned32 alec;
|
||||
rtems_unsigned32 disfc;
|
||||
rtems_unsigned16 pads;
|
||||
rtems_unsigned16 ret_lim;
|
||||
rtems_unsigned16 _ret_cnt;
|
||||
rtems_unsigned16 mflr;
|
||||
rtems_unsigned16 minflr;
|
||||
rtems_unsigned16 maxd1;
|
||||
rtems_unsigned16 maxd2;
|
||||
rtems_unsigned16 _maxd;
|
||||
rtems_unsigned16 dma_cnt;
|
||||
rtems_unsigned16 _max_b;
|
||||
rtems_unsigned16 gaddr1;
|
||||
rtems_unsigned16 gaddr2;
|
||||
rtems_unsigned16 gaddr3;
|
||||
rtems_unsigned16 gaddr4;
|
||||
rtems_unsigned32 _tbuf0data0;
|
||||
rtems_unsigned32 _tbuf0data1;
|
||||
rtems_unsigned32 _tbuf0rba0;
|
||||
rtems_unsigned32 _tbuf0crc;
|
||||
rtems_unsigned16 _tbuf0bcnt;
|
||||
rtems_unsigned16 paddr_h;
|
||||
rtems_unsigned16 paddr_m;
|
||||
rtems_unsigned16 paddr_l;
|
||||
rtems_unsigned16 p_per;
|
||||
rtems_unsigned16 _rfbd_ptr;
|
||||
rtems_unsigned16 _tfbd_ptr;
|
||||
rtems_unsigned16 _tlbd_ptr;
|
||||
rtems_unsigned32 _tbuf1data0;
|
||||
rtems_unsigned32 _tbuf1data1;
|
||||
rtems_unsigned32 _tbuf1rba0;
|
||||
rtems_unsigned32 _tbuf1crc;
|
||||
rtems_unsigned16 _tbuf1bcnt;
|
||||
rtems_unsigned16 _tx_len;
|
||||
rtems_unsigned16 iaddr1;
|
||||
rtems_unsigned16 iaddr2;
|
||||
rtems_unsigned16 iaddr3;
|
||||
rtems_unsigned16 iaddr4;
|
||||
rtems_unsigned16 _boff_cnt;
|
||||
rtems_unsigned16 taddr_l;
|
||||
rtems_unsigned16 taddr_m;
|
||||
rtems_unsigned16 taddr_h;
|
||||
} ethernet;
|
||||
} un;
|
||||
} m360SCCENparms_t;
|
||||
|
||||
/*
|
||||
* Receive and transmit function code register bits
|
||||
* These apply to the function code registers of all devices, not just SCC.
|
||||
*/
|
||||
#define M360_RFCR_MOT (1<<4)
|
||||
#define M360_RFCR_DMA_SPACE 0x8
|
||||
#define M360_TFCR_MOT (1<<4)
|
||||
#define M360_TFCR_DMA_SPACE 0x8
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* Serial Management Controllers *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360SMCparms_ {
|
||||
rtems_unsigned16 rbase;
|
||||
rtems_unsigned16 tbase;
|
||||
rtems_unsigned8 rfcr;
|
||||
rtems_unsigned8 tfcr;
|
||||
rtems_unsigned16 mrblr;
|
||||
rtems_unsigned32 _rstate;
|
||||
rtems_unsigned32 _pad0;
|
||||
rtems_unsigned16 _rbptr;
|
||||
rtems_unsigned16 _pad1;
|
||||
rtems_unsigned32 _pad2;
|
||||
rtems_unsigned32 _tstate;
|
||||
rtems_unsigned32 _pad3;
|
||||
rtems_unsigned16 _tbptr;
|
||||
rtems_unsigned16 _pad4;
|
||||
rtems_unsigned32 _pad5;
|
||||
union {
|
||||
struct {
|
||||
rtems_unsigned16 max_idl;
|
||||
rtems_unsigned16 _pad0;
|
||||
rtems_unsigned16 brklen;
|
||||
rtems_unsigned16 brkec;
|
||||
rtems_unsigned16 brkcr;
|
||||
rtems_unsigned16 _r_mask;
|
||||
} uart;
|
||||
struct {
|
||||
rtems_unsigned16 _pad0[5];
|
||||
} transparent;
|
||||
} un;
|
||||
} m360SMCparms_t;
|
||||
|
||||
/*
|
||||
* Mode register
|
||||
*/
|
||||
#define M360_SMCMR_CLEN(x) ((x)<<11) /* Character length */
|
||||
#define M360_SMCMR_2STOP (1<<10) /* 2 stop bits */
|
||||
#define M360_SMCMR_PARITY (1<<9) /* Enable parity */
|
||||
#define M360_SMCMR_EVEN (1<<8) /* Even parity */
|
||||
#define M360_SMCMR_SM_GCI (0<<4) /* GCI Mode */
|
||||
#define M360_SMCMR_SM_UART (2<<4) /* UART Mode */
|
||||
#define M360_SMCMR_SM_TRANSPARENT (3<<4) /* Transparent Mode */
|
||||
#define M360_SMCMR_DM_LOOPBACK (1<<2) /* Local loopback mode */
|
||||
#define M360_SMCMR_DM_ECHO (2<<2) /* Echo mode */
|
||||
#define M360_SMCMR_TEN (1<<1) /* Enable transmitter */
|
||||
#define M360_SMCMR_REN (1<<0) /* Enable receiver */
|
||||
|
||||
/*
|
||||
* Event and mask registers (SMCE, SMCM)
|
||||
*/
|
||||
#define M360_SMCE_BRK (1<<4)
|
||||
#define M360_SMCE_BSY (1<<2)
|
||||
#define M360_SMCE_TX (1<<1)
|
||||
#define M360_SMCE_RX (1<<0)
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* Serial Peripheral Interface *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360SPIparms_ {
|
||||
rtems_unsigned16 rbase;
|
||||
rtems_unsigned16 tbase;
|
||||
rtems_unsigned8 rfcr;
|
||||
rtems_unsigned8 tfcr;
|
||||
rtems_unsigned16 mrblr;
|
||||
rtems_unsigned32 _rstate;
|
||||
rtems_unsigned32 _pad0;
|
||||
rtems_unsigned16 _rbptr;
|
||||
rtems_unsigned16 _pad1;
|
||||
rtems_unsigned32 _pad2;
|
||||
rtems_unsigned32 _tstate;
|
||||
rtems_unsigned32 _pad3;
|
||||
rtems_unsigned16 _tbptr;
|
||||
rtems_unsigned16 _pad4;
|
||||
rtems_unsigned32 _pad5;
|
||||
} m360SPIparms_t;
|
||||
|
||||
/*
|
||||
* Mode register (SPMODE)
|
||||
*/
|
||||
#define M360_SPMODE_LOOP (1<<14) /* Local loopback mode */
|
||||
#define M360_SPMODE_CI (1<<13) /* Clock invert */
|
||||
#define M360_SPMODE_CP (1<<12) /* Clock phase */
|
||||
#define M360_SPMODE_DIV16 (1<<11) /* Divide BRGCLK by 16 */
|
||||
#define M360_SPMODE_REV (1<<10) /* Reverse data */
|
||||
#define M360_SPMODE_MASTER (1<<9) /* SPI is master */
|
||||
#define M360_SPMODE_EN (1<<8) /* Enable SPI */
|
||||
#define M360_SPMODE_CLEN(x) ((x)<<4) /* Character length */
|
||||
#define M360_SPMODE_PM(x) (x) /* Prescaler modulus */
|
||||
|
||||
/*
|
||||
* Mode register (SPCOM)
|
||||
*/
|
||||
#define M360_SPCOM_STR (1<<7) /* Start transmit */
|
||||
|
||||
/*
|
||||
* Event and mask registers (SPIE, SPIM)
|
||||
*/
|
||||
#define M360_SPIE_MME (1<<5) /* Multi-master error */
|
||||
#define M360_SPIE_TXE (1<<4) /* Tx error */
|
||||
#define M360_SPIE_BSY (1<<2) /* Busy condition*/
|
||||
#define M360_SPIE_TXB (1<<1) /* Tx buffer */
|
||||
#define M360_SPIE_RXB (1<<0) /* Rx buffer */
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* SDMA (SCC, SMC, SPI) Buffer Descriptors *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360BufferDescriptor_ {
|
||||
rtems_unsigned16 status;
|
||||
rtems_unsigned16 length;
|
||||
volatile void *buffer;
|
||||
} m360BufferDescriptor_t;
|
||||
|
||||
/*
|
||||
* Bits in receive buffer descriptor status word
|
||||
*/
|
||||
#define M360_BD_EMPTY (1<<15) /* Ethernet, SCC UART, SMC UART, SPI */
|
||||
#define M360_BD_WRAP (1<<13) /* Ethernet, SCC UART, SMC UART, SPI */
|
||||
#define M360_BD_INTERRUPT (1<<12) /* Ethernet, SCC UART, SMC UART, SPI */
|
||||
#define M360_BD_LAST (1<<11) /* Ethernet, SPI */
|
||||
#define M360_BD_CONTROL_CHAR (1<<11) /* SCC UART */
|
||||
#define M360_BD_FIRST_IN_FRAME (1<<10) /* Ethernet */
|
||||
#define M360_BD_ADDRESS (1<<10) /* SCC UART */
|
||||
#define M360_BD_CONTINUOUS (1<<9) /* SCC UART, SMC UART, SPI */
|
||||
#define M360_BD_MISS (1<<8) /* Ethernet */
|
||||
#define M360_BD_IDLE (1<<8) /* SCC UART, SMC UART */
|
||||
#define M360_BD_ADDRSS_MATCH (1<<7) /* SCC UART */
|
||||
#define M360_BD_LONG (1<<5) /* Ethernet */
|
||||
#define M360_BD_BREAK (1<<5) /* SCC UART, SMC UART */
|
||||
#define M360_BD_NONALIGNED (1<<4) /* Ethernet */
|
||||
#define M360_BD_FRAMING_ERROR (1<<4) /* SCC UART, SMC UART */
|
||||
#define M360_BD_SHORT (1<<3) /* Ethernet */
|
||||
#define M360_BD_PARITY_ERROR (1<<3) /* SCC UART, SMC UART */
|
||||
#define M360_BD_CRC_ERROR (1<<2) /* Ethernet */
|
||||
#define M360_BD_OVERRUN (1<<1) /* Ethernet, SCC UART, SMC UART, SPI */
|
||||
#define M360_BD_COLLISION (1<<0) /* Ethernet */
|
||||
#define M360_BD_CARRIER_LOST (1<<0) /* SCC UART */
|
||||
#define M360_BD_MASTER_ERROR (1<<0) /* SPI */
|
||||
|
||||
/*
|
||||
* Bits in transmit buffer descriptor status word
|
||||
* Many bits have the same meaning as those in receiver buffer descriptors.
|
||||
*/
|
||||
#define M360_BD_READY (1<<15) /* Ethernet, SCC UART, SMC UART, SPI */
|
||||
#define M360_BD_PAD (1<<14) /* Ethernet */
|
||||
#define M360_BD_CTS_REPORT (1<<11) /* SCC UART */
|
||||
#define M360_BD_TX_CRC (1<<10) /* Ethernet */
|
||||
#define M360_BD_DEFER (1<<9) /* Ethernet */
|
||||
#define M360_BD_HEARTBEAT (1<<8) /* Ethernet */
|
||||
#define M360_BD_PREAMBLE (1<<8) /* SCC UART, SMC UART */
|
||||
#define M360_BD_LATE_COLLISION (1<<7) /* Ethernet */
|
||||
#define M360_BD_NO_STOP_BIT (1<<7) /* SCC UART */
|
||||
#define M360_BD_RETRY_LIMIT (1<<6) /* Ethernet */
|
||||
#define M360_BD_RETRY_COUNT(x) (((x)&0x3C)>>2) /* Ethernet */
|
||||
#define M360_BD_UNDERRUN (1<<1) /* Ethernet, SPI */
|
||||
#define M360_BD_CARRIER_LOST (1<<0) /* Ethernet */
|
||||
#define M360_BD_CTS_LOST (1<<0) /* SCC UART */
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* IDMA Buffer Descriptors *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360IDMABufferDescriptor_ {
|
||||
rtems_unsigned16 status;
|
||||
rtems_unsigned16 _pad;
|
||||
rtems_unsigned32 length;
|
||||
void *source;
|
||||
void *destination;
|
||||
} m360IDMABufferDescriptor_t;
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* RISC Communication Processor Module Command Register (CR) *
|
||||
*************************************************************************
|
||||
*/
|
||||
#define M360_CR_RST (1<<15) /* Reset communication processor */
|
||||
#define M360_CR_OP_INIT_RX_TX (0<<8) /* SCC, SMC UART, SMC GCI, SPI */
|
||||
#define M360_CR_OP_INIT_RX (1<<8) /* SCC, SMC UART, SPI */
|
||||
#define M360_CR_OP_INIT_TX (2<<8) /* SCC, SMC UART, SPI */
|
||||
#define M360_CR_OP_INIT_HUNT (3<<8) /* SCC, SMC UART */
|
||||
#define M360_CR_OP_STOP_TX (4<<8) /* SCC, SMC UART */
|
||||
#define M360_CR_OP_GR_STOP_TX (5<<8) /* SCC */
|
||||
#define M360_CR_OP_INIT_IDMA (5<<8) /* IDMA */
|
||||
#define M360_CR_OP_RESTART_TX (6<<8) /* SCC, SMC UART */
|
||||
#define M360_CR_OP_CLOSE_RX_BD (7<<8) /* SCC, SMC UART, SPI */
|
||||
#define M360_CR_OP_SET_GRP_ADDR (8<<8) /* SCC */
|
||||
#define M360_CR_OP_SET_TIMER (8<<8) /* Timer */
|
||||
#define M360_CR_OP_GCI_TIMEOUT (9<<8) /* SMC GCI */
|
||||
#define M360_CR_OP_RESERT_BCS (10<<8) /* SCC */
|
||||
#define M360_CR_OP_GCI_ABORT (10<<8) /* SMC GCI */
|
||||
#define M360_CR_CHAN_SCC1 (0<<4) /* Channel selection */
|
||||
#define M360_CR_CHAN_SCC2 (4<<4)
|
||||
#define M360_CR_CHAN_SPI (5<<4)
|
||||
#define M360_CR_CHAN_TIMER (5<<4)
|
||||
#define M360_CR_CHAN_SCC3 (8<<4)
|
||||
#define M360_CR_CHAN_SMC1 (9<<4)
|
||||
#define M360_CR_CHAN_IDMA1 (9<<4)
|
||||
#define M360_CR_CHAN_SCC4 (12<<4)
|
||||
#define M360_CR_CHAN_SMC2 (13<<4)
|
||||
#define M360_CR_CHAN_IDMA2 (13<<4)
|
||||
#define M360_CR_FLG (1<<0) /* Command flag */
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* System Protection Control Register (SYPCR) *
|
||||
*************************************************************************
|
||||
*/
|
||||
#define M360_SYPCR_SWE (1<<7) /* Software watchdog enable */
|
||||
#define M360_SYPCR_SWRI (1<<6) /* Software watchdog reset select */
|
||||
#define M360_SYPCR_SWT1 (1<<5) /* Software watchdog timing bit 1 */
|
||||
#define M360_SYPCR_SWT0 (1<<4) /* Software watchdog timing bit 0 */
|
||||
#define M360_SYPCR_DBFE (1<<3) /* Double bus fault monitor enable */
|
||||
#define M360_SYPCR_BME (1<<2) /* Bus monitor external enable */
|
||||
#define M360_SYPCR_BMT1 (1<<1) /* Bus monitor timing bit 1 */
|
||||
#define M360_SYPCR_BMT0 (1<<0) /* Bus monitor timing bit 0 */
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* Memory Control Registers *
|
||||
*************************************************************************
|
||||
*/
|
||||
#define M360_GMR_RCNT(x) ((x)<<24) /* Refresh count */
|
||||
#define M360_GMR_RFEN (1<<23) /* Refresh enable */
|
||||
#define M360_GMR_RCYC(x) ((x)<<21) /* Refresh cycle length */
|
||||
#define M360_GMR_PGS(x) ((x)<<18) /* Page size */
|
||||
#define M360_GMR_DPS_32BIT (0<<16) /* DRAM port size */
|
||||
#define M360_GMR_DPS_16BIT (1<<16)
|
||||
#define M360_GMR_DPS_8BIT (2<<16)
|
||||
#define M360_GMR_DPS_DSACK (3<<16)
|
||||
#define M360_GMR_WBT40 (1<<15) /* Wait between 040 transfers */
|
||||
#define M360_GMR_WBTQ (1<<14) /* Wait between 360 transfers */
|
||||
#define M360_GMR_SYNC (1<<13) /* Synchronous external access */
|
||||
#define M360_GMR_EMWS (1<<12) /* External master wait state */
|
||||
#define M360_GMR_OPAR (1<<11) /* Odd parity */
|
||||
#define M360_GMR_PBEE (1<<10) /* Parity bus error enable */
|
||||
#define M360_GMR_TSS40 (1<<9) /* TS* sample for 040 */
|
||||
#define M360_GMR_NCS (1<<8) /* No CPU space */
|
||||
#define M360_GMR_DWQ (1<<7) /* Delay write for 360 */
|
||||
#define M360_GMR_DW40 (1<<6) /* Delay write for 040 */
|
||||
#define M360_GMR_GAMX (1<<5) /* Global address mux enable */
|
||||
|
||||
#define M360_MEMC_BR_FC(x) ((x)<<7) /* Function code limit */
|
||||
#define M360_MEMC_BR_TRLXQ (1<<6) /* Relax timing requirements */
|
||||
#define M360_MEMC_BR_BACK40 (1<<5) /* Burst acknowledge to 040 */
|
||||
#define M360_MEMC_BR_CSNT40 (1<<4) /* CS* negate timing for 040 */
|
||||
#define M360_MEMC_BR_CSNTQ (1<<3) /* CS* negate timing for 360 */
|
||||
#define M360_MEMC_BR_PAREN (1<<2) /* Enable parity checking */
|
||||
#define M360_MEMC_BR_WP (1<<1) /* Write Protect */
|
||||
#define M360_MEMC_BR_V (1<<0) /* Base/Option register are valid */
|
||||
|
||||
#define M360_MEMC_OR_TCYC(x) ((x)<<28) /* Cycle length (clocks) */
|
||||
#define M360_MEMC_OR_WAITS(x) M360_MEMC_OR_TCYC((x)+1)
|
||||
#define M360_MEMC_OR_2KB 0x0FFFF800 /* Address range */
|
||||
#define M360_MEMC_OR_4KB 0x0FFFF000
|
||||
#define M360_MEMC_OR_8KB 0x0FFFE000
|
||||
#define M360_MEMC_OR_16KB 0x0FFFC000
|
||||
#define M360_MEMC_OR_32KB 0x0FFF8000
|
||||
#define M360_MEMC_OR_64KB 0x0FFF0000
|
||||
#define M360_MEMC_OR_128KB 0x0FFE0000
|
||||
#define M360_MEMC_OR_256KB 0x0FFC0000
|
||||
#define M360_MEMC_OR_512KB 0x0FF80000
|
||||
#define M360_MEMC_OR_1MB 0x0FF00000
|
||||
#define M360_MEMC_OR_2MB 0x0FE00000
|
||||
#define M360_MEMC_OR_4MB 0x0FC00000
|
||||
#define M360_MEMC_OR_8MB 0x0F800000
|
||||
#define M360_MEMC_OR_16MB 0x0F000000
|
||||
#define M360_MEMC_OR_32MB 0x0E000000
|
||||
#define M360_MEMC_OR_64MB 0x0C000000
|
||||
#define M360_MEMC_OR_128MB 0x08000000
|
||||
#define M360_MEMC_OR_256MB 0x00000000
|
||||
#define M360_MEMC_OR_FCMC(x) ((x)<<7) /* Function code mask */
|
||||
#define M360_MEMC_OR_BCYC(x) ((x)<<5) /* Burst cycle length (clocks) */
|
||||
#define M360_MEMC_OR_PGME (1<<3) /* Page mode enable */
|
||||
#define M360_MEMC_OR_32BIT (0<<1) /* Port size */
|
||||
#define M360_MEMC_OR_16BIT (1<<1)
|
||||
#define M360_MEMC_OR_8BIT (2<<1)
|
||||
#define M360_MEMC_OR_DSACK (3<<1)
|
||||
#define M360_MEMC_OR_DRAM (1<<0) /* Dynamic RAM select */
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* SI Mode Register (SIMODE) *
|
||||
*************************************************************************
|
||||
*/
|
||||
#define M360_SI_SMC2_BITS 0xFFFF0000 /* All SMC2 bits */
|
||||
#define M360_SI_SMC2_TDM (1<<31) /* Multiplexed SMC2 */
|
||||
#define M360_SI_SMC2_BRG1 (0<<28) /* SMC2 clock souce */
|
||||
#define M360_SI_SMC2_BRG2 (1<<28)
|
||||
#define M360_SI_SMC2_BRG3 (2<<28)
|
||||
#define M360_SI_SMC2_BRG4 (3<<28)
|
||||
#define M360_SI_SMC2_CLK5 (0<<28)
|
||||
#define M360_SI_SMC2_CLK6 (1<<28)
|
||||
#define M360_SI_SMC2_CLK7 (2<<28)
|
||||
#define M360_SI_SMC2_CLK8 (3<<28)
|
||||
#define M360_SI_SMC1_BITS 0x0000FFFF /* All SMC1 bits */
|
||||
#define M360_SI_SMC1_TDM (1<<15) /* Multiplexed SMC1 */
|
||||
#define M360_SI_SMC1_BRG1 (0<<12) /* SMC1 clock souce */
|
||||
#define M360_SI_SMC1_BRG2 (1<<12)
|
||||
#define M360_SI_SMC1_BRG3 (2<<12)
|
||||
#define M360_SI_SMC1_BRG4 (3<<12)
|
||||
#define M360_SI_SMC1_CLK1 (0<<12)
|
||||
#define M360_SI_SMC1_CLK2 (1<<12)
|
||||
#define M360_SI_SMC1_CLK3 (2<<12)
|
||||
#define M360_SI_SMC1_CLK4 (3<<12)
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* SDMA Configuration Register (SDMA) *
|
||||
*************************************************************************
|
||||
*/
|
||||
#define M360_SDMA_FREEZE (2<<13) /* Freeze on next bus cycle */
|
||||
#define M360_SDMA_SISM_7 (7<<8) /* Normal interrupt service mask */
|
||||
#define M360_SDMA_SAID_4 (4<<4) /* Normal arbitration ID */
|
||||
#define M360_SDMA_INTE (1<<1) /* SBER interrupt enable */
|
||||
#define M360_SDMA_INTB (1<<0) /* SBKP interrupt enable */
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* Baud (sic) Rate Generators *
|
||||
*************************************************************************
|
||||
*/
|
||||
#define M360_BRG_RST (1<<17) /* Reset generator */
|
||||
#define M360_BRG_EN (1<<16) /* Enable generator */
|
||||
#define M360_BRG_EXTC_BRGCLK (0<<14) /* Source is BRGCLK */
|
||||
#define M360_BRG_EXTC_CLK2 (1<<14) /* Source is CLK2 pin */
|
||||
#define M360_BRG_EXTC_CLK6 (2<<14) /* Source is CLK6 pin */
|
||||
#define M360_BRG_ATB (1<<13) /* Autobaud */
|
||||
#define M360_BRG_115200 (13<<1) /* Assume 25 MHz clock */
|
||||
#define M360_BRG_57600 (26<<1)
|
||||
#define M360_BRG_38400 (40<<1)
|
||||
#define M360_BRG_19200 (80<<1)
|
||||
#define M360_BRG_9600 (162<<1)
|
||||
#define M360_BRG_4800 (324<<1)
|
||||
#define M360_BRG_2400 (650<<1)
|
||||
#define M360_BRG_1200 (1301<<1)
|
||||
#define M360_BRG_600 (2603<<1)
|
||||
#define M360_BRG_300 ((324<<1) | 1)
|
||||
#define M360_BRG_150 ((650<<1) | 1)
|
||||
#define M360_BRG_75 ((1301<<1) | 1)
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* MC68360 DUAL-PORT RAM AND REGISTERS *
|
||||
*************************************************************************
|
||||
*/
|
||||
typedef struct m360_ {
|
||||
/*
|
||||
* Dual-port RAM
|
||||
*/
|
||||
rtems_unsigned8 dpram0[0x400]; /* Microcode program */
|
||||
rtems_unsigned8 dpram1[0x200];
|
||||
rtems_unsigned8 dpram2[0x100]; /* Microcode scratch */
|
||||
rtems_unsigned8 dpram3[0x100]; /* Not on REV A or B masks */
|
||||
rtems_unsigned8 _rsv0[0xC00-0x800];
|
||||
m360SCCENparms_t scc1p;
|
||||
rtems_unsigned8 _rsv1[0xCB0-0xC00-sizeof(m360SCCENparms_t)];
|
||||
m360MiscParms_t miscp;
|
||||
rtems_unsigned8 _rsv2[0xD00-0xCB0-sizeof(m360MiscParms_t)];
|
||||
m360SCCparms_t scc2p;
|
||||
rtems_unsigned8 _rsv3[0xD80-0xD00-sizeof(m360SCCparms_t)];
|
||||
m360SPIparms_t spip;
|
||||
rtems_unsigned8 _rsv4[0xDB0-0xD80-sizeof(m360SPIparms_t)];
|
||||
m360TimerParms_t tmp;
|
||||
rtems_unsigned8 _rsv5[0xE00-0xDB0-sizeof(m360TimerParms_t)];
|
||||
m360SCCparms_t scc3p;
|
||||
rtems_unsigned8 _rsv6[0xE70-0xE00-sizeof(m360SCCparms_t)];
|
||||
m360IDMAparms_t idma1p;
|
||||
rtems_unsigned8 _rsv7[0xE80-0xE70-sizeof(m360IDMAparms_t)];
|
||||
m360SMCparms_t smc1p;
|
||||
rtems_unsigned8 _rsv8[0xF00-0xE80-sizeof(m360SMCparms_t)];
|
||||
m360SCCparms_t scc4p;
|
||||
rtems_unsigned8 _rsv9[0xF70-0xF00-sizeof(m360SCCparms_t)];
|
||||
m360IDMAparms_t idma2p;
|
||||
rtems_unsigned8 _rsv10[0xF80-0xF70-sizeof(m360IDMAparms_t)];
|
||||
m360SMCparms_t smc2p;
|
||||
rtems_unsigned8 _rsv11[0x1000-0xF80-sizeof(m360SMCparms_t)];
|
||||
|
||||
/*
|
||||
* SIM Block
|
||||
*/
|
||||
rtems_unsigned32 mcr;
|
||||
rtems_unsigned32 _pad00;
|
||||
rtems_unsigned8 avr;
|
||||
rtems_unsigned8 rsr;
|
||||
rtems_unsigned16 _pad01;
|
||||
rtems_unsigned8 clkocr;
|
||||
rtems_unsigned8 _pad02;
|
||||
rtems_unsigned16 _pad03;
|
||||
rtems_unsigned16 pllcr;
|
||||
rtems_unsigned16 _pad04;
|
||||
rtems_unsigned16 cdvcr;
|
||||
rtems_unsigned16 pepar;
|
||||
rtems_unsigned32 _pad05[2];
|
||||
rtems_unsigned16 _pad06;
|
||||
rtems_unsigned8 sypcr;
|
||||
rtems_unsigned8 swiv;
|
||||
rtems_unsigned16 _pad07;
|
||||
rtems_unsigned16 picr;
|
||||
rtems_unsigned16 _pad08;
|
||||
rtems_unsigned16 pitr;
|
||||
rtems_unsigned16 _pad09;
|
||||
rtems_unsigned8 _pad10;
|
||||
rtems_unsigned8 swsr;
|
||||
rtems_unsigned32 bkar;
|
||||
rtems_unsigned32 bcar;
|
||||
rtems_unsigned32 _pad11[2];
|
||||
|
||||
/*
|
||||
* MEMC Block
|
||||
*/
|
||||
rtems_unsigned32 gmr;
|
||||
rtems_unsigned16 mstat;
|
||||
rtems_unsigned16 _pad12;
|
||||
rtems_unsigned32 _pad13[2];
|
||||
m360MEMCRegisters_t memc[8];
|
||||
rtems_unsigned8 _pad14[0xF0-0xD0];
|
||||
rtems_unsigned8 _pad15[0x100-0xF0];
|
||||
rtems_unsigned8 _pad16[0x500-0x100];
|
||||
|
||||
/*
|
||||
* IDMA1 Block
|
||||
*/
|
||||
rtems_unsigned16 iccr;
|
||||
rtems_unsigned16 _pad17;
|
||||
rtems_unsigned16 cmr1;
|
||||
rtems_unsigned16 _pad18;
|
||||
rtems_unsigned32 sapr1;
|
||||
rtems_unsigned32 dapr1;
|
||||
rtems_unsigned32 bcr1;
|
||||
rtems_unsigned8 fcr1;
|
||||
rtems_unsigned8 _pad19;
|
||||
rtems_unsigned8 cmar1;
|
||||
rtems_unsigned8 _pad20;
|
||||
rtems_unsigned8 csr1;
|
||||
rtems_unsigned8 _pad21;
|
||||
rtems_unsigned16 _pad22;
|
||||
|
||||
/*
|
||||
* SDMA Block
|
||||
*/
|
||||
rtems_unsigned8 sdsr;
|
||||
rtems_unsigned8 _pad23;
|
||||
rtems_unsigned16 sdcr;
|
||||
rtems_unsigned32 sdar;
|
||||
|
||||
/*
|
||||
* IDMA2 Block
|
||||
*/
|
||||
rtems_unsigned16 _pad24;
|
||||
rtems_unsigned16 cmr2;
|
||||
rtems_unsigned32 sapr2;
|
||||
rtems_unsigned32 dapr2;
|
||||
rtems_unsigned32 bcr2;
|
||||
rtems_unsigned8 fcr2;
|
||||
rtems_unsigned8 _pad26;
|
||||
rtems_unsigned8 cmar2;
|
||||
rtems_unsigned8 _pad27;
|
||||
rtems_unsigned8 csr2;
|
||||
rtems_unsigned8 _pad28;
|
||||
rtems_unsigned16 _pad29;
|
||||
rtems_unsigned32 _pad30;
|
||||
|
||||
/*
|
||||
* CPIC Block
|
||||
*/
|
||||
rtems_unsigned32 cicr;
|
||||
rtems_unsigned32 cipr;
|
||||
rtems_unsigned32 cimr;
|
||||
rtems_unsigned32 cisr;
|
||||
|
||||
/*
|
||||
* Parallel I/O Block
|
||||
*/
|
||||
rtems_unsigned16 padir;
|
||||
rtems_unsigned16 papar;
|
||||
rtems_unsigned16 paodr;
|
||||
rtems_unsigned16 padat;
|
||||
rtems_unsigned32 _pad31[2];
|
||||
rtems_unsigned16 pcdir;
|
||||
rtems_unsigned16 pcpar;
|
||||
rtems_unsigned16 pcso;
|
||||
rtems_unsigned16 pcdat;
|
||||
rtems_unsigned16 pcint;
|
||||
rtems_unsigned16 _pad32;
|
||||
rtems_unsigned32 _pad33[5];
|
||||
|
||||
/*
|
||||
* TIMER Block
|
||||
*/
|
||||
rtems_unsigned16 tgcr;
|
||||
rtems_unsigned16 _pad34;
|
||||
rtems_unsigned32 _pad35[3];
|
||||
rtems_unsigned16 tmr1;
|
||||
rtems_unsigned16 tmr2;
|
||||
rtems_unsigned16 trr1;
|
||||
rtems_unsigned16 trr2;
|
||||
rtems_unsigned16 tcr1;
|
||||
rtems_unsigned16 tcr2;
|
||||
rtems_unsigned16 tcn1;
|
||||
rtems_unsigned16 tcn2;
|
||||
rtems_unsigned16 tmr3;
|
||||
rtems_unsigned16 tmr4;
|
||||
rtems_unsigned16 trr3;
|
||||
rtems_unsigned16 trr4;
|
||||
rtems_unsigned16 tcr3;
|
||||
rtems_unsigned16 tcr4;
|
||||
rtems_unsigned16 tcn3;
|
||||
rtems_unsigned16 tcn4;
|
||||
rtems_unsigned16 ter1;
|
||||
rtems_unsigned16 ter2;
|
||||
rtems_unsigned16 ter3;
|
||||
rtems_unsigned16 ter4;
|
||||
rtems_unsigned32 _pad36[2];
|
||||
|
||||
/*
|
||||
* CP Block
|
||||
*/
|
||||
rtems_unsigned16 cr;
|
||||
rtems_unsigned16 _pad37;
|
||||
rtems_unsigned16 rccr;
|
||||
rtems_unsigned16 _pad38;
|
||||
rtems_unsigned32 _pad39[3];
|
||||
rtems_unsigned16 _pad40;
|
||||
rtems_unsigned16 rter;
|
||||
rtems_unsigned16 _pad41;
|
||||
rtems_unsigned16 rtmr;
|
||||
rtems_unsigned32 _pad42[5];
|
||||
|
||||
/*
|
||||
* BRG Block
|
||||
*/
|
||||
rtems_unsigned32 brgc1;
|
||||
rtems_unsigned32 brgc2;
|
||||
rtems_unsigned32 brgc3;
|
||||
rtems_unsigned32 brgc4;
|
||||
|
||||
/*
|
||||
* SCC Block
|
||||
*/
|
||||
m360SCCRegisters_t scc1;
|
||||
m360SCCRegisters_t scc2;
|
||||
m360SCCRegisters_t scc3;
|
||||
m360SCCRegisters_t scc4;
|
||||
|
||||
/*
|
||||
* SMC Block
|
||||
*/
|
||||
m360SMCRegisters_t smc1;
|
||||
m360SMCRegisters_t smc2;
|
||||
|
||||
/*
|
||||
* SPI Block
|
||||
*/
|
||||
rtems_unsigned16 spmode;
|
||||
rtems_unsigned16 _pad43[2];
|
||||
rtems_unsigned8 spie;
|
||||
rtems_unsigned8 _pad44;
|
||||
rtems_unsigned16 _pad45;
|
||||
rtems_unsigned8 spim;
|
||||
rtems_unsigned8 _pad46[2];
|
||||
rtems_unsigned8 spcom;
|
||||
rtems_unsigned16 _pad47[2];
|
||||
|
||||
/*
|
||||
* PIP Block
|
||||
*/
|
||||
rtems_unsigned16 pipc;
|
||||
rtems_unsigned16 _pad48;
|
||||
rtems_unsigned16 ptpr;
|
||||
rtems_unsigned32 pbdir;
|
||||
rtems_unsigned32 pbpar;
|
||||
rtems_unsigned16 _pad49;
|
||||
rtems_unsigned16 pbodr;
|
||||
rtems_unsigned32 pbdat;
|
||||
rtems_unsigned32 _pad50[6];
|
||||
|
||||
/*
|
||||
* SI Block
|
||||
*/
|
||||
rtems_unsigned32 simode;
|
||||
rtems_unsigned8 sigmr;
|
||||
rtems_unsigned8 _pad51;
|
||||
rtems_unsigned8 sistr;
|
||||
rtems_unsigned8 sicmr;
|
||||
rtems_unsigned32 _pad52;
|
||||
rtems_unsigned32 sicr;
|
||||
rtems_unsigned16 _pad53;
|
||||
rtems_unsigned16 sirp[2];
|
||||
rtems_unsigned16 _pad54;
|
||||
rtems_unsigned32 _pad55[2];
|
||||
rtems_unsigned8 siram[256];
|
||||
} m360_t;
|
||||
|
||||
extern volatile m360_t m360;
|
||||
|
||||
#endif /* __MC68360_h */
|
||||
@@ -59,7 +59,7 @@ extern "C" {
|
||||
* m68lc040 (no FP)
|
||||
* m68ec040 (no FP)
|
||||
* m68302 (no FP)
|
||||
* mcpu32 (no FP) (includes m68360)
|
||||
* m68360 (no FP)
|
||||
*
|
||||
* Primary difference (for RTEMS) between m68040, m680lc040, and
|
||||
* m68ec040 is the presence or absence of the FPU.
|
||||
@@ -76,17 +76,8 @@ extern "C" {
|
||||
* (cause an indeterminate result). The 68EC040 and 68LC040 do not
|
||||
* implement the DLE or multiplexed bus modes. The 68EC040 does not
|
||||
* implement the output buffer impedance selection mode of operation."
|
||||
*
|
||||
* M68K_HAS_EXTB_L is used to enable/disable usage of the extb.l instruction
|
||||
* which is not available for 68000 or 68ec000 cores (68000, 68001, 68008,
|
||||
* 68010, 68302, 68306, 68307). This instruction is available on the 68020
|
||||
* up and the cpu32 based models.
|
||||
*
|
||||
* NOTE:
|
||||
* Eventually it would be nice to evaluate doing a lot of this section
|
||||
* by having each model specigy which core it uses and then go from there.
|
||||
*/
|
||||
|
||||
|
||||
#if defined(m68000)
|
||||
|
||||
#define CPU_MODEL_NAME "m68000"
|
||||
@@ -95,7 +86,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 0
|
||||
#define M68K_HAS_PREINDEXING 0
|
||||
#define M68K_HAS_EXTB_L 0
|
||||
|
||||
#elif defined(m68020)
|
||||
|
||||
@@ -105,7 +95,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 1
|
||||
#define M68K_HAS_BFFFO 1
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#elif defined(m68020_nofp)
|
||||
|
||||
@@ -115,7 +104,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 1
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#elif defined(m68030)
|
||||
|
||||
@@ -125,7 +113,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 1
|
||||
#define M68K_HAS_BFFFO 1
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#elif defined(m68040)
|
||||
|
||||
@@ -135,7 +122,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 1
|
||||
#define M68K_HAS_BFFFO 1
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#elif defined(m68lc040)
|
||||
|
||||
@@ -145,7 +131,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 1
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#elif defined(m68ec040)
|
||||
|
||||
@@ -155,7 +140,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 1
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#elif defined(m68302)
|
||||
/* essentially a m68000 with onboard peripherals */
|
||||
@@ -165,7 +149,6 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 0
|
||||
#define M68K_HAS_PREINDEXING 0
|
||||
#define M68K_HAS_EXTB_L 0
|
||||
|
||||
#elif defined(m68332)
|
||||
|
||||
@@ -175,17 +158,15 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 0
|
||||
#define M68K_HAS_PREINDEXING 0
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#elif defined(mcpu32)
|
||||
#elif defined(m68360)
|
||||
|
||||
#define CPU_MODEL_NAME "mcpu32"
|
||||
#define CPU_MODEL_NAME "m68360"
|
||||
#define M68K_HAS_VBR 1
|
||||
#define M68K_HAS_SEPARATE_STACKS 0
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 0
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#else
|
||||
|
||||
|
||||
@@ -328,6 +328,12 @@ typedef struct {
|
||||
/*
|
||||
* The following table contains the information required to configure
|
||||
* the XXX processor specific parameters.
|
||||
*
|
||||
* NOTE: The interrupt_stack_size field is required if
|
||||
* CPU_ALLOCATE_INTERRUPT_STACK is defined as TRUE.
|
||||
*
|
||||
* The pretasking_hook, predriver_hook, and postdriver_hook,
|
||||
* and the do_zero_of_workspace fields are required on ALL CPUs.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
@@ -338,10 +344,6 @@ typedef struct {
|
||||
boolean do_zero_of_workspace;
|
||||
unsigned32 interrupt_stack_size;
|
||||
unsigned32 extra_mpci_receive_server_stack;
|
||||
void * (*stack_allocate_hook)( unsigned32 );
|
||||
void (*stack_free_hook)( void* );
|
||||
/* end of fields required on all CPUs */
|
||||
|
||||
unsigned32 some_other_cpu_dependent_info;
|
||||
} rtems_cpu_table;
|
||||
|
||||
|
||||
@@ -492,6 +492,12 @@ typedef struct {
|
||||
/*
|
||||
* The following table contains the information required to configure
|
||||
* the processor specific parameters.
|
||||
*
|
||||
* NOTE: The interrupt_stack_size field is required if
|
||||
* CPU_ALLOCATE_INTERRUPT_STACK is defined as TRUE.
|
||||
*
|
||||
* The pretasking_hook, predriver_hook, and postdriver_hook,
|
||||
* and the do_zero_of_workspace fields are required on ALL CPUs.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
@@ -502,10 +508,6 @@ typedef struct {
|
||||
boolean do_zero_of_workspace;
|
||||
unsigned32 interrupt_stack_size;
|
||||
unsigned32 extra_mpci_receive_server_stack;
|
||||
void * (*stack_allocate_hook)( unsigned32 );
|
||||
void (*stack_free_hook)( void* );
|
||||
/* end of fields required on all CPUs */
|
||||
|
||||
} rtems_cpu_table;
|
||||
|
||||
/*
|
||||
|
||||
@@ -34,20 +34,18 @@
|
||||
#define MALLOC_0_RETURNS_NULL
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/times.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <setjmp.h>
|
||||
#include <signal.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <sys/sem.h>
|
||||
#include <string.h> /* memset */
|
||||
|
||||
#ifndef SA_RESTART
|
||||
#define SA_RESTART 0
|
||||
@@ -55,16 +53,16 @@
|
||||
|
||||
typedef struct {
|
||||
jmp_buf regs;
|
||||
unsigned32 isr_level;
|
||||
sigset_t isr_level;
|
||||
} Context_Control_overlay;
|
||||
|
||||
void _CPU_Signal_initialize(void);
|
||||
void _CPU_Stray_signal(int);
|
||||
void _CPU_ISR_Handler(int);
|
||||
|
||||
static sigset_t _CPU_Signal_mask;
|
||||
static Context_Control_overlay _CPU_Context_Default_with_ISRs_enabled;
|
||||
static Context_Control_overlay _CPU_Context_Default_with_ISRs_disabled;
|
||||
sigset_t _CPU_Signal_mask;
|
||||
Context_Control _CPU_Context_Default_with_ISRs_enabled;
|
||||
Context_Control _CPU_Context_Default_with_ISRs_disabled;
|
||||
|
||||
/*
|
||||
* Which cpu are we? Used by libcpu and libbsp.
|
||||
@@ -92,7 +90,7 @@ void _CPU_ISR_From_CPU_Init()
|
||||
|
||||
/*
|
||||
* Block all the signals except SIGTRAP for the debugger
|
||||
* and fatal error signals.
|
||||
* and SIGABRT for fatal errors.
|
||||
*/
|
||||
|
||||
(void) sigfillset(&_CPU_Signal_mask);
|
||||
@@ -100,9 +98,6 @@ void _CPU_ISR_From_CPU_Init()
|
||||
(void) sigdelset(&_CPU_Signal_mask, SIGABRT);
|
||||
(void) sigdelset(&_CPU_Signal_mask, SIGIOT);
|
||||
(void) sigdelset(&_CPU_Signal_mask, SIGCONT);
|
||||
(void) sigdelset(&_CPU_Signal_mask, SIGSEGV);
|
||||
(void) sigdelset(&_CPU_Signal_mask, SIGBUS);
|
||||
(void) sigdelset(&_CPU_Signal_mask, SIGFPE);
|
||||
|
||||
_CPU_ISR_Enable(1);
|
||||
|
||||
@@ -123,16 +118,20 @@ void _CPU_Signal_initialize( void )
|
||||
{
|
||||
struct sigaction act;
|
||||
sigset_t mask;
|
||||
|
||||
|
||||
/* mark them all active except for TraceTrap and Abort */
|
||||
|
||||
mask = _CPU_Signal_mask;
|
||||
|
||||
sigfillset(&mask);
|
||||
sigdelset(&mask, SIGTRAP);
|
||||
sigdelset(&mask, SIGABRT);
|
||||
sigdelset(&mask, SIGIOT);
|
||||
sigdelset(&mask, SIGCONT);
|
||||
sigprocmask(SIG_UNBLOCK, &mask, 0);
|
||||
|
||||
|
||||
act.sa_handler = _CPU_ISR_Handler;
|
||||
act.sa_mask = mask;
|
||||
act.sa_flags = SA_RESTART;
|
||||
|
||||
|
||||
sigaction(SIGHUP, &act, 0);
|
||||
sigaction(SIGINT, &act, 0);
|
||||
sigaction(SIGQUIT, &act, 0);
|
||||
@@ -166,6 +165,7 @@ void _CPU_Signal_initialize( void )
|
||||
#ifdef SIGLOST
|
||||
sigaction(SIGLOST, &act, 0);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -180,6 +180,8 @@ void _CPU_Context_From_CPU_Init()
|
||||
/*
|
||||
* HACK - set the _SYSTEM_ID to 0x20c so that setjmp/longjmp
|
||||
* will handle the full 32 floating point registers.
|
||||
*
|
||||
* NOTE: Is this a bug in HPUX9?
|
||||
*/
|
||||
|
||||
{
|
||||
@@ -193,28 +195,16 @@ void _CPU_Context_From_CPU_Init()
|
||||
* get default values to use in _CPU_Context_Initialize()
|
||||
*/
|
||||
|
||||
|
||||
(void) memset(
|
||||
&_CPU_Context_Default_with_ISRs_enabled,
|
||||
0,
|
||||
sizeof(Context_Control)
|
||||
);
|
||||
(void) memset(
|
||||
&_CPU_Context_Default_with_ISRs_disabled,
|
||||
0,
|
||||
sizeof(Context_Control)
|
||||
);
|
||||
|
||||
_CPU_ISR_Set_level( 0 );
|
||||
_CPU_Context_switch(
|
||||
(Context_Control *) &_CPU_Context_Default_with_ISRs_enabled,
|
||||
(Context_Control *) &_CPU_Context_Default_with_ISRs_enabled
|
||||
&_CPU_Context_Default_with_ISRs_enabled,
|
||||
&_CPU_Context_Default_with_ISRs_enabled
|
||||
);
|
||||
|
||||
|
||||
_CPU_ISR_Set_level( 1 );
|
||||
_CPU_Context_switch(
|
||||
(Context_Control *) &_CPU_Context_Default_with_ISRs_disabled,
|
||||
(Context_Control *) &_CPU_Context_Default_with_ISRs_disabled
|
||||
&_CPU_Context_Default_with_ISRs_disabled,
|
||||
&_CPU_Context_Default_with_ISRs_disabled
|
||||
);
|
||||
}
|
||||
|
||||
@@ -223,16 +213,21 @@ void _CPU_Context_From_CPU_Init()
|
||||
* _CPU_ISR_Get_level
|
||||
*/
|
||||
|
||||
sigset_t GET_old_mask;
|
||||
|
||||
unsigned32 _CPU_ISR_Get_level( void )
|
||||
{
|
||||
sigset_t old_mask;
|
||||
/* sigset_t old_mask; */
|
||||
unsigned32 old_level;
|
||||
|
||||
sigprocmask(SIG_BLOCK, 0, &old_mask);
|
||||
sigprocmask(0, 0, &GET_old_mask);
|
||||
|
||||
if (memcmp((void *)&posix_empty_mask, (void *)&old_mask, sizeof(sigset_t)))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
if (memcmp((void *)&posix_empty_mask, (void *)&GET_old_mask, sizeof(sigset_t)))
|
||||
old_level = 1;
|
||||
else
|
||||
old_level = 0;
|
||||
|
||||
return old_level;
|
||||
}
|
||||
|
||||
/* _CPU_Initialize
|
||||
@@ -354,15 +349,8 @@ void _CPU_Install_interrupt_stack( void )
|
||||
|
||||
void _CPU_Thread_Idle_body( void )
|
||||
{
|
||||
while (1) {
|
||||
#ifdef RTEMS_DEBUG
|
||||
/* interrupts had better be enabled at this point! */
|
||||
if (_CPU_ISR_Get_level() != 0)
|
||||
abort();
|
||||
#endif
|
||||
while (1)
|
||||
pause();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -379,6 +367,7 @@ void _CPU_Context_Initialize(
|
||||
boolean _is_fp
|
||||
)
|
||||
{
|
||||
void *source;
|
||||
unsigned32 *addr;
|
||||
unsigned32 jmp_addr;
|
||||
unsigned32 _stack_low; /* lowest "stack aligned" address */
|
||||
@@ -393,28 +382,25 @@ void _CPU_Context_Initialize(
|
||||
* grow up, we build the stack based on the _stack_low address.
|
||||
*/
|
||||
|
||||
_stack_low = (unsigned32)(_stack_base) + CPU_STACK_ALIGNMENT - 1;
|
||||
_stack_low = ((unsigned32)(_stack_base) + CPU_STACK_ALIGNMENT);
|
||||
_stack_low &= ~(CPU_STACK_ALIGNMENT - 1);
|
||||
|
||||
_stack_high = (unsigned32)(_stack_base) + _size;
|
||||
_stack_high = ((unsigned32)(_stack_base) + _size);
|
||||
_stack_high &= ~(CPU_STACK_ALIGNMENT - 1);
|
||||
|
||||
if (_stack_high > _stack_low)
|
||||
_the_size = _stack_high - _stack_low;
|
||||
else
|
||||
_the_size = _stack_low - _stack_high;
|
||||
_the_size = _size & ~(CPU_STACK_ALIGNMENT - 1);
|
||||
|
||||
/*
|
||||
* Slam our jmp_buf template into the context we are creating
|
||||
*/
|
||||
|
||||
if ( _new_level == 0 )
|
||||
*_the_context = *(Context_Control *)
|
||||
&_CPU_Context_Default_with_ISRs_enabled;
|
||||
source = &_CPU_Context_Default_with_ISRs_enabled;
|
||||
else
|
||||
*_the_context = *(Context_Control *)
|
||||
&_CPU_Context_Default_with_ISRs_disabled;
|
||||
source = &_CPU_Context_Default_with_ISRs_disabled;
|
||||
|
||||
memcpy(_the_context, source, sizeof(Context_Control) ); /* sizeof(jmp_buf)); */
|
||||
|
||||
addr = (unsigned32 *)_the_context;
|
||||
|
||||
#if defined(hppa1_1)
|
||||
@@ -425,12 +411,13 @@ void _CPU_Context_Initialize(
|
||||
* See if we are using shared libraries by checking
|
||||
* bit 30 in 24 off of newp. If bit 30 is set then
|
||||
* we are using shared libraries and the jump address
|
||||
* points to the pointer, so we put that into rp instead.
|
||||
* is at what 24 off of newp points to so shove that
|
||||
* into 24 off of newp instead.
|
||||
*/
|
||||
|
||||
if (jmp_addr & 0x40000000) {
|
||||
jmp_addr &= 0xfffffffc;
|
||||
*(addr + RP_OFF) = *(unsigned32 *)jmp_addr;
|
||||
*(addr + RP_OFF) = (unsigned32)*(unsigned32 *)jmp_addr;
|
||||
}
|
||||
#elif defined(sparc)
|
||||
|
||||
@@ -487,7 +474,7 @@ void _CPU_Context_restore(
|
||||
{
|
||||
Context_Control_overlay *nextp = (Context_Control_overlay *)next;
|
||||
|
||||
_CPU_ISR_Enable(nextp->isr_level);
|
||||
sigprocmask( SIG_SETMASK, &nextp->isr_level, 0 );
|
||||
longjmp( nextp->regs, 0 );
|
||||
}
|
||||
|
||||
@@ -496,11 +483,6 @@ void _CPU_Context_restore(
|
||||
* _CPU_Context_switch
|
||||
*/
|
||||
|
||||
static void do_jump(
|
||||
Context_Control_overlay *currentp,
|
||||
Context_Control_overlay *nextp
|
||||
);
|
||||
|
||||
void _CPU_Context_switch(
|
||||
Context_Control *current,
|
||||
Context_Control *next
|
||||
@@ -508,50 +490,33 @@ void _CPU_Context_switch(
|
||||
{
|
||||
Context_Control_overlay *currentp = (Context_Control_overlay *)current;
|
||||
Context_Control_overlay *nextp = (Context_Control_overlay *)next;
|
||||
#if 0
|
||||
int status;
|
||||
#endif
|
||||
|
||||
currentp->isr_level = _CPU_ISR_Disable_support();
|
||||
|
||||
do_jump( currentp, nextp );
|
||||
|
||||
#if 0
|
||||
if (sigsetjmp(currentp->regs, 1) == 0) { /* Save the current context */
|
||||
siglongjmp(nextp->regs, 0); /* Switch to the new context */
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
status
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef RTEMS_DEBUG
|
||||
if (_CPU_ISR_Get_level() == 0)
|
||||
abort();
|
||||
#endif
|
||||
|
||||
_CPU_ISR_Enable(currentp->isr_level);
|
||||
}
|
||||
|
||||
static void do_jump(
|
||||
Context_Control_overlay *currentp,
|
||||
Context_Control_overlay *nextp
|
||||
)
|
||||
{
|
||||
int status;
|
||||
|
||||
/*
|
||||
* Switch levels in one operation
|
||||
*/
|
||||
|
||||
status = sigprocmask( SIG_SETMASK, &nextp->isr_level, ¤tp->isr_level );
|
||||
if ( status )
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
status
|
||||
);
|
||||
|
||||
if (setjmp(currentp->regs) == 0) { /* Save the current context */
|
||||
longjmp(nextp->regs, 0); /* Switch to the new context */
|
||||
_Internal_error_Occurred(
|
||||
if ( status )
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
status
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _CPU_Save_float_context
|
||||
@@ -685,31 +650,17 @@ void _CPU_Stray_signal(int sig_num)
|
||||
|
||||
default:
|
||||
{
|
||||
/*
|
||||
* We avoid using the stdio section of the library.
|
||||
* The following is generally safe
|
||||
*/
|
||||
/*
|
||||
* We avoid using the stdio section of the library.
|
||||
* The following is generally safe.
|
||||
*/
|
||||
|
||||
int digit;
|
||||
int number = sig_num;
|
||||
int len = 0;
|
||||
|
||||
digit = number / 100;
|
||||
number %= 100;
|
||||
if (digit) buffer[len++] = '0' + digit;
|
||||
|
||||
digit = number / 10;
|
||||
number %= 10;
|
||||
if (digit || len) buffer[len++] = '0' + digit;
|
||||
|
||||
digit = number;
|
||||
buffer[len++] = '0' + digit;
|
||||
buffer[ 0 ] = (sig_num >> 4) + 0x30;
|
||||
buffer[ 1 ] = (sig_num & 0xf) + 0x30;
|
||||
buffer[ 2 ] = '\n';
|
||||
|
||||
buffer[ len++ ] = '\n';
|
||||
|
||||
write( 2, "Stray signal ", 13 );
|
||||
write( 2, buffer, len );
|
||||
|
||||
write( 2, "Stray signal 0x", 12 );
|
||||
write( 2, buffer, 3 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -731,8 +682,7 @@ void _CPU_Stray_signal(int sig_num)
|
||||
case SIGBUS:
|
||||
case SIGSEGV:
|
||||
case SIGTERM:
|
||||
case SIGIOT:
|
||||
_CPU_Fatal_error(0x100 + sig_num);
|
||||
_CPU_Fatal_error(0x100 + sig_num);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -791,12 +741,13 @@ void _CPU_Stop_clock( void )
|
||||
* vector.
|
||||
*/
|
||||
|
||||
(void) memset(&act, 0, sizeof(act));
|
||||
act.sa_handler = SIG_IGN;
|
||||
|
||||
|
||||
sigaction(SIGALRM, &act, 0);
|
||||
|
||||
(void) memset(&new, 0, sizeof(new));
|
||||
new.it_value.tv_sec = 0;
|
||||
new.it_value.tv_usec = 0;
|
||||
|
||||
setitimer(ITIMER_REAL, &new, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -436,27 +436,14 @@ extern "C" {
|
||||
/*
|
||||
* This is really just the area for the following fields.
|
||||
*
|
||||
* jmp_buf regs;
|
||||
* unsigned32 isr_level;
|
||||
* jmp_buf regs;
|
||||
* sigset_t isr_level;
|
||||
*
|
||||
* Doing it this way avoids conflicts between the native stuff and the
|
||||
* RTEMS stuff.
|
||||
*
|
||||
* NOTE:
|
||||
* hpux9 setjmp is optimized for the case where the setjmp buffer
|
||||
* is 8 byte aligned. In a RISC world, this seems likely to enable
|
||||
* 8 byte copies, especially for the float registers.
|
||||
* So we always align them on 8 byte boundaries.
|
||||
*/
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define CONTEXT_STRUCTURE_ALIGNMENT __attribute__ ((aligned (8)))
|
||||
#else
|
||||
#define CONTEXT_STRUCTURE_ALIGNMENT
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
char Area[ CPU_CONTEXT_SIZE_IN_BYTES ] CONTEXT_STRUCTURE_ALIGNMENT;
|
||||
char Area[ CPU_CONTEXT_SIZE_IN_BYTES ];
|
||||
} Context_Control;
|
||||
|
||||
typedef struct {
|
||||
@@ -468,7 +455,13 @@ typedef struct {
|
||||
|
||||
/*
|
||||
* The following table contains the information required to configure
|
||||
* the UNIX Simulator specific parameters.
|
||||
* the XXX processor specific parameters.
|
||||
*
|
||||
* NOTE: The interrupt_stack_size field is required if
|
||||
* CPU_ALLOCATE_INTERRUPT_STACK is defined as TRUE.
|
||||
*
|
||||
* The pretasking_hook, predriver_hook, and postdriver_hook,
|
||||
* and the do_zero_of_workspace fields are required on ALL CPUs.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
@@ -479,9 +472,6 @@ typedef struct {
|
||||
boolean do_zero_of_workspace;
|
||||
unsigned32 interrupt_stack_size;
|
||||
unsigned32 extra_mpci_receive_server_stack;
|
||||
void * (*stack_allocate_hook)( unsigned32 );
|
||||
void (*stack_free_hook)( void* );
|
||||
/* end of required fields */
|
||||
} rtems_cpu_table;
|
||||
|
||||
/*
|
||||
|
||||
@@ -83,16 +83,6 @@ void _Chain_Initialize(
|
||||
unsigned32 node_size
|
||||
);
|
||||
|
||||
/*
|
||||
* _Chain_Get_first_unprotected
|
||||
*/
|
||||
|
||||
#ifndef USE_INLINES
|
||||
Chain_Node *_Chain_Get_first_unprotected(
|
||||
Chain_Control *the_chain
|
||||
);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* _Chain_Extract
|
||||
*
|
||||
|
||||
@@ -51,8 +51,7 @@ typedef enum {
|
||||
INTERNAL_ERROR_OUT_OF_PACKETS,
|
||||
INTERNAL_ERROR_OUT_OF_GLOBAL_OBJECTS,
|
||||
INTERNAL_ERROR_OUT_OF_PROXIES,
|
||||
INTERNAL_ERROR_INVALID_GLOBAL_ID,
|
||||
INTERNAL_ERROR_BAD_STACK_HOOK
|
||||
INTERNAL_ERROR_INVALID_GLOBAL_ID
|
||||
} Internal_errors_Core_list;
|
||||
|
||||
/*
|
||||
|
||||
@@ -214,7 +214,9 @@ void _ISR_Handler( void );
|
||||
|
||||
void _ISR_Dispatch( void );
|
||||
|
||||
#ifndef __RTEMS_APPLICATION__
|
||||
#include <rtems/score/isr.inl>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ typedef enum {
|
||||
|
||||
#define OBJECTS_CLASSES_FIRST OBJECTS_NO_CLASS
|
||||
#define OBJECTS_CLASSES_LAST OBJECTS_POSIX_CONDITION_VARIABLES
|
||||
#define OBJECTS_CLASSES_FIRST_THREAD_CLASS OBJECTS_INTERNAL_THREADS
|
||||
#define OBJECTS_CLASSES_FIRST_THREAD_CLASS OBJECTS_MPCI_PACKETS
|
||||
#define OBJECTS_CLASSES_LAST_THREAD_CLASS OBJECTS_POSIX_THREADS
|
||||
|
||||
/*
|
||||
|
||||
@@ -544,20 +544,6 @@ void _Thread_Set_priority(
|
||||
|
||||
boolean _Thread_Evaluate_mode( void );
|
||||
|
||||
/*
|
||||
* _Thread_Get
|
||||
*
|
||||
* NOTE: If we are not using static inlines, this must be a real
|
||||
* subroutine call.
|
||||
*/
|
||||
|
||||
#ifndef USE_INLINES
|
||||
Thread_Control *_Thread_Get (
|
||||
Objects_Id id,
|
||||
Objects_Locations *location
|
||||
);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* _Thread_Idle_body
|
||||
*
|
||||
|
||||
@@ -32,19 +32,6 @@ extern "C" {
|
||||
|
||||
EXTERN Heap_Control _Workspace_Area; /* executive heap header */
|
||||
|
||||
/*
|
||||
* _Workspace_Handler_initialization
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This routine performs the initialization necessary for this handler.
|
||||
*/
|
||||
|
||||
void _Workspace_Handler_initialization(
|
||||
void *starting_address,
|
||||
unsigned32 size
|
||||
);
|
||||
|
||||
/*
|
||||
* _Workspace_Allocate_or_fatal_error
|
||||
*
|
||||
|
||||
@@ -17,6 +17,53 @@
|
||||
#ifndef __WORKSPACE_inl
|
||||
#define __WORKSPACE_inl
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Workspace_Handler_initialization
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This routine performs the initialization necessary for this handler.
|
||||
*/
|
||||
|
||||
STATIC INLINE void _Workspace_Handler_initialization(
|
||||
void *starting_address,
|
||||
unsigned32 size
|
||||
)
|
||||
{
|
||||
unsigned32 *zero_out_array;
|
||||
unsigned32 index;
|
||||
unsigned32 memory_available;
|
||||
|
||||
if ( !starting_address || !_Addresses_Is_aligned( starting_address ) )
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS
|
||||
);
|
||||
|
||||
if ( _CPU_Table.do_zero_of_workspace ) {
|
||||
for( zero_out_array = (unsigned32 *) starting_address, index = 0 ;
|
||||
index < size / 4 ;
|
||||
index++ )
|
||||
zero_out_array[ index ] = 0;
|
||||
}
|
||||
|
||||
memory_available = _Heap_Initialize(
|
||||
&_Workspace_Area,
|
||||
starting_address,
|
||||
size,
|
||||
CPU_HEAP_ALIGNMENT
|
||||
);
|
||||
|
||||
if ( memory_available == 0 )
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
INTERNAL_ERROR_TOO_LITTLE_WORKSPACE
|
||||
);
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Workspace_Allocate
|
||||
|
||||
@@ -17,6 +17,47 @@
|
||||
#ifndef __WORKSPACE_inl
|
||||
#define __WORKSPACE_inl
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Workspace_Handler_initialization
|
||||
*
|
||||
*/
|
||||
|
||||
#define _Workspace_Handler_initialization( _starting_address, _size ) \
|
||||
{ \
|
||||
unsigned32 *zero_out_array; \
|
||||
unsigned32 index; \
|
||||
unsigned32 memory_available; \
|
||||
\
|
||||
if ( !(_starting_address) || !_Addresses_Is_aligned( (_starting_address) ) ) \
|
||||
_Internal_error_Occurred( \
|
||||
INTERNAL_ERROR_CORE, \
|
||||
TRUE, \
|
||||
INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS \
|
||||
); \
|
||||
\
|
||||
if ( _CPU_Table.do_zero_of_workspace ) { \
|
||||
for( zero_out_array = (unsigned32 *) (_starting_address), index = 0 ; \
|
||||
index < (_size) / 4 ; \
|
||||
index++ ) \
|
||||
zero_out_array[ index ] = 0; \
|
||||
} \
|
||||
\
|
||||
memory_available = _Heap_Initialize( \
|
||||
&_Workspace_Area, \
|
||||
(_starting_address), \
|
||||
(_size), \
|
||||
CPU_HEAP_ALIGNMENT \
|
||||
); \
|
||||
\
|
||||
if ( memory_available == 0 ) \
|
||||
_Internal_error_Occurred( \
|
||||
INTERNAL_ERROR_CORE, \
|
||||
TRUE, \
|
||||
INTERNAL_ERROR_TOO_LITTLE_WORKSPACE \
|
||||
); \
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Workspace_Allocate
|
||||
|
||||
@@ -50,19 +50,6 @@ void _Thread_Handler_initialization(
|
||||
{
|
||||
unsigned32 index;
|
||||
|
||||
/*
|
||||
* BOTH stacks hooks must be set or both must be NULL.
|
||||
* Do not allow mixture.
|
||||
*/
|
||||
|
||||
if ( !( ( _CPU_Table.stack_allocate_hook == 0 )
|
||||
== ( _CPU_Table.stack_free_hook == 0 ) ) )
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
INTERNAL_ERROR_BAD_STACK_HOOK
|
||||
);
|
||||
|
||||
_Context_Switch_necessary = FALSE;
|
||||
_Thread_Executing = NULL;
|
||||
_Thread_Heir = NULL;
|
||||
@@ -294,79 +281,6 @@ void _Thread_Dispatch( void )
|
||||
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Thread_Stack_Allocate
|
||||
*
|
||||
* Allocate the requested stack space for the thread.
|
||||
* return the actual size allocated after any adjustment
|
||||
* or return zero if the allocation failed.
|
||||
* Set the Start.stack field to the address of the stack
|
||||
*/
|
||||
|
||||
static unsigned32 _Thread_Stack_Allocate(
|
||||
Thread_Control *the_thread,
|
||||
unsigned32 stack_size)
|
||||
{
|
||||
void *stack_addr = 0;
|
||||
|
||||
if ( !_Stack_Is_enough( stack_size ) )
|
||||
stack_size = STACK_MINIMUM_SIZE;
|
||||
|
||||
/*
|
||||
* Call ONLY the CPU table stack allocate hook, _or_ the
|
||||
* the RTEMS workspace allocate. This is so the stack free
|
||||
* routine can call the correct deallocation routine.
|
||||
*/
|
||||
|
||||
if ( _CPU_Table.stack_allocate_hook )
|
||||
{
|
||||
stack_addr = (*_CPU_Table.stack_allocate_hook)( stack_size );
|
||||
} else {
|
||||
|
||||
/*
|
||||
* First pad the requested size so we allocate enough memory
|
||||
* so the context initialization can align it properly. The address
|
||||
* returned the workspace allocate must be directly stored in the
|
||||
* stack control block because it is later used in the free sequence.
|
||||
*
|
||||
* Thus it is the responsibility of the CPU dependent code to
|
||||
* get and keep the stack adjust factor, the stack alignment, and
|
||||
* the context initialization sequence in sync.
|
||||
*/
|
||||
|
||||
stack_size = _Stack_Adjust_size( stack_size );
|
||||
stack_addr = _Workspace_Allocate( stack_size );
|
||||
}
|
||||
|
||||
if ( !stack_addr )
|
||||
stack_size = 0;
|
||||
|
||||
the_thread->Start.stack = stack_addr;
|
||||
|
||||
return stack_size;
|
||||
}
|
||||
|
||||
/*
|
||||
* _Thread_Stack_Free
|
||||
*
|
||||
* Deallocate the Thread's stack.
|
||||
*/
|
||||
|
||||
static void _Thread_Stack_Free(void *stack_addr)
|
||||
{
|
||||
/*
|
||||
* Call ONLY the CPU table stack free hook, or the
|
||||
* the RTEMS workspace free. This is so the free
|
||||
* routine properly matches the allocation of the stack.
|
||||
*/
|
||||
|
||||
if ( _CPU_Table.stack_free_hook )
|
||||
(*_CPU_Table.stack_free_hook)( stack_addr );
|
||||
else
|
||||
_Workspace_Free( stack_addr );
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Thread_Initialize
|
||||
@@ -406,12 +320,12 @@ boolean _Thread_Initialize(
|
||||
stack = stack_area;
|
||||
|
||||
if ( !stack ) {
|
||||
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
|
||||
stack = _Workspace_Allocate( actual_stack_size );
|
||||
|
||||
if ( !actual_stack_size )
|
||||
return FALSE; /* stack allocation failed */
|
||||
if ( !stack )
|
||||
return FALSE;
|
||||
|
||||
stack = the_thread->Start.stack;
|
||||
the_thread->Start.stack = stack;
|
||||
} else
|
||||
the_thread->Start.stack = NULL;
|
||||
|
||||
@@ -430,7 +344,7 @@ boolean _Thread_Initialize(
|
||||
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
|
||||
if ( !fp_area ) {
|
||||
if ( the_thread->Start.stack )
|
||||
(void) _Thread_Stack_Free( the_thread->Start.stack );
|
||||
(void) _Workspace_Free( the_thread->Start.stack );
|
||||
return FALSE;
|
||||
}
|
||||
fp_area = _Context_Fp_start( fp_area, 0 );
|
||||
@@ -443,7 +357,7 @@ boolean _Thread_Initialize(
|
||||
|
||||
|
||||
/*
|
||||
* Allocate the extensions area for this thread
|
||||
* Allocate the floating point area for this thread
|
||||
*/
|
||||
|
||||
if ( _Thread_Maximum_extensions ) {
|
||||
@@ -456,7 +370,7 @@ boolean _Thread_Initialize(
|
||||
(void) _Workspace_Free( fp_area );
|
||||
|
||||
if ( the_thread->Start.stack )
|
||||
(void) _Thread_Stack_Free( the_thread->Start.stack );
|
||||
(void) _Workspace_Free( the_thread->Start.stack );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -499,7 +413,7 @@ boolean _Thread_Initialize(
|
||||
(void) _Workspace_Free( fp_area );
|
||||
|
||||
if ( the_thread->Start.stack )
|
||||
(void) _Thread_Stack_Free( the_thread->Start.stack );
|
||||
(void) _Workspace_Free( the_thread->Start.stack );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -630,7 +544,7 @@ void _Thread_Close(
|
||||
(void) _Workspace_Free( the_thread->Start.fp_context );
|
||||
|
||||
if ( the_thread->Start.stack )
|
||||
(void) _Thread_Stack_Free( the_thread->Start.stack );
|
||||
(void) _Workspace_Free( the_thread->Start.stack );
|
||||
|
||||
if ( the_thread->extensions )
|
||||
(void) _Workspace_Free( the_thread->extensions );
|
||||
@@ -995,25 +909,10 @@ void _Thread_Load_environment(
|
||||
*
|
||||
* _Thread_Handler
|
||||
*
|
||||
* This routine is the "primal" entry point for all threads.
|
||||
* _Context_Initialize() dummies up the thread's initial context
|
||||
* to cause the first Context_Switch() to jump to _Thread_Handler().
|
||||
*
|
||||
* This routine is the default thread exitted error handler. It is
|
||||
* returned to when a thread exits. The configured fatal error handler
|
||||
* is invoked to process the exit.
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* On entry, it is assumed all interrupts are blocked and that this
|
||||
* routine needs to set the initial isr level. This may or may not
|
||||
* actually be needed by the context switch routine and as a result
|
||||
* interrupts may already be at there proper level. Either way,
|
||||
* setting the initial isr level properly here is safe.
|
||||
*
|
||||
* Currently this is only really needed for the posix port,
|
||||
* ref: _Context_Switch in unix/cpu.c
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
@@ -1021,18 +920,9 @@ void _Thread_Load_environment(
|
||||
|
||||
void _Thread_Handler( void )
|
||||
{
|
||||
ISR_Level level;
|
||||
Thread_Control *executing;
|
||||
|
||||
|
||||
executing = _Thread_Executing;
|
||||
|
||||
/*
|
||||
* have to put level into a register for those cpu's that use
|
||||
* inline asm here
|
||||
*/
|
||||
|
||||
level = executing->Start.isr_level;
|
||||
_ISR_Enable(level);
|
||||
|
||||
/*
|
||||
* Take care that 'begin' extensions get to complete before
|
||||
|
||||
@@ -20,49 +20,6 @@
|
||||
#include <rtems/score/wkspace.h>
|
||||
#include <rtems/score/interr.h>
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Workspace_Handler_initialization
|
||||
*/
|
||||
|
||||
void _Workspace_Handler_initialization(
|
||||
void *starting_address,
|
||||
unsigned32 size
|
||||
)
|
||||
{
|
||||
unsigned32 *zero_out_array;
|
||||
unsigned32 index;
|
||||
unsigned32 memory_available;
|
||||
|
||||
if ( !starting_address || !_Addresses_Is_aligned( starting_address ) )
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
INTERNAL_ERROR_INVALID_WORKSPACE_ADDRESS
|
||||
);
|
||||
|
||||
if ( _CPU_Table.do_zero_of_workspace ) {
|
||||
for( zero_out_array = (unsigned32 *) starting_address, index = 0 ;
|
||||
index < size / 4 ;
|
||||
index++ )
|
||||
zero_out_array[ index ] = 0;
|
||||
}
|
||||
|
||||
memory_available = _Heap_Initialize(
|
||||
&_Workspace_Area,
|
||||
starting_address,
|
||||
size,
|
||||
CPU_HEAP_ALIGNMENT
|
||||
);
|
||||
|
||||
if ( memory_available == 0 )
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_CORE,
|
||||
TRUE,
|
||||
INTERNAL_ERROR_TOO_LITTLE_WORKSPACE
|
||||
);
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* _Workspace_Allocate_or_fatal_error
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
#include <signal.h>
|
||||
|
||||
typedef struct {
|
||||
jmp_buf regs;
|
||||
int isr_level;
|
||||
jmp_buf regs;
|
||||
sigset_t isr_level;
|
||||
} Context_Control;
|
||||
|
||||
int main(
|
||||
|
||||
@@ -48,7 +48,7 @@ BEGIN_CODE
|
||||
|
||||
#define LOAD_SEGMENTS(_value,_segment) \
|
||||
movw $ ## _value, ax ; \
|
||||
movw ax, _segment
|
||||
movw _segment, ax
|
||||
|
||||
EXTERN (establish_stack)
|
||||
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
|
||||
#
|
||||
# This package requires a version of GCC that has been modified
|
||||
# to support the `-mcpu32' argument. I have submitted the required
|
||||
# changes to the GCC maintainers.
|
||||
# to support the `-m68360' argument. I have submitted the required changes
|
||||
# to the GCC maintainers. Should they choose to use a different argument
|
||||
# (-mcpu32 perhaps) this board support package will have to be changed.
|
||||
#
|
||||
|
||||
#
|
||||
|
||||
@@ -118,8 +118,6 @@ extern m68k_isr_entry M68Kvec[]; /* vector table address */
|
||||
|
||||
void bsp_cleanup( void );
|
||||
|
||||
void M360ExecuteRISC( rtems_unsigned16 command );
|
||||
|
||||
m68k_isr_entry set_vector(
|
||||
rtems_isr_entry handler,
|
||||
rtems_vector_number vector,
|
||||
|
||||
@@ -298,11 +298,11 @@ uhoh: nop | Leave spot for breakpoint
|
||||
bra.s uhoh | Stuck forever
|
||||
|
||||
/*
|
||||
* Place the low-order 3 octets of the board's ethernet address at
|
||||
* a `well-known' fixed location relative to the beginning of ROM.
|
||||
* Place the low-order 3 octets of the board's
|
||||
* ethernet address at a `well-known' location.
|
||||
*/
|
||||
.align 2
|
||||
.long ETHERNET_ADDRESS | Low-order 3 octets of ethernet address
|
||||
| .long ETHERNET_ADDRESS | 08: Low-order 3 octets
|
||||
|
||||
/*
|
||||
* Initial PC
|
||||
@@ -347,36 +347,24 @@ start:
|
||||
*/
|
||||
jmp SYM(_Init68360) | Start C code (which never returns)
|
||||
|
||||
|
||||
/*
|
||||
* Copy DATA segment, clear BSS segment, set up real stack,
|
||||
* initialize heap, start C program.
|
||||
* Assume that DATA and BSS sizes are multiples of 4.
|
||||
* Clear BSS, set up real stack, initialize heap, start C program
|
||||
* Assume that BSS size is a multiple of 4.
|
||||
* FIXME: The zero-loop should be changed to put the CPU into loop-mode.
|
||||
* FIXME: PROM-based systems will have to copy data segment to RAM here
|
||||
*/
|
||||
PUBLIC (_CopyDataClearBSSAndStart)
|
||||
SYM(_CopyDataClearBSSAndStart):
|
||||
lea copy_start,a0 | Get start of DATA in RAM
|
||||
lea SYM(etext),a2 | Get start of DATA in ROM
|
||||
cmpl a0,a2 | Are they the same?
|
||||
beq.s NOCOPY | Yes, no copy necessary
|
||||
lea copy_end,a1 | Get end of DATA in RAM
|
||||
bra.s COPYLOOPTEST | Branch into copy loop
|
||||
COPYLOOP:
|
||||
movel a2@+,a0@+ | Copy word from ROM to RAM
|
||||
COPYLOOPTEST:
|
||||
cmpl a1,a0 | Done?
|
||||
bcs.s COPYLOOP | No, skip
|
||||
NOCOPY:
|
||||
|
||||
lea clear_start,a0 | Get start of BSS
|
||||
lea clear_end,a1 | Get end of BSS
|
||||
clrl d0 | Value to set
|
||||
bra.s ZEROLOOPTEST | Branch into clear loop
|
||||
PUBLIC (_ClearBSSAndStart)
|
||||
SYM(_ClearBSSAndStart):
|
||||
movel #clear_start,a0
|
||||
movel #clear_end,a1
|
||||
clrl d0
|
||||
bras ZEROLOOPTEST
|
||||
ZEROLOOP:
|
||||
movel d0,a0@+ | Clear a word
|
||||
movel d0,a0@+
|
||||
ZEROLOOPTEST:
|
||||
cmpl a1,a0 | Done?
|
||||
bcs.s ZEROLOOP | No, skip
|
||||
|
||||
cmpl a1,a0
|
||||
bcs ZEROLOOP
|
||||
movel #stack_init,a7 | set master stack pointer
|
||||
movel d0,a7@- | environp
|
||||
movel d0,a7@- | argv
|
||||
|
||||
@@ -298,11 +298,11 @@ uhoh: nop | Leave spot for breakpoint
|
||||
bra.s uhoh | Stuck forever
|
||||
|
||||
/*
|
||||
* Place the low-order 3 octets of the board's ethernet address at
|
||||
* a `well-known' fixed location relative to the beginning of ROM.
|
||||
* Place the low-order 3 octets of the board's
|
||||
* ethernet address at a `well-known' location.
|
||||
*/
|
||||
.align 2
|
||||
.long ETHERNET_ADDRESS | Low-order 3 octets of ethernet address
|
||||
| .long ETHERNET_ADDRESS | 08: Low-order 3 octets
|
||||
|
||||
/*
|
||||
* Initial PC
|
||||
@@ -347,36 +347,24 @@ start:
|
||||
*/
|
||||
jmp SYM(_Init68360) | Start C code (which never returns)
|
||||
|
||||
|
||||
/*
|
||||
* Copy DATA segment, clear BSS segment, set up real stack,
|
||||
* initialize heap, start C program.
|
||||
* Assume that DATA and BSS sizes are multiples of 4.
|
||||
* Clear BSS, set up real stack, initialize heap, start C program
|
||||
* Assume that BSS size is a multiple of 4.
|
||||
* FIXME: The zero-loop should be changed to put the CPU into loop-mode.
|
||||
* FIXME: PROM-based systems will have to copy data segment to RAM here
|
||||
*/
|
||||
PUBLIC (_CopyDataClearBSSAndStart)
|
||||
SYM(_CopyDataClearBSSAndStart):
|
||||
lea copy_start,a0 | Get start of DATA in RAM
|
||||
lea SYM(etext),a2 | Get start of DATA in ROM
|
||||
cmpl a0,a2 | Are they the same?
|
||||
beq.s NOCOPY | Yes, no copy necessary
|
||||
lea copy_end,a1 | Get end of DATA in RAM
|
||||
bra.s COPYLOOPTEST | Branch into copy loop
|
||||
COPYLOOP:
|
||||
movel a2@+,a0@+ | Copy word from ROM to RAM
|
||||
COPYLOOPTEST:
|
||||
cmpl a1,a0 | Done?
|
||||
bcs.s COPYLOOP | No, skip
|
||||
NOCOPY:
|
||||
|
||||
lea clear_start,a0 | Get start of BSS
|
||||
lea clear_end,a1 | Get end of BSS
|
||||
clrl d0 | Value to set
|
||||
bra.s ZEROLOOPTEST | Branch into clear loop
|
||||
PUBLIC (_ClearBSSAndStart)
|
||||
SYM(_ClearBSSAndStart):
|
||||
movel #clear_start,a0
|
||||
movel #clear_end,a1
|
||||
clrl d0
|
||||
bras ZEROLOOPTEST
|
||||
ZEROLOOP:
|
||||
movel d0,a0@+ | Clear a word
|
||||
movel d0,a0@+
|
||||
ZEROLOOPTEST:
|
||||
cmpl a1,a0 | Done?
|
||||
bcs.s ZEROLOOP | No, skip
|
||||
|
||||
cmpl a1,a0
|
||||
bcs ZEROLOOP
|
||||
movel #stack_init,a7 | set master stack pointer
|
||||
movel d0,a7@- | environp
|
||||
movel d0,a7@- | argv
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* MC68360 support routines
|
||||
* Initialize 68360 hardware
|
||||
*
|
||||
* W. Eric Norum
|
||||
* Saskatchewan Accelerator Laboratory
|
||||
@@ -12,33 +12,15 @@
|
||||
|
||||
#include <rtems.h>
|
||||
#include <bsp.h>
|
||||
#include <m68360.h>
|
||||
#include "m68360.h"
|
||||
|
||||
/*
|
||||
* Send a command to the CPM RISC processer
|
||||
*/
|
||||
|
||||
void M360ExecuteRISC(rtems_unsigned16 command)
|
||||
{
|
||||
rtems_unsigned16 sr;
|
||||
|
||||
m68k_disable_interrupts (sr);
|
||||
while (m360.cr & M360_CR_FLG)
|
||||
continue;
|
||||
m360.cr = command | M360_CR_FLG;
|
||||
m68k_enable_interrupts (sr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize MC68360
|
||||
*/
|
||||
|
||||
void _Init68360 (void)
|
||||
void
|
||||
_Init68360 (void)
|
||||
{
|
||||
int i;
|
||||
extern void *_RomBase, *_RamBase;
|
||||
m68k_isr_entry *vbr;
|
||||
extern void _CopyDataClearBSSAndStart (void);
|
||||
extern void _ClearBSSAndStart (void);
|
||||
|
||||
/*
|
||||
* Step 6: Is this a power-up reset?
|
||||
@@ -82,7 +64,7 @@ void _Init68360 (void)
|
||||
*((long *)((char *)&m360 + 0xE00 + i)) = 0;
|
||||
*((long *)((char *)&m360 + 0xF00 + i)) = 0;
|
||||
}
|
||||
M360ExecuteRISC (M360_CR_RST);
|
||||
m360.cr = M360_CR_RST | M360_CR_FLG;
|
||||
|
||||
/*
|
||||
* Step 10: Write PEPAR
|
||||
@@ -147,10 +129,11 @@ void _Init68360 (void)
|
||||
/*
|
||||
* Step 13: Copy the exception vector table to system RAM
|
||||
*/
|
||||
m68k_get_vbr (vbr);
|
||||
|
||||
m68k_get_vbr( vbr );
|
||||
for (i = 0; i < 256; ++i)
|
||||
M68Kvec[i] = vbr[i];
|
||||
m68k_set_vbr (M68Kvec);
|
||||
m68k_set_vbr( M68Kvec );
|
||||
|
||||
/*
|
||||
* Step 14: More system initialization
|
||||
@@ -184,7 +167,7 @@ void _Init68360 (void)
|
||||
m360.mcr = 0x4C7F;
|
||||
|
||||
/*
|
||||
* Copy data, clear BSS, switch stacks and call main()
|
||||
* Clear BSS, switch stacks and call main()
|
||||
*/
|
||||
_CopyDataClearBSSAndStart ();
|
||||
_ClearBSSAndStart ();
|
||||
}
|
||||
|
||||
@@ -13,93 +13,65 @@
|
||||
* Declare on-board memory
|
||||
*/
|
||||
MEMORY {
|
||||
ram : ORIGIN = 0x00000000, LENGTH = 4M
|
||||
rom : ORIGIN = 0xFF000000, LENGTH = 1M
|
||||
dpram : ORIGIN = 0xFE000000, LENGTH = 8k
|
||||
ram : ORIGIN = 0x00000000, LENGTH = 4M
|
||||
rom : ORIGIN = 0xFF000000, LENGTH = 1M
|
||||
dpram : ORIGIN = 0xFE000000, LENGTH = 8k
|
||||
}
|
||||
|
||||
/*
|
||||
* Declare some sizes
|
||||
* XXX: The assignment of ". += XyzSize;" fails in older gld's if the
|
||||
* number used there is not constant. If this happens to you, edit
|
||||
* the lines marked below to use a constant value.
|
||||
*/
|
||||
HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
|
||||
StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
|
||||
|
||||
/*
|
||||
* Declare low-order three octets of Ethernet address
|
||||
*/
|
||||
ETHERNET_ADDRESS = DEFINED(ETHERNET_ADDRESS) ? ETHERNET_ADDRESS : 0xDEAD12;
|
||||
|
||||
/*
|
||||
* Load objects
|
||||
*/
|
||||
SECTIONS {
|
||||
/*
|
||||
* Boot PROM
|
||||
*/
|
||||
rom : {
|
||||
_RomBase = .;
|
||||
__RomBase = .;
|
||||
} >rom
|
||||
|
||||
/*
|
||||
* Dynamic RAM
|
||||
*/
|
||||
ram : {
|
||||
_RamBase = .;
|
||||
__RamBase = .;
|
||||
} >ram
|
||||
|
||||
/*
|
||||
* Text, data and bss segments
|
||||
*/
|
||||
.text : {
|
||||
CREATE_OBJECT_SYMBOLS
|
||||
*(.text)
|
||||
. = ALIGN (16);
|
||||
etext = .;
|
||||
_etext = .;
|
||||
__RamBase = .;
|
||||
CREATE_OBJECT_SYMBOLS
|
||||
*(.text)
|
||||
. = ALIGN (16);
|
||||
_etext = .;
|
||||
} >ram
|
||||
.data : {
|
||||
copy_start = .;
|
||||
*(.data)
|
||||
. = ALIGN (16);
|
||||
_edata = .;
|
||||
copy_end = .;
|
||||
*(.data)
|
||||
. = ALIGN (16);
|
||||
_edata = .;
|
||||
} >ram
|
||||
.bss : {
|
||||
M68Kvec = .;
|
||||
_M68Kvec = .;
|
||||
. += (256 * 4);
|
||||
clear_start = .;
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
. = ALIGN (16);
|
||||
_end = .;
|
||||
_M68Kvec = .;
|
||||
. += (256 * 4);
|
||||
clear_start = .;
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
. = ALIGN (16);
|
||||
_end = .;
|
||||
|
||||
_HeapStart = .;
|
||||
__HeapStart = .;
|
||||
. += HeapSize; /* XXX -- Old gld can't handle this */
|
||||
. += StackSize; /* XXX -- Old gld can't handle this */
|
||||
/* . += 0x10000; */ /* HeapSize for old gld */
|
||||
/* . += 0x1000; */ /* StackSize for old gld */
|
||||
. = ALIGN (16);
|
||||
stack_init = .;
|
||||
clear_end = .;
|
||||
__HeapStart = .;
|
||||
. += HeapSize;
|
||||
. += StackSize;
|
||||
. = ALIGN (16);
|
||||
stack_init = .;
|
||||
clear_end = .;
|
||||
|
||||
_WorkspaceBase = .;
|
||||
__WorkspaceBase = .;
|
||||
} >ram
|
||||
__WorkspaceBase = .;
|
||||
} >ram
|
||||
|
||||
/*
|
||||
* On-chip memory/peripherals
|
||||
*/
|
||||
dpram : {
|
||||
m360 = .;
|
||||
_m360 = .;
|
||||
. += (8 * 1024);
|
||||
/*
|
||||
* On-chip memory/peripherals
|
||||
*/
|
||||
dpram : {
|
||||
_m360 = .;
|
||||
. += (8 * 1024);
|
||||
|
||||
} >dpram
|
||||
} >dpram
|
||||
|
||||
/*
|
||||
* Boot PROM
|
||||
*/
|
||||
rom : {
|
||||
__RomBase = .;
|
||||
} >rom
|
||||
}
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
/*
|
||||
* This file contains GNU linker directives for a generic MC68360 board.
|
||||
* These linker directives are for producing a PROM version..
|
||||
* To create the PROM image from the linkter output you must use objcopy
|
||||
* (--adjust-section-vma) to place the data segment at the end of the text
|
||||
* segment in the PROM. The start-up code takes care of copying this region
|
||||
* to RAM.
|
||||
*
|
||||
* Saskatchewan Accelerator Laboratory
|
||||
* University of Saskatchewan
|
||||
* Saskatoon, Saskatchewan, CANADA
|
||||
* eric@skatter.usask.ca
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/*
|
||||
* a.out format doesn't handle prom images very well
|
||||
*/
|
||||
OUTPUT_FORMAT(coff-m68k)
|
||||
|
||||
/*
|
||||
* Declare on-board memory
|
||||
*/
|
||||
MEMORY {
|
||||
ram : ORIGIN = 0x00000000, LENGTH = 4M
|
||||
rom : ORIGIN = 0xFF000000, LENGTH = 1M
|
||||
dpram : ORIGIN = 0xFE000000, LENGTH = 8k
|
||||
}
|
||||
|
||||
/*
|
||||
* Declare some sizes
|
||||
*/
|
||||
HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
|
||||
StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
|
||||
|
||||
/*
|
||||
* Declare low-order three octets of Ethernet address
|
||||
*/
|
||||
ETHERNET_ADDRESS = DEFINED(ETHERNET_ADDRESS) ? ETHERNET_ADDRESS : 0xDEAD12;
|
||||
|
||||
/*
|
||||
* Load objects
|
||||
*/
|
||||
SECTIONS {
|
||||
/*
|
||||
* Boot PROM
|
||||
*/
|
||||
rom : {
|
||||
_RomBase = .;
|
||||
__RomBase = .;
|
||||
} >rom
|
||||
|
||||
/*
|
||||
* Dynamic RAM
|
||||
*/
|
||||
ram : {
|
||||
_RamBase = .;
|
||||
__RamBase = .;
|
||||
} >ram
|
||||
|
||||
/*
|
||||
* Text, data and bss segments
|
||||
*/
|
||||
.text : {
|
||||
CREATE_OBJECT_SYMBOLS
|
||||
*(.text)
|
||||
. = ALIGN (16);
|
||||
etext = .;
|
||||
_etext = .;
|
||||
} >rom
|
||||
.data : {
|
||||
copy_start = .;
|
||||
*(.data)
|
||||
. = ALIGN (16);
|
||||
_edata = .;
|
||||
copy_end = .;
|
||||
} >ram
|
||||
.bss : {
|
||||
M68Kvec = .;
|
||||
_M68Kvec = .;
|
||||
. += (256 * 4);
|
||||
clear_start = .;
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
. = ALIGN (16);
|
||||
_end = .;
|
||||
|
||||
_HeapStart = .;
|
||||
__HeapStart = .;
|
||||
. += HeapSize;
|
||||
. += StackSize;
|
||||
. = ALIGN (16);
|
||||
stack_init = .;
|
||||
clear_end = .;
|
||||
|
||||
_WorkspaceBase = .;
|
||||
__WorkspaceBase = .;
|
||||
} >ram
|
||||
|
||||
/*
|
||||
* On-chip memory/peripherals
|
||||
*/
|
||||
dpram : {
|
||||
m360 = .;
|
||||
_m360 = .;
|
||||
. += (8 * 1024);
|
||||
|
||||
} >dpram
|
||||
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
Notes about the MVME147 bsp
|
||||
|
||||
MVME147 port for TNI - Telecom Bretagne
|
||||
by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
May 1996
|
||||
|
||||
|
||||
This bsp is essentially based on the mvme136 bsp.
|
||||
|
||||
Summary of the modifications that were made:
|
||||
|
||||
* include
|
||||
|
||||
- bsp.h
|
||||
Peripheral Channel Controller memory mapping
|
||||
Z8530 memory mapping
|
||||
|
||||
* startup
|
||||
|
||||
- bspstart.c
|
||||
main () setup for VME roundrobin mode
|
||||
setup for the PCC interrupt vector base
|
||||
- bspclean.c
|
||||
bsp_cleanup () disable timer 1 & 2 interruptions
|
||||
- linkcmds set the RAM start (0x5000) and size (4Meg - 0x5000)
|
||||
- setvec.c unchanged
|
||||
- sbrk.c unchanged
|
||||
|
||||
* console
|
||||
|
||||
- console.c taken from the dmv152 bsp (Zilog Z8530)
|
||||
with no modification
|
||||
|
||||
* clock
|
||||
|
||||
- ckinit.c entirely rewritten for the PCC tick timer 2
|
||||
|
||||
* timer
|
||||
|
||||
- timerisr.s and timer.c
|
||||
entirely rewritten for the PCC tick timer 1
|
||||
now gives results un 6.25 us units (mininum timer delay,
|
||||
suprising big grain)
|
||||
|
||||
* times
|
||||
|
||||
- updated results for the mvme147 (beware of the 6.25 us grain)
|
||||
|
||||
* Makefiles
|
||||
|
||||
- compilation of shmsupp simply removed
|
||||
|
||||
|
||||
To be done:
|
||||
|
||||
* add VMEchip memory mapping to include/bsp.h
|
||||
|
||||
* update the overheads in coverhead.h
|
||||
|
||||
* add support for serila ports 2,3 and 4.
|
||||
|
||||
Other notes:
|
||||
|
||||
* There is no MP support (no more shmsupp) because I have no
|
||||
experience of the VME bus. The mvme136 shared memory support
|
||||
does not seem applicable on the VMEchip of the mvme147, so
|
||||
I don't know where to start. Suggestions are welcome.
|
||||
|
||||
* All the timing tests and sp tests have been run except tmoverhd.
|
||||
The test hangs during the pause (where the task should be suspended
|
||||
until a return). Maybe the rtems_initialize_executive is no more
|
||||
reentrant with this bsp.
|
||||
|
||||
Future work:
|
||||
|
||||
* Add gdb serial remote support.
|
||||
|
||||
* Shared memory support (I don't really need it, but I can do
|
||||
it if it's simple).
|
||||
|
||||
* Message passing on VME bus, with Ada 95 annex E (distributed
|
||||
systems) in mind.
|
||||
@@ -1,142 +0,0 @@
|
||||
/* Clock_init()
|
||||
*
|
||||
* This routine initializes the Tick Timer 2 on the MVME147 board.
|
||||
* The tick frequency is 1 millisecond.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* MVME147 port for TNI - Telecom Bretagne
|
||||
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
* May 1996
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <bsp.h>
|
||||
#include <rtems/libio.h>
|
||||
|
||||
#define MS_COUNT 65376 /* 1ms */
|
||||
/* MS_COUNT = 0x10000 - 1e-3/6.25e-6 */
|
||||
#define CLOCK_INT_LEVEL 6 /* T2's interrupt level */
|
||||
|
||||
rtems_unsigned32 Clock_isrs; /* ISRs until next tick */
|
||||
volatile rtems_unsigned32 Clock_driver_ticks; /* ticks since initialization */
|
||||
rtems_isr_entry Old_ticker;
|
||||
|
||||
void Clock_exit( void );
|
||||
|
||||
/*
|
||||
* These are set by clock driver during its init
|
||||
*/
|
||||
|
||||
rtems_device_major_number rtems_clock_major = ~0;
|
||||
rtems_device_minor_number rtems_clock_minor;
|
||||
|
||||
|
||||
/*
|
||||
* ISR Handler
|
||||
*/
|
||||
|
||||
rtems_isr Clock_isr(rtems_vector_number vector)
|
||||
{
|
||||
Clock_driver_ticks += 1;
|
||||
pcc->timer2_int_control |= 0x80; /* Acknowledge interr. */
|
||||
|
||||
if (Clock_isrs == 1) {
|
||||
rtems_clock_tick();
|
||||
Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000;
|
||||
}
|
||||
else
|
||||
Clock_isrs -= 1;
|
||||
}
|
||||
|
||||
void Install_clock(rtems_isr_entry clock_isr )
|
||||
{
|
||||
|
||||
Clock_driver_ticks = 0;
|
||||
Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000;
|
||||
|
||||
if ( BSP_Configuration.ticks_per_timeslice ) {
|
||||
Old_ticker =
|
||||
(rtems_isr_entry) set_vector( clock_isr, TIMER_2_VECTOR, 1 );
|
||||
|
||||
pcc->timer2_int_control = 0x00; /* Disable T2 Interr. */
|
||||
pcc->timer2_preload = MS_COUNT;
|
||||
/* write preload value */
|
||||
pcc->timer2_control = 0x07; /* clear T2 overflow counter, enable counter */
|
||||
pcc->timer2_int_control = CLOCK_INT_LEVEL|0x08;
|
||||
/* Enable Timer 2 and set its int. level */
|
||||
|
||||
atexit( Clock_exit );
|
||||
}
|
||||
}
|
||||
|
||||
void Clock_exit( void )
|
||||
{
|
||||
if ( BSP_Configuration.ticks_per_timeslice ) {
|
||||
pcc->timer2_int_control = 0x00; /* Disable T2 Interr. */
|
||||
}
|
||||
}
|
||||
|
||||
rtems_device_driver Clock_initialize(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *pargp
|
||||
)
|
||||
{
|
||||
Install_clock( Clock_isr );
|
||||
|
||||
/*
|
||||
* make major/minor avail to others such as shared memory driver
|
||||
*/
|
||||
|
||||
rtems_clock_major = major;
|
||||
rtems_clock_minor = minor;
|
||||
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
rtems_device_driver Clock_control(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *pargp
|
||||
)
|
||||
{
|
||||
rtems_unsigned32 isrlevel;
|
||||
rtems_libio_ioctl_args_t *args = pargp;
|
||||
|
||||
if (args == 0)
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* This is hokey, but until we get a defined interface
|
||||
* to do this, it will just be this simple...
|
||||
*/
|
||||
|
||||
if (args->command == rtems_build_name('I', 'S', 'R', ' '))
|
||||
{
|
||||
Clock_isr(TIMER_2_VECTOR);
|
||||
}
|
||||
else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
|
||||
{
|
||||
rtems_interrupt_disable( isrlevel );
|
||||
(void) set_vector( args->buffer, TIMER_2_VECTOR, 1 );
|
||||
rtems_interrupt_enable( isrlevel );
|
||||
}
|
||||
|
||||
done:
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
@@ -1,258 +0,0 @@
|
||||
/*
|
||||
* This file contains the MVME147 console IO package.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* MVME147 port for TNI - Telecom Bretagne
|
||||
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
* May 1996
|
||||
*
|
||||
* This file was taken from the DMV152 bsp
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define M147_INIT
|
||||
|
||||
#include <bsp.h>
|
||||
#include <rtems/libio.h>
|
||||
#include <z8530.h>
|
||||
|
||||
|
||||
/* console_initialize
|
||||
*
|
||||
* This routine initializes the console IO driver.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* Return values:
|
||||
*/
|
||||
|
||||
rtems_device_driver console_initialize(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
|
||||
status = rtems_io_register_name(
|
||||
"/dev/console",
|
||||
major,
|
||||
(rtems_device_minor_number) 0
|
||||
);
|
||||
|
||||
if (status != RTEMS_SUCCESSFUL)
|
||||
rtems_fatal_error_occurred(status);
|
||||
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
/* is_character_ready
|
||||
*
|
||||
* This routine returns TRUE if a character is available.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* Return values:
|
||||
*/
|
||||
|
||||
rtems_boolean is_character_ready(
|
||||
char *ch
|
||||
)
|
||||
{
|
||||
rtems_unsigned8 rr_0;
|
||||
|
||||
for ( ; ; ) {
|
||||
Z8x30_READ_CONTROL( CONSOLE_CONTROL, RR_0, rr_0 );
|
||||
if ( !(rr_0 & RR_0_RX_DATA_AVAILABLE) )
|
||||
return( FALSE );
|
||||
|
||||
Z8x30_READ_DATA( CONSOLE_DATA, *ch );
|
||||
return( TRUE );
|
||||
}
|
||||
}
|
||||
|
||||
/* inbyte
|
||||
*
|
||||
* This routine reads a character from the SCC.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* Return values:
|
||||
* character read from SCC
|
||||
*/
|
||||
|
||||
char inbyte( void )
|
||||
{
|
||||
rtems_unsigned8 rr_0;
|
||||
char ch;
|
||||
|
||||
for ( ; ; ) {
|
||||
Z8x30_READ_CONTROL( CONSOLE_CONTROL, RR_0, rr_0 );
|
||||
if ( (rr_0 & RR_0_RX_DATA_AVAILABLE) != 0 )
|
||||
break;
|
||||
}
|
||||
|
||||
Z8x30_READ_DATA( CONSOLE_DATA, ch );
|
||||
return ( ch );
|
||||
}
|
||||
|
||||
/* outbyte
|
||||
*
|
||||
* This routine transmits a character out the SCC. It supports
|
||||
* XON/XOFF flow control.
|
||||
*
|
||||
* Input parameters:
|
||||
* ch - character to be transmitted
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*/
|
||||
|
||||
void outbyte(
|
||||
char ch
|
||||
)
|
||||
{
|
||||
rtems_unsigned8 rr_0;
|
||||
char flow_control;
|
||||
|
||||
for ( ; ; ) {
|
||||
Z8x30_READ_CONTROL( CONSOLE_CONTROL, RR_0, rr_0 );
|
||||
if ( (rr_0 & RR_0_TX_BUFFER_EMPTY) != 0 )
|
||||
break;
|
||||
}
|
||||
|
||||
for ( ; ; ) {
|
||||
Z8x30_READ_CONTROL( CONSOLE_CONTROL, RR_0, rr_0 );
|
||||
if ( (rr_0 & RR_0_RX_DATA_AVAILABLE) == 0 )
|
||||
break;
|
||||
|
||||
Z8x30_READ_DATA( CONSOLE_DATA, flow_control );
|
||||
|
||||
if ( flow_control == XOFF )
|
||||
do {
|
||||
do {
|
||||
Z8x30_READ_CONTROL( CONSOLE_CONTROL, RR_0, rr_0 );
|
||||
} while ( (rr_0 & RR_0_RX_DATA_AVAILABLE) == 0 );
|
||||
Z8x30_READ_DATA( CONSOLE_DATA, flow_control );
|
||||
} while ( flow_control != XON );
|
||||
}
|
||||
|
||||
Z8x30_WRITE_DATA( CONSOLE_DATA, ch );
|
||||
}
|
||||
|
||||
/*
|
||||
* Open entry point
|
||||
*/
|
||||
|
||||
rtems_device_driver console_open(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Close entry point
|
||||
*/
|
||||
|
||||
rtems_device_driver console_close(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
/*
|
||||
* read bytes from the serial port. We only have stdin.
|
||||
*/
|
||||
|
||||
rtems_device_driver console_read(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
rtems_libio_rw_args_t *rw_args;
|
||||
char *buffer;
|
||||
int maximum;
|
||||
int count = 0;
|
||||
|
||||
rw_args = (rtems_libio_rw_args_t *) arg;
|
||||
|
||||
buffer = rw_args->buffer;
|
||||
maximum = rw_args->count;
|
||||
|
||||
for (count = 0; count < maximum; count++) {
|
||||
buffer[ count ] = inbyte();
|
||||
if (buffer[ count ] == '\n' || buffer[ count ] == '\r') {
|
||||
buffer[ count++ ] = '\n';
|
||||
buffer[ count ] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
rw_args->bytes_moved = count;
|
||||
return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
|
||||
}
|
||||
|
||||
/*
|
||||
* write bytes to the serial port. Stdout and stderr are the same.
|
||||
*/
|
||||
|
||||
rtems_device_driver console_write(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
int count;
|
||||
int maximum;
|
||||
rtems_libio_rw_args_t *rw_args;
|
||||
char *buffer;
|
||||
|
||||
rw_args = (rtems_libio_rw_args_t *) arg;
|
||||
|
||||
buffer = rw_args->buffer;
|
||||
maximum = rw_args->count;
|
||||
|
||||
for (count = 0; count < maximum; count++) {
|
||||
if ( buffer[ count ] == '\n') {
|
||||
outbyte('\r');
|
||||
}
|
||||
outbyte( buffer[ count ] );
|
||||
}
|
||||
|
||||
rw_args->bytes_moved = maximum;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* IO Control entry point
|
||||
*/
|
||||
|
||||
rtems_device_driver console_control(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
@@ -1,189 +0,0 @@
|
||||
/* bsp.h
|
||||
*
|
||||
* This include file contains all MVME147 board IO definitions.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* MVME147 port for TNI - Telecom Bretagne
|
||||
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
* May 1996
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __MVME147_h
|
||||
#define __MVME147_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <clockdrv.h>
|
||||
#include <console.h>
|
||||
#include <iosupp.h>
|
||||
|
||||
/* Constants */
|
||||
|
||||
#define RAM_START 0x00005000
|
||||
#define RAM_END 0x00400000
|
||||
|
||||
/* MVME 147 Peripheral controller chip
|
||||
see MVME147/D1, 3.4 */
|
||||
|
||||
struct pcc_map {
|
||||
/* 32 bit registers */
|
||||
rtems_unsigned32 dma_table_address; /* 0xfffe1000 */
|
||||
rtems_unsigned32 dma_data_address; /* 0xfffe1004 */
|
||||
rtems_unsigned32 dma_bytecount; /* 0xfffe1008 */
|
||||
rtems_unsigned32 dma_data_holding; /* 0xfffe100c */
|
||||
|
||||
/* 16 bit registers */
|
||||
rtems_unsigned16 timer1_preload; /* 0xfffe1010 */
|
||||
rtems_unsigned16 timer1_count; /* 0xfffe1012 */
|
||||
rtems_unsigned16 timer2_preload; /* 0xfffe1014 */
|
||||
rtems_unsigned16 timer2_count; /* 0xfffe1016 */
|
||||
|
||||
/* 8 bit registers */
|
||||
rtems_unsigned8 timer1_int_control; /* 0xfffe1018 */
|
||||
rtems_unsigned8 timer1_control; /* 0xfffe1019 */
|
||||
rtems_unsigned8 timer2_int_control; /* 0xfffe101a */
|
||||
rtems_unsigned8 timer2_control; /* 0xfffe101b */
|
||||
|
||||
rtems_unsigned8 acfail_int_control; /* 0xfffe101c */
|
||||
rtems_unsigned8 watchdog_control; /* 0xfffe101d */
|
||||
|
||||
rtems_unsigned8 printer_int_control; /* 0xfffe101e */
|
||||
rtems_unsigned8 printer_control; /* 0xfffe102f */
|
||||
|
||||
rtems_unsigned8 dma_int_control; /* 0xfffe1020 */
|
||||
rtems_unsigned8 dma_control; /* 0xfffe1021 */
|
||||
rtems_unsigned8 bus_error_int_control; /* 0xfffe1022 */
|
||||
rtems_unsigned8 dma_status; /* 0xfffe1023 */
|
||||
rtems_unsigned8 abort_int_control; /* 0xfffe1024 */
|
||||
rtems_unsigned8 table_address_function_code; /* 0xfffe1025 */
|
||||
rtems_unsigned8 serial_port_int_control; /* 0xfffe1026 */
|
||||
rtems_unsigned8 general_purpose_control; /* 0xfffe1027 */
|
||||
rtems_unsigned8 lan_int_control; /* 0xfffe1028 */
|
||||
rtems_unsigned8 general_purpose_status; /* 0xfffe1029 */
|
||||
rtems_unsigned8 scsi_port_int_control; /* 0xfffe102a */
|
||||
rtems_unsigned8 slave_base_address; /* 0xfffe102b */
|
||||
rtems_unsigned8 software_int_1_control; /* 0xfffe102c */
|
||||
rtems_unsigned8 int_base_vector; /* 0xfffe102d */
|
||||
rtems_unsigned8 software_int_2_control; /* 0xfffe102e */
|
||||
rtems_unsigned8 revision_level; /* 0xfffe102f */
|
||||
};
|
||||
|
||||
#define pcc ((volatile struct pcc_map * const) 0xfffe1000)
|
||||
|
||||
#define z8530 0xfffe3001
|
||||
|
||||
|
||||
/* interrupt vectors - see MVME146/D1 4.14 */
|
||||
#define PCC_BASE_VECTOR 0x40 /* First user int */
|
||||
#define SCC_VECTOR PCC_BASE_VECTOR+3
|
||||
#define TIMER_1_VECTOR PCC_BASE_VECTOR+8
|
||||
#define TIMER_2_VECTOR PCC_BASE_VECTOR+9
|
||||
#define SOFT_1_VECTOR PCC_BASE_VECTOR+10
|
||||
#define SOFT_2_VECTOR PCC_BASE_VECTOR+11
|
||||
|
||||
#define USE_CHANNEL_A 1 /* 1 = use channel A for console */
|
||||
#define USE_CHANNEL_B 0 /* 1 = use channel B for console */
|
||||
|
||||
#if (USE_CHANNEL_A == 1)
|
||||
#define CONSOLE_CONTROL 0xfffe3002
|
||||
#define CONSOLE_DATA 0xfffe3003
|
||||
#elif (USE_CHANNEL_B == 1)
|
||||
#define CONSOLE_CONTROL 0xfffe3000
|
||||
#define CONSOLE_DATA 0xfffe3001
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define FOREVER 1 /* infinite loop */
|
||||
|
||||
#ifdef M147_INIT
|
||||
#undef EXTERN
|
||||
#define EXTERN
|
||||
#else
|
||||
#undef EXTERN
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Define the time limits for RTEMS Test Suite test durations.
|
||||
* Long test and short test duration limits are provided. These
|
||||
* values are in seconds and need to be converted to ticks for the
|
||||
* application.
|
||||
*
|
||||
*/
|
||||
|
||||
#define MAX_LONG_TEST_DURATION 300 /* 5 minutes = 300 seconds */
|
||||
#define MAX_SHORT_TEST_DURATION 3 /* 3 seconds */
|
||||
|
||||
/*
|
||||
* Define the interrupt mechanism for Time Test 27
|
||||
*
|
||||
* NOTE: Use the MPCSR vector for the MVME147
|
||||
*/
|
||||
|
||||
#define MUST_WAIT_FOR_INTERRUPT 0
|
||||
|
||||
#define Install_tm27_vector( handler ) set_vector( (handler), \
|
||||
SOFT_1_VECTOR, 1 )
|
||||
|
||||
#define Cause_tm27_intr() pcc->software_int_1_control = 0x0c
|
||||
/* generate level 4 sotware int. */
|
||||
|
||||
#define Clear_tm27_intr() pcc->software_int_1_control = 0x00
|
||||
|
||||
#define Lower_tm27_intr()
|
||||
|
||||
|
||||
/* miscellaneous stuff assumed to exist */
|
||||
|
||||
extern rtems_configuration_table BSP_Configuration;
|
||||
|
||||
extern m68k_isr_entry M68Kvec[]; /* vector table address */
|
||||
|
||||
/*
|
||||
* Device Driver Table Entries
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: Use the standard Console driver entry
|
||||
*/
|
||||
|
||||
/*
|
||||
* NOTE: Use the standard Clock driver entry
|
||||
*/
|
||||
|
||||
/*
|
||||
* How many libio files we want
|
||||
*/
|
||||
|
||||
#define BSP_LIBIO_MAX_FDS 20
|
||||
|
||||
/* functions */
|
||||
|
||||
void bsp_cleanup( void );
|
||||
|
||||
m68k_isr_entry set_vector(
|
||||
rtems_isr_entry handler,
|
||||
rtems_vector_number vector,
|
||||
int type
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
/* coverhd.h
|
||||
*
|
||||
* This include file has defines to represent the overhead associated
|
||||
* with calling a particular directive from C on this target.
|
||||
*
|
||||
* 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 __COVERHD_h
|
||||
#define __COVERHD_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CALLING_OVERHEAD_INITIALIZE_EXECUTIVE 2
|
||||
#define CALLING_OVERHEAD_SHUTDOWN_EXECUTIVE 1
|
||||
#define CALLING_OVERHEAD_TASK_CREATE 3
|
||||
#define CALLING_OVERHEAD_TASK_IDENT 2
|
||||
#define CALLING_OVERHEAD_TASK_START 2
|
||||
#define CALLING_OVERHEAD_TASK_RESTART 2
|
||||
#define CALLING_OVERHEAD_TASK_DELETE 1
|
||||
#define CALLING_OVERHEAD_TASK_SUSPEND 1
|
||||
#define CALLING_OVERHEAD_TASK_RESUME 2
|
||||
#define CALLING_OVERHEAD_TASK_SET_PRIORITY 2
|
||||
#define CALLING_OVERHEAD_TASK_MODE 2
|
||||
#define CALLING_OVERHEAD_TASK_GET_NOTE 2
|
||||
#define CALLING_OVERHEAD_TASK_SET_NOTE 2
|
||||
#define CALLING_OVERHEAD_TASK_WAKE_WHEN 4
|
||||
#define CALLING_OVERHEAD_TASK_WAKE_AFTER 1
|
||||
#define CALLING_OVERHEAD_INTERRUPT_CATCH 2
|
||||
#define CALLING_OVERHEAD_CLOCK_GET 5
|
||||
#define CALLING_OVERHEAD_CLOCK_SET 4
|
||||
#define CALLING_OVERHEAD_CLOCK_TICK 1
|
||||
|
||||
#define CALLING_OVERHEAD_TIMER_CREATE 2
|
||||
#define CALLING_OVERHEAD_TIMER_IDENT 1
|
||||
#define CALLING_OVERHEAD_TIMER_DELETE 2
|
||||
#define CALLING_OVERHEAD_TIMER_FIRE_AFTER 2
|
||||
#define CALLING_OVERHEAD_TIMER_FIRE_WHEN 5
|
||||
#define CALLING_OVERHEAD_TIMER_RESET 1
|
||||
#define CALLING_OVERHEAD_TIMER_CANCEL 1
|
||||
#define CALLING_OVERHEAD_SEMAPHORE_CREATE 3
|
||||
#define CALLING_OVERHEAD_SEMAPHORE_DELETE 1
|
||||
#define CALLING_OVERHEAD_SEMAPHORE_IDENT 2
|
||||
#define CALLING_OVERHEAD_SEMAPHORE_OBTAIN 2
|
||||
#define CALLING_OVERHEAD_SEMAPHORE_RELEASE 1
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_CREATE 2
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_IDENT 2
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_DELETE 1
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_SEND 2
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_URGENT 2
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_BROADCAST 2
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_RECEIVE 3
|
||||
#define CALLING_OVERHEAD_MESSAGE_QUEUE_FLUSH 2
|
||||
|
||||
#define CALLING_OVERHEAD_EVENT_SEND 2
|
||||
#define CALLING_OVERHEAD_EVENT_RECEIVE 2
|
||||
#define CALLING_OVERHEAD_SIGNAL_CATCH 2
|
||||
#define CALLING_OVERHEAD_SIGNAL_SEND 2
|
||||
#define CALLING_OVERHEAD_PARTITION_CREATE 3
|
||||
#define CALLING_OVERHEAD_PARTITION_IDENT 2
|
||||
#define CALLING_OVERHEAD_PARTITION_DELETE 1
|
||||
#define CALLING_OVERHEAD_PARTITION_GET_BUFFER 2
|
||||
#define CALLING_OVERHEAD_PARTITION_RETURN_BUFFER 2
|
||||
#define CALLING_OVERHEAD_REGION_CREATE 3
|
||||
#define CALLING_OVERHEAD_REGION_IDENT 2
|
||||
#define CALLING_OVERHEAD_REGION_DELETE 2
|
||||
#define CALLING_OVERHEAD_REGION_GET_SEGMENT 3
|
||||
#define CALLING_OVERHEAD_REGION_RETURN_SEGMENT 2
|
||||
#define CALLING_OVERHEAD_PORT_CREATE 3
|
||||
#define CALLING_OVERHEAD_PORT_IDENT 2
|
||||
#define CALLING_OVERHEAD_PORT_DELETE 1
|
||||
#define CALLING_OVERHEAD_PORT_EXTERNAL_TO_INTERNAL 2
|
||||
#define CALLING_OVERHEAD_PORT_INTERNAL_TO_EXTERNAL 2
|
||||
|
||||
#define CALLING_OVERHEAD_IO_INITIALIZE 2
|
||||
#define CALLING_OVERHEAD_IO_OPEN 2
|
||||
#define CALLING_OVERHEAD_IO_CLOSE 3
|
||||
#define CALLING_OVERHEAD_IO_READ 2
|
||||
#define CALLING_OVERHEAD_IO_WRITE 2
|
||||
#define CALLING_OVERHEAD_IO_CONTROL 2
|
||||
#define CALLING_OVERHEAD_FATAL_ERROR_OCCURRED 1
|
||||
#define CALLING_OVERHEAD_RATE_MONOTONIC_CREATE 2
|
||||
#define CALLING_OVERHEAD_RATE_MONOTONIC_IDENT 2
|
||||
#define CALLING_OVERHEAD_RATE_MONOTONIC_DELETE 1
|
||||
#define CALLING_OVERHEAD_RATE_MONOTONIC_CANCEL 1
|
||||
#define CALLING_OVERHEAD_RATE_MONOTONIC_PERIOD 2
|
||||
#define CALLING_OVERHEAD_MULTIPROCESSING_ANNOUNCE 1
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/* end of include file */
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* This routine returns control to 147Bug.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* MVME147 port for TNI - Telecom Bretagne
|
||||
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
* May 1996
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <rtems.h>
|
||||
#include <bsp.h>
|
||||
#include <clockdrv.h>
|
||||
|
||||
void bsp_return_to_monitor_trap()
|
||||
{
|
||||
extern void start( void );
|
||||
|
||||
register volatile void *start_addr;
|
||||
|
||||
m68k_set_vbr( 0 ); /* restore 147Bug vectors */
|
||||
asm volatile( "trap #15" ); /* trap to 147Bug */
|
||||
asm volatile( ".short 0x63" ); /* return to 147Bug (.RETURN) */
|
||||
/* restart program */
|
||||
start_addr = start;
|
||||
|
||||
asm volatile ( "jmp %0@" : "=a" (start_addr) : "0" (start_addr) );
|
||||
}
|
||||
|
||||
void bsp_cleanup( void )
|
||||
{
|
||||
pcc->timer1_int_control = 0; /* Disable Timer 1 */
|
||||
pcc->timer2_int_control = 0; /* Disable Timer 2 */
|
||||
|
||||
M68Kvec[ 45 ] = bsp_return_to_monitor_trap; /* install handler */
|
||||
asm volatile( "trap #13" ); /* insures SUPV mode */
|
||||
}
|
||||
@@ -1,245 +0,0 @@
|
||||
/* bsp_start()
|
||||
*
|
||||
* This routine starts the application. It includes application,
|
||||
* board, and monitor specific initialization and configuration.
|
||||
* The generic CPU dependent initialization has been performed
|
||||
* before this routine is invoked.
|
||||
*
|
||||
* INPUT: NONE
|
||||
*
|
||||
* OUTPUT: NONE
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* MVME147 port for TNI - Telecom Bretagne
|
||||
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
* May 1996
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <bsp.h>
|
||||
#include <rtems/libio.h>
|
||||
|
||||
#include <libcsupport.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef STACK_CHECKER_ON
|
||||
#include <stackchk.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The original table from the application and our copy of it with
|
||||
* some changes.
|
||||
*/
|
||||
|
||||
extern rtems_configuration_table Configuration;
|
||||
rtems_configuration_table BSP_Configuration;
|
||||
|
||||
rtems_cpu_table Cpu_table;
|
||||
|
||||
char *rtems_progname;
|
||||
|
||||
/* Initialize whatever libc we are using
|
||||
* called from postdriver hook
|
||||
*/
|
||||
|
||||
void bsp_libc_init()
|
||||
{
|
||||
extern int end;
|
||||
rtems_unsigned32 heap_start;
|
||||
|
||||
heap_start = (rtems_unsigned32) &end;
|
||||
if (heap_start & (CPU_ALIGNMENT-1))
|
||||
heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
||||
|
||||
RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
|
||||
|
||||
/*
|
||||
* Init the RTEMS libio facility to provide UNIX-like system
|
||||
* calls for use by newlib (ie: provide __open, __close, etc)
|
||||
* Uses malloc() to get area for the iops, so must be after malloc init
|
||||
*/
|
||||
|
||||
rtems_libio_init();
|
||||
|
||||
/*
|
||||
* Set up for the libc handling.
|
||||
*/
|
||||
|
||||
if (BSP_Configuration.ticks_per_timeslice > 0)
|
||||
libc_init(1); /* reentrant if possible */
|
||||
else
|
||||
libc_init(0); /* non-reentrant */
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: bsp_pretasking_hook
|
||||
* Created: 95/03/10
|
||||
*
|
||||
* Description:
|
||||
* BSP pretasking hook. Called just before drivers are initialized.
|
||||
* Used to setup libc and install any BSP extensions.
|
||||
*
|
||||
* NOTES:
|
||||
* Must not use libc (to do io) from here, since drivers are
|
||||
* not yet initialized.
|
||||
*
|
||||
*/
|
||||
|
||||
void
|
||||
bsp_pretasking_hook(void)
|
||||
{
|
||||
bsp_libc_init();
|
||||
|
||||
#ifdef STACK_CHECKER_ON
|
||||
/*
|
||||
* Initialize the stack bounds checker
|
||||
* We can either turn it on here or from the app.
|
||||
*/
|
||||
|
||||
Stack_check_Initialize();
|
||||
#endif
|
||||
|
||||
#ifdef RTEMS_DEBUG
|
||||
rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* After drivers are setup, register some "filenames"
|
||||
* and open stdin, stdout, stderr files
|
||||
*
|
||||
* Newlib will automatically associate the files with these
|
||||
* (it hardcodes the numbers)
|
||||
*/
|
||||
|
||||
void
|
||||
bsp_postdriver_hook(void)
|
||||
{
|
||||
int stdin_fd, stdout_fd, stderr_fd;
|
||||
int error_code;
|
||||
|
||||
error_code = 'S' << 24 | 'T' << 16;
|
||||
|
||||
if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1)
|
||||
rtems_fatal_error_occurred( error_code | 'D' << 8 | '0' );
|
||||
|
||||
if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
|
||||
rtems_fatal_error_occurred( error_code | 'D' << 8 | '1' );
|
||||
|
||||
if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
|
||||
rtems_fatal_error_occurred( error_code | 'D' << 8 | '2' );
|
||||
|
||||
if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
|
||||
rtems_fatal_error_occurred( error_code | 'I' << 8 | 'O' );
|
||||
}
|
||||
|
||||
|
||||
int main(
|
||||
int argc,
|
||||
char **argv,
|
||||
char **environp
|
||||
)
|
||||
{
|
||||
m68k_isr_entry *monitors_vector_table;
|
||||
int index;
|
||||
|
||||
if ((argc > 0) && argv && argv[0])
|
||||
rtems_progname = argv[0];
|
||||
else
|
||||
rtems_progname = "RTEMS";
|
||||
|
||||
monitors_vector_table = (m68k_isr_entry *)0; /* 135Bug Vectors are at 0 */
|
||||
m68k_set_vbr( monitors_vector_table );
|
||||
|
||||
for ( index=2 ; index<=255 ; index++ )
|
||||
M68Kvec[ index ] = monitors_vector_table[ 32 ];
|
||||
|
||||
M68Kvec[ 2 ] = monitors_vector_table[ 2 ]; /* bus error vector */
|
||||
M68Kvec[ 4 ] = monitors_vector_table[ 4 ]; /* breakpoints vector */
|
||||
M68Kvec[ 9 ] = monitors_vector_table[ 9 ]; /* trace vector */
|
||||
M68Kvec[ 47 ] = monitors_vector_table[ 47 ]; /* system call vector */
|
||||
|
||||
m68k_set_vbr( &M68Kvec );
|
||||
|
||||
pcc->int_base_vector = PCC_BASE_VECTOR; /* Set the PCC int vectors base */
|
||||
|
||||
(*(rtems_unsigned8 *)0xfffe2001) = 0x08;
|
||||
/* make VME access round-robin */
|
||||
|
||||
m68k_enable_caching();
|
||||
|
||||
/*
|
||||
* we only use a hook to get the C library initialized.
|
||||
*/
|
||||
|
||||
Cpu_table.pretasking_hook = bsp_pretasking_hook; /* init libc, etc. */
|
||||
|
||||
Cpu_table.predriver_hook = NULL;
|
||||
|
||||
Cpu_table.postdriver_hook = bsp_postdriver_hook;
|
||||
|
||||
Cpu_table.idle_task = NULL; /* do not override system IDLE task */
|
||||
|
||||
Cpu_table.do_zero_of_workspace = TRUE;
|
||||
|
||||
Cpu_table.interrupt_vector_table = (m68k_isr_entry *) &M68Kvec;
|
||||
|
||||
Cpu_table.interrupt_stack_size = 4096;
|
||||
|
||||
Cpu_table.extra_mpci_receive_server_stack = 0;
|
||||
|
||||
/*
|
||||
* Copy the table
|
||||
*/
|
||||
|
||||
BSP_Configuration = Configuration;
|
||||
|
||||
BSP_Configuration.work_space_start = (void *)
|
||||
(RAM_END - BSP_Configuration.work_space_size);
|
||||
|
||||
/*
|
||||
* Add 1 region for the RTEMS Malloc
|
||||
*/
|
||||
|
||||
BSP_Configuration.maximum_regions++;
|
||||
|
||||
/*
|
||||
* Add 1 extension for newlib libc
|
||||
*/
|
||||
|
||||
#ifdef RTEMS_NEWLIB
|
||||
BSP_Configuration.maximum_extensions++;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Add another extension if using the stack checker
|
||||
*/
|
||||
|
||||
#ifdef STACK_CHECKER_ON
|
||||
BSP_Configuration.maximum_extensions++;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Tell libio how many fd's we want and allow it to tweak config
|
||||
*/
|
||||
|
||||
rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
|
||||
|
||||
rtems_initialize_executive( &BSP_Configuration, &Cpu_table );
|
||||
/* does not return */
|
||||
|
||||
bsp_cleanup();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
/*
|
||||
* This file contains directives for the GNU linker which are specific
|
||||
* to the Motorola MVME147 boards.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* MVME147 port for TNI - Telecom Bretagne
|
||||
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
* May 1996
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
MEMORY
|
||||
{
|
||||
ram : org = 0x5000, l = 0x3fafff
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text 0x5000 :
|
||||
{
|
||||
text_start = . ;
|
||||
_text_start = . ;
|
||||
*(.text)
|
||||
etext = ALIGN( 0x10 ) ;
|
||||
_etext = .;
|
||||
}
|
||||
.data ADDR( .text ) + SIZEOF( .text ):
|
||||
{
|
||||
data_start = . ;
|
||||
_data_start = .;
|
||||
*(.data)
|
||||
edata = ALIGN( 0x10 ) ;
|
||||
_edata = .;
|
||||
}
|
||||
.bss ADDR( .data ) + SIZEOF( .data ):
|
||||
{
|
||||
bss_start = . ;
|
||||
_bss_start = . ;
|
||||
*(.bss)
|
||||
*(COMMON)
|
||||
end = . ;
|
||||
_end = . ;
|
||||
}
|
||||
}
|
||||
@@ -1,84 +0,0 @@
|
||||
/* Timer_init()
|
||||
*
|
||||
* This routine initializes the PCC timer on the MVME147 board.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* NOTE: It is important that the timer start/stop overhead be
|
||||
* determined when porting or modifying this code.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* MVME147 port for TNI - Telecom Bretagne
|
||||
* by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
* May 1996
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <bsp.h>
|
||||
|
||||
#define TIMER_INT_LEVEL 6
|
||||
|
||||
#define COUNTDOWN_VALUE 0
|
||||
/* Allows 0.4096 second delay betwin ints */
|
||||
/* Each tick is 6.25 us */
|
||||
|
||||
int Ttimer_val;
|
||||
rtems_boolean Timer_driver_Find_average_overhead;
|
||||
|
||||
rtems_isr timerisr();
|
||||
|
||||
void Timer_initialize()
|
||||
{
|
||||
(void) set_vector(timerisr, TIMER_1_VECTOR, 0); /* install ISR */
|
||||
|
||||
Ttimer_val = 0; /* clear timer ISR count */
|
||||
pcc->timer1_int_control = 0x00; /* Disable T1 Interr. */
|
||||
pcc->timer1_preload = COUNTDOWN_VALUE;
|
||||
/* write countdown preload value */
|
||||
pcc->timer1_control = 0x00; /* load preload value */
|
||||
pcc->timer1_control = 0x07; /* clear T1 overflow counter, enable counter */
|
||||
pcc->timer1_int_control = TIMER_INT_LEVEL|0x08;
|
||||
/* Enable Timer 1 and set its int. level */
|
||||
|
||||
}
|
||||
|
||||
#define AVG_OVERHEAD 0 /* No need to start/stop the timer to read
|
||||
its value on the MVME147 PCC: reads are not
|
||||
synchronized whith the counter updates*/
|
||||
#define LEAST_VALID 10 /* Don't trust a value lower than this */
|
||||
|
||||
int Read_timer()
|
||||
{
|
||||
rtems_unsigned32 total;
|
||||
rtems_unsigned16 counter_value;
|
||||
|
||||
counter_value = pcc->timer1_count; /* read the counter value */
|
||||
|
||||
total = ((Ttimer_val * 0x10000) + counter_value); /* in 6.25 us units */
|
||||
/* DC note : just look at the assembly generated
|
||||
to see gcc's impressive optimization ! */
|
||||
return total;
|
||||
|
||||
}
|
||||
|
||||
rtems_status_code Empty_function( void )
|
||||
{
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
void Set_find_average_overhead(
|
||||
rtems_boolean find_flag
|
||||
)
|
||||
{
|
||||
Timer_driver_Find_average_overhead = find_flag;
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
# timer_isr()
|
||||
#
|
||||
# This routine provides the ISR for the PCC timer on the MVME147
|
||||
# board. The timer is set up to generate an interrupt at maximum
|
||||
# intervals.
|
||||
#
|
||||
# MVME147 port for TNI - Telecom Bretagne
|
||||
# by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
# May 1996
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
#include "asm.h"
|
||||
|
||||
BEGIN_CODE
|
||||
|
||||
.set T1_CONTROL_REGISTER, 0xfffe1018 | timer 1 control register
|
||||
|
||||
PUBLIC (timerisr)
|
||||
SYM (timerisr):
|
||||
orb #0x80, T1_CONTROL_REGISTER | clear T1 int status bit
|
||||
addql #1, SYM (Ttimer_val) | increment timer value
|
||||
end_timerisr:
|
||||
rte
|
||||
|
||||
END_CODE
|
||||
END
|
||||
@@ -1,194 +0,0 @@
|
||||
#
|
||||
# Timing Test Suite Results for the Motorola MVME147 BSP
|
||||
#
|
||||
# MVME147 port for TNI - Telecom Bretagne
|
||||
# by Dominique LE CAMPION (Dominique.LECAMPION@enst-bretagne.fr)
|
||||
# May 1996
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
Board: Motorola MVME147S
|
||||
CPU: Motorola MC68030 + MC68882 FPU
|
||||
Clock Speed: 20 Mhz
|
||||
Memory Configuration: DRAM w/no cache
|
||||
Wait States: ? wait state
|
||||
|
||||
Times Reported in: microseconds (6.25 us grain)
|
||||
Timer Source: MVME147 Peripheral Channel Controller tick timer
|
||||
|
||||
Column A: 3.5.1 pre-release
|
||||
|
||||
# DESCRIPTION A
|
||||
== ================================================================= ====
|
||||
1 rtems_semaphore_create 69
|
||||
rtems_semaphore_delete 69
|
||||
rtems_semaphore_obtain: available 44
|
||||
rtems_semaphore_obtain: not available -- NO_WAIT 44
|
||||
rtems_semaphore_release: no waiting tasks 56
|
||||
|
||||
2 rtems_semaphore_obtain: not available -- caller blocks 125
|
||||
|
||||
3 rtems_semaphore_release: task readied -- preempts caller 106
|
||||
|
||||
4 rtems_task_restart: blocked task -- preempts caller 181
|
||||
rtems_task_restart: ready task -- preempts caller 169
|
||||
rtems_semaphore_release: task readied -- returns to caller 81
|
||||
rtems_task_create 169
|
||||
rtems_task_start 87
|
||||
rtems_task_restart: suspended task -- returns to caller 106
|
||||
rtems_task_delete: suspended task 169
|
||||
rtems_task_restart: ready task -- returns to caller 112
|
||||
rtems_task_restart: blocked task -- returns to caller 150
|
||||
rtems_task_delete: blocked task 175
|
||||
|
||||
5 rtems_task_suspend: calling task 87
|
||||
rtems_task_resume: task readied -- preempts caller 75
|
||||
|
||||
6 rtems_task_restart: calling task 112
|
||||
rtems_task_suspend: returns to caller 56
|
||||
rtems_task_resume: task readied -- returns to caller 50
|
||||
rtems_task_delete: ready task 169
|
||||
|
||||
7 rtems_task_restart: suspended task -- preempts caller 143
|
||||
|
||||
8 rtems_task_set_priority: obtain current priority 37
|
||||
rtems_task_set_priority: returns to caller 75
|
||||
rtems_task_mode: obtain current mode 6
|
||||
rtems_task_mode: no reschedule 6
|
||||
rtems_task_mode: reschedule -- returns to caller 19
|
||||
rtems_task_mode: reschedule -- preempts caller 75
|
||||
rtems_task_set_note 37
|
||||
rtems_task_get_note 37
|
||||
rtems_clock_set 87
|
||||
rtems_clock_get 0
|
||||
|
||||
9 rtems_message_queue_create 225
|
||||
rtems_message_queue_send: no waiting tasks 112
|
||||
rtems_message_queue_urgent: no waiting tasks 112
|
||||
rtems_message_queue_receive: available 87
|
||||
rtems_message_queue_flush: no messages flushed 37
|
||||
rtems_message_queue_flush: messages flushed 50
|
||||
rtems_message_queue_delete 106
|
||||
|
||||
10 rtems_message_queue_receive: not available -- NO_WAIT 44
|
||||
rtems_message_queue_receive: not available -- caller blocks 125
|
||||
|
||||
11 rtems_message_queue_send: task readied -- preempts caller 144
|
||||
|
||||
12 rtems_message_queue_send: task readied -- returns to caller 119
|
||||
|
||||
13 rtems_message_queue_urgent: task readied -- preempts caller 144
|
||||
|
||||
14 rtems_message_queue_urgent: task readied -- returns to caller 119
|
||||
|
||||
15 rtems_event_receive: obtain current events 0
|
||||
rtems_event_receive: not available -- NO_WAIT 25
|
||||
rtems_event_receive: not available -- caller blocks 100
|
||||
rtems_event_send: no task readied 31
|
||||
rtems_event_receive: available 37
|
||||
rtems_event_send: task readied -- returns to caller 69
|
||||
|
||||
16 rtems_event_send: task readied -- preempts caller 100
|
||||
|
||||
17 rtems_task_set_priority: preempts caller 125
|
||||
|
||||
18 rtems_task_delete: calling task 200
|
||||
|
||||
19 rtems_signal_catch 19
|
||||
rtems_signal_send: returns to caller 50
|
||||
rtems_signal_send: signal to self 56
|
||||
exit ASR overhead: returns to calling task 44
|
||||
exit ASR overhead: returns to preempting task 75
|
||||
|
||||
20 rtems_partition_create 81
|
||||
rtems_region_create 75
|
||||
rtems_partition_get_buffer: available 44
|
||||
rtems_partition_get_buffer: not available 44
|
||||
rtems_partition_return_buffer 56
|
||||
rtems_partition_delete 62
|
||||
rtems_region_get_segment: available 56
|
||||
rtems_region_get_segment: not available -- NO_WAIT 56
|
||||
rtems_region_return_segment: no waiting tasks 69
|
||||
rtems_region_get_segment: not available -- caller blocks 144
|
||||
rtems_region_return_segment: task readied -- preempts caller 169
|
||||
rtems_region_return_segment: task readied -- returns to caller 137
|
||||
rtems_region_delete 56
|
||||
rtems_io_initialize 0
|
||||
rtems_io_open 0
|
||||
rtems_io_close 0
|
||||
rtems_io_read 0
|
||||
rtems_io_write 0
|
||||
rtems_io_control 0
|
||||
|
||||
21 rtems_task_ident 375
|
||||
rtems_message_queue_ident 362
|
||||
rtems_semaphore_ident 394
|
||||
rtems_partition_ident 362
|
||||
rtems_region_ident 369
|
||||
rtems_port_ident 362
|
||||
rtems_timer_ident 369
|
||||
rtems_rate_monotonic_ident 362
|
||||
|
||||
22 rtems_message_queue_broadcast: task readied -- returns to caller 131
|
||||
rtems_message_queue_broadcast: no waiting tasks 62
|
||||
rtems_message_queue_broadcast: task readied -- preempts caller 156
|
||||
|
||||
23 rtems_timer_create 31
|
||||
rtems_timer_fire_after: inactive 69
|
||||
rtems_timer_fire_after: active 69
|
||||
rtems_timer_cancel: active 44
|
||||
rtems_timer_cancel: inactive 37
|
||||
rtems_timer_reset: inactive 69
|
||||
rtems_timer_reset: active 69
|
||||
rtems_timer_fire_when: inactive 87
|
||||
rtems_timer_fire_when: active 87
|
||||
rtems_timer_delete: active 56
|
||||
rtems_timer_delete: inactive 50
|
||||
rtems_task_wake_when 125
|
||||
|
||||
24 rtems_task_wake_after: yield -- returns to caller 19
|
||||
rtems_task_wake_after: yields -- preempts caller 69
|
||||
|
||||
25 rtems_clock_tick 19
|
||||
|
||||
26 _ISR_Disable 6
|
||||
_ISR_Flash 6
|
||||
_ISR_Enable 6
|
||||
_Thread_Disable_dispatch 6
|
||||
_Thread_Enable_dispatch 25
|
||||
_Thread_Set_state 31
|
||||
_Thread_Disptach (NO FP) 62
|
||||
context switch: no floating point contexts 50
|
||||
context switch: self 12
|
||||
context switch: to another task 12
|
||||
context switch: restore 1st FP task 56
|
||||
fp context switch: save idle, restore idle 87
|
||||
fp context switch: save idle, restore initialized 75
|
||||
fp context switch: save initialized, restore initialized 75
|
||||
_Thread_Resume 25
|
||||
_Thread_Unblock 25
|
||||
_Thread_Ready 31
|
||||
_Thread_Get 12
|
||||
_Semaphore_Get 6
|
||||
_Thread_Get: invalid id 0
|
||||
|
||||
27 interrupt entry overhead: returns to interrupted task 12
|
||||
interrupt exit overhead: returns to interrupted task 12
|
||||
interrupt entry overhead: returns to nested interrupt 19
|
||||
interrupt exit overhead: returns to nested interrupt 6
|
||||
interrupt entry overhead: returns to preempting task 12
|
||||
interrupt exit overhead: returns to preempting task 81
|
||||
|
||||
28 rtems_port_create 37
|
||||
rtems_port_external_to_internal 31
|
||||
rtems_port_internal_to_external 31
|
||||
rtems_port_delete 56
|
||||
|
||||
29 rtems_rate_monotonic_create 44
|
||||
rtems_rate_monotonic_period: initiate period -- returns to caller 62
|
||||
rtems_rate_monotonic_period: obtain status 37
|
||||
rtems_rate_monotonic_cancel 56
|
||||
rtems_rate_monotonic_delete: inactive 62
|
||||
rtems_rate_monotonic_delete: active 69
|
||||
rtems_rate_monotonic_period: conclude periods -- caller blocks 87
|
||||
@@ -34,8 +34,6 @@ Shm_Print_statistics(void)
|
||||
(void) rtems_clock_get( RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticks_per_second );
|
||||
|
||||
seconds = ticks / ticks_per_second;
|
||||
if ( seconds == 0 )
|
||||
seconds = 1;
|
||||
|
||||
packets_per_second = Shm_Receive_message_count / seconds;
|
||||
if ( (Shm_Receive_message_count % seconds) >= (seconds / 2) )
|
||||
|
||||
@@ -24,8 +24,6 @@
|
||||
#include <shm.h>
|
||||
|
||||
#include <string.h> /* memset() */
|
||||
#include <stdlib.h> /* malloc() */
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
* User extension to install MPCI_Fatal as a fatal error
|
||||
@@ -55,13 +53,6 @@ rtems_mpci_entry Shm_Initialization( void )
|
||||
|
||||
Shm_Get_configuration( Shm_Local_node, &Shm_Configuration );
|
||||
|
||||
Shm_Interrupt_table = (Shm_Interrupt_information *) malloc(
|
||||
sizeof(Shm_Interrupt_information) * (Shm_Maximum_nodes + 1)
|
||||
);
|
||||
|
||||
assert( Shm_Interrupt_table );
|
||||
|
||||
|
||||
Shm_Receive_message_count = 0;
|
||||
Shm_Null_message_count = 0;
|
||||
Shm_Interrupt_count = 0;
|
||||
|
||||
@@ -430,7 +430,7 @@ typedef struct shm_config_info shm_config_table;
|
||||
#endif
|
||||
|
||||
SHM_EXTERN shm_config_table *Shm_Configuration;
|
||||
SHM_EXTERN Shm_Interrupt_information *Shm_Interrupt_table;
|
||||
SHM_EXTERN Shm_Interrupt_information Shm_Interrupt_table[16];
|
||||
SHM_EXTERN Shm_Node_status_control *Shm_Node_statuses;
|
||||
SHM_EXTERN Shm_Locked_queue_Control *Shm_Locked_queues;
|
||||
SHM_EXTERN Shm_Envelope_control *Shm_Envelopes;
|
||||
|
||||
@@ -430,7 +430,7 @@ typedef struct shm_config_info shm_config_table;
|
||||
#endif
|
||||
|
||||
SHM_EXTERN shm_config_table *Shm_Configuration;
|
||||
SHM_EXTERN Shm_Interrupt_information *Shm_Interrupt_table;
|
||||
SHM_EXTERN Shm_Interrupt_information Shm_Interrupt_table[16];
|
||||
SHM_EXTERN Shm_Node_status_control *Shm_Node_statuses;
|
||||
SHM_EXTERN Shm_Locked_queue_Control *Shm_Locked_queues;
|
||||
SHM_EXTERN Shm_Envelope_control *Shm_Envelopes;
|
||||
|
||||
@@ -91,6 +91,7 @@ extern rtems_cpu_table Cpu_table; /* owned by BSP */
|
||||
|
||||
extern int rtems_argc;
|
||||
extern char **rtems_argv;
|
||||
extern char **rtems_envp;
|
||||
|
||||
extern rtems_unsigned32 bsp_isr_level;
|
||||
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/*
|
||||
* @(#)bspstart.c 1.7 - 95/04/07
|
||||
*
|
||||
*/
|
||||
|
||||
/* bsp_start()
|
||||
*
|
||||
* This routine starts the application. It includes application,
|
||||
@@ -50,6 +55,7 @@ rtems_unsigned32 bsp_isr_level;
|
||||
rtems_unsigned32 Heap_size;
|
||||
int rtems_argc;
|
||||
char **rtems_argv;
|
||||
char **rtems_envp;
|
||||
|
||||
/*
|
||||
* May be overridden by RTEMS_WORKSPACE_SIZE and RTEMS_HEAPSPACE_SIZE
|
||||
@@ -161,13 +167,6 @@ bsp_pretasking_hook(void)
|
||||
#ifdef RTEMS_DEBUG
|
||||
rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Dump malloc stats on exit...
|
||||
*/
|
||||
#if defined(RTEMS_DEBUG)
|
||||
atexit(malloc_dump);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -199,6 +198,11 @@ bsp_postdriver_hook(void)
|
||||
if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
|
||||
rtems_fatal_error_occurred( error_code | 'I' << 8 | 'O' );
|
||||
#endif
|
||||
|
||||
#if defined(MALLOC_STATS)
|
||||
atexit(malloc_dump);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
//
|
||||
// @(#)rtems-ctor.cc 1.6 - 95/04/25
|
||||
//
|
||||
|
||||
/*
|
||||
* rtems-ctor.cc
|
||||
*
|
||||
@@ -86,6 +90,7 @@ extern "C" {
|
||||
{
|
||||
rtems_argc = argc;
|
||||
rtems_argv = argv;
|
||||
rtems_envp = environp;
|
||||
|
||||
if ((argc > 0) && argv && argv[0])
|
||||
rtems_progname = argv[0];
|
||||
|
||||
@@ -31,7 +31,7 @@ set_vector( /* returns old vector */
|
||||
int type /* RTEMS or RAW intr */
|
||||
)
|
||||
{
|
||||
rtems_isr_entry rtems_isr_ptr = 0;
|
||||
rtems_isr_entry rtems_isr_ptr;
|
||||
proc_ptr raw_isr_ptr;
|
||||
|
||||
if ( type ) {
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)assoc.c 1.6 - 95/10/25
|
||||
*
|
||||
*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/*
|
||||
* @(#)assoc.h 1.4 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Rtems associativity routines. Mainly used to convert a value from
|
||||
* one space to another (eg: our errno's to host errno's and v.v)
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)error.c 1.6 - 95/12/12
|
||||
*
|
||||
*
|
||||
* report errors and panics to RTEMS' stderr.
|
||||
* Currently just used by RTEMS monitor.
|
||||
*
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
|
||||
/*
|
||||
* @(#)error.h 1.3 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Defines and externs for rtems error reporting
|
||||
*
|
||||
* $Id$
|
||||
@@ -20,12 +24,7 @@
|
||||
|
||||
const char *rtems_status_text(rtems_status_code);
|
||||
int rtems_error(int error_code, const char *printf_format, ...);
|
||||
#ifdef __GNUC__
|
||||
void rtems_panic(const char *printf_format, ...)
|
||||
__attribute__ ((__noreturn__));
|
||||
#else
|
||||
void rtems_panic(const char *printf_format, ...);
|
||||
#endif
|
||||
|
||||
extern int rtems_panic_in_progress;
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)libio.c 1.1 - 95/06/02
|
||||
*
|
||||
*
|
||||
* Provide UNIX/POSIX-like io system calls for RTEMS using the
|
||||
* RTEMS IO manager
|
||||
*
|
||||
@@ -15,7 +18,7 @@
|
||||
|
||||
#if defined(solaris2)
|
||||
#define O_NDELAY O_NONBLOCK
|
||||
#elif defined(RTEMS_NEWLIB)
|
||||
#elif defined(RTEMS_NEWLIB)
|
||||
#define O_NDELAY _FNBIO
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)libio.h 1.1 - 95/06/02
|
||||
*
|
||||
*
|
||||
* General purpose communication channel for RTEMS to allow UNIX/POSIX
|
||||
* system call behavior on top of RTEMS IO devices.
|
||||
*
|
||||
|
||||
@@ -25,14 +25,12 @@
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h> /* sbrk(2) */
|
||||
|
||||
rtems_id RTEMS_Malloc_Heap;
|
||||
size_t RTEMS_Malloc_Sbrk_amount;
|
||||
|
||||
#ifdef RTEMS_DEBUG
|
||||
#define MALLOC_STATS
|
||||
#define MALLOC_DIRTY
|
||||
#endif
|
||||
|
||||
#ifdef MALLOC_STATS
|
||||
@@ -204,11 +202,7 @@ void *malloc(
|
||||
malloc_stats.max_depth = current_depth;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MALLOC_DIRTY
|
||||
(void) memset(return_this, 0xCF, size);
|
||||
#endif
|
||||
|
||||
|
||||
return return_this;
|
||||
}
|
||||
|
||||
@@ -227,8 +221,6 @@ void *calloc(
|
||||
if ( cptr )
|
||||
memset( cptr, '\0', length );
|
||||
|
||||
MSBUMP(malloc_calls, -1); /* subtract off the malloc */
|
||||
|
||||
return cptr;
|
||||
}
|
||||
|
||||
@@ -252,9 +244,6 @@ void *realloc(
|
||||
}
|
||||
|
||||
new_area = malloc( size );
|
||||
|
||||
MSBUMP(malloc_calls, -1); /* subtract off the malloc */
|
||||
|
||||
if ( !new_area ) {
|
||||
free( ptr );
|
||||
return (void *) 0;
|
||||
|
||||
@@ -1,6 +1,17 @@
|
||||
/*
|
||||
* @(#)newlibc.c 1.9 - 95/05/16
|
||||
*
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_NEWLIB)
|
||||
|
||||
/*
|
||||
* File: newlibc.c,v
|
||||
* Project: PixelFlow
|
||||
* Created: 94/12/7
|
||||
* Revision: 1.2
|
||||
* Last Mod: 1995/05/09 20:24:37
|
||||
*
|
||||
* COPYRIGHT (c) 1994 by Division Incorporated
|
||||
*
|
||||
* To anyone who acknowledges that this file is provided "AS IS"
|
||||
@@ -36,25 +47,8 @@
|
||||
|
||||
#include <sys/reent.h> /* for extern of _REENT (aka _impure_ptr) */
|
||||
|
||||
/*
|
||||
* NOTE: When using RTEMS fake stat, fstat, and isatty, all output
|
||||
* is line buffered so this setvbuf is not necessary. This
|
||||
* setvbuf insures that we can redirect the output of a test
|
||||
* on the UNIX simulator and it is in the same order as for a
|
||||
* real target.
|
||||
* NOTE:
|
||||
* There is some problem with doing this on the hpux version
|
||||
* of the UNIX simulator (symptom is printf core dumps), so
|
||||
* we just don't for now.
|
||||
* Not sure if this is a problem with hpux, newlib, or something else.
|
||||
*/
|
||||
|
||||
#if defined(RTEMS_UNIX) && !defined(hpux)
|
||||
#define NEED_SETVBUF
|
||||
#endif
|
||||
|
||||
#ifdef NEED_SETVBUF
|
||||
#include <stdio.h>
|
||||
#ifdef RTEMS_UNIX
|
||||
#include <stdio.h> /* for setvbuf() */
|
||||
#endif
|
||||
|
||||
#include "internal.h"
|
||||
@@ -131,7 +125,7 @@ libc_start_hook(rtems_tcb *current_task,
|
||||
* real target.
|
||||
*/
|
||||
|
||||
#ifdef NEED_SETVBUF
|
||||
#ifdef RTEMS_UNIX
|
||||
rtems_extension
|
||||
libc_begin_hook(rtems_tcb *current_task)
|
||||
{
|
||||
@@ -202,19 +196,18 @@ libc_delete_hook(rtems_tcb *current_task,
|
||||
|
||||
if (current_task == deleted_task)
|
||||
{
|
||||
ptr = _REENT;
|
||||
ptr = _REENT;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr = (struct _reent *) MY_task_get_note(deleted_task, LIBC_NOTEPAD);
|
||||
ptr = (struct _reent *) MY_task_get_note(deleted_task, LIBC_NOTEPAD);
|
||||
}
|
||||
|
||||
/* if (ptr) */
|
||||
if (ptr && ptr != &libc_global_reent)
|
||||
{
|
||||
_wrapup_reent(ptr);
|
||||
_reclaim_reent(ptr);
|
||||
free(ptr);
|
||||
_wrapup_reent(ptr);
|
||||
_reclaim_reent(ptr);
|
||||
}
|
||||
|
||||
MY_task_set_note(deleted_task, LIBC_NOTEPAD, 0);
|
||||
@@ -225,7 +218,7 @@ libc_delete_hook(rtems_tcb *current_task,
|
||||
|
||||
if (current_task == deleted_task)
|
||||
{
|
||||
_REENT = 0;
|
||||
_REENT = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -274,7 +267,7 @@ libc_init(int reentrant)
|
||||
|
||||
libc_extension.thread_create = libc_create_hook;
|
||||
libc_extension.thread_start = libc_start_hook;
|
||||
#ifdef NEED_SETVBUF
|
||||
#ifdef RTEMS_UNIX
|
||||
libc_extension.thread_begin = libc_begin_hook;
|
||||
#endif
|
||||
libc_extension.thread_switch = libc_switch_hook;
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)assoc.c 1.6 - 95/10/25
|
||||
*
|
||||
*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/*
|
||||
* @(#)assoc.h 1.4 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Rtems associativity routines. Mainly used to convert a value from
|
||||
* one space to another (eg: our errno's to host errno's and v.v)
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)error.c 1.6 - 95/12/12
|
||||
*
|
||||
*
|
||||
* report errors and panics to RTEMS' stderr.
|
||||
* Currently just used by RTEMS monitor.
|
||||
*
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
|
||||
/*
|
||||
* @(#)error.h 1.3 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Defines and externs for rtems error reporting
|
||||
*
|
||||
* $Id$
|
||||
@@ -20,12 +24,7 @@
|
||||
|
||||
const char *rtems_status_text(rtems_status_code);
|
||||
int rtems_error(int error_code, const char *printf_format, ...);
|
||||
#ifdef __GNUC__
|
||||
void rtems_panic(const char *printf_format, ...)
|
||||
__attribute__ ((__noreturn__));
|
||||
#else
|
||||
void rtems_panic(const char *printf_format, ...);
|
||||
#endif
|
||||
|
||||
extern int rtems_panic_in_progress;
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)command.c 1.5 - 95/08/02
|
||||
*
|
||||
*
|
||||
* Command parsing routines for RTEMS monitor
|
||||
*
|
||||
* TODO:
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)config.c 1.5 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS Config display support
|
||||
*
|
||||
* TODO
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)dname.c 1.5 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS monitor driver names support.
|
||||
*
|
||||
* There are 2 "driver" things the monitor knows about.
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)driver.c 1.4 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS monitor IO (device drivers) support
|
||||
*
|
||||
* There are 2 "driver" things the monitor knows about.
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)extension.c 1.6 - 95/09/25
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor extension support
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
/*
|
||||
* RTEMS Monitor init task support
|
||||
* @(#)itask.c 1.6 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor init task support
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
/*
|
||||
* RTEMS Monitor "manager" support.
|
||||
* Used to traverse object (chain) lists and print them out.
|
||||
* @(#)manager.c 1.4 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor "manager" support.
|
||||
* Used to traverse object (chain) lists and print them out.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
/*
|
||||
* @(#)monitor.c 1.23 - 96/01/03
|
||||
*
|
||||
*
|
||||
*
|
||||
* RTEMS monitor main body
|
||||
*
|
||||
* TODO:
|
||||
@@ -14,7 +18,7 @@
|
||||
* should have a separate monitor FILE stream (ala the debugger)
|
||||
* remote request/response stuff should be cleaned up
|
||||
* maybe we can use real rpc??
|
||||
* 'info' command to print out:
|
||||
* 'info' commadn to print out:
|
||||
* interrupt stack location, direction and size
|
||||
* floating point config stuff
|
||||
* interrupt config stuff
|
||||
@@ -258,18 +262,6 @@ rtems_monitor_wakeup(void)
|
||||
status = rtems_event_send(rtems_monitor_task_id, MONITOR_WAKEUP_EVENT);
|
||||
}
|
||||
|
||||
void
|
||||
rtems_monitor_debugger_cmd(
|
||||
int argc,
|
||||
char **argv,
|
||||
unsigned32 command_arg,
|
||||
boolean verbose
|
||||
)
|
||||
{
|
||||
#ifdef CPU_INVOKE_DEBUGGER
|
||||
CPU_INVOKE_DEBUGGER;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
rtems_monitor_pause_cmd(
|
||||
@@ -310,6 +302,19 @@ rtems_monitor_continue_cmd(
|
||||
rtems_monitor_suspend(RTEMS_NO_TIMEOUT);
|
||||
}
|
||||
|
||||
void
|
||||
rtems_monitor_debugger_cmd(
|
||||
int argc,
|
||||
char **argv,
|
||||
unsigned32 command_arg,
|
||||
boolean verbose
|
||||
)
|
||||
{
|
||||
#ifdef CPU_INVOKE_DEBUGGER
|
||||
CPU_INVOKE_DEBUGGER;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
rtems_monitor_node_cmd(
|
||||
int argc,
|
||||
@@ -335,10 +340,8 @@ rtems_monitor_node_cmd(
|
||||
break;
|
||||
}
|
||||
|
||||
if ((new_node >= 1) &&
|
||||
_Configuration_MP_table &&
|
||||
(new_node <= _Configuration_MP_table->maximum_nodes))
|
||||
rtems_monitor_default_node = new_node;
|
||||
if ((new_node >= 1) && (new_node <= _Configuration_MP_table->maximum_nodes))
|
||||
rtems_monitor_default_node = new_node;
|
||||
}
|
||||
|
||||
|
||||
@@ -380,7 +383,11 @@ rtems_monitor_symbols_loadup(void)
|
||||
if (rtems_monitor_symbols == 0)
|
||||
return;
|
||||
|
||||
#ifdef SIMHPPA
|
||||
fp = fdopen(8, "r"); /* don't ask; don't tell */
|
||||
#else
|
||||
fp = fopen("symbols", "r");
|
||||
#endif
|
||||
|
||||
if (fp == 0)
|
||||
return;
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)mpci.c 1.6 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS MPCI Config display support
|
||||
*
|
||||
* TODO
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)object.c 1.9 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor "object" support.
|
||||
*
|
||||
* Used to traverse object lists and print them out.
|
||||
@@ -338,7 +341,7 @@ rtems_monitor_object_cmd(
|
||||
|
||||
for (arg=1; argv[arg]; arg++)
|
||||
{
|
||||
id = (rtems_id) strtoul(argv[arg], 0, 16);
|
||||
id = (rtems_id) strtoul(argv[arg], 0, 0);
|
||||
id = rtems_monitor_id_fixup(id, default_node, type);
|
||||
type = (rtems_monitor_object_type_t) rtems_get_class(id);
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)prmisc.c 1.9 - 95/08/02
|
||||
*
|
||||
*
|
||||
* Print misc stuff for the monitor dump routines
|
||||
* Each routine returns the number of characters it output.
|
||||
*
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/*
|
||||
* @(#)queue.c 1.5 - 95/07/31
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
/*
|
||||
* RTEMS monitor server (handles requests for info from RTEMS monitors
|
||||
* @(#)server.c 1.5 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS monitor server (handles requests for info from RTEMS monitors
|
||||
* running on other nodes)
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
/*
|
||||
* @(#)symbols.c 1.10 - 95/08/02
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* #define qsort _quicksort */
|
||||
|
||||
/*
|
||||
* File: symbols.c
|
||||
*
|
||||
@@ -7,8 +15,6 @@
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
@@ -44,6 +50,11 @@ rtems_symbol_table_destroy(rtems_symbol_table_t *table)
|
||||
if (table->addresses)
|
||||
(void) free(table->addresses);
|
||||
table->addresses = 0;
|
||||
|
||||
if (table->symbols)
|
||||
(void) free(table->symbols);
|
||||
table->symbols = 0;
|
||||
|
||||
p = table->string_buffer_head;
|
||||
while (p)
|
||||
{
|
||||
@@ -82,6 +93,11 @@ rtems_symbol_create(
|
||||
table->addresses = (rtems_symbol_t *) realloc((void *) table->addresses, newsize * sizeof(rtems_symbol_t));
|
||||
if (table->addresses == 0) /* blew it; lost orig */
|
||||
goto failed;
|
||||
|
||||
table->symbols = (rtems_symbol_t *) realloc((void *) table->symbols, newsize * sizeof(rtems_symbol_t));
|
||||
if (table->symbols == 0) /* blew it; lost orig */
|
||||
goto failed;
|
||||
|
||||
table->size = newsize;
|
||||
}
|
||||
|
||||
@@ -113,6 +129,9 @@ rtems_symbol_create(
|
||||
(void) strcpy(sp->name, name);
|
||||
|
||||
table->strings_next += symbol_length;
|
||||
|
||||
table->symbols[table->next] = *sp;
|
||||
|
||||
table->sorted = 0;
|
||||
table->next++;
|
||||
|
||||
@@ -128,7 +147,7 @@ failed:
|
||||
* Qsort entry point for compare by address
|
||||
*/
|
||||
|
||||
static int
|
||||
int
|
||||
rtems_symbol_compare(const void *e1,
|
||||
const void *e2)
|
||||
{
|
||||
@@ -143,20 +162,48 @@ rtems_symbol_compare(const void *e1,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Qsort entry point for compare by string name (case independent)
|
||||
*/
|
||||
|
||||
int
|
||||
rtems_symbol_string_compare(const void *e1,
|
||||
const void *e2)
|
||||
{
|
||||
rtems_symbol_t *s1, *s2;
|
||||
s1 = (rtems_symbol_t *) e1;
|
||||
s2 = (rtems_symbol_t *) e2;
|
||||
|
||||
return strcasecmp(s1->name, s2->name);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sort the symbol table using qsort
|
||||
*/
|
||||
|
||||
static void
|
||||
void
|
||||
rtems_symbol_sort(rtems_symbol_table_t *table)
|
||||
{
|
||||
#ifdef RTEMS_ON_SIMULATOR
|
||||
printf("Sorting symbols ... "); /* so slow we need a msg */
|
||||
fflush(stdout);
|
||||
#endif
|
||||
|
||||
qsort((void *) table->addresses, (size_t) table->next,
|
||||
sizeof(rtems_symbol_t), rtems_symbol_compare);
|
||||
|
||||
qsort((void *) table->symbols, (size_t) table->next,
|
||||
sizeof(rtems_symbol_t), rtems_symbol_string_compare);
|
||||
|
||||
#ifdef RTEMS_ON_SIMULATOR
|
||||
/* so slow we need a msg */
|
||||
printf("done\n");
|
||||
#endif
|
||||
|
||||
table->sorted = 1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Search the symbol table by address
|
||||
* This code based on CYGNUS newlib bsearch, but changed
|
||||
@@ -214,53 +261,6 @@ rtems_symbol_value_lookup(
|
||||
return best;
|
||||
}
|
||||
|
||||
/*
|
||||
* Search the symbol table for the exact matching address.
|
||||
* If the symbol table has already been sorted, then
|
||||
* call the regular symbol value lookup, however, it it
|
||||
* has not yet been sorted, search it sequentially.
|
||||
* This routine is primarily used for low level symbol
|
||||
* lookups (eg. from exception handler and interrupt routines)
|
||||
* where the penality of sorted is not wanted and where
|
||||
* an exact match is needed such that symbol table order
|
||||
* is not important.
|
||||
*/
|
||||
const rtems_symbol_t *
|
||||
rtems_symbol_value_lookup_exact(
|
||||
rtems_symbol_table_t *table,
|
||||
rtems_unsigned32 value
|
||||
)
|
||||
{
|
||||
int s;
|
||||
rtems_symbol_t *sp;
|
||||
|
||||
if (table == 0)
|
||||
{
|
||||
table = rtems_monitor_symbols;
|
||||
if (table == 0)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (table->sorted)
|
||||
{
|
||||
sp = rtems_symbol_value_lookup(table, value);
|
||||
if ( rtems_symbol_value(sp) == value )
|
||||
return sp;
|
||||
else
|
||||
return NULL; /* not an exact match */
|
||||
}
|
||||
|
||||
for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
|
||||
{
|
||||
if ( sp->value == value )
|
||||
return sp;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Search the symbol table by string name (case independent)
|
||||
*/
|
||||
@@ -271,23 +271,33 @@ rtems_symbol_name_lookup(
|
||||
char *name
|
||||
)
|
||||
{
|
||||
int s;
|
||||
rtems_symbol_t *sp;
|
||||
rtems_symbol_t *sp = 0;
|
||||
rtems_symbol_t key;
|
||||
|
||||
if (table == 0)
|
||||
{
|
||||
table = rtems_monitor_symbols;
|
||||
if (table == 0)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
|
||||
{
|
||||
if ( strcasecmp(sp->name, name) == 0 )
|
||||
return sp;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
if ((table == 0) || (name == 0))
|
||||
goto done;
|
||||
|
||||
if (table->sorted == 0)
|
||||
rtems_symbol_sort(table);
|
||||
|
||||
/*
|
||||
* dummy up one for bsearch()
|
||||
*/
|
||||
|
||||
key.name = name;
|
||||
key.value = 0;
|
||||
|
||||
sp = (rtems_symbol_t *) bsearch((const void *) &key,
|
||||
(const void *) table->symbols,
|
||||
(size_t) table->next,
|
||||
sizeof(rtems_symbol_t),
|
||||
rtems_symbol_string_compare);
|
||||
|
||||
done:
|
||||
return sp;
|
||||
}
|
||||
|
||||
void *
|
||||
@@ -315,7 +325,7 @@ rtems_monitor_symbol_next(
|
||||
_Thread_Disable_dispatch();
|
||||
|
||||
*next_id += 1;
|
||||
return (void *) (table->addresses + n);
|
||||
return (void *) (table->symbols + n);
|
||||
|
||||
failed:
|
||||
*next_id = RTEMS_OBJECT_ID_FINAL;
|
||||
@@ -428,7 +438,7 @@ rtems_monitor_symbol_dump_all(
|
||||
if (table->sorted == 0)
|
||||
rtems_symbol_sort(table);
|
||||
|
||||
for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
|
||||
for (s = 0, sp = table->symbols; s < table->next; s++, sp++)
|
||||
{
|
||||
rtems_monitor_symbol_t canonical_symbol;
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)task.c 1.9 - 95/08/01
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor task support
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* @(#)monitor.h 1.21 - 96/01/03
|
||||
*
|
||||
*
|
||||
* monitor.h,v 1.3 1995/09/29 17:19:02 joel Exp
|
||||
*/
|
||||
|
||||
/*
|
||||
* File: monitor.h
|
||||
*
|
||||
@@ -5,8 +12,6 @@
|
||||
* The RTEMS monitor task include file.
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __MONITOR_H
|
||||
@@ -20,7 +25,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Monitor types are derived from rtems object classes
|
||||
* XXX this should be in rtems proper when type becomes part of id
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
@@ -301,7 +306,7 @@ typedef void (*rtems_monitor_object_dump_header_fn)(boolean);
|
||||
typedef void (*rtems_monitor_object_dump_fn)(void *, boolean);
|
||||
|
||||
typedef struct {
|
||||
rtems_monitor_object_type_t type;
|
||||
rtems_monitor_object_type_t type;
|
||||
void *object_information;
|
||||
int size; /* of canonical object */
|
||||
rtems_monitor_object_next_fn next;
|
||||
@@ -414,7 +419,6 @@ void rtems_symbol_table_destroy(rtems_symbol_table_t *table);
|
||||
|
||||
rtems_symbol_t *rtems_symbol_create(rtems_symbol_table_t *, char *, unsigned32);
|
||||
rtems_symbol_t *rtems_symbol_value_lookup(rtems_symbol_table_t *, unsigned32);
|
||||
const rtems_symbol_t *rtems_symbol_value_lookup_exact(rtems_symbol_table_t *, unsigned32);
|
||||
rtems_symbol_t *rtems_symbol_name_lookup(rtems_symbol_table_t *, char *);
|
||||
void *rtems_monitor_symbol_next(void *object_info, rtems_monitor_symbol_t *, rtems_id *);
|
||||
void rtems_monitor_symbol_canonical(rtems_monitor_symbol_t *, rtems_symbol_t *);
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)symbols.h 1.3 - 95/06/09
|
||||
*
|
||||
*
|
||||
* RTEMS monitor symbol table functions
|
||||
*
|
||||
* Description:
|
||||
@@ -44,6 +47,14 @@ typedef struct {
|
||||
|
||||
rtems_symbol_t *addresses; /* symbol array by address */
|
||||
|
||||
/*
|
||||
* String list -- sorted by name (when we do a lookup)
|
||||
* This is a duplicate of the info in table->addresses, but it's
|
||||
* pretty small, so I don't worry about it.
|
||||
*/
|
||||
|
||||
rtems_symbol_t *symbols; /* symbol array */
|
||||
|
||||
/*
|
||||
* String pool, unsorted, a list of blocks of string data
|
||||
*/
|
||||
|
||||
@@ -20,19 +20,6 @@
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
/*
|
||||
* HACK
|
||||
* the stack dump information should be printed by a "fatal" extension.
|
||||
* Fatal extensions only get called via rtems_fatal_error_occurred()
|
||||
* and not when rtems_shutdown_executive() is called.
|
||||
* I hope/think this is changing so that fatal extensions are renamed
|
||||
* to "shutdown" extensions.
|
||||
* When that happens, this #define should be deleted and all the code
|
||||
* it marks.
|
||||
*/
|
||||
#define DONT_USE_FATAL_EXTENSION
|
||||
|
||||
|
||||
extern rtems_configuration_table BSP_Configuration;
|
||||
|
||||
#include <assert.h>
|
||||
@@ -62,11 +49,7 @@ rtems_extensions_table Stack_check_Extension_table = {
|
||||
Stack_check_Switch_extension, /* task_switch */
|
||||
Stack_check_Begin_extension, /* task_begin */
|
||||
0, /* task_exitted */
|
||||
#ifdef DONT_USE_FATAL_EXTENSION
|
||||
0, /* fatal */
|
||||
#else
|
||||
Stack_check_Fatal_extension, /* fatal */
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -184,6 +167,10 @@ void Stack_check_Initialize( void )
|
||||
|
||||
Stack_check_Blown_task = 0;
|
||||
|
||||
#ifdef STACK_CHECKER_REPORT_USAGE
|
||||
atexit( Stack_check_Dump_usage );
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If installed by a task, that task will not get setup properly
|
||||
* since it missed out on the create hook. This will cause a
|
||||
@@ -230,17 +217,6 @@ void Stack_check_Initialize( void )
|
||||
stack_check_dope_stack(&stack_check_interrupt_stack);
|
||||
}
|
||||
|
||||
#ifdef DONT_USE_FATAL_EXTENSION
|
||||
#ifdef RTEMS_DEBUG
|
||||
/*
|
||||
* this would normally be called by a fatal extension
|
||||
* handler, but we don't run fatal extensions unless
|
||||
* we fatal error.
|
||||
*/
|
||||
atexit(Stack_check_Dump_usage);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
stack_check_initialized = 1;
|
||||
}
|
||||
|
||||
@@ -455,16 +431,14 @@ void Stack_check_Dump_threads_usage(
|
||||
* Stack_check_Fatal_extension
|
||||
*/
|
||||
|
||||
void Stack_check_Fatal_extension(
|
||||
void Stack_check_Fatal_extension(
|
||||
Internal_errors_Source source,
|
||||
boolean is_internal,
|
||||
unsigned32 status
|
||||
)
|
||||
{
|
||||
#ifndef DONT_USE_FATAL_EXTENSION
|
||||
if (status == 0)
|
||||
Stack_check_Dump_usage();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
/*
|
||||
* @(#)assoc.c 1.6 - 95/10/25
|
||||
*
|
||||
*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
/*
|
||||
* @(#)assoc.h 1.4 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Rtems associativity routines. Mainly used to convert a value from
|
||||
* one space to another (eg: our errno's to host errno's and v.v)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user