Changeset bd83f47 in rtems for cpukit/rtems/src/rtclock.c
- Timestamp:
- May 17, 1999, 10:42:47 PM (22 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 86cb89f
- Parents:
- 5aa64518
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/rtems/src/rtclock.c
r5aa64518 rbd83f47 21 21 #include <rtems/score/watchdog.h> 22 22 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.