Changeset bd83f47 in rtems
- 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
- Files:
-
- 6 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/exec/rtems/src/Makefile.in
r5aa64518 rbd83f47 25 25 taskstart tasksuspend taskwakeafter taskwakewhen 26 26 27 CLOCK_PIECES= 28 clock clockget clockset clocktick 29 27 30 REGION_PIECES=\ 28 31 region regioncreate regiondelete regionextend regiongetsegment \ 29 32 regiongetsegmentsize regionident regionreturnsegemnt regionreturnsegemnt 30 33 31 C_PIECES=attr clockdpmem event intr intrbody msg \34 C_PIECES=attr $(CLOCK_PIECES) dpmem event intr intrbody msg \ 32 35 part ratemon $(REGION_PIECES) sem signal \ 33 36 $(TASK_PIECES) timer $(MP_PIECES) -
c/src/exec/rtems/src/clock.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 */ -
c/src/exec/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 */ -
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.