mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-27 23:10:16 +00:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
03ea6a8ea4 | ||
|
|
a4126225c3 | ||
|
|
11532ca435 | ||
|
|
1543932387 | ||
|
|
d2d6467d13 | ||
|
|
8389628c1b | ||
|
|
5a36154a60 | ||
|
|
1f94ed6bfd | ||
|
|
34f3d17b24 | ||
|
|
f5674938bb | ||
|
|
8faca06664 | ||
|
|
6365f81898 | ||
|
|
a155b3c52d | ||
|
|
cc4c1fe424 | ||
|
|
96981e3ae6 | ||
|
|
9a1ccb3595 | ||
|
|
f581163abd | ||
|
|
d0b7c4e61e | ||
|
|
767a6c614c | ||
|
|
debe9195ce | ||
|
|
78b2ff196b | ||
|
|
c26b62f992 | ||
|
|
8f9e9bdc07 | ||
|
|
3b76313da9 | ||
|
|
f4d52cd74c |
@@ -54,6 +54,16 @@ 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,7 +85,9 @@ 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,24 +17,5 @@
|
||||
#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,24 +17,5 @@
|
||||
#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,6 +16,7 @@
|
||||
#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>
|
||||
@@ -35,6 +36,11 @@ rtems_status_code rtems_port_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -43,6 +49,11 @@ rtems_status_code rtems_port_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -50,6 +61,11 @@ rtems_status_code rtems_port_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -59,6 +75,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -68,5 +89,10 @@ 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,12 +20,22 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
@@ -36,6 +46,11 @@ 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,6 +26,7 @@
|
||||
#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 )
|
||||
{
|
||||
@@ -33,6 +34,11 @@ 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(
|
||||
@@ -60,6 +66,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -67,6 +78,11 @@ 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 (
|
||||
@@ -74,6 +90,11 @@ 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 (
|
||||
@@ -82,6 +103,11 @@ unsigned32 _MPCI_Send_request_packet (
|
||||
States_Control extra_state
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -90,10 +116,20 @@ 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;
|
||||
}
|
||||
|
||||
@@ -101,6 +137,11 @@ Thread_Control *_MPCI_Process_response (
|
||||
MP_packet_Prefix *the_packet
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -108,10 +149,20 @@ 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
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -119,16 +170,31 @@ 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,6 +24,7 @@
|
||||
#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
|
||||
@@ -39,6 +40,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -48,6 +54,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -55,6 +66,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -64,6 +80,11 @@ rtems_status_code rtems_message_queue_send(
|
||||
unsigned32 size
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -73,6 +94,11 @@ rtems_status_code rtems_message_queue_urgent(
|
||||
unsigned32 size
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -83,6 +109,11 @@ rtems_status_code rtems_message_queue_broadcast(
|
||||
unsigned32 *count
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -94,6 +125,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -102,6 +138,11 @@ rtems_status_code rtems_message_queue_flush(
|
||||
unsigned32 *count
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -109,6 +150,12 @@ 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;
|
||||
}
|
||||
|
||||
@@ -119,6 +166,12 @@ 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;
|
||||
}
|
||||
@@ -130,5 +183,10 @@ 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,6 +19,7 @@
|
||||
#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
|
||||
@@ -35,6 +36,11 @@ rtems_status_code rtems_partition_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -44,6 +50,11 @@ rtems_status_code rtems_partition_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -51,6 +62,11 @@ rtems_status_code rtems_partition_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -59,6 +75,11 @@ rtems_status_code rtems_partition_get_buffer(
|
||||
void **buffer
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -67,5 +88,10 @@ 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,6 +20,7 @@
|
||||
#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
|
||||
@@ -36,6 +37,11 @@ rtems_status_code rtems_region_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -44,6 +50,11 @@ rtems_status_code rtems_region_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -51,6 +62,11 @@ rtems_status_code rtems_region_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -62,6 +78,11 @@ rtems_status_code rtems_region_get_segment(
|
||||
void **segment
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -71,6 +92,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -79,5 +105,10 @@ 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,6 +18,7 @@
|
||||
#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>
|
||||
@@ -33,6 +34,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -41,6 +47,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -48,6 +59,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -55,6 +71,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -63,6 +84,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -71,11 +97,21 @@ 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
|
||||
)
|
||||
{
|
||||
return( FALSE );
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#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
|
||||
@@ -38,6 +39,11 @@ rtems_status_code rtems_semaphore_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -47,6 +53,11 @@ rtems_status_code rtems_semaphore_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -54,6 +65,11 @@ rtems_status_code rtems_semaphore_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -63,6 +79,11 @@ rtems_status_code rtems_semaphore_obtain(
|
||||
rtems_interval timeout
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -70,6 +91,11 @@ rtems_status_code rtems_semaphore_release(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -78,6 +104,11 @@ 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,6 +17,7 @@
|
||||
#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>
|
||||
@@ -31,6 +32,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -39,6 +45,11 @@ 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,6 +19,7 @@
|
||||
#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>
|
||||
@@ -34,6 +35,11 @@ rtems_status_code rtems_timer_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -42,6 +48,11 @@ rtems_status_code rtems_timer_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -49,6 +60,11 @@ rtems_status_code rtems_timer_cancel(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -56,6 +72,11 @@ rtems_status_code rtems_timer_delete(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -66,6 +87,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -76,6 +102,11 @@ 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;
|
||||
}
|
||||
|
||||
@@ -83,5 +114,10 @@ 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,6 +22,26 @@
|
||||
#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,6 +170,8 @@ 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
|
||||
@@ -189,6 +191,13 @@ 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.1 (" CPU_NAME "/" CPU_MODEL_NAME ")";
|
||||
"RTEMS RELEASE V3.5.14 snapshot (" CPU_NAME "/" CPU_MODEL_NAME ")";
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#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
|
||||
@@ -32,6 +33,11 @@ rtems_status_code rtems_extension_create(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -40,6 +46,11 @@ rtems_status_code rtems_extension_ident(
|
||||
Objects_Id *id
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -47,5 +58,10 @@ 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,6 +19,7 @@
|
||||
#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,
|
||||
@@ -36,16 +37,26 @@ 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;
|
||||
}
|
||||
|
||||
@@ -55,6 +66,11 @@ rtems_status_code rtems_io_initialize(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -64,6 +80,11 @@ rtems_status_code rtems_io_open(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -73,6 +94,11 @@ rtems_status_code rtems_io_close(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -82,6 +108,11 @@ rtems_status_code rtems_io_read(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -91,6 +122,11 @@ rtems_status_code rtems_io_write(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -100,5 +136,10 @@ rtems_status_code rtems_io_control(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
_Internal_error_Occurred(
|
||||
INTERNAL_ERROR_RTEMS_API,
|
||||
FALSE,
|
||||
RTEMS_NOT_CONFIGURED
|
||||
);
|
||||
return RTEMS_NOT_CONFIGURED;
|
||||
}
|
||||
|
||||
@@ -104,6 +104,9 @@ 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,6 +146,10 @@ 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,6 +139,10 @@ 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;
|
||||
|
||||
@@ -333,7 +337,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 */
|
||||
#ifndef m68000
|
||||
#if ( M68K_HAS_EXTB_L == 1 )
|
||||
#define _CPU_Bitfield_Find_first_bit( _value, _output ) \
|
||||
{ \
|
||||
extern const unsigned char __BFFFOtable[256]; \
|
||||
@@ -371,7 +375,7 @@ unsigned32 _CPU_ISR_Get_level( void );
|
||||
: "d" ((_value)), "ao" ((__BFFFOtable)) \
|
||||
: "cc" ) ; \
|
||||
}
|
||||
#endif /* m68000 */
|
||||
#endif /* M68K_HAS_EXTB_L */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
893
c/src/exec/score/cpu/m68k/m68360.h
Normal file
893
c/src/exec/score/cpu/m68k/m68360.h
Normal file
@@ -0,0 +1,893 @@
|
||||
/*
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
** **
|
||||
** MOTOROLA MC68360 QUAD INTEGRATED COMMUNICATIONS CONTROLLER (QUICC) **
|
||||
** **
|
||||
** HARDWARE DECLARATIONS **
|
||||
** **
|
||||
**************************************************************************
|
||||
**************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __MC68360_h
|
||||
#define __MC68360_h
|
||||
|
||||
/*
|
||||
* $Revision$ $Date$ $Author$
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* W. Eric Norum
|
||||
* Saskatchewan Accelerator Laboratory
|
||||
* University of Saskatchewan
|
||||
* 107 North Road
|
||||
* Saskatoon, Saskatchewan, CANADA
|
||||
* S7N 5C6
|
||||
*
|
||||
* eric@skatter.usask.ca
|
||||
*/
|
||||
|
||||
/*
|
||||
*************************************************************************
|
||||
* 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 */
|
||||
@@ -76,8 +76,17 @@ 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"
|
||||
@@ -86,6 +95,7 @@ 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)
|
||||
|
||||
@@ -95,6 +105,7 @@ 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)
|
||||
|
||||
@@ -104,6 +115,7 @@ 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)
|
||||
|
||||
@@ -113,6 +125,7 @@ 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)
|
||||
|
||||
@@ -122,6 +135,7 @@ 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)
|
||||
|
||||
@@ -131,6 +145,7 @@ 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)
|
||||
|
||||
@@ -140,6 +155,7 @@ 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 */
|
||||
@@ -149,6 +165,7 @@ 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)
|
||||
|
||||
@@ -158,6 +175,7 @@ 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(m68360)
|
||||
|
||||
@@ -167,6 +185,7 @@ extern "C" {
|
||||
#define M68K_HAS_FPU 0
|
||||
#define M68K_HAS_BFFFO 0
|
||||
#define M68K_HAS_PREINDEXING 1
|
||||
#define M68K_HAS_EXTB_L 1
|
||||
|
||||
#else
|
||||
|
||||
|
||||
@@ -328,12 +328,6 @@ 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 {
|
||||
@@ -344,6 +338,10 @@ 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,12 +492,6 @@ 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 {
|
||||
@@ -508,6 +502,10 @@ 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;
|
||||
|
||||
/*
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <sys/sem.h>
|
||||
#include <string.h> /* memset */
|
||||
|
||||
#ifndef SA_RESTART
|
||||
#define SA_RESTART 0
|
||||
@@ -180,8 +181,6 @@ 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?
|
||||
*/
|
||||
|
||||
{
|
||||
@@ -195,6 +194,18 @@ 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(
|
||||
&_CPU_Context_Default_with_ISRs_enabled,
|
||||
@@ -382,13 +393,16 @@ void _CPU_Context_Initialize(
|
||||
* grow up, we build the stack based on the _stack_low address.
|
||||
*/
|
||||
|
||||
_stack_low = ((unsigned32)(_stack_base) + CPU_STACK_ALIGNMENT);
|
||||
_stack_low = (unsigned32)(_stack_base) + CPU_STACK_ALIGNMENT - 1;
|
||||
_stack_low &= ~(CPU_STACK_ALIGNMENT - 1);
|
||||
|
||||
_stack_high = ((unsigned32)(_stack_base) + _size);
|
||||
_stack_high = (unsigned32)(_stack_base) + _size;
|
||||
_stack_high &= ~(CPU_STACK_ALIGNMENT - 1);
|
||||
|
||||
_the_size = _size & ~(CPU_STACK_ALIGNMENT - 1);
|
||||
if (_stack_high > _stack_low)
|
||||
_the_size = _stack_high - _stack_low;
|
||||
else
|
||||
_the_size = _stack_low - _stack_high;
|
||||
|
||||
/*
|
||||
* Slam our jmp_buf template into the context we are creating
|
||||
@@ -399,7 +413,11 @@ void _CPU_Context_Initialize(
|
||||
else
|
||||
source = &_CPU_Context_Default_with_ISRs_disabled;
|
||||
|
||||
memcpy(_the_context, source, sizeof(Context_Control) ); /* sizeof(jmp_buf)); */
|
||||
memcpy(
|
||||
_the_context,
|
||||
source,
|
||||
sizeof(Context_Control) /* sizeof(jmp_buf)); */
|
||||
);
|
||||
|
||||
addr = (unsigned32 *)_the_context;
|
||||
|
||||
@@ -411,13 +429,12 @@ 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
|
||||
* is at what 24 off of newp points to so shove that
|
||||
* into 24 off of newp instead.
|
||||
* points to the pointer, so we put that into rp instead.
|
||||
*/
|
||||
|
||||
if (jmp_addr & 0x40000000) {
|
||||
jmp_addr &= 0xfffffffc;
|
||||
*(addr + RP_OFF) = (unsigned32)*(unsigned32 *)jmp_addr;
|
||||
*(addr + RP_OFF) = *(unsigned32 *)jmp_addr;
|
||||
}
|
||||
#elif defined(sparc)
|
||||
|
||||
@@ -650,17 +667,31 @@ 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
|
||||
*/
|
||||
|
||||
buffer[ 0 ] = (sig_num >> 4) + 0x30;
|
||||
buffer[ 1 ] = (sig_num & 0xf) + 0x30;
|
||||
buffer[ 2 ] = '\n';
|
||||
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;
|
||||
|
||||
write( 2, "Stray signal 0x", 12 );
|
||||
write( 2, buffer, 3 );
|
||||
buffer[ len++ ] = '\n';
|
||||
|
||||
write( 2, "Stray signal ", 13 );
|
||||
write( 2, buffer, len );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -682,7 +713,7 @@ void _CPU_Stray_signal(int sig_num)
|
||||
case SIGBUS:
|
||||
case SIGSEGV:
|
||||
case SIGTERM:
|
||||
_CPU_Fatal_error(0x100 + sig_num);
|
||||
_CPU_Fatal_error(0x100 + sig_num);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -741,13 +772,12 @@ void _CPU_Stop_clock( void )
|
||||
* vector.
|
||||
*/
|
||||
|
||||
(void) memset(&act, 0, sizeof(act));
|
||||
act.sa_handler = SIG_IGN;
|
||||
|
||||
|
||||
sigaction(SIGALRM, &act, 0);
|
||||
|
||||
new.it_value.tv_sec = 0;
|
||||
new.it_value.tv_usec = 0;
|
||||
|
||||
(void) memset(&new, 0, sizeof(new));
|
||||
setitimer(ITIMER_REAL, &new, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -441,9 +441,22 @@ extern "C" {
|
||||
*
|
||||
* 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 ];
|
||||
char Area[ CPU_CONTEXT_SIZE_IN_BYTES ] CONTEXT_STRUCTURE_ALIGNMENT;
|
||||
} Context_Control;
|
||||
|
||||
typedef struct {
|
||||
@@ -455,13 +468,7 @@ 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.
|
||||
* the UNIX Simulator specific parameters.
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
@@ -472,6 +479,9 @@ 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,6 +83,16 @@ 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,7 +51,8 @@ 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_INVALID_GLOBAL_ID,
|
||||
INTERNAL_ERROR_BAD_STACK_HOOK
|
||||
} Internal_errors_Core_list;
|
||||
|
||||
/*
|
||||
|
||||
@@ -214,9 +214,7 @@ void _ISR_Handler( void );
|
||||
|
||||
void _ISR_Dispatch( void );
|
||||
|
||||
#ifndef __RTEMS_APPLICATION__
|
||||
#include <rtems/score/isr.inl>
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -544,6 +544,20 @@ 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,6 +32,19 @@ 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,53 +17,6 @@
|
||||
#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,47 +17,6 @@
|
||||
#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,6 +50,19 @@ 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;
|
||||
@@ -281,6 +294,79 @@ 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
|
||||
@@ -320,12 +406,12 @@ boolean _Thread_Initialize(
|
||||
stack = stack_area;
|
||||
|
||||
if ( !stack ) {
|
||||
stack = _Workspace_Allocate( actual_stack_size );
|
||||
actual_stack_size = _Thread_Stack_Allocate( the_thread, stack_size );
|
||||
|
||||
if ( !stack )
|
||||
return FALSE;
|
||||
if ( !actual_stack_size )
|
||||
return FALSE; /* stack allocation failed */
|
||||
|
||||
the_thread->Start.stack = stack;
|
||||
stack = the_thread->Start.stack;
|
||||
} else
|
||||
the_thread->Start.stack = NULL;
|
||||
|
||||
@@ -344,7 +430,7 @@ boolean _Thread_Initialize(
|
||||
fp_area = _Workspace_Allocate( CONTEXT_FP_SIZE );
|
||||
if ( !fp_area ) {
|
||||
if ( the_thread->Start.stack )
|
||||
(void) _Workspace_Free( the_thread->Start.stack );
|
||||
(void) _Thread_Stack_Free( the_thread->Start.stack );
|
||||
return FALSE;
|
||||
}
|
||||
fp_area = _Context_Fp_start( fp_area, 0 );
|
||||
@@ -357,7 +443,7 @@ boolean _Thread_Initialize(
|
||||
|
||||
|
||||
/*
|
||||
* Allocate the floating point area for this thread
|
||||
* Allocate the extensions area for this thread
|
||||
*/
|
||||
|
||||
if ( _Thread_Maximum_extensions ) {
|
||||
@@ -370,7 +456,7 @@ boolean _Thread_Initialize(
|
||||
(void) _Workspace_Free( fp_area );
|
||||
|
||||
if ( the_thread->Start.stack )
|
||||
(void) _Workspace_Free( the_thread->Start.stack );
|
||||
(void) _Thread_Stack_Free( the_thread->Start.stack );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@@ -413,7 +499,7 @@ boolean _Thread_Initialize(
|
||||
(void) _Workspace_Free( fp_area );
|
||||
|
||||
if ( the_thread->Start.stack )
|
||||
(void) _Workspace_Free( the_thread->Start.stack );
|
||||
(void) _Thread_Stack_Free( the_thread->Start.stack );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,49 @@
|
||||
#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
|
||||
|
||||
@@ -48,7 +48,7 @@ BEGIN_CODE
|
||||
|
||||
#define LOAD_SEGMENTS(_value,_segment) \
|
||||
movw $ ## _value, ax ; \
|
||||
movw _segment, ax
|
||||
movw ax, _segment
|
||||
|
||||
EXTERN (establish_stack)
|
||||
|
||||
|
||||
@@ -21,6 +21,13 @@ MEMORY {
|
||||
/*
|
||||
* Declare some sizes
|
||||
*/
|
||||
|
||||
/*
|
||||
* XXX: The assignment of ". += XyzSize;" fails in older gld's if the
|
||||
* number used there is not constant so the calculated sizes are
|
||||
* ignored below and the default number is used instead.
|
||||
*/
|
||||
|
||||
HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
|
||||
StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
|
||||
|
||||
@@ -29,6 +36,7 @@ StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
|
||||
*/
|
||||
SECTIONS {
|
||||
.text : {
|
||||
_RamBase = .;
|
||||
__RamBase = .;
|
||||
CREATE_OBJECT_SYMBOLS
|
||||
*(.text)
|
||||
@@ -41,6 +49,7 @@ SECTIONS {
|
||||
_edata = .;
|
||||
} >ram
|
||||
.bss : {
|
||||
M68Kvec = .;
|
||||
_M68Kvec = .;
|
||||
. += (256 * 4);
|
||||
clear_start = .;
|
||||
@@ -49,13 +58,21 @@ SECTIONS {
|
||||
. = ALIGN (16);
|
||||
_end = .;
|
||||
|
||||
_HeapStart = .;
|
||||
__HeapStart = .;
|
||||
. += HeapSize;
|
||||
. += StackSize;
|
||||
/* XXX: Temporary to get around a gld bug
|
||||
*
|
||||
* . += HeapSize;
|
||||
* . += StackSize;
|
||||
*/
|
||||
. += 0x10000; /* XXX */
|
||||
. += 0x1000; /* XXX */
|
||||
|
||||
. = ALIGN (16);
|
||||
stack_init = .;
|
||||
clear_end = .;
|
||||
|
||||
_WorkspaceBase = .;
|
||||
__WorkspaceBase = .;
|
||||
} >ram
|
||||
|
||||
@@ -63,6 +80,7 @@ SECTIONS {
|
||||
* On-chip memory/peripherals
|
||||
*/
|
||||
dpram : {
|
||||
m360 = .;
|
||||
_m360 = .;
|
||||
. += (8 * 1024);
|
||||
|
||||
@@ -72,6 +90,7 @@ SECTIONS {
|
||||
* Boot PROM
|
||||
*/
|
||||
rom : {
|
||||
_RomBase = .;
|
||||
__RomBase = .;
|
||||
} >rom
|
||||
}
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
#include <shm.h>
|
||||
|
||||
#include <string.h> /* memset() */
|
||||
#include <stdlib.h> /* malloc() */
|
||||
#include <assert.h>
|
||||
|
||||
/*
|
||||
* User extension to install MPCI_Fatal as a fatal error
|
||||
@@ -53,6 +55,13 @@ 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[16];
|
||||
SHM_EXTERN Shm_Interrupt_information *Shm_Interrupt_table;
|
||||
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[16];
|
||||
SHM_EXTERN Shm_Interrupt_information *Shm_Interrupt_table;
|
||||
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,7 +91,6 @@ 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,8 +1,3 @@
|
||||
/*
|
||||
* @(#)bspstart.c 1.7 - 95/04/07
|
||||
*
|
||||
*/
|
||||
|
||||
/* bsp_start()
|
||||
*
|
||||
* This routine starts the application. It includes application,
|
||||
@@ -55,7 +50,6 @@ 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
|
||||
@@ -167,6 +161,13 @@ 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
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -198,11 +199,6 @@ 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,7 +1,3 @@
|
||||
//
|
||||
// @(#)rtems-ctor.cc 1.6 - 95/04/25
|
||||
//
|
||||
|
||||
/*
|
||||
* rtems-ctor.cc
|
||||
*
|
||||
@@ -90,7 +86,6 @@ 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;
|
||||
rtems_isr_entry rtems_isr_ptr = 0;
|
||||
proc_ptr raw_isr_ptr;
|
||||
|
||||
if ( type ) {
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)assoc.c 1.6 - 95/10/25
|
||||
*
|
||||
*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
/*
|
||||
* @(#)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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)error.c 1.6 - 95/12/12
|
||||
*
|
||||
*
|
||||
* report errors and panics to RTEMS' stderr.
|
||||
* Currently just used by RTEMS monitor.
|
||||
*
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
|
||||
/*
|
||||
* @(#)error.h 1.3 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Defines and externs for rtems error reporting
|
||||
*
|
||||
* $Id$
|
||||
@@ -24,7 +20,12 @@
|
||||
|
||||
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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)libio.c 1.1 - 95/06/02
|
||||
*
|
||||
*
|
||||
* Provide UNIX/POSIX-like io system calls for RTEMS using the
|
||||
* RTEMS IO manager
|
||||
*
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)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,12 +25,14 @@
|
||||
#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
|
||||
@@ -202,7 +204,11 @@ void *malloc(
|
||||
malloc_stats.max_depth = current_depth;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef MALLOC_DIRTY
|
||||
(void) memset(return_this, 0xCF, size);
|
||||
#endif
|
||||
|
||||
return return_this;
|
||||
}
|
||||
|
||||
@@ -221,6 +227,8 @@ void *calloc(
|
||||
if ( cptr )
|
||||
memset( cptr, '\0', length );
|
||||
|
||||
MSBUMP(malloc_calls, -1); /* subtract off the malloc */
|
||||
|
||||
return cptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,17 +1,6 @@
|
||||
/*
|
||||
* @(#)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"
|
||||
@@ -47,8 +36,25 @@
|
||||
|
||||
#include <sys/reent.h> /* for extern of _REENT (aka _impure_ptr) */
|
||||
|
||||
#ifdef RTEMS_UNIX
|
||||
#include <stdio.h> /* for setvbuf() */
|
||||
/*
|
||||
* 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>
|
||||
#endif
|
||||
|
||||
#include "internal.h"
|
||||
@@ -196,18 +202,19 @@ 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);
|
||||
_wrapup_reent(ptr);
|
||||
_reclaim_reent(ptr);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
MY_task_set_note(deleted_task, LIBC_NOTEPAD, 0);
|
||||
@@ -218,7 +225,7 @@ libc_delete_hook(rtems_tcb *current_task,
|
||||
|
||||
if (current_task == deleted_task)
|
||||
{
|
||||
_REENT = 0;
|
||||
_REENT = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)assoc.c 1.6 - 95/10/25
|
||||
*
|
||||
*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
/*
|
||||
* @(#)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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)error.c 1.6 - 95/12/12
|
||||
*
|
||||
*
|
||||
* report errors and panics to RTEMS' stderr.
|
||||
* Currently just used by RTEMS monitor.
|
||||
*
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
|
||||
/*
|
||||
* @(#)error.h 1.3 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Defines and externs for rtems error reporting
|
||||
*
|
||||
* $Id$
|
||||
@@ -24,7 +20,12 @@
|
||||
|
||||
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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)command.c 1.5 - 95/08/02
|
||||
*
|
||||
*
|
||||
* Command parsing routines for RTEMS monitor
|
||||
*
|
||||
* TODO:
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)config.c 1.5 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS Config display support
|
||||
*
|
||||
* TODO
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)dname.c 1.5 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS monitor driver names support.
|
||||
*
|
||||
* There are 2 "driver" things the monitor knows about.
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)driver.c 1.4 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS monitor IO (device drivers) support
|
||||
*
|
||||
* There are 2 "driver" things the monitor knows about.
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)extension.c 1.6 - 95/09/25
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor extension support
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
/*
|
||||
* @(#)itask.c 1.6 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor init task support
|
||||
* RTEMS Monitor init task support
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
/*
|
||||
* @(#)manager.c 1.4 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor "manager" support.
|
||||
* Used to traverse object (chain) lists and print them out.
|
||||
* RTEMS Monitor "manager" support.
|
||||
* Used to traverse object (chain) lists and print them out.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
/*
|
||||
* @(#)monitor.c 1.23 - 96/01/03
|
||||
*
|
||||
*
|
||||
*
|
||||
* RTEMS monitor main body
|
||||
*
|
||||
* TODO:
|
||||
@@ -18,7 +14,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' commadn to print out:
|
||||
* 'info' command to print out:
|
||||
* interrupt stack location, direction and size
|
||||
* floating point config stuff
|
||||
* interrupt config stuff
|
||||
@@ -262,6 +258,18 @@ 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(
|
||||
@@ -302,19 +310,6 @@ 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,
|
||||
@@ -340,8 +335,10 @@ rtems_monitor_node_cmd(
|
||||
break;
|
||||
}
|
||||
|
||||
if ((new_node >= 1) && (new_node <= _Configuration_MP_table->maximum_nodes))
|
||||
rtems_monitor_default_node = new_node;
|
||||
if ((new_node >= 1) &&
|
||||
_Configuration_MP_table &&
|
||||
(new_node <= _Configuration_MP_table->maximum_nodes))
|
||||
rtems_monitor_default_node = new_node;
|
||||
}
|
||||
|
||||
|
||||
@@ -383,11 +380,7 @@ 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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)mpci.c 1.6 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS MPCI Config display support
|
||||
*
|
||||
* TODO
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)object.c 1.9 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor "object" support.
|
||||
*
|
||||
* Used to traverse object lists and print them out.
|
||||
@@ -341,7 +338,7 @@ rtems_monitor_object_cmd(
|
||||
|
||||
for (arg=1; argv[arg]; arg++)
|
||||
{
|
||||
id = (rtems_id) strtoul(argv[arg], 0, 0);
|
||||
id = (rtems_id) strtoul(argv[arg], 0, 16);
|
||||
id = rtems_monitor_id_fixup(id, default_node, type);
|
||||
type = (rtems_monitor_object_type_t) rtems_get_class(id);
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)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,6 +1,4 @@
|
||||
/*
|
||||
* @(#)queue.c 1.5 - 95/07/31
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
/*
|
||||
* @(#)server.c 1.5 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS monitor server (handles requests for info from RTEMS monitors
|
||||
* RTEMS monitor server (handles requests for info from RTEMS monitors
|
||||
* running on other nodes)
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,11 +1,3 @@
|
||||
/*
|
||||
* @(#)symbols.c 1.10 - 95/08/02
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* #define qsort _quicksort */
|
||||
|
||||
/*
|
||||
* File: symbols.c
|
||||
*
|
||||
@@ -15,6 +7,8 @@
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
@@ -50,11 +44,6 @@ 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)
|
||||
{
|
||||
@@ -93,11 +82,6 @@ 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;
|
||||
}
|
||||
|
||||
@@ -129,9 +113,6 @@ rtems_symbol_create(
|
||||
(void) strcpy(sp->name, name);
|
||||
|
||||
table->strings_next += symbol_length;
|
||||
|
||||
table->symbols[table->next] = *sp;
|
||||
|
||||
table->sorted = 0;
|
||||
table->next++;
|
||||
|
||||
@@ -147,7 +128,7 @@ failed:
|
||||
* Qsort entry point for compare by address
|
||||
*/
|
||||
|
||||
int
|
||||
static int
|
||||
rtems_symbol_compare(const void *e1,
|
||||
const void *e2)
|
||||
{
|
||||
@@ -162,48 +143,20 @@ 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
|
||||
*/
|
||||
|
||||
void
|
||||
static 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
|
||||
@@ -261,6 +214,53 @@ 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,33 +271,23 @@ rtems_symbol_name_lookup(
|
||||
char *name
|
||||
)
|
||||
{
|
||||
rtems_symbol_t *sp = 0;
|
||||
rtems_symbol_t key;
|
||||
int s;
|
||||
rtems_symbol_t *sp;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
@@ -325,7 +315,7 @@ rtems_monitor_symbol_next(
|
||||
_Thread_Disable_dispatch();
|
||||
|
||||
*next_id += 1;
|
||||
return (void *) (table->symbols + n);
|
||||
return (void *) (table->addresses + n);
|
||||
|
||||
failed:
|
||||
*next_id = RTEMS_OBJECT_ID_FINAL;
|
||||
@@ -438,7 +428,7 @@ rtems_monitor_symbol_dump_all(
|
||||
if (table->sorted == 0)
|
||||
rtems_symbol_sort(table);
|
||||
|
||||
for (s = 0, sp = table->symbols; s < table->next; s++, sp++)
|
||||
for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
|
||||
{
|
||||
rtems_monitor_symbol_t canonical_symbol;
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)task.c 1.9 - 95/08/01
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor task support
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,10 +1,3 @@
|
||||
/*
|
||||
* @(#)monitor.h 1.21 - 96/01/03
|
||||
*
|
||||
*
|
||||
* monitor.h,v 1.3 1995/09/29 17:19:02 joel Exp
|
||||
*/
|
||||
|
||||
/*
|
||||
* File: monitor.h
|
||||
*
|
||||
@@ -12,6 +5,8 @@
|
||||
* The RTEMS monitor task include file.
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __MONITOR_H
|
||||
@@ -25,7 +20,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX this should be in rtems proper when type becomes part of id
|
||||
* Monitor types are derived from rtems object classes
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
@@ -306,7 +301,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;
|
||||
@@ -419,6 +414,7 @@ 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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)symbols.h 1.3 - 95/06/09
|
||||
*
|
||||
*
|
||||
* RTEMS monitor symbol table functions
|
||||
*
|
||||
* Description:
|
||||
@@ -47,14 +44,6 @@ 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,6 +20,19 @@
|
||||
|
||||
#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>
|
||||
@@ -49,7 +62,11 @@ 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
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -167,10 +184,6 @@ 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
|
||||
@@ -217,6 +230,17 @@ 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;
|
||||
}
|
||||
|
||||
@@ -431,14 +455,16 @@ 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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)assoc.c 1.6 - 95/10/25
|
||||
*
|
||||
*
|
||||
* assoc.c
|
||||
* rtems assoc routines
|
||||
*
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
/*
|
||||
* @(#)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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)error.c 1.6 - 95/12/12
|
||||
*
|
||||
*
|
||||
* report errors and panics to RTEMS' stderr.
|
||||
* Currently just used by RTEMS monitor.
|
||||
*
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
|
||||
/*
|
||||
* @(#)error.h 1.3 - 95/10/25
|
||||
*
|
||||
*
|
||||
* Defines and externs for rtems error reporting
|
||||
*
|
||||
* $Id$
|
||||
@@ -24,7 +20,12 @@
|
||||
|
||||
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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)command.c 1.5 - 95/08/02
|
||||
*
|
||||
*
|
||||
* Command parsing routines for RTEMS monitor
|
||||
*
|
||||
* TODO:
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)config.c 1.5 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS Config display support
|
||||
*
|
||||
* TODO
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)dname.c 1.5 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS monitor driver names support.
|
||||
*
|
||||
* There are 2 "driver" things the monitor knows about.
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)driver.c 1.4 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS monitor IO (device drivers) support
|
||||
*
|
||||
* There are 2 "driver" things the monitor knows about.
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)extension.c 1.6 - 95/09/25
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor extension support
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
/*
|
||||
* @(#)itask.c 1.6 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor init task support
|
||||
* RTEMS Monitor init task support
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
/*
|
||||
* @(#)manager.c 1.4 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor "manager" support.
|
||||
* Used to traverse object (chain) lists and print them out.
|
||||
* RTEMS Monitor "manager" support.
|
||||
* Used to traverse object (chain) lists and print them out.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
/*
|
||||
* @(#)monitor.c 1.23 - 96/01/03
|
||||
*
|
||||
*
|
||||
*
|
||||
* RTEMS monitor main body
|
||||
*
|
||||
* TODO:
|
||||
@@ -18,7 +14,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' commadn to print out:
|
||||
* 'info' command to print out:
|
||||
* interrupt stack location, direction and size
|
||||
* floating point config stuff
|
||||
* interrupt config stuff
|
||||
@@ -262,6 +258,18 @@ 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(
|
||||
@@ -302,19 +310,6 @@ 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,
|
||||
@@ -340,8 +335,10 @@ rtems_monitor_node_cmd(
|
||||
break;
|
||||
}
|
||||
|
||||
if ((new_node >= 1) && (new_node <= _Configuration_MP_table->maximum_nodes))
|
||||
rtems_monitor_default_node = new_node;
|
||||
if ((new_node >= 1) &&
|
||||
_Configuration_MP_table &&
|
||||
(new_node <= _Configuration_MP_table->maximum_nodes))
|
||||
rtems_monitor_default_node = new_node;
|
||||
}
|
||||
|
||||
|
||||
@@ -383,11 +380,7 @@ 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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)mpci.c 1.6 - 95/08/02
|
||||
*
|
||||
*
|
||||
* RTEMS MPCI Config display support
|
||||
*
|
||||
* TODO
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)object.c 1.9 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor "object" support.
|
||||
*
|
||||
* Used to traverse object lists and print them out.
|
||||
@@ -341,7 +338,7 @@ rtems_monitor_object_cmd(
|
||||
|
||||
for (arg=1; argv[arg]; arg++)
|
||||
{
|
||||
id = (rtems_id) strtoul(argv[arg], 0, 0);
|
||||
id = (rtems_id) strtoul(argv[arg], 0, 16);
|
||||
id = rtems_monitor_id_fixup(id, default_node, type);
|
||||
type = (rtems_monitor_object_type_t) rtems_get_class(id);
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)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,6 +1,4 @@
|
||||
/*
|
||||
* @(#)queue.c 1.5 - 95/07/31
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
/*
|
||||
* @(#)server.c 1.5 - 96/01/03
|
||||
*
|
||||
*
|
||||
* RTEMS monitor server (handles requests for info from RTEMS monitors
|
||||
* RTEMS monitor server (handles requests for info from RTEMS monitors
|
||||
* running on other nodes)
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,11 +1,3 @@
|
||||
/*
|
||||
* @(#)symbols.c 1.10 - 95/08/02
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* #define qsort _quicksort */
|
||||
|
||||
/*
|
||||
* File: symbols.c
|
||||
*
|
||||
@@ -15,6 +7,8 @@
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
|
||||
@@ -50,11 +44,6 @@ 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)
|
||||
{
|
||||
@@ -93,11 +82,6 @@ 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;
|
||||
}
|
||||
|
||||
@@ -129,9 +113,6 @@ rtems_symbol_create(
|
||||
(void) strcpy(sp->name, name);
|
||||
|
||||
table->strings_next += symbol_length;
|
||||
|
||||
table->symbols[table->next] = *sp;
|
||||
|
||||
table->sorted = 0;
|
||||
table->next++;
|
||||
|
||||
@@ -147,7 +128,7 @@ failed:
|
||||
* Qsort entry point for compare by address
|
||||
*/
|
||||
|
||||
int
|
||||
static int
|
||||
rtems_symbol_compare(const void *e1,
|
||||
const void *e2)
|
||||
{
|
||||
@@ -162,48 +143,20 @@ 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
|
||||
*/
|
||||
|
||||
void
|
||||
static 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
|
||||
@@ -261,6 +214,53 @@ 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,33 +271,23 @@ rtems_symbol_name_lookup(
|
||||
char *name
|
||||
)
|
||||
{
|
||||
rtems_symbol_t *sp = 0;
|
||||
rtems_symbol_t key;
|
||||
int s;
|
||||
rtems_symbol_t *sp;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
@@ -325,7 +315,7 @@ rtems_monitor_symbol_next(
|
||||
_Thread_Disable_dispatch();
|
||||
|
||||
*next_id += 1;
|
||||
return (void *) (table->symbols + n);
|
||||
return (void *) (table->addresses + n);
|
||||
|
||||
failed:
|
||||
*next_id = RTEMS_OBJECT_ID_FINAL;
|
||||
@@ -438,7 +428,7 @@ rtems_monitor_symbol_dump_all(
|
||||
if (table->sorted == 0)
|
||||
rtems_symbol_sort(table);
|
||||
|
||||
for (s = 0, sp = table->symbols; s < table->next; s++, sp++)
|
||||
for (s = 0, sp = table->addresses; s < table->next; s++, sp++)
|
||||
{
|
||||
rtems_monitor_symbol_t canonical_symbol;
|
||||
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
/*
|
||||
* @(#)task.c 1.9 - 95/08/01
|
||||
*
|
||||
*
|
||||
* RTEMS Monitor task support
|
||||
*
|
||||
* $Id$
|
||||
|
||||
@@ -1,10 +1,3 @@
|
||||
/*
|
||||
* @(#)monitor.h 1.21 - 96/01/03
|
||||
*
|
||||
*
|
||||
* monitor.h,v 1.3 1995/09/29 17:19:02 joel Exp
|
||||
*/
|
||||
|
||||
/*
|
||||
* File: monitor.h
|
||||
*
|
||||
@@ -12,6 +5,8 @@
|
||||
* The RTEMS monitor task include file.
|
||||
*
|
||||
* TODO:
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __MONITOR_H
|
||||
@@ -25,7 +20,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX this should be in rtems proper when type becomes part of id
|
||||
* Monitor types are derived from rtems object classes
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
@@ -306,7 +301,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;
|
||||
@@ -419,6 +414,7 @@ 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,7 +1,4 @@
|
||||
/*
|
||||
* @(#)symbols.h 1.3 - 95/06/09
|
||||
*
|
||||
*
|
||||
* RTEMS monitor symbol table functions
|
||||
*
|
||||
* Description:
|
||||
@@ -47,14 +44,6 @@ 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,6 +20,19 @@
|
||||
|
||||
#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>
|
||||
@@ -49,7 +62,11 @@ 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
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -167,10 +184,6 @@ 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
|
||||
@@ -217,6 +230,17 @@ 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;
|
||||
}
|
||||
|
||||
@@ -431,14 +455,16 @@ 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
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "system.h"
|
||||
|
||||
extern rtems_configuration_table BSP_Configuration;
|
||||
extern rtems_cpu_table _CPU_Table;
|
||||
|
||||
void Screen3()
|
||||
{
|
||||
@@ -42,20 +43,32 @@ void Screen3()
|
||||
);
|
||||
puts( "TA1 - rtems_task_create - RTEMS_INVALID_NAME" );
|
||||
|
||||
status = rtems_task_create(
|
||||
task_name,
|
||||
1,
|
||||
BSP_Configuration.work_space_size,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Junk_id
|
||||
);
|
||||
fatal_directive_status(
|
||||
status,
|
||||
RTEMS_UNSATISFIED,
|
||||
"rtems_task_create with a stack size larger than the workspace"
|
||||
);
|
||||
puts( "TA1 - rtems_task_create - stack size - RTEMS_UNSATISFIED" );
|
||||
/*
|
||||
* If the bsp provides its own stack allocator, then
|
||||
* skip the test that tries to allocate a stack that is too big.
|
||||
*/
|
||||
|
||||
if (_CPU_Table.stack_allocate_hook)
|
||||
{
|
||||
puts( "TA1 - rtems_task_create - stack size - RTEMS_UNSATISFIED -- SKIPPED" );
|
||||
}
|
||||
else
|
||||
{
|
||||
status = rtems_task_create(
|
||||
task_name,
|
||||
1,
|
||||
BSP_Configuration.work_space_size,
|
||||
RTEMS_DEFAULT_MODES,
|
||||
RTEMS_DEFAULT_ATTRIBUTES,
|
||||
&Junk_id
|
||||
);
|
||||
fatal_directive_status(
|
||||
status,
|
||||
RTEMS_UNSATISFIED,
|
||||
"rtems_task_create with a stack size larger than the workspace"
|
||||
);
|
||||
puts( "TA1 - rtems_task_create - stack size - RTEMS_UNSATISFIED" );
|
||||
}
|
||||
|
||||
status = rtems_task_create(
|
||||
Task_name[ 2 ],
|
||||
|
||||
@@ -57,7 +57,8 @@ rtems_unsigned32 First_Time_Through;
|
||||
void Process_case();
|
||||
|
||||
rtems_extension Fatal_extension(
|
||||
rtems_unsigned32 error
|
||||
rtems_unsigned32 error,
|
||||
boolean is_internal
|
||||
)
|
||||
{
|
||||
int index;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user