Changeset 3a4ae6c in rtems for c/src/lib/libbsp/i960
- 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
- Location:
- c/src/lib/libbsp/i960/cvme961
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/i960/cvme961/clock/ckinit.c
r5072b07 r3a4ae6c 21 21 #include <stdlib.h> 22 22 23 #include <rtems.h>24 23 #include <bsp.h> 25 #include <clockdrv.h> 24 #include <rtems/libio.h> 25 26 #define CLOCK_VECTOR 5 26 27 27 28 rtems_unsigned32 Clock_isrs; /* ISRs until next tick */ … … 30 31 /* ticks since initialization */ 31 32 32 rtems_device_driver Clock_initialize( 33 rtems_device_major_number major, 34 rtems_device_minor_number minor, 35 void *pargp, 36 rtems_id id, 37 rtems_unsigned32 *rval ) 38 { 39 Install_clock( Clock_isr ); 40 atexit( Clock_exit ); 41 } 33 void Clock_exit( void ); 34 35 /* 36 * These are set by clock driver during its init 37 */ 38 39 rtems_device_major_number rtems_clock_major = ~0; 40 rtems_device_minor_number rtems_clock_minor; 42 41 43 void ReInstall_clock( 44 rtems_isr_entry clock_isr 45 ) 46 { 47 (void) set_vector( clock_isr, 5, 1 ); 48 } 42 43 /* this is later in the file to avoid it being inlined */ 44 rtems_isr Clock_isr( rtems_vector_number vector ); 49 45 50 46 void Install_clock( … … 58 54 59 55 if ( BSP_Configuration.ticks_per_timeslice ) { 60 Old_ticker = set_vector( clock_isr, 5, 1 );56 Old_ticker = set_vector( clock_isr, CLOCK_VECTOR, 1 ); 61 57 victimer = (volatile unsigned char *) 0xa00000c3; 62 58 *victimer = 0x12; 63 59 *victimer = 0x92; /* 1000 HZ */ 64 60 } 61 } 62 63 void ReInstall_clock( 64 rtems_isr_entry clock_isr 65 ) 66 { 67 (void) set_vector( clock_isr, CLOCK_VECTOR, 1 ); 65 68 } 66 69 … … 76 79 } 77 80 } 81 82 rtems_device_driver Clock_initialize( 83 rtems_device_major_number major, 84 rtems_device_minor_number minor, 85 void *pargp 86 ) 87 { 88 Install_clock( Clock_isr ); 89 90 atexit( Clock_exit ); 91 92 /* 93 * make major/minor avail to others such as shared memory driver 94 */ 95 96 rtems_clock_major = major; 97 rtems_clock_minor = minor; 98 99 return RTEMS_SUCCESSFUL; 100 } 101 102 rtems_device_driver Clock_control( 103 rtems_device_major_number major, 104 rtems_device_minor_number minor, 105 void *pargp 106 ) 107 { 108 rtems_libio_ioctl_args_t *args = pargp; 109 110 if (args == 0) 111 goto done; 112 113 /* 114 * This is hokey, but until we get a defined interface 115 * to do this, it will just be this simple... 116 */ 117 118 if (args->command == rtems_build_name('I', 'S', 'R', ' ')) 119 { 120 Clock_isr(CLOCK_VECTOR); 121 } 122 else if (args->command == rtems_build_name('N', 'E', 'W', ' ')) 123 { 124 ReInstall_clock(args->buffer); 125 } 126 127 done: 128 return RTEMS_SUCCESSFUL; 129 } 130 131 rtems_isr Clock_isr( 132 rtems_vector_number vector 133 ) 134 { 135 /* enable_tracing(); */ 136 Clock_driver_ticks += 1; 137 if ( Clock_isrs == 1 ) { 138 rtems_clock_tick(); 139 Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000; 140 } 141 else 142 Clock_isrs -= 1; 143 i960_clear_intr( 5 ); 144 } 145 -
c/src/lib/libbsp/i960/cvme961/console/console.c
r5072b07 r3a4ae6c 1 1 /* 2 * This file contains the MVME136console IO package.2 * This file contains the CVME961 console IO package. 3 3 * 4 4 * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. … … 15 15 #define C961_INIT 16 16 17 #include <rtems.h> 18 #include "console.h" 19 #include "bsp.h" 17 #include <bsp.h> 18 #include <rtems/libio.h> 20 19 21 20 /* console_initialize … … 33 32 rtems_device_major_number major, 34 33 rtems_device_minor_number minor, 35 void *arg, 36 rtems_id self, 37 rtems_unsigned32 *status 38 ) 39 { 40 *status = RTEMS_SUCCESSFUL; 34 void *arg 35 ) 36 { 37 rtems_status_code status; 38 39 status = rtems_io_register_name( 40 "/dev/console", 41 major, 42 (rtems_device_minor_number) 0 43 ); 44 45 if (status != RTEMS_SUCCESSFUL) 46 rtems_fatal_error_occurred(status); 47 48 return RTEMS_SUCCESSFUL; 41 49 } 42 50 … … 101 109 102 110 /* 103 * __read -- read bytes from the serial port. Ignore fd, since 104 * we only have stdin. 105 */ 106 107 int __read( 108 int fd, 109 char *buf, 110 int nbytes 111 ) 112 { 113 int i = 0; 114 115 for (i = 0; i < nbytes; i++) { 116 *(buf + i) = inbyte(); 117 if ((*(buf + i) == '\n') || (*(buf + i) == '\r')) { 118 (*(buf + i++)) = '\n'; 119 (*(buf + i)) = 0; 111 * Open entry point 112 */ 113 114 rtems_device_driver console_open( 115 rtems_device_major_number major, 116 rtems_device_minor_number minor, 117 void * arg 118 ) 119 { 120 return RTEMS_SUCCESSFUL; 121 } 122 123 /* 124 * Close entry point 125 */ 126 127 rtems_device_driver console_close( 128 rtems_device_major_number major, 129 rtems_device_minor_number minor, 130 void * arg 131 ) 132 { 133 return RTEMS_SUCCESSFUL; 134 } 135 136 /* 137 * read bytes from the serial port. We only have stdin. 138 */ 139 140 rtems_device_driver console_read( 141 rtems_device_major_number major, 142 rtems_device_minor_number minor, 143 void * arg 144 ) 145 { 146 rtems_libio_rw_args_t *rw_args; 147 char *buffer; 148 int maximum; 149 int count = 0; 150 151 rw_args = (rtems_libio_rw_args_t *) arg; 152 153 buffer = rw_args->buffer; 154 maximum = rw_args->count; 155 156 for (count = 0; count < maximum; count++) { 157 buffer[ count ] = inbyte(); 158 if (buffer[ count ] == '\n' || buffer[ count ] == '\r') { 159 buffer[ count++ ] = '\n'; 160 buffer[ count ] = 0; 120 161 break; 121 162 } 122 163 } 123 return (i); 124 } 125 126 /* 127 * __write -- write bytes to the serial port. Ignore fd, since 128 * stdout and stderr are the same. Since we have no filesystem, 129 * open will only return an error. 130 */ 131 132 int __write( 133 int fd, 134 char *buf, 135 int nbytes 136 ) 137 { 138 int i; 139 140 for (i = 0; i < nbytes; i++) { 141 if (*(buf + i) == '\n') { 142 outbyte ('\r'); 164 165 rw_args->bytes_moved = count; 166 return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED; 167 } 168 169 /* 170 * write bytes to the serial port. Stdout and stderr are the same. 171 */ 172 173 rtems_device_driver console_write( 174 rtems_device_major_number major, 175 rtems_device_minor_number minor, 176 void * arg 177 ) 178 { 179 int count; 180 int maximum; 181 rtems_libio_rw_args_t *rw_args; 182 char *buffer; 183 184 rw_args = (rtems_libio_rw_args_t *) arg; 185 186 buffer = rw_args->buffer; 187 maximum = rw_args->count; 188 189 for (count = 0; count < maximum; count++) { 190 if ( buffer[ count ] == '\n') { 191 outbyte('\r'); 143 192 } 144 outbyte (*(buf + i));193 outbyte( buffer[ count ] ); 145 194 } 146 return (nbytes); 147 } 195 return maximum; 196 } 197 198 /* 199 * IO Control entry point 200 */ 201 202 rtems_device_driver console_control( 203 rtems_device_major_number major, 204 rtems_device_minor_number minor, 205 void * arg 206 ) 207 { 208 return RTEMS_SUCCESSFUL; 209 } 210 -
c/src/lib/libbsp/i960/cvme961/include/bsp.h
r5072b07 r3a4ae6c 25 25 #include <rtems.h> 26 26 #include <iosupp.h> 27 #include <console.h> 28 #include <clockdrv.h> 27 29 28 30 /* … … 116 118 BSP_EXTERN i960ca_control_table *Ctl_tbl; 117 119 120 /* 121 * Device Driver Table Entries 122 */ 123 124 /* 125 * NOTE: Use the standard Console driver entry 126 */ 127 128 /* 129 * NOTE: Use the standard Clock driver entry 130 */ 131 132 /* 133 * How many libio files we want 134 */ 135 136 #define BSP_LIBIO_MAX_FDS 20 137 118 138 /* functions */ 119 139 -
c/src/lib/libbsp/i960/cvme961/startup/bspstart.c
r5072b07 r3a4ae6c 21 21 */ 22 22 23 #include <rtems.h>24 23 #include <bsp.h> 25 #include "libcsupport.h" 26 27 28 #include "stackchk.h" 24 #include <rtems/libio.h> 25 26 #include <libcsupport.h> 27 28 #include <string.h> 29 #include <fcntl.h> 30 31 #ifdef STACK_CHECKER_ON 32 #include <stackchk.h> 33 #endif 29 34 30 35 /* … … 38 43 39 44 rtems_cpu_table Cpu_table; 45 46 char *rtems_progname; 40 47 41 48 /* Initialize whatever libc we are using … … 53 60 54 61 RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0); 62 63 /* 64 * Init the RTEMS libio facility to provide UNIX-like system 65 * calls for use by newlib (ie: provide __open, __close, etc) 66 * Uses malloc() to get area for the iops, so must be after malloc init 67 */ 68 69 rtems_libio_init(); 55 70 56 71 /* … … 71 86 } 72 87 73 int bsp_start( 88 /* 89 * After drivers are setup, register some "filenames" 90 * and open stdin, stdout, stderr files 91 * 92 * Newlib will automatically associate the files with these 93 * (it hardcodes the numbers) 94 */ 95 96 void 97 bsp_postdriver_hook(void) 98 { 99 int stdin_fd, stdout_fd, stderr_fd; 100 101 if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1) 102 rtems_fatal_error_occurred('STD0'); 103 104 if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1) 105 rtems_fatal_error_occurred('STD1'); 106 107 if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1) 108 rtems_fatal_error_occurred('STD2'); 109 110 if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2)) 111 rtems_fatal_error_occurred('STIO'); 112 } 113 114 int main( 74 115 int argc, 75 116 char **argv, … … 77 118 ) 78 119 { 120 if ((argc > 0) && argv && argv[0]) 121 rtems_progname = argv[0]; 122 else 123 rtems_progname = "RTEMS"; 124 79 125 /* set node number in SQSIO4 CTL REG */ 80 126 … … 111 157 Cpu_table.predriver_hook = bsp_libc_init; /* RTEMS resources available */ 112 158 113 Cpu_table.postdriver_hook = NULL; /* Call our main() for constructors */159 Cpu_table.postdriver_hook = bsp_postdriver_hook; 114 160 115 161 Cpu_table.idle_task = NULL; /* do not override system IDLE task */ … … 151 197 #endif 152 198 199 /* 200 * Tell libio how many fd's we want and allow it to tweak config 201 */ 202 203 rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS); 204 153 205 BSP_Configuration.work_space_start = (void *) 154 206 (RAM_END - BSP_Configuration.work_space_size);
Note: See TracChangeset
for help on using the changeset viewer.