Provided by: setserial_2.17-54_amd64 bug

NAME

       setserial - get/set Linux serial port information

SYNOPSIS

       setserial [ -abqvVWz ] device [ parameter1 [ arg ] ] ...

       setserial -g [ -abGv ] device1 ...

DESCRIPTION

       setserial  is  a  program  designed  to set and/or report the configuration information associated with a
       serial port.  This information includes what I/O port and IRQ a particular  serial  port  is  using,  and
       whether or not the break key should be interpreted as the Secure Attention Key, and so on.

       During the normal bootup process, only COM ports 1-4 are initialized, using the default I/O ports and IRQ
       values,  as  listed  below.  In order to initialize any additional serial ports, or to change the COM 1-4
       ports to a nonstandard configuration, the setserial program should be used.  Typically it is called  from
       an setserial script, which is usually run out of /etc/init.d.

       The  device  argument  specifies  which  device  to  configure  or to interrogate.  Examples: /dev/ttyS0,
       /dev/ttyS1, /dev/ttyS2, /dev/ttyS3, etc.

       If no parameters are specified, setserial will print out the port type (i.e., 8250, 16450, 16550, 16550A,
       etc.), the hardware I/O port, the hardware IRQ line, its "baud base," and some of its operational flags.

       If the -g option is given, the arguments to setserial are interpreted as a list of devices for which  the
       characteristics of those devices should be printed.

       Without  the  -g  option,  the first argument to setserial is interpreted as the device to be modified or
       characteristics to be printed, and any additional arguments are interpreted as parameters which should be
       assigned to that serial device.

       For the most part, superuser privilege is required to set the configuration parameters of a serial  port.
       A  few  serial port parameters can be set by normal users, however, and these will be noted as exceptions
       in this manual page.

OPTIONS

       Setserial accepts the following options:

       -a     When reporting the configuration of a serial device, print all available information.

       -b     When  reporting  the  configuration  of  a  serial  device,  print  a  summary  of  the   device's
              configuration,  which might be suitable for printing during the bootup process, during the /etc/rc
              script.

       -G     Print out the configuration information of the serial port in a form which  can  be  fed  back  to
              setserial as command-line arguments.

       -q     Be quiet.  Setserial will print fewer lines of output.

       -v     Be verbose.  Setserial will print additional status output.

       -V     Display version and exit.

       -W     Do  wild  interrupt  initialization  and exit.  This option is no longer relevant in Linux kernels
              after version 2.1.

       -z     Zero out the serial flags before starting to set flags.  This is related to the  automatic  saving
              of serial flags using the -G flag.

PARAMETERS

       The following parameters can be assigned to a serial port.

       All argument values are assumed to be in decimal unless preceded by "0x".

       port port_number
              The port option sets the I/O port, as described above.

       irq irq_number
              The irq option sets the hardware IRQ, as described above.

       uart uart_type
              This  option  is  used  to  set  the UART type.  The permitted types are none, 8250, 16450, 16550,
              16550A, 16650, 16650V2, 16654, 16750, 16850, 16950, and 16954.  Using UART type none will  disable
              the port.

              Some  internal modems are billed as having a "16550A UART with a 1k buffer".  This is a lie.  They
              do not have really have a 16550A compatible UART; instead what they have  is  a  16450  compatible
              UART  with  a  1k receive buffer to prevent receiver overruns.  This is important, because they do
              not have a  transmit  FIFO.   Hence,  they  are  not  compatible  with  a  16550A  UART,  and  the
              autoconfiguration  process  will  correctly  identify them as 16450's.  If you attempt to override
              this using the uart parameter, you will see dropped characters during file  transmissions.   These
              UART's usually have other problems: the skip_test parameter also often must be specified.

       autoconfig
              When  this parameter is given, setserial will ask the kernel to attempt to automatically configure
              the serial port.  The I/O port must be correctly set; the kernel will  attempt  to  determine  the
              UART type, and if the auto_irq parameter is set, Linux will attempt to automatically determine the
              IRQ.   The  autoconfig parameter should be given after the port,auto_irq, and skip_test parameters
              have been specified.

       auto_irq
              During autoconfiguration, try to determine the IRQ.  This feature  is  not  guaranteed  to  always
              produce  the  correct  result;  some  hardware  configurations  will fool the Linux kernel.  It is
              generally safer not to use the auto_irq feature,  but  rather  to  specify  the  IRQ  to  be  used
              explicitly, using the irq parameter.

       ^auto_irq
              During autoconfiguration, do not try to determine the IRQ.

       skip_test
              During  autoconfiguration,  skip  the  UART  test.   Some  internal  modems  do  not have National
              Semiconductor compatible UART's,  but  have  cheap  imitations  instead.   Some  of  these  cheesy
              imitations UART's do not fully support the loopback detection mode, which is used by the kernel to
              make  sure  there  really is a UART at a particular address before attempting to configure it.  So
              for certain internal modems you will need to specify this parameter so Linux  can  initialize  the
              UART correctly.

       ^skip_test
              During autoconfiguration, do not skip the UART test.

       baud_base baud_base
              This  option  sets  the base baud rate, which is the clock frequency divided by 16.  Normally this
              value is 115200, which is also the fastest baud rate which the UART can support.

       spd_hi Use 57.6kb when the application requests 38.4kb.  This  parameter  may  be  specified  by  a  non-
              privileged user.

       spd_vhi
              Use  115kb  when  the  application  requests  38.4kb.   This  parameter may be specified by a non-
              privileged user.

       spd_shi
              Use 230kb when the application requests 38.4kb.   This  parameter  may  be  specified  by  a  non-
              privileged user.

       spd_warp
              Use  460kb  when  the  application  requests  38.4kb.   This  parameter may be specified by a non-
              privileged user.

       spd_cust
              Use the custom divisor to set the speed when the application requests 38.4kb.  In this  case,  the
              baud  rate  is  the  baud_base  divided by the divisor.  This parameter may be specified by a non-
              privileged user.

       spd_normal
              Use 38.4kb when the application requests 38.4kb.  This  parameter  may  be  specified  by  a  non-
              privileged user.

       divisor divisor
              This  option  sets  the  custom  divisor.   This  divisor will be used when the spd_cust option is
              selected and the serial port is set to 38.4kb by the application.  This parameter may be specified
              by a non-privileged user.

       sak    Set the break key at the Secure Attention Key.

       ^sak   disable the Secure Attention Key.

       fourport
              Configure the port as an AST Fourport card.

       ^fourport
              Disable AST Fourport configuration.

       close_delay delay
              Specify the amount of time, in hundredths of a second, that DTR should remain low on a serial line
              after the callout device is closed, before the  blocked  dialin  device  raises  DTR  again.   The
              default value of this option is 50, or a half-second delay.

       closing_wait delay
              Specify  the amount of time, in hundredths of a second, that the kernel should wait for data to be
              transmitted from the serial port while closing the port.  If "none" is specified,  no  delay  will
              occur.  If  "infinite" is specified the kernel will wait indefinitely  for the buffered data to be
              transmitted.  The default setting is 3000 or 30 seconds  of  delay.   This  default  is  generally
              appropriate  for most devices.  If too long a delay is selected, then the serial port may hang for
              a long time if when a serial port which is not connected, and has data pending, is closed.  If too
              short a delay is selected, then there is a risk that some of the transmitted  data  is  output  at
              all.  If the device is extremely slow, like a plotter, the closing_wait may need to be larger.

       session_lockout
              Lock  out  callout  port (/dev/cuaXX) accesses across different sessions.  That is, once a process
              has opened a port, do not allow a process with a different session ID to open that port until  the
              first process has closed it.

       ^session_lockout
              Do not lock out callout port accesses across different sessions.

       pgrp_lockout
              Lock  out  callout  port  (/dev/cuaXX)  accesses across different process groups.  That is, once a
              process has opened a port, do not allow a process in a different process group to open  that  port
              until the first process has closed it.

       ^pgrp_lockout
              Do not lock out callout port accesses across different process groups.

       hup_notify
              Notify a process blocked on opening a dialin line when a process has finished using a callout line
              (either by closing it or by the serial line being hung up) by returning EAGAIN to the open.

              The application of this parameter is for getty's which are blocked on a serial port's dialin line.
              This  allows  the  getty  to reset the modem (which may have had its configuration modified by the
              application using the callout device) before blocking on the open again.

       ^hup_notify
              Do not notify a process blocked on opening a dialin line when the callout device is hung up.

       split_termios
              Treat the termios settings used by the callout device and the termios settings used by the  dialin
              devices as separate.

       ^split_termios
              Use  the  same  termios structure to store both the dialin and callout ports.  This is the default
              option.

       callout_nohup
              If this particular serial port is opened as a callout device, do not hangup the tty  when  carrier
              detect is dropped.

       ^callout_nohup
              Do  not  skip hanging up the tty when a serial port is opened as a callout device.  Of course, the
              HUPCL termios flag must be enabled if the hangup is to occur.

       low_latency
              Minimize the receive latency of the  serial  device  at  the  cost  of  greater  CPU  utilization.
              (Normally  there  is  an  average  of  5-10ms latency before characters are handed off to the line
              discipline to minimize overhead.)  This is off by default, but certain real-time applications  may
              find this useful.

       ^low_latency
              Optimize  for  efficient  CPU  processing of serial characters at the cost of paying an average of
              5-10ms of latency before the characters are processed.  This is the default.

CONSIDERATIONS OF CONFIGURING SERIAL PORTS

       It is important to note that setserial merely tells the Linux kernel where it should expect to  find  the
       I/O  port  and  IRQ  lines of a particular serial port.  It does *not* configure the hardware, the actual
       serial board, to use a particular I/O port.  In order to do that, you will need to physically program the
       serial board, usually by setting some jumpers or by switching some DIP switches.

       This section will provide some pointers in helping you decide how you would like to configure your serial
       ports.

       The "standard MS-DOS" port associations are given below:

              /dev/ttyS0 (COM1), port 0x3f8, irq 4
              /dev/ttyS1 (COM2), port 0x2f8, irq 3
              /dev/ttyS2 (COM3), port 0x3e8, irq 4
              /dev/ttyS3 (COM4), port 0x2e8, irq 3

       Due to the limitations in the design of the AT/ISA bus architecture, normally an  IRQ  line  may  not  be
       shared between two or more serial ports.  If you attempt to do this, one or both serial ports will become
       unreliable  if you try to use both simultaneously.  This limitation can be overcome by special multi-port
       serial port boards, which are designed to share multiple serial ports over a single IRQ line.  Multi-port
       serial cards supported by Linux include the AST FourPort, the Accent Async board, the  Usenet  Serial  II
       board, the Bocaboard BB-1004, BB-1008, and BB-2016 boards, and the HUB-6 serial board.

       The  selection  of  an  alternative  IRQ  line  is  difficult,  since most of them are already used.  The
       following table lists the "standard MS-DOS" assignments of available IRQ lines:

              IRQ 3: COM2
              IRQ 4: COM1
              IRQ 5: LPT2
              IRQ 7: LPT1

       Most people find that IRQ 5 is a good choice, assuming that there is only one parallel port active in the
       computer.  Another good choice is IRQ 2 (aka IRQ 9); although this  IRQ  is  sometimes  used  by  network
       cards,  and  very  rarely  VGA cards will be configured to use IRQ 2 as a vertical retrace interrupt.  If
       your VGA card is configured this way; try to disable it so you can reclaim that IRQ line for  some  other
       card.  It's not necessary for Linux and most other Operating systems.

       The  only  other available IRQ lines are 3, 4, and 7, and these are probably used by the other serial and
       parallel ports.  (If your serial card has a 16bit card edge  connector,  and  supports  higher  interrupt
       numbers, then IRQ 10, 11, 12, and 15 are also available.)

       On AT class machines, IRQ 2 is seen as IRQ 9, and Linux will interpret it in this manner.

       IRQ's  other  than  2 (9), 3, 4, 5, 7, 10, 11, 12, and 15, should not be used, since they are assigned to
       other hardware and cannot, in general, be changed.  Here are the "standard" assignments:

              IRQ  0      Timer channel 0
              IRQ  1      Keyboard
              IRQ  2      Cascade for controller 2
              IRQ  3      Serial port 2
              IRQ  4      Serial port 1
              IRQ  5      Parallel port 2 (Reserved in PS/2)
              IRQ  6      Floppy diskette
              IRQ  7      Parallel port 1
              IRQ  8      Real-time clock
              IRQ  9      Redirected to IRQ2
              IRQ 10      Reserved
              IRQ 11      Reserved
              IRQ 12      Reserved (Auxiliary device in PS/2)
              IRQ 13      Math coprocessor
              IRQ 14      Hard disk controller
              IRQ 15      Reserved

MULTIPORT CONFIGURATION

       Certain multiport serial boards which share multiple ports on a single IRQ  use  one  or  more  ports  to
       indicate  whether  or not there are any pending ports which need to be serviced.  If your multiport board
       supports these ports, you should make use of them to avoid potential lockups if the interrupt gets lost.

       In order to set these ports specify set_multiport as a  parameter,  and  follow  it  with  the  multiport
       parameters.  The multiport parameters take the form of specifying the port that should be checked, a mask
       which indicate which bits in the register are significant, and finally, a match parameter which specifies
       what the significant bits in that register must match when there is no more pending work to be done.

       Up  to  four  such  port/mask/match combinations may be specified.  The first such combinations should be
       specified by setting the parameters port1, mask1, and match1.  The  second  such  combination  should  be
       specified  with  port2,  mask2,  and match2, and so on.  In order to disable this multiport checking, set
       port1 to be zero.

       In order to view the current multiport settings, specify the parameter get_multiport on the command line.

       Here are some multiport settings for some common serial boards:

              AST FourPort    port1 0x1BF mask1 0xf match1 0xf

              Boca BB-1004/8  port1 0x107 mask1 0xff match1 0

              Boca BB-2016    port1 0x107 mask1 0xff match1 0
                              port2 0x147 mask2 0xff match2 0

Hayes ESP Configuration

       Setserial may also be used to configure ports on a Hayes ESP serial board.

       The following parameters when configuring ESP ports:

       rx_trigger
              This is the trigger level (in bytes) of the receive  FIFO.  Larger  values  may  result  in  fewer
              interrupts  and  hence  better  performance;  however, a value too high could result in data loss.
              Valid values are 1 through 1023.

       tx_trigger
              This is the trigger level (in bytes) of the transmit FIFO.  Larger  values  may  result  in  fewer
              interrupts  and  hence  better  performance;  however,  a  value too high could result in degraded
              transmit performance. Valid values are 1 through 1023.

       flow_off
              This is the level (in bytes) at which the ESP port will "flow off" the  remote  transmitter  (i.e.
              tell him to stop stop sending more bytes).  Valid values are 1 through 1023.  This value should be
              greater than the receive trigger level and the flow on level.

       flow_on
              This  is  the  level  (in bytes) at which the ESP port will "flow on" the remote transmitter (i.e.
              tell him to resume sending bytes) after having flowed it off.  Valid values are  1  through  1023.
              This value should be less than the flow off level, but greater than the receive trigger level.

       rx_timeout
              This  is the amount of time that the ESP port will wait after receiving the final character before
              signaling an interrupt.  Valid values are 0 through 255.  A value too high will increase  latency,
              and a value too low will cause unnecessary interrupts.

CAUTION

       CAUTION: Configuring a serial port to use an incorrect I/O port can lock up your machine.

FILES

       /etc/serial.conf /etc/init.d/setserial

SEE ALSO

       tty(4), ttys(4), kernel/chr_drv/serial.c

AUTHOR

       The  original  version  of setserial was written by Rick Sladkey (jrs@world.std.com), and was modified by
       Michael K. Johnson (johnsonm@stolaf.edu).

       This version has since been rewritten from scratch by Theodore Ts'o (tytso@mit.edu) on 1/1/93.  Any  bugs
       or problems are solely his responsibility.

       Debian related problems with this system should be sent to Gordon Russell (gor@debian.org).

Setserial 2.17                                    January 2000                                      SETSERIAL(8)