Changeset bd83f47 in rtems for cpukit/rtems/src/rtclock.c


Ignore:
Timestamp:
May 17, 1999, 10:42:47 PM (22 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
86cb89f
Parents:
5aa64518
Message:

Split Clock Manager into one routine per file.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/rtems/src/rtclock.c

    r5aa64518 rbd83f47  
    2121#include <rtems/score/watchdog.h>
    2222
    23 /*PAGE
    24  *
    25  *  rtems_clock_get
    26  *
    27  *  This directive returns the current date and time.  If the time has
    28  *  not been set by a tm_set then an error is returned.
    29  *
    30  *  Input parameters:
    31  *    option      - which value to return
    32  *    time_buffer - pointer to output buffer (a time and date structure
    33  *                  or an interval)
    34  *
    35  *  Output parameters:
    36  *    time_buffer      - output filled in
    37  *    RTEMS_SUCCESSFUL - if successful
    38  *    error code       - if unsuccessful
    39  */
    40 
    41 rtems_status_code rtems_clock_get(
    42   rtems_clock_get_options  option,
    43   void                    *time_buffer
    44 )
    45 {
    46   ISR_Level      level;
    47   rtems_interval tmp;
    48 
    49   switch ( option ) {
    50     case RTEMS_CLOCK_GET_TOD:
    51       if ( !_TOD_Is_set )
    52         return RTEMS_NOT_DEFINED;
    53 
    54       *(rtems_time_of_day *)time_buffer = _TOD_Current;
    55       return RTEMS_SUCCESSFUL;
    56 
    57     case RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH:
    58       if ( !_TOD_Is_set )
    59         return RTEMS_NOT_DEFINED;
    60 
    61       *(rtems_interval *)time_buffer = _TOD_Seconds_since_epoch;
    62       return RTEMS_SUCCESSFUL;
    63 
    64     case RTEMS_CLOCK_GET_TICKS_SINCE_BOOT:
    65       *(rtems_interval *)time_buffer = _Watchdog_Ticks_since_boot;
    66       return RTEMS_SUCCESSFUL;
    67 
    68     case RTEMS_CLOCK_GET_TICKS_PER_SECOND:
    69       *(rtems_interval *)time_buffer = _TOD_Ticks_per_second;
    70       return RTEMS_SUCCESSFUL;
    71 
    72     case RTEMS_CLOCK_GET_TIME_VALUE:
    73       if ( !_TOD_Is_set )
    74         return RTEMS_NOT_DEFINED;
    75 
    76       _ISR_Disable( level );
    77         ((rtems_clock_time_value *)time_buffer)->seconds =
    78           _TOD_Seconds_since_epoch;
    79         tmp = _TOD_Current.ticks;
    80       _ISR_Enable( level );
    81 
    82       tmp *= _TOD_Microseconds_per_tick;
    83       ((rtems_clock_time_value *)time_buffer)->microseconds = tmp;
    84 
    85       return RTEMS_SUCCESSFUL;
    86   }
    87 
    88   return RTEMS_INTERNAL_ERROR;   /* should never get here */
    89 
    90 }
    91 
    92 /*PAGE
    93  *
    94  *  rtems_clock_set
    95  *
    96  *  This directive sets the date and time for this node.
    97  *
    98  *  Input parameters:
    99  *    time_buffer - pointer to the time and date structure
    100  *
    101  *  Output parameters:
    102  *    RTEMS_SUCCESSFUL - if successful
    103  *    error code        - if unsuccessful
    104  */
    105 
    106 rtems_status_code rtems_clock_set(
    107   rtems_time_of_day *time_buffer
    108 )
    109 {
    110   rtems_interval     seconds;
    111 
    112   if ( _TOD_Validate( time_buffer ) ) {
    113     seconds = _TOD_To_seconds( time_buffer );
    114     _Thread_Disable_dispatch();
    115       _TOD_Set( time_buffer, seconds );
    116     _Thread_Enable_dispatch();
    117     return RTEMS_SUCCESSFUL;
    118   }
    119   return RTEMS_INVALID_CLOCK;
    120 }
    121 
    122 /*PAGE
    123  *
    124  *  rtems_clock_tick
    125  *
    126  *  This directive notifies the executve that a tick has occurred.
    127  *  When the tick occurs the time manager updates and maintains
    128  *  the calendar time, timeslicing, and any timeout delays.
    129  *
    130  *  Input parameters:  NONE
    131  *
    132  *  Output parameters:
    133  *    RTEMS_SUCCESSFUL - always succeeds
    134  *
    135  *  NOTE: This routine only works for leap-years through 2099.
    136  */
    137 
    138 rtems_status_code rtems_clock_tick( void )
    139 {
    140   _TOD_Tickle_ticks();
    141 
    142   _Watchdog_Tickle_ticks();
    143 
    144   _Thread_Tickle_timeslice();
    145 
    146   if ( _Thread_Is_context_switch_necessary() &&
    147        _Thread_Is_dispatching_enabled() )
    148     _Thread_Dispatch();
    149 
    150   return RTEMS_SUCCESSFUL;
    151 }
     23/* No initialization routine */
Note: See TracChangeset for help on using the changeset viewer.