forked from Imagelibrary/rtems
Split Clock Manager into one routine per file.
This commit is contained in:
@@ -24,11 +24,14 @@ TASK_PIECES=\
|
|||||||
taskmode taskrestart taskresume tasksetnote tasksetpriority \
|
taskmode taskrestart taskresume tasksetnote tasksetpriority \
|
||||||
taskstart tasksuspend taskwakeafter taskwakewhen
|
taskstart tasksuspend taskwakeafter taskwakewhen
|
||||||
|
|
||||||
|
CLOCK_PIECES=
|
||||||
|
clock clockget clockset clocktick
|
||||||
|
|
||||||
REGION_PIECES=\
|
REGION_PIECES=\
|
||||||
region regioncreate regiondelete regionextend regiongetsegment \
|
region regioncreate regiondelete regionextend regiongetsegment \
|
||||||
regiongetsegmentsize regionident regionreturnsegemnt regionreturnsegemnt
|
regiongetsegmentsize regionident regionreturnsegemnt regionreturnsegemnt
|
||||||
|
|
||||||
C_PIECES=attr clock dpmem event intr intrbody msg \
|
C_PIECES=attr $(CLOCK_PIECES) dpmem event intr intrbody msg \
|
||||||
part ratemon $(REGION_PIECES) sem signal \
|
part ratemon $(REGION_PIECES) sem signal \
|
||||||
$(TASK_PIECES) timer $(MP_PIECES)
|
$(TASK_PIECES) timer $(MP_PIECES)
|
||||||
C_FILES=$(C_PIECES:%=%.c)
|
C_FILES=$(C_PIECES:%=%.c)
|
||||||
|
|||||||
@@ -20,132 +20,4 @@
|
|||||||
#include <rtems/score/tod.h>
|
#include <rtems/score/tod.h>
|
||||||
#include <rtems/score/watchdog.h>
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
/*PAGE
|
/* No initialization routine */
|
||||||
*
|
|
||||||
* rtems_clock_get
|
|
||||||
*
|
|
||||||
* This directive returns the current date and time. If the time has
|
|
||||||
* not been set by a tm_set then an error is returned.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* option - which value to return
|
|
||||||
* time_buffer - pointer to output buffer (a time and date structure
|
|
||||||
* or an interval)
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* time_buffer - output filled in
|
|
||||||
* RTEMS_SUCCESSFUL - if successful
|
|
||||||
* error code - if unsuccessful
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_get(
|
|
||||||
rtems_clock_get_options option,
|
|
||||||
void *time_buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ISR_Level level;
|
|
||||||
rtems_interval tmp;
|
|
||||||
|
|
||||||
switch ( option ) {
|
|
||||||
case RTEMS_CLOCK_GET_TOD:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
*(rtems_time_of_day *)time_buffer = _TOD_Current;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
*(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
|
|
||||||
*(rtems_interval *)time_buffer = _Watchdog_Ticks_since_boot;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
|
|
||||||
*(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TIME_VALUE:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
_ISR_Disable( level );
|
|
||||||
((rtems_clock_time_value *)time_buffer)->seconds =
|
|
||||||
_TOD_Seconds_since_epoch;
|
|
||||||
tmp = _TOD_Current.ticks;
|
|
||||||
_ISR_Enable( level );
|
|
||||||
|
|
||||||
tmp *= _TOD_Microseconds_per_tick;
|
|
||||||
((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
|
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return RTEMS_INTERNAL_ERROR; /* should never get here */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* rtems_clock_set
|
|
||||||
*
|
|
||||||
* This directive sets the date and time for this node.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* time_buffer - pointer to the time and date structure
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* RTEMS_SUCCESSFUL - if successful
|
|
||||||
* error code - if unsuccessful
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_set(
|
|
||||||
rtems_time_of_day *time_buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
rtems_interval seconds;
|
|
||||||
|
|
||||||
if ( _TOD_Validate( time_buffer ) ) {
|
|
||||||
seconds = _TOD_To_seconds( time_buffer );
|
|
||||||
_Thread_Disable_dispatch();
|
|
||||||
_TOD_Set( time_buffer, seconds );
|
|
||||||
_Thread_Enable_dispatch();
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
return RTEMS_INVALID_CLOCK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* rtems_clock_tick
|
|
||||||
*
|
|
||||||
* This directive notifies the executve that a tick has occurred.
|
|
||||||
* When the tick occurs the time manager updates and maintains
|
|
||||||
* the calendar time, timeslicing, and any timeout delays.
|
|
||||||
*
|
|
||||||
* Input parameters: NONE
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* RTEMS_SUCCESSFUL - always succeeds
|
|
||||||
*
|
|
||||||
* NOTE: This routine only works for leap-years through 2099.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_tick( void )
|
|
||||||
{
|
|
||||||
_TOD_Tickle_ticks();
|
|
||||||
|
|
||||||
_Watchdog_Tickle_ticks();
|
|
||||||
|
|
||||||
_Thread_Tickle_timeslice();
|
|
||||||
|
|
||||||
if ( _Thread_Is_context_switch_necessary() &&
|
|
||||||
_Thread_Is_dispatching_enabled() )
|
|
||||||
_Thread_Dispatch();
|
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|||||||
90
c/src/exec/rtems/src/clockget.c
Normal file
90
c/src/exec/rtems/src/clockget.c
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Clock Manager
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1998.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtems/system.h>
|
||||||
|
#include <rtems/rtems/status.h>
|
||||||
|
#include <rtems/rtems/clock.h>
|
||||||
|
#include <rtems/score/isr.h>
|
||||||
|
#include <rtems/score/thread.h>
|
||||||
|
#include <rtems/score/tod.h>
|
||||||
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* rtems_clock_get
|
||||||
|
*
|
||||||
|
* This directive returns the current date and time. If the time has
|
||||||
|
* not been set by a tm_set then an error is returned.
|
||||||
|
*
|
||||||
|
* Input parameters:
|
||||||
|
* option - which value to return
|
||||||
|
* time_buffer - pointer to output buffer (a time and date structure
|
||||||
|
* or an interval)
|
||||||
|
*
|
||||||
|
* Output parameters:
|
||||||
|
* time_buffer - output filled in
|
||||||
|
* RTEMS_SUCCESSFUL - if successful
|
||||||
|
* error code - if unsuccessful
|
||||||
|
*/
|
||||||
|
|
||||||
|
rtems_status_code rtems_clock_get(
|
||||||
|
rtems_clock_get_options option,
|
||||||
|
void *time_buffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ISR_Level level;
|
||||||
|
rtems_interval tmp;
|
||||||
|
|
||||||
|
switch ( option ) {
|
||||||
|
case RTEMS_CLOCK_GET_TOD:
|
||||||
|
if ( !_TOD_Is_set )
|
||||||
|
return RTEMS_NOT_DEFINED;
|
||||||
|
|
||||||
|
*(rtems_time_of_day *)time_buffer = _TOD_Current;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
|
||||||
|
if ( !_TOD_Is_set )
|
||||||
|
return RTEMS_NOT_DEFINED;
|
||||||
|
|
||||||
|
*(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
|
||||||
|
*(rtems_interval *)time_buffer = _Watchdog_Ticks_since_boot;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
|
||||||
|
*(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_TIME_VALUE:
|
||||||
|
if ( !_TOD_Is_set )
|
||||||
|
return RTEMS_NOT_DEFINED;
|
||||||
|
|
||||||
|
_ISR_Disable( level );
|
||||||
|
((rtems_clock_time_value *)time_buffer)->seconds =
|
||||||
|
_TOD_Seconds_since_epoch;
|
||||||
|
tmp = _TOD_Current.ticks;
|
||||||
|
_ISR_Enable( level );
|
||||||
|
|
||||||
|
tmp *= _TOD_Microseconds_per_tick;
|
||||||
|
((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RTEMS_INTERNAL_ERROR; /* should never get here */
|
||||||
|
|
||||||
|
}
|
||||||
51
c/src/exec/rtems/src/clockset.c
Normal file
51
c/src/exec/rtems/src/clockset.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Clock Manager
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1998.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtems/system.h>
|
||||||
|
#include <rtems/rtems/status.h>
|
||||||
|
#include <rtems/rtems/clock.h>
|
||||||
|
#include <rtems/score/isr.h>
|
||||||
|
#include <rtems/score/thread.h>
|
||||||
|
#include <rtems/score/tod.h>
|
||||||
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* rtems_clock_set
|
||||||
|
*
|
||||||
|
* This directive sets the date and time for this node.
|
||||||
|
*
|
||||||
|
* Input parameters:
|
||||||
|
* time_buffer - pointer to the time and date structure
|
||||||
|
*
|
||||||
|
* Output parameters:
|
||||||
|
* RTEMS_SUCCESSFUL - if successful
|
||||||
|
* error code - if unsuccessful
|
||||||
|
*/
|
||||||
|
|
||||||
|
rtems_status_code rtems_clock_set(
|
||||||
|
rtems_time_of_day *time_buffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
rtems_interval seconds;
|
||||||
|
|
||||||
|
if ( _TOD_Validate( time_buffer ) ) {
|
||||||
|
seconds = _TOD_To_seconds( time_buffer );
|
||||||
|
_Thread_Disable_dispatch();
|
||||||
|
_TOD_Set( time_buffer, seconds );
|
||||||
|
_Thread_Enable_dispatch();
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
return RTEMS_INVALID_CLOCK;
|
||||||
|
}
|
||||||
52
c/src/exec/rtems/src/clocktick.c
Normal file
52
c/src/exec/rtems/src/clocktick.c
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Clock Manager
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1998.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtems/system.h>
|
||||||
|
#include <rtems/rtems/status.h>
|
||||||
|
#include <rtems/rtems/clock.h>
|
||||||
|
#include <rtems/score/isr.h>
|
||||||
|
#include <rtems/score/thread.h>
|
||||||
|
#include <rtems/score/tod.h>
|
||||||
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* rtems_clock_tick
|
||||||
|
*
|
||||||
|
* This directive notifies the executve that a tick has occurred.
|
||||||
|
* When the tick occurs the time manager updates and maintains
|
||||||
|
* the calendar time, timeslicing, and any timeout delays.
|
||||||
|
*
|
||||||
|
* Input parameters: NONE
|
||||||
|
*
|
||||||
|
* Output parameters:
|
||||||
|
* RTEMS_SUCCESSFUL - always succeeds
|
||||||
|
*
|
||||||
|
* NOTE: This routine only works for leap-years through 2099.
|
||||||
|
*/
|
||||||
|
|
||||||
|
rtems_status_code rtems_clock_tick( void )
|
||||||
|
{
|
||||||
|
_TOD_Tickle_ticks();
|
||||||
|
|
||||||
|
_Watchdog_Tickle_ticks();
|
||||||
|
|
||||||
|
_Thread_Tickle_timeslice();
|
||||||
|
|
||||||
|
if ( _Thread_Is_context_switch_necessary() &&
|
||||||
|
_Thread_Is_dispatching_enabled() )
|
||||||
|
_Thread_Dispatch();
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
@@ -20,132 +20,4 @@
|
|||||||
#include <rtems/score/tod.h>
|
#include <rtems/score/tod.h>
|
||||||
#include <rtems/score/watchdog.h>
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
/*PAGE
|
/* No initialization routine */
|
||||||
*
|
|
||||||
* rtems_clock_get
|
|
||||||
*
|
|
||||||
* This directive returns the current date and time. If the time has
|
|
||||||
* not been set by a tm_set then an error is returned.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* option - which value to return
|
|
||||||
* time_buffer - pointer to output buffer (a time and date structure
|
|
||||||
* or an interval)
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* time_buffer - output filled in
|
|
||||||
* RTEMS_SUCCESSFUL - if successful
|
|
||||||
* error code - if unsuccessful
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_get(
|
|
||||||
rtems_clock_get_options option,
|
|
||||||
void *time_buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ISR_Level level;
|
|
||||||
rtems_interval tmp;
|
|
||||||
|
|
||||||
switch ( option ) {
|
|
||||||
case RTEMS_CLOCK_GET_TOD:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
*(rtems_time_of_day *)time_buffer = _TOD_Current;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
*(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
|
|
||||||
*(rtems_interval *)time_buffer = _Watchdog_Ticks_since_boot;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
|
|
||||||
*(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TIME_VALUE:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
_ISR_Disable( level );
|
|
||||||
((rtems_clock_time_value *)time_buffer)->seconds =
|
|
||||||
_TOD_Seconds_since_epoch;
|
|
||||||
tmp = _TOD_Current.ticks;
|
|
||||||
_ISR_Enable( level );
|
|
||||||
|
|
||||||
tmp *= _TOD_Microseconds_per_tick;
|
|
||||||
((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
|
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return RTEMS_INTERNAL_ERROR; /* should never get here */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* rtems_clock_set
|
|
||||||
*
|
|
||||||
* This directive sets the date and time for this node.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* time_buffer - pointer to the time and date structure
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* RTEMS_SUCCESSFUL - if successful
|
|
||||||
* error code - if unsuccessful
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_set(
|
|
||||||
rtems_time_of_day *time_buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
rtems_interval seconds;
|
|
||||||
|
|
||||||
if ( _TOD_Validate( time_buffer ) ) {
|
|
||||||
seconds = _TOD_To_seconds( time_buffer );
|
|
||||||
_Thread_Disable_dispatch();
|
|
||||||
_TOD_Set( time_buffer, seconds );
|
|
||||||
_Thread_Enable_dispatch();
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
return RTEMS_INVALID_CLOCK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* rtems_clock_tick
|
|
||||||
*
|
|
||||||
* This directive notifies the executve that a tick has occurred.
|
|
||||||
* When the tick occurs the time manager updates and maintains
|
|
||||||
* the calendar time, timeslicing, and any timeout delays.
|
|
||||||
*
|
|
||||||
* Input parameters: NONE
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* RTEMS_SUCCESSFUL - always succeeds
|
|
||||||
*
|
|
||||||
* NOTE: This routine only works for leap-years through 2099.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_tick( void )
|
|
||||||
{
|
|
||||||
_TOD_Tickle_ticks();
|
|
||||||
|
|
||||||
_Watchdog_Tickle_ticks();
|
|
||||||
|
|
||||||
_Thread_Tickle_timeslice();
|
|
||||||
|
|
||||||
if ( _Thread_Is_context_switch_necessary() &&
|
|
||||||
_Thread_Is_dispatching_enabled() )
|
|
||||||
_Thread_Dispatch();
|
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|||||||
90
cpukit/rtems/src/clockget.c
Normal file
90
cpukit/rtems/src/clockget.c
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Clock Manager
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1998.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtems/system.h>
|
||||||
|
#include <rtems/rtems/status.h>
|
||||||
|
#include <rtems/rtems/clock.h>
|
||||||
|
#include <rtems/score/isr.h>
|
||||||
|
#include <rtems/score/thread.h>
|
||||||
|
#include <rtems/score/tod.h>
|
||||||
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* rtems_clock_get
|
||||||
|
*
|
||||||
|
* This directive returns the current date and time. If the time has
|
||||||
|
* not been set by a tm_set then an error is returned.
|
||||||
|
*
|
||||||
|
* Input parameters:
|
||||||
|
* option - which value to return
|
||||||
|
* time_buffer - pointer to output buffer (a time and date structure
|
||||||
|
* or an interval)
|
||||||
|
*
|
||||||
|
* Output parameters:
|
||||||
|
* time_buffer - output filled in
|
||||||
|
* RTEMS_SUCCESSFUL - if successful
|
||||||
|
* error code - if unsuccessful
|
||||||
|
*/
|
||||||
|
|
||||||
|
rtems_status_code rtems_clock_get(
|
||||||
|
rtems_clock_get_options option,
|
||||||
|
void *time_buffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
ISR_Level level;
|
||||||
|
rtems_interval tmp;
|
||||||
|
|
||||||
|
switch ( option ) {
|
||||||
|
case RTEMS_CLOCK_GET_TOD:
|
||||||
|
if ( !_TOD_Is_set )
|
||||||
|
return RTEMS_NOT_DEFINED;
|
||||||
|
|
||||||
|
*(rtems_time_of_day *)time_buffer = _TOD_Current;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
|
||||||
|
if ( !_TOD_Is_set )
|
||||||
|
return RTEMS_NOT_DEFINED;
|
||||||
|
|
||||||
|
*(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
|
||||||
|
*(rtems_interval *)time_buffer = _Watchdog_Ticks_since_boot;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
|
||||||
|
*(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
|
||||||
|
case RTEMS_CLOCK_GET_TIME_VALUE:
|
||||||
|
if ( !_TOD_Is_set )
|
||||||
|
return RTEMS_NOT_DEFINED;
|
||||||
|
|
||||||
|
_ISR_Disable( level );
|
||||||
|
((rtems_clock_time_value *)time_buffer)->seconds =
|
||||||
|
_TOD_Seconds_since_epoch;
|
||||||
|
tmp = _TOD_Current.ticks;
|
||||||
|
_ISR_Enable( level );
|
||||||
|
|
||||||
|
tmp *= _TOD_Microseconds_per_tick;
|
||||||
|
((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RTEMS_INTERNAL_ERROR; /* should never get here */
|
||||||
|
|
||||||
|
}
|
||||||
51
cpukit/rtems/src/clockset.c
Normal file
51
cpukit/rtems/src/clockset.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Clock Manager
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1998.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtems/system.h>
|
||||||
|
#include <rtems/rtems/status.h>
|
||||||
|
#include <rtems/rtems/clock.h>
|
||||||
|
#include <rtems/score/isr.h>
|
||||||
|
#include <rtems/score/thread.h>
|
||||||
|
#include <rtems/score/tod.h>
|
||||||
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* rtems_clock_set
|
||||||
|
*
|
||||||
|
* This directive sets the date and time for this node.
|
||||||
|
*
|
||||||
|
* Input parameters:
|
||||||
|
* time_buffer - pointer to the time and date structure
|
||||||
|
*
|
||||||
|
* Output parameters:
|
||||||
|
* RTEMS_SUCCESSFUL - if successful
|
||||||
|
* error code - if unsuccessful
|
||||||
|
*/
|
||||||
|
|
||||||
|
rtems_status_code rtems_clock_set(
|
||||||
|
rtems_time_of_day *time_buffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
rtems_interval seconds;
|
||||||
|
|
||||||
|
if ( _TOD_Validate( time_buffer ) ) {
|
||||||
|
seconds = _TOD_To_seconds( time_buffer );
|
||||||
|
_Thread_Disable_dispatch();
|
||||||
|
_TOD_Set( time_buffer, seconds );
|
||||||
|
_Thread_Enable_dispatch();
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
return RTEMS_INVALID_CLOCK;
|
||||||
|
}
|
||||||
52
cpukit/rtems/src/clocktick.c
Normal file
52
cpukit/rtems/src/clocktick.c
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Clock Manager
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1998.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtems/system.h>
|
||||||
|
#include <rtems/rtems/status.h>
|
||||||
|
#include <rtems/rtems/clock.h>
|
||||||
|
#include <rtems/score/isr.h>
|
||||||
|
#include <rtems/score/thread.h>
|
||||||
|
#include <rtems/score/tod.h>
|
||||||
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* rtems_clock_tick
|
||||||
|
*
|
||||||
|
* This directive notifies the executve that a tick has occurred.
|
||||||
|
* When the tick occurs the time manager updates and maintains
|
||||||
|
* the calendar time, timeslicing, and any timeout delays.
|
||||||
|
*
|
||||||
|
* Input parameters: NONE
|
||||||
|
*
|
||||||
|
* Output parameters:
|
||||||
|
* RTEMS_SUCCESSFUL - always succeeds
|
||||||
|
*
|
||||||
|
* NOTE: This routine only works for leap-years through 2099.
|
||||||
|
*/
|
||||||
|
|
||||||
|
rtems_status_code rtems_clock_tick( void )
|
||||||
|
{
|
||||||
|
_TOD_Tickle_ticks();
|
||||||
|
|
||||||
|
_Watchdog_Tickle_ticks();
|
||||||
|
|
||||||
|
_Thread_Tickle_timeslice();
|
||||||
|
|
||||||
|
if ( _Thread_Is_context_switch_necessary() &&
|
||||||
|
_Thread_Is_dispatching_enabled() )
|
||||||
|
_Thread_Dispatch();
|
||||||
|
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
@@ -20,132 +20,4 @@
|
|||||||
#include <rtems/score/tod.h>
|
#include <rtems/score/tod.h>
|
||||||
#include <rtems/score/watchdog.h>
|
#include <rtems/score/watchdog.h>
|
||||||
|
|
||||||
/*PAGE
|
/* No initialization routine */
|
||||||
*
|
|
||||||
* rtems_clock_get
|
|
||||||
*
|
|
||||||
* This directive returns the current date and time. If the time has
|
|
||||||
* not been set by a tm_set then an error is returned.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* option - which value to return
|
|
||||||
* time_buffer - pointer to output buffer (a time and date structure
|
|
||||||
* or an interval)
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* time_buffer - output filled in
|
|
||||||
* RTEMS_SUCCESSFUL - if successful
|
|
||||||
* error code - if unsuccessful
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_get(
|
|
||||||
rtems_clock_get_options option,
|
|
||||||
void *time_buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ISR_Level level;
|
|
||||||
rtems_interval tmp;
|
|
||||||
|
|
||||||
switch ( option ) {
|
|
||||||
case RTEMS_CLOCK_GET_TOD:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
*(rtems_time_of_day *)time_buffer = _TOD_Current;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
*(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
|
|
||||||
*(rtems_interval *)time_buffer = _Watchdog_Ticks_since_boot;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
|
|
||||||
*(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
|
|
||||||
case RTEMS_CLOCK_GET_TIME_VALUE:
|
|
||||||
if ( !_TOD_Is_set )
|
|
||||||
return RTEMS_NOT_DEFINED;
|
|
||||||
|
|
||||||
_ISR_Disable( level );
|
|
||||||
((rtems_clock_time_value *)time_buffer)->seconds =
|
|
||||||
_TOD_Seconds_since_epoch;
|
|
||||||
tmp = _TOD_Current.ticks;
|
|
||||||
_ISR_Enable( level );
|
|
||||||
|
|
||||||
tmp *= _TOD_Microseconds_per_tick;
|
|
||||||
((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
|
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return RTEMS_INTERNAL_ERROR; /* should never get here */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* rtems_clock_set
|
|
||||||
*
|
|
||||||
* This directive sets the date and time for this node.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* time_buffer - pointer to the time and date structure
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* RTEMS_SUCCESSFUL - if successful
|
|
||||||
* error code - if unsuccessful
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_set(
|
|
||||||
rtems_time_of_day *time_buffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
rtems_interval seconds;
|
|
||||||
|
|
||||||
if ( _TOD_Validate( time_buffer ) ) {
|
|
||||||
seconds = _TOD_To_seconds( time_buffer );
|
|
||||||
_Thread_Disable_dispatch();
|
|
||||||
_TOD_Set( time_buffer, seconds );
|
|
||||||
_Thread_Enable_dispatch();
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
return RTEMS_INVALID_CLOCK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
*
|
|
||||||
* rtems_clock_tick
|
|
||||||
*
|
|
||||||
* This directive notifies the executve that a tick has occurred.
|
|
||||||
* When the tick occurs the time manager updates and maintains
|
|
||||||
* the calendar time, timeslicing, and any timeout delays.
|
|
||||||
*
|
|
||||||
* Input parameters: NONE
|
|
||||||
*
|
|
||||||
* Output parameters:
|
|
||||||
* RTEMS_SUCCESSFUL - always succeeds
|
|
||||||
*
|
|
||||||
* NOTE: This routine only works for leap-years through 2099.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_status_code rtems_clock_tick( void )
|
|
||||||
{
|
|
||||||
_TOD_Tickle_ticks();
|
|
||||||
|
|
||||||
_Watchdog_Tickle_ticks();
|
|
||||||
|
|
||||||
_Thread_Tickle_timeslice();
|
|
||||||
|
|
||||||
if ( _Thread_Is_context_switch_necessary() &&
|
|
||||||
_Thread_Is_dispatching_enabled() )
|
|
||||||
_Thread_Dispatch();
|
|
||||||
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user