FAQ (Frequently Asked Question) # 147502.faq

Standard Port & IRQ Assignments for PCs



DOCUMENT ID:  1475-02

SYNOPSIS:     Standard Port & IRQ Assignments for PCs

OS RELEASE:   Solaris x86 2.4

PRODUCT:

KEYWORDS:    standard port irq assignments pc i/o card


SYMPTOMS:

The new I/O card you installed does not work or has intermittent
problems. 


		

DESCRIPTION:


Either Solaris does not recognize an I/O card (either new or existing),
or your card works eratically.  This starts either when you change your
hardware configuration or your software driver configuration (enabling
new features is a typical case). 


		

SOLUTION:


Check for conflicting I/O ports and IRQs.  In come cases default
settings between two boards will conflict and you must pick good
alternatives. 

This document will list standard I/O and IRQ settings in a single
document.  It also will list several standard alternate IRQ settings for
particular devices. 

As a standard practice it is also a good idea to write a label with the
I/O, IRQ, DMA, and memory addresses for every device in your machine. 
Paste this either on the back or inside the case.  You should also save
it as a file on your disk that you can update and refer to when needed. 
If you use MS-DOS or some other OS you should also keep a file in that
file system (CONFIG.SYS works great for MS-DOS). 

It is very important to note the RANGE of I/O addresses for a device. 
Many of the documents you see only list the STARTING address of a
device.  Always try to get the entire range documented to insure that
you don't have a conflict later when you add another device. 

Included is the Adaptec 154x SCSI controller as an example of where
a SCSI host adapter is commonly placed in the system.  Please note that
when a SCSI adapter is used as the primary controller, it often needs to
be placed at the default addresses for I/O, DMA, etc.  so that the
system can find it when it is booting.  If that conflicts with another
card, like a network card, then you should change the other card to an
alternate address.  Once the system has been booted it can read the
other cards configuration from a driver configuration file. 


 STANDARD I/O PORTS:

 I/O ADDRESSES | DEVICE
 ---------------------------------------------------
   1F0 - 1F8   | Fixed Disk (ST-506)
   200 - 207   | Game I/O
   260 - 268   | IDE Controller (Primary?)
   278 - 27F   | Parallel Port 2 - LPT2
   2E8 - 2EF   | Serial Port 4 - COM4
   2F8 - 2FF   | Serial Port 2 - COM2
   300 - 31F   | Prototype or network card
   330 - 334   | Adaptec 154x SCSI controllers
   360 - 363   | PC network (low address)
   368 - 36B   | PC network (high address)
   378 - 37F   | Parallel Port 1 - LPT1
   380 - 38F   | SDLC, Bisynchronous
   3A0 - 3AF   | Bisynchronous (primary)
   3B0 - 3BF   | Monochrome (IBM) display adapter
   3C0 - 3CF   | EGA/VGA display adapter
   3D0 - 3DF   | CGA/MCGA display adapter
   3E8 - 3EF   | Serial Port 3 - COM3
   3F0 - 3F7   | Diskette controller
   3F8 - 3FF   | Serial Port 1 - COM1


 STANDARD IRQs:

 IRQ # | ASSIGNMENT
 ------------------------------------
  NMI  | Reports memory parity errors
    0  | System timer
    1  | Keyboard
    2  | Cascade to (from?) IRQ 9 (Used by some VGA and network cards {NE2000})
    3  | COM2 and COM4
    4  | COM1 and COM3
    5  | LPT2
    6  | Floppy disk controller
    7  | LPT1
    8  | Realtime clock
    9  | Software redirected to interrupt 0AH
   10  | 
   11  | Adaptec 154x SCSI controllers
   12  | 
   13  | Coprocessor
   14  | Primary IDE interface
   15  | Secondary IDE interface

NOTE: The IRQs with no assignment are often the target of SCSI, network,
and sound cards.  These are often the safest place to use for a new IRQ,
but be sure it is not in use already. 

The next best places are the IRQs for LPT2, Game cards, or IRQ2 & IRQ15. 
These are good alternates because they are IRQs for devices you probably
do not have on a Solaris x86 system. 


 STANDARD DMA CHANNELS:

 DMA # | ASSIGNMENT
 ------------------
    0  | RAM Refresh
    2  | Floppy disk controller
    5  | Adaptec 154x SCSI controllers 


STANDARD MEMORY ADDRESSES:

 ADDRESSES   | CARD
 --------------------------
 C0000-C7FFF | SVGA
 CC000-CFFFF | Network card
 DC000-DFFFF | Adaptec 154x SCSI controllers
 E0000-EFFFF | EMS page frame buffer
 F0000-FFFFF | BIOS ROM





DATE APPROVED: 07/28/95       

		

Questions or comments?

Copyright 1994 Sun Microsystems, Inc. 2550 Garcia Ave., Mt. View, CA 94043-1100 USA. All rights reserved.
From the setserial man page
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 pro-
       gram 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 (Auxillary 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 match1 0xf mask1 0xf

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

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

CAUTION
       CAUTION: Using an invalid port can lock up your machine.