Changeset 3a4ae6c in rtems for c/src/lib/libbsp/i386/force386/clock
- Timestamp:
- 09/11/95 19:35:39 (28 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- ced11f99
- Parents:
- 5072b07
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/i386/force386/clock/ckinit.c
r5072b07 r3a4ae6c 20 20 21 21 #include <bsp.h> 22 #include <clockdrv.h> 22 23 #include <rtems/libio.h> 24 23 25 #include <stdlib.h> 24 26 27 #define CLOCK_VECTOR 0x38 28 29 rtems_unsigned32 Clock_isrs; /* ISRs until next tick */ 30 25 31 volatile rtems_unsigned32 Clock_driver_ticks; 26 rtems_unsigned32 Clock_isrs; /* ISRs until next tick */ 32 27 33 rtems_isr_entry Old_ticker; 28 34 29 rtems_device_driver Clock_initialize( 30 rtems_device_major_number major, 31 rtems_device_minor_number minor, 32 void *pargp, 33 rtems_id tid, 34 rtems_unsigned32 *rval 35 void Clock_exit( void ); 36 37 /* 38 * These are set by clock driver during its init 39 */ 40 41 rtems_device_major_number rtems_clock_major = ~0; 42 rtems_device_major_number rtems_clock_minor = 0; 43 44 /* 45 * This is the ISR handler. 46 */ 47 48 rtems_isr Clock_isr( 49 rtems_vector_number vector 35 50 ) 36 51 { 37 Install_clock( Clock_isr ); 38 } 39 40 void ReInstall_clock( 41 rtems_isr_entry clock_isr 42 ) 43 { 44 rtems_unsigned32 isrlevel = 0; 45 46 rtems_interrupt_disable( isrlevel ); 47 (void) set_vector( clock_isr, 0x38, 1 ); 48 rtems_interrupt_enable( isrlevel ); 52 /* enable_tracing(); */ 53 Clock_driver_ticks += 1; 54 if ( Clock_isrs == 1 ) { 55 rtems_clock_tick(); 56 Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000; 57 } 58 else 59 Clock_isrs -= 1; 49 60 } 50 61 … … 57 68 58 69 if ( BSP_Configuration.ticks_per_timeslice ) { 59 Old_ticker = ( rtems_isr_entry ) set_vector( clock_isr, 0x38, 1 );70 Old_ticker = ( rtems_isr_entry ) set_vector( clock_isr, CLOCK_VECTOR, 1 ); 60 71 outport_byte( TBCR, 0x14 ); /* reset it, delay mode, 50X */ 61 72 outport_byte( TBDR, 0x50 ); /* 1 millisecond */ … … 63 74 } 64 75 atexit( Clock_exit ); 76 } 77 78 void ReInstall_clock( 79 rtems_isr_entry clock_isr 80 ) 81 { 82 rtems_unsigned32 isrlevel = 0; 83 84 rtems_interrupt_disable( isrlevel ); 85 (void) set_vector( clock_isr, CLOCK_VECTOR, 1 ); 86 rtems_interrupt_enable( isrlevel ); 65 87 } 66 88 … … 74 96 } 75 97 98 rtems_device_driver Clock_initialize( 99 rtems_device_major_number major, 100 rtems_device_minor_number minor, 101 void *pargp 102 ) 103 { 104 Install_clock( Clock_isr ); 105 106 /* 107 * make major/minor avail to others such as shared memory driver 108 */ 109 110 rtems_clock_major = major; 111 rtems_clock_minor = minor; 112 113 return RTEMS_SUCCESSFUL; 114 } 115 116 rtems_device_driver Clock_control( 117 rtems_device_major_number major, 118 rtems_device_minor_number minor, 119 void *pargp 120 ) 121 { 122 rtems_libio_ioctl_args_t *args = pargp; 123 124 if (args == 0) 125 goto done; 126 127 /* 128 * This is hokey, but until we get a defined interface 129 * to do this, it will just be this simple... 130 */ 131 132 if (args->command == rtems_build_name('I', 'S', 'R', ' ')) 133 { 134 Clock_isr(CLOCK_VECTOR); 135 } 136 else if (args->command == rtems_build_name('N', 'E', 'W', ' ')) 137 { 138 ReInstall_clock(args->buffer); 139 } 140 141 done: 142 return RTEMS_SUCCESSFUL; 143 }
Note: See TracChangeset
for help on using the changeset viewer.