evans@syd.dit.CSIRO.AU (Bruce.Evans) (10/18/90)
RS232 initialization was not reliable with some BIOS's (it worked better after a cold boot). See the comments in the code to explain why. #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: rs232.cdif rs232.crc # Wrapped by evans@ditsydh on Thu Oct 18 15:34:40 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'rs232.cdif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rs232.cdif'\" else echo shar: Extracting \"'rs232.cdif'\" \(1774 characters\) sed "s/^X//" >'rs232.cdif' <<'END_OF_FILE' X*** /tmp/1.5/kernel/rs232.c Mon Apr 2 06:07:02 1990 X--- rs232.c Mon Oct 15 04:38:35 1990 X*************** X*** 321,324 **** X--- 321,329 ---- X /* Set up the hardware to a base state, in particular X * o turn off DTR (MC_DTR) to try to stop the external device. X+ * o be careful about the divisor latch. Some BIOS's leave it enabled X+ * here and that caused trouble (no interrupts) in version 1.5 by X+ * hiding the interrupt enable port in the next step, and worse trouble X+ * (continual interrupts) in an old version by hiding the receiver X+ * port in the first interrupt. Call rs_config() early to avoid this. X * o disable interrupts at the chip level, to force an edge transition X * on the 8259 line when interrupts are next enabled and active. X*************** X*** 326,336 **** X * mask, but there used to be trouble if the mask was set without X * handling a previous interrupt. X- * o be careful about the divisor latch. It may be enabled now, and X- * that used to cause trouble when interrupts were enabled too early X- * (see comment in rs_config()). Call rs_config() early to avoid this. X */ X istop(rs); /* sets modem_ctl_port */ X- out_byte(rs->int_enab_port, 0); X speed = rs_config(minor, DEF_BAUD, DEF_BAUD, LC_NO_PARITY, 1, 8, RAW); X X /* Clear any harmful leftover interrupts. An output interrupt is harmless X--- 331,338 ---- X * mask, but there used to be trouble if the mask was set without X * handling a previous interrupt. X */ X istop(rs); /* sets modem_ctl_port */ X speed = rs_config(minor, DEF_BAUD, DEF_BAUD, LC_NO_PARITY, 1, 8, RAW); X+ out_byte(rs->int_enab_port, 0); X X /* Clear any harmful leftover interrupts. An output interrupt is harmless END_OF_FILE if test 1774 -ne `wc -c <'rs232.cdif'`; then echo shar: \"'rs232.cdif'\" unpacked with wrong size! fi chmod +x 'rs232.cdif' # end of 'rs232.cdif' fi if test -f 'rs232.crc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'rs232.crc'\" else echo shar: Extracting \"'rs232.crc'\" \(58 characters\) sed "s/^X//" >'rs232.crc' <<'END_OF_FILE' X27260 20246 /tmp/1.5/kernel/rs232.c X19451 20391 rs232.c END_OF_FILE if test 58 -ne `wc -c <'rs232.crc'`; then echo shar: \"'rs232.crc'\" unpacked with wrong size! fi chmod +x 'rs232.crc' # end of 'rs232.crc' fi echo shar: End of shell archive. exit 0 -- Bruce Evans evans@syd.dit.csiro.au