#!	/bin/sh
# /etc/rc.serial 
#	Initializes the serial ports on your system
#
# Distributed with setserial version 2.10
#

# Standard flags you want your serial devices to have
# Examples: SAK, pgrp_lockout, session_lockout
#
STD_FLAGS="session_lockout"

SETSERIAL=/bin/setserial

# If the serial executable has been removed abort the configuration
[ -x ${SETSERIAL} ] || exit 0

echo -n "Configuring serial ports..."

#
# make sure that a serial device is loaded...
insmod -k serial 2>/dev/null
#

#
# There have been multiple reports of late that the auto configuration
# if the serial ports is broken with some new motherboards, especially
# multi-processor ones. For this reason, all the autoconfiguration has
# now been removed by default, and instead only com1 and 2 are configured.
# The irqs are assigned manually. Note that we still need an automatic
# test to find out what uart we are using.

${SETSERIAL} -b /dev/ttyS0 irq 4 port 0x3F8 skip_test autoconfig ${STD_FLAGS}
if [ $? -gt 0 ]
then
  echo "setserial was unable to configure the serial ports"
  echo "  Aborting serial configuration. Check the serial modules..."
  exit 1
fi

${SETSERIAL} -b /dev/ttyS1 irq 3 port 0x2F8 skip_test autoconfig ${STD_FLAGS}

###############################################################
#
# AUTOMATIC CONFIGURATION 
#
# Uncomment the appropriate lines below to enable auto-configuration
# of a particular board.  Or comment them out to disable them....
#
# NOTE!  Although the automatic configuration is enabled by default,
# I strongly suggest that you comment out this section and use the 
# manual configuration section instead.  It's more work to set up, but 
# it's more reliable.
#
###############################################################

# Do AUTOMATIC_IRQ probing
#
AUTO_IRQ=auto_irq

# These are the standard COM1 through COM4 devices
#
# If you have an internal modem with a Rockwell Chipset, add a "skip_test"
# to the /dev/ttyS3 line below.  (It's not added by default because it will
# screw up people with 8514 displays).
#
# ${SETSERIAL} -b /dev/ttyS0 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS}
# ${SETSERIAL} -b /dev/ttyS1 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS}
#
# The typical user will only have 2 serial ports. To try and minimise
# problems, all other configurations have been commented out!
#
#${SETSERIAL} -b /dev/ttyS2 ${AUTO_IRQ} skip_test autoconfig ${STD_FLAGS}
#${SETSERIAL} /dev/ttyS3 ${AUTO_IRQ} autoconfig ${STD_FLAGS}

# These are for the first AST Fourport board (base address 0x1A0)
#
#${SETSERIAL} -b  /dev/ttyS4 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS5 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS6 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS7 ${AUTO_IRQ} autoconfig ${STD_FLAGS}

# These are for the second AST Fourport board (base address 0x2A0)
#
#${SETSERIAL} -b  /dev/ttyS8 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS9 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS10 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS11 ${AUTO_IRQ} autoconfig ${STD_FLAGS}

# These are the 3rd and 4th ports on the Accent Async board.
#
#${SETSERIAL} -b  /dev/ttyS12 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS13 ${AUTO_IRQ} autoconfig ${STD_FLAGS}

# Usenet Serial Board II (base address 0x100)
#
#${SETSERIAL} -b  /dev/ttyS16 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS17 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS18 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS19 ${AUTO_IRQ} autoconfig ${STD_FLAGS}


# BocaBoard 4 port (BB-1004) (base address 0x100)
#
#${SETSERIAL} -b  /dev/ttyS16 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS17 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS18 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS19 ${AUTO_IRQ} autoconfig ${STD_FLAGS}

# BocaBoard 8 port (BB-1008) (base address 0x100),
# or two BB-1004's (base addresses 0x100 and 0x120)
#
#${SETSERIAL} -b  /dev/ttyS16 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS17 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS18 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS19 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS20 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS21 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS22 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS23 ${AUTO_IRQ} autoconfig ${STD_FLAGS}

# BocaBoard 16 port (BB-1008), (base address 0x100),
# or two BB-1008's (base addresses 0x100 and 0x140),
# or four BB-1004's (base address 0x100, 0x120, 0x140, and 0x160)
#
# Warning --- some of these ports may conflict with the Future Domain
# SCSI controller.  If you want to run both the BocaBoards and the 
# Future Domain controller, you may need to change the port assignment
# of the Bocaboards -- see below in the section on manual configuration.
#
#${SETSERIAL} -b  /dev/ttyS16 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS17 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS18 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS19 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS20 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS21 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS22 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS23 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS24 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS25 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS26 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS27 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS28 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS29 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS30 ${AUTO_IRQ} autoconfig ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS31 ${AUTO_IRQ} autoconfig ${STD_FLAGS}

# This enables the new multiport masking feature, which is highly recommened
# for Bocaboard ports.  Uncomment only the first line if you have a
# BB-1004 or BB-1008.  Uncomment both lines if you have a BB-2016.
# These numbers assume the Bocaboard is located at address 0x100.  If you
# change this, remember to change the port1 and port2 addresses.
#
#${SETSERIAL} /dev/ttyS16 set_multiport port1 0x107 mask1 0xff match1 0
#${SETSERIAL} /dev/ttyS16 set_multiport port2 0x147 mask2 0xff match2 0

#
###############################################################
#
# MANUAL CONFIGURATION 
#
# If you want to do manual configuration of one or more of your 
# serial ports, uncomment and modify the relevant lines.
#
###############################################################

# These are the standard COM1 through COM4 devices
#
#${SETSERIAL} -b  /dev/ttyS0 uart 16450 port 0x3F8 irq 4 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS1 uart 16450 port 0x2F8 irq 3 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS2 uart 16450 port 0x3E8 irq 4 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS3 uart 16450 port 0x2E8 irq 3 ${STD_FLAGS}

# These are the first set of AST Fourport ports
#
#${SETSERIAL} -b  /dev/ttyS4 uart 16450 port 0x1A0 irq 9 fourport ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS5 uart 16450 port 0x1A8 irq 9 fourport ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS6 uart 16450 port 0x1B0 irq 9 fourport ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS7 uart 16450 port 0x1B8 irq 9 fourport ${STD_FLAGS}

# These are the second set of AST Fourport ports
#
#${SETSERIAL} -b  /dev/ttyS8 uart 16450 port 0x2A0 irq 5 fourport ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS9 uart 16450 port 0x2A8 irq 5 fourport ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS10 uart 16450 port 0x2B0 irq 5 fourport ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS11 uart 16450 port 0x2B8 irq 5 fourport ${STD_FLAGS}

# These are the 3rd and 4th ports on the Accent Async board.
#
#${SETSERIAL} -b  /dev/ttyS12 uart 16450 port 0x330 irq 4 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS13 uart 16450 port 0x338 irq 4 ${STD_FLAGS}

# These are two spare devices you can use to customize for 
# some board which is not supported above....
#${SETSERIAL} -b  /dev/ttyS14 uart XXXXX port XXXX irq X ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS15 uart XXXXX port XXXX irq X ${STD_FLAGS}

# These are the ports used for either the Usenet Serial II
# board, or the Boca Board 4, 8, or 16 port boards.
#
# Uncomment only the first 4 lines for the Usenet Serial II board,
# and uncomment the first 4, 8, or all 16 lines for the
# Boca Board BB-1004, BB-1008, and BB-2016 respectively.
#
#${SETSERIAL} -b  /dev/ttyS16 uart 16550A port 0x100 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS17 uart 16550A port 0x108 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS18 uart 16550A port 0x110 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS19 uart 16550A port 0x118 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS20 uart 16550A port 0x120 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS21 uart 16550A port 0x128 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS22 uart 16550A port 0x130 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS23 uart 16550A port 0x138 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS24 uart 16550A port 0x140 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS25 uart 16550A port 0x148 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS26 uart 16550A port 0x150 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS27 uart 16550A port 0x158 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS28 uart 16550A port 0x160 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS29 uart 16550A port 0x168 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS30 uart 16550A port 0x170 irq 12 ${STD_FLAGS}
#${SETSERIAL} -b  /dev/ttyS31 uart 16550A port 0x178 irq 12 ${STD_FLAGS}

###########################################################
#
# Print the results of the serial configuration process
#
###########################################################

echo "done."

${SETSERIAL} -bg /dev/ttyS? /dev/ttyS?? 2>/dev/null
