Changeset 923dd7a in rtems
- Timestamp:
- May 22, 2008, 8:34:27 PM (12 years ago)
- Branches:
- 4.10, 4.11, 4.9, master
- Children:
- cdc8309
- Parents:
- 07edbef5
- Location:
- c/src/lib/libbsp/powerpc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/powerpc/ChangeLog
r07edbef5 r923dd7a 1 2008-05-22 Joel Sherrill <joel.sherrill@oarcorp.com> 2 3 * shared/console/console.c: Remove explicit switch and call 4 termios_baud_to_number(). 5 1 6 2008-05-15 Joel Sherrill <joel.sherrill@OARcorp.com> 2 7 -
c/src/lib/libbsp/powerpc/shared/console/console.c
r07edbef5 r923dd7a 36 36 #include <termios.h> 37 37 #include <bsp/uart.h> 38 #include <rtems/bspIo.h> 38 #include <rtems/bspIo.h> /* printk */ 39 39 40 40 /* Definitions for BSPConsolePort */ 41 41 /* 42 42 * Possible value for console input/output : 43 * 44 * 45 * 43 * BSP_CONSOLE_PORT_CONSOLE 44 * BSP_UART_COM1 45 * BSP_UART_COM2 46 46 */ 47 47 int BSPConsolePort = BSP_CONSOLE_PORT; … … 55 55 */ 56 56 #ifndef TERMIOS_OUTPUT_MODE 57 #if 1 58 #define TERMIOS_OUTPUT_MODE TERMIOS_IRQ_DRIVEN 57 #if 1 58 #define TERMIOS_OUTPUT_MODE TERMIOS_IRQ_DRIVEN 59 #else 60 #define TERMIOS_OUTPUT_MODE TERMIOS_TASK_DRIVEN 61 #endif 62 #endif 63 64 #if ! defined(USE_POLLED_IO) && (TERMIOS_OUTPUT_MODE == TERMIOS_POLLED) 65 #define USE_POLLED_IO 66 #endif 67 68 /*-------------------------------------------------------------------------+ 69 | External Prototypes 70 +--------------------------------------------------------------------------*/ 71 72 static int conSetAttr(int minor, const struct termios *); 73 74 typedef struct TtySTblRec_ { 75 char *name; 76 rtems_irq_hdl isr; 77 } TtySTblRec, *TtySTbl; 78 79 static TtySTblRec ttyS[]={ 80 { "/dev/ttyS0", 81 #ifdef BSP_UART_IOBASE_COM1 82 BSP_uart_termios_isr_com1 59 83 #else 60 #define TERMIOS_OUTPUT_MODE TERMIOS_TASK_DRIVEN 61 #endif 62 #endif 63 64 #if ! defined(USE_POLLED_IO) && (TERMIOS_OUTPUT_MODE == TERMIOS_POLLED) 65 #define USE_POLLED_IO 66 #endif 67 68 /*-------------------------------------------------------------------------+ 69 | External Prototypes 70 +--------------------------------------------------------------------------*/ 71 72 static int conSetAttr(int minor, const struct termios *); 73 74 typedef struct TtySTblRec_ { 75 char *name; 76 rtems_irq_hdl isr; 77 } TtySTblRec, *TtySTbl; 78 79 static TtySTblRec ttyS[]={ 80 { "/dev/ttyS0", 81 #ifdef BSP_UART_IOBASE_COM1 82 BSP_uart_termios_isr_com1 84 0 85 #endif 86 }, 87 { "/dev/ttyS1", 88 #ifdef BSP_UART_IOBASE_COM2 89 BSP_uart_termios_isr_com2 83 90 #else 84 0 85 #endif 86 }, 87 { "/dev/ttyS1", 88 #ifdef BSP_UART_IOBASE_COM2 89 BSP_uart_termios_isr_com2 90 #else 91 0 92 #endif 93 }, 91 0 92 #endif 93 }, 94 94 }; 95 95 … … 99 99 | Initilizes the I/O console (keyboard + VGA display) driver. 100 100 +--------------------------------------------------------------------------*/ 101 rtems_device_driver 102 console_initialize(rtems_device_major_number major, 103 rtems_device_minor_number minor, 104 void *arg) 101 rtems_device_driver console_initialize( 102 rtems_device_major_number major, 103 rtems_device_minor_number minor, 104 void *arg 105 ) 105 106 { 106 107 rtems_status_code status; … … 114 115 * Set up TERMIOS 115 116 */ 116 rtems_termios_initialize 117 rtems_termios_initialize(); 117 118 118 119 /* … … 125 126 126 127 for (minor=0; minor < sizeof(ttyS)/sizeof(ttyS[0]); minor++) { 127 char *nm; 128 /* 129 * Skip ports (possibly not supported by BSP...) we have no ISR for 130 */ 131 if ( ! ttyS[minor].isr ) 132 continue; 133 /* 134 * Register the device 135 */ 136 status = rtems_io_register_name ((nm=ttyS[minor].name), major, minor); 137 if ( RTEMS_SUCCESSFUL==status && BSPConsolePort == minor) 138 { 139 printk("Registering /dev/console as minor %d (==%s)\n", 140 minor, 141 ttyS[minor].name); 142 /* also register an alias */ 143 status = rtems_io_register_name ( 144 (nm="/dev/console"), 145 major, 146 minor); 147 } 148 if (status != RTEMS_SUCCESSFUL) 149 { 150 printk("Error registering %s!\n",nm); 151 rtems_fatal_error_occurred (status); 152 } 128 char *nm; 129 /* 130 * Skip ports (possibly not supported by BSP...) we have no ISR for 131 */ 132 if ( ! ttyS[minor].isr ) 133 continue; 134 /* 135 * Register the device 136 */ 137 status = rtems_io_register_name ((nm=ttyS[minor].name), major, minor); 138 if ( RTEMS_SUCCESSFUL==status && BSPConsolePort == minor) { 139 printk("Registering /dev/console as minor %d (==%s)\n", 140 minor, 141 ttyS[minor].name); 142 /* also register an alias */ 143 status = rtems_io_register_name ( (nm="/dev/console"), major, minor); 144 } 145 146 if (status != RTEMS_SUCCESSFUL) { 147 printk("Error registering %s!\n",nm); 148 rtems_fatal_error_occurred (status); 149 } 153 150 } 154 151 … … 160 157 rtems_status_code status; 161 158 162 /* must not open a minor device we have no ISR for */ 163 assert( minor>=0 && minor < sizeof(ttyS)/sizeof(ttyS[0]) && ttyS[minor].isr ); 164 165 /* 9600-8-N-1 */ 166 BSP_uart_init(minor, 9600, 0); 167 status = BSP_uart_install_isr(minor, ttyS[minor].isr); 168 if (!status) 169 { 170 printk("Error installing serial console interrupt handler for '%s'!\n", 171 ttyS[minor].name); 172 rtems_fatal_error_occurred(status); 173 } 174 return 0; 159 /* must not open a minor device we have no ISR for */ 160 assert( minor>=0 && minor < sizeof(ttyS)/sizeof(ttyS[0]) && ttyS[minor].isr ); 161 162 /* 9600-8-N-1 */ 163 BSP_uart_init(minor, 9600, 0); 164 status = BSP_uart_install_isr(minor, ttyS[minor].isr); 165 if (!status) { 166 printk("Error installing serial console interrupt handler for '%s'!\n", 167 ttyS[minor].name); 168 rtems_fatal_error_occurred(status); 169 } 170 return 0; 175 171 } 176 172 … … 184 180 | Console device driver OPEN entry point 185 181 +--------------------------------------------------------------------------*/ 186 rtems_device_driver 187 console_open(rtems_device_major_number major, 188 rtems_device_minor_number minor, 189 void *arg) 182 rtems_device_driver console_open( 183 rtems_device_major_number major, 184 rtems_device_minor_number minor, 185 void *arg 186 ) 190 187 { 191 188 rtems_status_code status; … … 221 218 status = rtems_termios_open (major, minor, arg, &cb); 222 219 223 if(status != RTEMS_SUCCESSFUL) 224 { 225 printk("Error opening console device\n"); 226 return status; 227 } 220 if (status != RTEMS_SUCCESSFUL) { 221 printk("Error opening console device\n"); 222 return status; 223 } 228 224 229 225 /* … … 231 227 */ 232 228 BSP_uart_termios_set(minor, 233 229 ((rtems_libio_open_close_args_t *)arg)->iop->data1); 234 230 /* Enable interrupts on channel */ 235 231 BSP_uart_intr_ctrl(minor, BSP_UART_INTR_CTRL_TERMIOS); … … 242 238 +--------------------------------------------------------------------------*/ 243 239 rtems_device_driver 244 console_close(rtems_device_major_number major, 245 rtems_device_minor_number minor, 246 void *arg) 240 console_close( 241 rtems_device_major_number major, 242 rtems_device_minor_number minor, 243 void *arg 244 ) 247 245 { 248 246 rtems_device_driver res = RTEMS_SUCCESSFUL; … … 258 256 | Read characters from the I/O console. We only have stdin. 259 257 +--------------------------------------------------------------------------*/ 260 rtems_device_driver 261 console_read(rtems_device_major_number major,262 263 void *arg)264 { 265 258 rtems_device_driver console_read( 259 rtems_device_major_number major, 260 rtems_device_minor_number minor, 261 void *arg 262 ) 263 { 266 264 return rtems_termios_read (arg); 267 265 } /* console_read */ … … 272 270 | Write characters to the I/O console. Stderr and stdout are the same. 273 271 +--------------------------------------------------------------------------*/ 274 rtems_device_driver 275 console_write(rtems_device_major_number major,276 277 void * arg)278 { 279 272 rtems_device_driver console_write( 273 rtems_device_major_number major, 274 rtems_device_minor_number minor, 275 void *arg 276 ) 277 { 280 278 return rtems_termios_write (arg); 281 282 279 } /* console_write */ 283 280 … … 285 282 * Handle ioctl request. 286 283 */ 287 rtems_device_driver 288 console_control(rtems_device_major_number major, 289 rtems_device_minor_number minor, 290 void *arg 284 rtems_device_driver console_control( 285 rtems_device_major_number major, 286 rtems_device_minor_number minor, 287 void *arg 288 ) 291 289 ) 292 290 { 293 291 /* does the BSP support break callbacks ? */ 294 292 #if defined(BIOCSETBREAKCB) && defined(BIOCGETBREAKCB) 295 rtems_libio_ioctl_args_t *ioa=arg; 296 switch (ioa->command) { 297 case BIOCSETBREAKCB: 298 return BSP_uart_set_break_cb(minor, ioa); 299 case BIOCGETBREAKCB: 300 return BSP_uart_get_break_cb(minor, ioa); 301 302 default: 303 break; 304 } 293 rtems_libio_ioctl_args_t *ioa=arg; 294 switch (ioa->command) { 295 case BIOCSETBREAKCB: return BSP_uart_set_break_cb(minor, ioa); 296 case BIOCGETBREAKCB: return BSP_uart_get_break_cb(minor, ioa); 297 default: break; 298 } 305 299 #endif 306 300 return rtems_termios_ioctl (arg); 307 301 } 308 302 309 static int 310 conSetAttr(int minor, const struct termios *t) 303 static int conSetAttr( 304 int minor, 305 const struct termios *t 306 ) 311 307 { 312 308 int baud; 313 309 314 switch (t->c_cflag & CBAUD) 315 { 316 case B50: 317 baud = 50; 318 break; 319 case B75: 320 baud = 75; 321 break; 322 case B110: 323 baud = 110; 324 break; 325 case B134: 326 baud = 134; 327 break; 328 case B150: 329 baud = 150; 330 break; 331 case B200: 332 baud = 200; 333 break; 334 case B300: 335 baud = 300; 336 break; 337 case B600: 338 baud = 600; 339 break; 340 case B1200: 341 baud = 1200; 342 break; 343 case B1800: 344 baud = 1800; 345 break; 346 case B2400: 347 baud = 2400; 348 break; 349 case B4800: 350 baud = 4800; 351 break; 352 case B9600: 353 baud = 9600; 354 break; 355 case B19200: 356 baud = 19200; 357 break; 358 case B38400: 359 baud = 38400; 360 break; 361 case B57600: 362 baud = 57600; 363 break; 364 case B115200: 365 baud = 115200; 366 break; 367 default: 368 baud = 0; 369 rtems_fatal_error_occurred (RTEMS_INTERNAL_ERROR); 370 return 0; 371 } 310 baud = termios_baud_to_number(t->c_cflag & CBAUD); 311 if ( baud > 115200 ) 312 rtems_fatal_error_occurred (RTEMS_INTERNAL_ERROR); 372 313 373 314 BSP_uart_set_baud(minor, baud);
Note: See TracChangeset
for help on using the changeset viewer.