Changeset 2d8e51aa in rtems
- Timestamp:
- 07/09/98 18:45:28 (25 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 459c1d2
- Parents:
- b2ec38c8
- Location:
- c/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libchip/serial/mc68681.c
rb2ec38c8 r2d8e51aa 24 24 25 25 #include <libchip/serial.h> 26 #include "sersupp.h" 26 27 #include "mc68681_p.h" 27 28 #include "mc68681.h" … … 69 70 */ 70 71 71 staticboolean mc68681_probe(int minor)72 MC68681_STATIC boolean mc68681_probe(int minor) 72 73 { 73 74 /* … … 86 87 */ 87 88 88 static int mc68681_baud_rate( 89 /* major index of 0 : ACR[7] = 0, X = 0 -- 68c681 only has these */ 90 /* major index of 1 : ACR[7] = 1, X = 0 -- 68c681 only has these */ 91 /* major index of 2 : ACR[7] = 0, X = 1 */ 92 /* major index of 3 : ACR[7] = 1, X = 1 */ 93 94 /* mc68681_baud_table_t mc68681_baud_rate_table[4] = { */ 95 mc68681_baud_t mc68681_baud_rate_table[4][RTEMS_TERMIOS_NUMBER_BAUD_RATES] = { 96 { /* ACR[7] = 0, X = 0 */ 97 MC68681_BAUD_NOT_VALID, /* B0 */ 98 0x00, /* B50 */ 99 MC68681_BAUD_NOT_VALID, /* B75 */ 100 0x01, /* B110 */ 101 0x02, /* B134 */ 102 MC68681_BAUD_NOT_VALID, /* B150 */ 103 0x03, /* B200 */ 104 0x04, /* B300 */ 105 0x05, /* B600 */ 106 0x06, /* B1200 */ 107 MC68681_BAUD_NOT_VALID, /* B1800 */ 108 0x08, /* B2400 */ 109 0x09, /* B4800 */ 110 0x0B, /* B9600 */ 111 MC68681_BAUD_NOT_VALID, /* B19200 */ 112 0x0C, /* B38400 */ 113 MC68681_BAUD_NOT_VALID, /* B57600 */ 114 MC68681_BAUD_NOT_VALID, /* B115200 */ 115 MC68681_BAUD_NOT_VALID, /* B230400 */ 116 MC68681_BAUD_NOT_VALID /* B460800 */ 117 }, 118 { /* ACR[7] = 1, X = 0 */ 119 MC68681_BAUD_NOT_VALID, /* B0 */ 120 MC68681_BAUD_NOT_VALID, /* B50 */ 121 0x00, /* B75 */ 122 0x01, /* B110 */ 123 0x02, /* B134 */ 124 0x03, /* B150 */ 125 MC68681_BAUD_NOT_VALID, /* B200 */ 126 0x04, /* B300 */ 127 0x05, /* B600 */ 128 0x06, /* B1200 */ 129 0x0A, /* B1800 */ 130 0x08, /* B2400 */ 131 0x09, /* B4800 */ 132 0x0B, /* B9600 */ 133 0x0C, /* B19200 */ 134 MC68681_BAUD_NOT_VALID, /* B38400 */ 135 MC68681_BAUD_NOT_VALID, /* B57600 */ 136 MC68681_BAUD_NOT_VALID, /* B115200 */ 137 MC68681_BAUD_NOT_VALID, /* B230400 */ 138 MC68681_BAUD_NOT_VALID /* B460800 */ 139 }, 140 { /* ACR[7] = 0, X = 1 */ 141 MC68681_BAUD_NOT_VALID, /* B0 */ 142 MC68681_BAUD_NOT_VALID, /* B50 */ 143 0x00, /* B75 */ 144 0x01, /* B110 */ 145 0x02, /* B134 */ 146 0x03, /* B150 */ 147 MC68681_BAUD_NOT_VALID, /* B200 */ 148 MC68681_BAUD_NOT_VALID, /* B300 */ 149 MC68681_BAUD_NOT_VALID, /* B600 */ 150 MC68681_BAUD_NOT_VALID, /* B1200 */ 151 0x0A, /* B1800 */ 152 MC68681_BAUD_NOT_VALID, /* B2400 */ 153 0x08, /* B4800 */ 154 0x0B, /* B9600 */ 155 0x0C, /* B19200 */ 156 MC68681_BAUD_NOT_VALID, /* B38400 */ 157 0x07, /* B57600 */ 158 0x08, /* B115200 */ 159 MC68681_BAUD_NOT_VALID, /* B230400 */ 160 MC68681_BAUD_NOT_VALID /* B460800 */ 161 }, 162 { /* ACR[7] = 1, X = 1 */ 163 MC68681_BAUD_NOT_VALID, /* B0 */ 164 0x00, /* B50 */ 165 MC68681_BAUD_NOT_VALID, /* B75 */ 166 0x01, /* B110 */ 167 0x02, /* B134 */ 168 MC68681_BAUD_NOT_VALID, /* B150 */ 169 0x03, /* B200 */ 170 MC68681_BAUD_NOT_VALID, /* B300 */ 171 MC68681_BAUD_NOT_VALID, /* B600 */ 172 MC68681_BAUD_NOT_VALID, /* B1200 */ 173 MC68681_BAUD_NOT_VALID, /* B1800 */ 174 MC68681_BAUD_NOT_VALID, /* B2400 */ 175 0x09, /* B4800 */ 176 0x0B, /* B9600 */ 177 MC68681_BAUD_NOT_VALID, /* B19200 */ 178 0x0C, /* B38400 */ 179 0x07, /* B57600 */ 180 0x08, /* B115200 */ 181 MC68681_BAUD_NOT_VALID, /* B230400 */ 182 MC68681_BAUD_NOT_VALID /* B460800 */ 183 }, 184 }; 185 186 MC68681_STATIC int mc68681_baud_rate( 89 187 int minor, 90 188 int baud, 91 189 unsigned int *baud_mask_p, 92 unsigned int *acr_bit_p 93 ) 94 { 95 unsigned int baud_mask; 96 unsigned int acr_bit; 97 int status; 98 99 baud_mask = 0; 100 acr_bit = 0; 101 status = 0; 102 103 if ( !(Console_Port_Tbl[minor].ulDataPort & MC68681_DATA_BAUD_RATE_SET_1) ) 104 acr_bit = 1; 105 106 if (!(baud & CBAUD)) { 107 *baud_mask_p = 0x0B; /* default to 9600 baud */ 108 *acr_bit_p = acr_bit; 109 return status; 110 } 111 112 if ( !acr_bit ) { 113 /* 114 * Baud Rate Set 1 115 */ 116 117 switch (baud & CBAUD) { 118 case B50: baud_mask = 0x00; break; 119 case B110: baud_mask = 0x01; break; 120 case B134: baud_mask = 0x02; break; 121 case B200: baud_mask = 0x03; break; 122 case B300: baud_mask = 0x04; break; 123 case B600: baud_mask = 0x05; break; 124 case B1200: baud_mask = 0x06; break; 125 case B2400: baud_mask = 0x08; break; 126 case B4800: baud_mask = 0x09; break; 127 case B9600: baud_mask = 0x0B; break; 128 case B38400: baud_mask = 0x0C; break; 129 130 case B0: 131 case B75: 132 case B150: 133 case B1800: 134 case B19200: 135 case B57600: 136 case B115200: 137 case B230400: 138 case B460800: 139 status = -1; 140 break; 141 } 142 } else { 143 /* 144 * Baud Rate Set 2 145 */ 146 147 switch (baud & CBAUD) { 148 case B75: baud_mask = 0x00; break; 149 case B110: baud_mask = 0x01; break; 150 case B134: baud_mask = 0x02; break; 151 case B150: baud_mask = 0x03; break; 152 case B300: baud_mask = 0x04; break; 153 case B600: baud_mask = 0x05; break; 154 case B1200: baud_mask = 0x06; break; 155 case B1800: baud_mask = 0x0A; break; 156 case B2400: baud_mask = 0x08; break; 157 case B4800: baud_mask = 0x09; break; 158 case B9600: baud_mask = 0x0B; break; 159 case B19200: baud_mask = 0x0C; break; 160 161 case B0: 162 case B50: 163 case B200: 164 case B38400: 165 case B57600: 166 case B115200: 167 case B230400: 168 case B460800: 169 status = -1; 170 break; 171 } 172 } 173 174 *baud_mask_p = baud_mask; 175 *acr_bit_p = acr_bit; 176 return status; 177 } 190 unsigned int *acr_bit_p, 191 unsigned int *command 192 ); 178 193 179 194 /* … … 184 199 */ 185 200 186 staticint mc68681_set_attributes(201 MC68681_STATIC int mc68681_set_attributes( 187 202 int minor, 188 203 const struct termios *t … … 195 210 unsigned int baud_mask; 196 211 unsigned int acr_bit; 212 unsigned int cmd; 197 213 setRegister_f setReg; 198 214 rtems_interrupt_level Irql; … … 206 222 */ 207 223 208 if ( mc68681_baud_rate( minor, t->c_cflag, &baud_mask, &acr_bit ) == -1)224 if (mc68681_baud_rate( minor, t->c_cflag, &baud_mask, &acr_bit, &cmd ) == -1) 209 225 return -1; 210 226 … … 258 274 (*setReg)( pMC68681, MC68681_AUX_CTRL_REG, acr_bit ); 259 275 (*setReg)( pMC68681_port, MC68681_CLOCK_SELECT, baud_mask ); 276 (*setReg)( pMC68681_port, MC68681_COMMAND, cmd ); 260 277 (*setReg)( pMC68681_port, MC68681_COMMAND, MC68681_MODE_REG_RESET_MR_PTR ); 261 278 (*setReg)( pMC68681_port, MC68681_MODE, mode1 ); … … 271 288 */ 272 289 273 staticvoid mc68681_initialize_context(290 MC68681_STATIC void mc68681_initialize_context( 274 291 int minor, 275 292 mc68681_context *pmc68681Context … … 300 317 */ 301 318 302 staticunsigned int mc68681_build_imr(319 MC68681_STATIC unsigned int mc68681_build_imr( 303 320 int minor, 304 321 int enable_flag … … 358 375 */ 359 376 360 staticvoid mc68681_init(int minor)377 MC68681_STATIC void mc68681_init(int minor) 361 378 { 362 379 unsigned32 pMC68681_port; … … 408 425 */ 409 426 410 staticint mc68681_open(427 MC68681_STATIC int mc68681_open( 411 428 int major, 412 429 int minor, … … 419 436 unsigned int acr; 420 437 unsigned int vector; 438 unsigned int command; 421 439 rtems_interrupt_level Irql; 422 440 setRegister_f setReg; … … 427 445 vector = Console_Port_Tbl[minor].ulIntVector; 428 446 429 (void) mc68681_baud_rate( minor, B9600, &baud, &acr );447 (void) mc68681_baud_rate( minor, B9600, &baud, &acr, &command ); 430 448 431 449 /* … … 437 455 (*setReg)( pMC68681_port, MC68681_CLOCK_SELECT, baud ); 438 456 (*setReg)( pMC68681_port, MC68681_COMMAND, MC68681_MODE_REG_RESET_MR_PTR ); 457 (*setReg)( pMC68681, MC68681_COMMAND, command ); 439 458 (*setReg)( pMC68681_port, MC68681_MODE, 0x13 ); 440 459 (*setReg)( pMC68681_port, MC68681_MODE, 0x07 ); … … 455 474 */ 456 475 457 staticint mc68681_close(476 MC68681_STATIC int mc68681_close( 458 477 int major, 459 478 int minor, … … 485 504 */ 486 505 487 staticvoid mc68681_write_polled(506 MC68681_STATIC void mc68681_write_polled( 488 507 int minor, 489 508 char cChar … … 533 552 */ 534 553 535 staticvoid mc68681_process(554 MC68681_STATIC void mc68681_process( 536 555 int minor 537 556 ) … … 613 632 */ 614 633 615 staticrtems_isr mc68681_isr(634 MC68681_STATIC rtems_isr mc68681_isr( 616 635 rtems_vector_number vector 617 636 ) … … 635 654 */ 636 655 637 staticint mc68681_flush(int major, int minor, void *arg)656 MC68681_STATIC int mc68681_flush(int major, int minor, void *arg) 638 657 { 639 658 while(!Ring_buffer_Is_empty(&Console_Port_Data[minor].TxBuffer)) { … … 657 676 */ 658 677 659 staticvoid mc68681_enable_interrupts(678 MC68681_STATIC void mc68681_enable_interrupts( 660 679 int minor 661 680 ) … … 681 700 */ 682 701 683 staticvoid mc68681_initialize_interrupts(int minor)702 MC68681_STATIC void mc68681_initialize_interrupts(int minor) 684 703 { 685 704 mc68681_init(minor); … … 700 719 */ 701 720 702 staticint mc68681_write_support_int(721 MC68681_STATIC int mc68681_write_support_int( 703 722 int minor, 704 723 const char *buf, … … 761 780 */ 762 781 763 staticint mc68681_write_support_polled(782 MC68681_STATIC int mc68681_write_support_polled( 764 783 int minor, 765 784 const char *buf, … … 792 811 */ 793 812 794 staticint mc68681_inbyte_nonblocking_polled(813 MC68681_STATIC int mc68681_inbyte_nonblocking_polled( 795 814 int minor 796 815 ) … … 812 831 } 813 832 } 833 834 MC68681_STATIC int mc68681_baud_rate( 835 int minor, 836 int baud, 837 unsigned int *baud_mask_p, 838 unsigned int *acr_bit_p, 839 unsigned int *command 840 ) 841 { 842 unsigned int baud_mask; 843 unsigned int acr_bit; 844 int status; 845 int is_a; 846 int is_extended; 847 int baud_requested; 848 mc68681_baud_table_t *baud_tbl; 849 850 baud_mask = 0; 851 acr_bit = 0; 852 status = 0; 853 854 if (Console_Port_Tbl[minor].ulCtrlPort1 == 855 Console_Port_Tbl[minor].ulCtrlPort2) 856 is_a = 1; 857 else 858 is_a = 0; 859 860 if ( !(Console_Port_Tbl[minor].ulDataPort & MC68681_DATA_BAUD_RATE_SET_1) ) 861 acr_bit = 1; 862 863 is_extended = 0; 864 865 switch (Console_Port_Tbl[minor].ulDataPort & MC68681_XBRG_MASK) { 866 case MC68681_XBRG_IGNORED: 867 *command = 0x00; 868 break; 869 case MC68681_XBRG_ENABLED: 870 *command = (is_a) ? 0x08 : 0x09; 871 is_extended = 1; 872 break; 873 case MC68681_XBRG_DISABLED: 874 *command = (is_a) ? 0x0A : 0x0B; 875 break; 876 } 877 878 baud_requested = baud & CBAUD; 879 if (!baud_requested) 880 baud_requested = B9600; 881 882 baud_requested = termios_baud_to_index( baud_requested ); 883 884 baud_tbl = (mc68681_baud_table_t *) Console_Port_Tbl[minor].ulClock; 885 if (!baud_tbl) 886 baud_tbl = (mc68681_baud_table_t *)mc68681_baud_rate_table; 887 888 if ( is_extended ) 889 baud_mask = (unsigned int)baud_tbl[ acr_bit + 2 ][ baud_requested ]; 890 else 891 baud_mask = baud_tbl[ acr_bit ][ baud_requested ]; 892 893 if ( baud_mask == MC68681_BAUD_NOT_VALID ) 894 status = -1; 895 896 *baud_mask_p = baud_mask; /* default to 9600 baud */ 897 *acr_bit_p = acr_bit; 898 return status; 899 } 900 -
c/src/libchip/serial/mc68681.c
rb2ec38c8 r2d8e51aa 24 24 25 25 #include <libchip/serial.h> 26 #include "sersupp.h" 26 27 #include "mc68681_p.h" 27 28 #include "mc68681.h" … … 69 70 */ 70 71 71 staticboolean mc68681_probe(int minor)72 MC68681_STATIC boolean mc68681_probe(int minor) 72 73 { 73 74 /* … … 86 87 */ 87 88 88 static int mc68681_baud_rate( 89 /* major index of 0 : ACR[7] = 0, X = 0 -- 68c681 only has these */ 90 /* major index of 1 : ACR[7] = 1, X = 0 -- 68c681 only has these */ 91 /* major index of 2 : ACR[7] = 0, X = 1 */ 92 /* major index of 3 : ACR[7] = 1, X = 1 */ 93 94 /* mc68681_baud_table_t mc68681_baud_rate_table[4] = { */ 95 mc68681_baud_t mc68681_baud_rate_table[4][RTEMS_TERMIOS_NUMBER_BAUD_RATES] = { 96 { /* ACR[7] = 0, X = 0 */ 97 MC68681_BAUD_NOT_VALID, /* B0 */ 98 0x00, /* B50 */ 99 MC68681_BAUD_NOT_VALID, /* B75 */ 100 0x01, /* B110 */ 101 0x02, /* B134 */ 102 MC68681_BAUD_NOT_VALID, /* B150 */ 103 0x03, /* B200 */ 104 0x04, /* B300 */ 105 0x05, /* B600 */ 106 0x06, /* B1200 */ 107 MC68681_BAUD_NOT_VALID, /* B1800 */ 108 0x08, /* B2400 */ 109 0x09, /* B4800 */ 110 0x0B, /* B9600 */ 111 MC68681_BAUD_NOT_VALID, /* B19200 */ 112 0x0C, /* B38400 */ 113 MC68681_BAUD_NOT_VALID, /* B57600 */ 114 MC68681_BAUD_NOT_VALID, /* B115200 */ 115 MC68681_BAUD_NOT_VALID, /* B230400 */ 116 MC68681_BAUD_NOT_VALID /* B460800 */ 117 }, 118 { /* ACR[7] = 1, X = 0 */ 119 MC68681_BAUD_NOT_VALID, /* B0 */ 120 MC68681_BAUD_NOT_VALID, /* B50 */ 121 0x00, /* B75 */ 122 0x01, /* B110 */ 123 0x02, /* B134 */ 124 0x03, /* B150 */ 125 MC68681_BAUD_NOT_VALID, /* B200 */ 126 0x04, /* B300 */ 127 0x05, /* B600 */ 128 0x06, /* B1200 */ 129 0x0A, /* B1800 */ 130 0x08, /* B2400 */ 131 0x09, /* B4800 */ 132 0x0B, /* B9600 */ 133 0x0C, /* B19200 */ 134 MC68681_BAUD_NOT_VALID, /* B38400 */ 135 MC68681_BAUD_NOT_VALID, /* B57600 */ 136 MC68681_BAUD_NOT_VALID, /* B115200 */ 137 MC68681_BAUD_NOT_VALID, /* B230400 */ 138 MC68681_BAUD_NOT_VALID /* B460800 */ 139 }, 140 { /* ACR[7] = 0, X = 1 */ 141 MC68681_BAUD_NOT_VALID, /* B0 */ 142 MC68681_BAUD_NOT_VALID, /* B50 */ 143 0x00, /* B75 */ 144 0x01, /* B110 */ 145 0x02, /* B134 */ 146 0x03, /* B150 */ 147 MC68681_BAUD_NOT_VALID, /* B200 */ 148 MC68681_BAUD_NOT_VALID, /* B300 */ 149 MC68681_BAUD_NOT_VALID, /* B600 */ 150 MC68681_BAUD_NOT_VALID, /* B1200 */ 151 0x0A, /* B1800 */ 152 MC68681_BAUD_NOT_VALID, /* B2400 */ 153 0x08, /* B4800 */ 154 0x0B, /* B9600 */ 155 0x0C, /* B19200 */ 156 MC68681_BAUD_NOT_VALID, /* B38400 */ 157 0x07, /* B57600 */ 158 0x08, /* B115200 */ 159 MC68681_BAUD_NOT_VALID, /* B230400 */ 160 MC68681_BAUD_NOT_VALID /* B460800 */ 161 }, 162 { /* ACR[7] = 1, X = 1 */ 163 MC68681_BAUD_NOT_VALID, /* B0 */ 164 0x00, /* B50 */ 165 MC68681_BAUD_NOT_VALID, /* B75 */ 166 0x01, /* B110 */ 167 0x02, /* B134 */ 168 MC68681_BAUD_NOT_VALID, /* B150 */ 169 0x03, /* B200 */ 170 MC68681_BAUD_NOT_VALID, /* B300 */ 171 MC68681_BAUD_NOT_VALID, /* B600 */ 172 MC68681_BAUD_NOT_VALID, /* B1200 */ 173 MC68681_BAUD_NOT_VALID, /* B1800 */ 174 MC68681_BAUD_NOT_VALID, /* B2400 */ 175 0x09, /* B4800 */ 176 0x0B, /* B9600 */ 177 MC68681_BAUD_NOT_VALID, /* B19200 */ 178 0x0C, /* B38400 */ 179 0x07, /* B57600 */ 180 0x08, /* B115200 */ 181 MC68681_BAUD_NOT_VALID, /* B230400 */ 182 MC68681_BAUD_NOT_VALID /* B460800 */ 183 }, 184 }; 185 186 MC68681_STATIC int mc68681_baud_rate( 89 187 int minor, 90 188 int baud, 91 189 unsigned int *baud_mask_p, 92 unsigned int *acr_bit_p 93 ) 94 { 95 unsigned int baud_mask; 96 unsigned int acr_bit; 97 int status; 98 99 baud_mask = 0; 100 acr_bit = 0; 101 status = 0; 102 103 if ( !(Console_Port_Tbl[minor].ulDataPort & MC68681_DATA_BAUD_RATE_SET_1) ) 104 acr_bit = 1; 105 106 if (!(baud & CBAUD)) { 107 *baud_mask_p = 0x0B; /* default to 9600 baud */ 108 *acr_bit_p = acr_bit; 109 return status; 110 } 111 112 if ( !acr_bit ) { 113 /* 114 * Baud Rate Set 1 115 */ 116 117 switch (baud & CBAUD) { 118 case B50: baud_mask = 0x00; break; 119 case B110: baud_mask = 0x01; break; 120 case B134: baud_mask = 0x02; break; 121 case B200: baud_mask = 0x03; break; 122 case B300: baud_mask = 0x04; break; 123 case B600: baud_mask = 0x05; break; 124 case B1200: baud_mask = 0x06; break; 125 case B2400: baud_mask = 0x08; break; 126 case B4800: baud_mask = 0x09; break; 127 case B9600: baud_mask = 0x0B; break; 128 case B38400: baud_mask = 0x0C; break; 129 130 case B0: 131 case B75: 132 case B150: 133 case B1800: 134 case B19200: 135 case B57600: 136 case B115200: 137 case B230400: 138 case B460800: 139 status = -1; 140 break; 141 } 142 } else { 143 /* 144 * Baud Rate Set 2 145 */ 146 147 switch (baud & CBAUD) { 148 case B75: baud_mask = 0x00; break; 149 case B110: baud_mask = 0x01; break; 150 case B134: baud_mask = 0x02; break; 151 case B150: baud_mask = 0x03; break; 152 case B300: baud_mask = 0x04; break; 153 case B600: baud_mask = 0x05; break; 154 case B1200: baud_mask = 0x06; break; 155 case B1800: baud_mask = 0x0A; break; 156 case B2400: baud_mask = 0x08; break; 157 case B4800: baud_mask = 0x09; break; 158 case B9600: baud_mask = 0x0B; break; 159 case B19200: baud_mask = 0x0C; break; 160 161 case B0: 162 case B50: 163 case B200: 164 case B38400: 165 case B57600: 166 case B115200: 167 case B230400: 168 case B460800: 169 status = -1; 170 break; 171 } 172 } 173 174 *baud_mask_p = baud_mask; 175 *acr_bit_p = acr_bit; 176 return status; 177 } 190 unsigned int *acr_bit_p, 191 unsigned int *command 192 ); 178 193 179 194 /* … … 184 199 */ 185 200 186 staticint mc68681_set_attributes(201 MC68681_STATIC int mc68681_set_attributes( 187 202 int minor, 188 203 const struct termios *t … … 195 210 unsigned int baud_mask; 196 211 unsigned int acr_bit; 212 unsigned int cmd; 197 213 setRegister_f setReg; 198 214 rtems_interrupt_level Irql; … … 206 222 */ 207 223 208 if ( mc68681_baud_rate( minor, t->c_cflag, &baud_mask, &acr_bit ) == -1)224 if (mc68681_baud_rate( minor, t->c_cflag, &baud_mask, &acr_bit, &cmd ) == -1) 209 225 return -1; 210 226 … … 258 274 (*setReg)( pMC68681, MC68681_AUX_CTRL_REG, acr_bit ); 259 275 (*setReg)( pMC68681_port, MC68681_CLOCK_SELECT, baud_mask ); 276 (*setReg)( pMC68681_port, MC68681_COMMAND, cmd ); 260 277 (*setReg)( pMC68681_port, MC68681_COMMAND, MC68681_MODE_REG_RESET_MR_PTR ); 261 278 (*setReg)( pMC68681_port, MC68681_MODE, mode1 ); … … 271 288 */ 272 289 273 staticvoid mc68681_initialize_context(290 MC68681_STATIC void mc68681_initialize_context( 274 291 int minor, 275 292 mc68681_context *pmc68681Context … … 300 317 */ 301 318 302 staticunsigned int mc68681_build_imr(319 MC68681_STATIC unsigned int mc68681_build_imr( 303 320 int minor, 304 321 int enable_flag … … 358 375 */ 359 376 360 staticvoid mc68681_init(int minor)377 MC68681_STATIC void mc68681_init(int minor) 361 378 { 362 379 unsigned32 pMC68681_port; … … 408 425 */ 409 426 410 staticint mc68681_open(427 MC68681_STATIC int mc68681_open( 411 428 int major, 412 429 int minor, … … 419 436 unsigned int acr; 420 437 unsigned int vector; 438 unsigned int command; 421 439 rtems_interrupt_level Irql; 422 440 setRegister_f setReg; … … 427 445 vector = Console_Port_Tbl[minor].ulIntVector; 428 446 429 (void) mc68681_baud_rate( minor, B9600, &baud, &acr );447 (void) mc68681_baud_rate( minor, B9600, &baud, &acr, &command ); 430 448 431 449 /* … … 437 455 (*setReg)( pMC68681_port, MC68681_CLOCK_SELECT, baud ); 438 456 (*setReg)( pMC68681_port, MC68681_COMMAND, MC68681_MODE_REG_RESET_MR_PTR ); 457 (*setReg)( pMC68681, MC68681_COMMAND, command ); 439 458 (*setReg)( pMC68681_port, MC68681_MODE, 0x13 ); 440 459 (*setReg)( pMC68681_port, MC68681_MODE, 0x07 ); … … 455 474 */ 456 475 457 staticint mc68681_close(476 MC68681_STATIC int mc68681_close( 458 477 int major, 459 478 int minor, … … 485 504 */ 486 505 487 staticvoid mc68681_write_polled(506 MC68681_STATIC void mc68681_write_polled( 488 507 int minor, 489 508 char cChar … … 533 552 */ 534 553 535 staticvoid mc68681_process(554 MC68681_STATIC void mc68681_process( 536 555 int minor 537 556 ) … … 613 632 */ 614 633 615 staticrtems_isr mc68681_isr(634 MC68681_STATIC rtems_isr mc68681_isr( 616 635 rtems_vector_number vector 617 636 ) … … 635 654 */ 636 655 637 staticint mc68681_flush(int major, int minor, void *arg)656 MC68681_STATIC int mc68681_flush(int major, int minor, void *arg) 638 657 { 639 658 while(!Ring_buffer_Is_empty(&Console_Port_Data[minor].TxBuffer)) { … … 657 676 */ 658 677 659 staticvoid mc68681_enable_interrupts(678 MC68681_STATIC void mc68681_enable_interrupts( 660 679 int minor 661 680 ) … … 681 700 */ 682 701 683 staticvoid mc68681_initialize_interrupts(int minor)702 MC68681_STATIC void mc68681_initialize_interrupts(int minor) 684 703 { 685 704 mc68681_init(minor); … … 700 719 */ 701 720 702 staticint mc68681_write_support_int(721 MC68681_STATIC int mc68681_write_support_int( 703 722 int minor, 704 723 const char *buf, … … 761 780 */ 762 781 763 staticint mc68681_write_support_polled(782 MC68681_STATIC int mc68681_write_support_polled( 764 783 int minor, 765 784 const char *buf, … … 792 811 */ 793 812 794 staticint mc68681_inbyte_nonblocking_polled(813 MC68681_STATIC int mc68681_inbyte_nonblocking_polled( 795 814 int minor 796 815 ) … … 812 831 } 813 832 } 833 834 MC68681_STATIC int mc68681_baud_rate( 835 int minor, 836 int baud, 837 unsigned int *baud_mask_p, 838 unsigned int *acr_bit_p, 839 unsigned int *command 840 ) 841 { 842 unsigned int baud_mask; 843 unsigned int acr_bit; 844 int status; 845 int is_a; 846 int is_extended; 847 int baud_requested; 848 mc68681_baud_table_t *baud_tbl; 849 850 baud_mask = 0; 851 acr_bit = 0; 852 status = 0; 853 854 if (Console_Port_Tbl[minor].ulCtrlPort1 == 855 Console_Port_Tbl[minor].ulCtrlPort2) 856 is_a = 1; 857 else 858 is_a = 0; 859 860 if ( !(Console_Port_Tbl[minor].ulDataPort & MC68681_DATA_BAUD_RATE_SET_1) ) 861 acr_bit = 1; 862 863 is_extended = 0; 864 865 switch (Console_Port_Tbl[minor].ulDataPort & MC68681_XBRG_MASK) { 866 case MC68681_XBRG_IGNORED: 867 *command = 0x00; 868 break; 869 case MC68681_XBRG_ENABLED: 870 *command = (is_a) ? 0x08 : 0x09; 871 is_extended = 1; 872 break; 873 case MC68681_XBRG_DISABLED: 874 *command = (is_a) ? 0x0A : 0x0B; 875 break; 876 } 877 878 baud_requested = baud & CBAUD; 879 if (!baud_requested) 880 baud_requested = B9600; 881 882 baud_requested = termios_baud_to_index( baud_requested ); 883 884 baud_tbl = (mc68681_baud_table_t *) Console_Port_Tbl[minor].ulClock; 885 if (!baud_tbl) 886 baud_tbl = (mc68681_baud_table_t *)mc68681_baud_rate_table; 887 888 if ( is_extended ) 889 baud_mask = (unsigned int)baud_tbl[ acr_bit + 2 ][ baud_requested ]; 890 else 891 baud_mask = baud_tbl[ acr_bit ][ baud_requested ]; 892 893 if ( baud_mask == MC68681_BAUD_NOT_VALID ) 894 status = -1; 895 896 *baud_mask_p = baud_mask; /* default to 9600 baud */ 897 *acr_bit_p = acr_bit; 898 return status; 899 } 900
Note: See TracChangeset
for help on using the changeset viewer.