Recently, I got a DSL internet connection (love it!). This, however, used up the ethernet card I'd previously used for communicating with a Windows NT PC(sorry about that! it's from work).

Since I still wanted LAN communications between these machines (dialing the NT machine into the internet so it could communicate with the Linux box via it's DSL connection was a little too baroque), I went out and bought another Ethernet card, selecting the cheapest thing I could find that claimed Linux compatibiity. This was a Linksys Ether16, which is an ISA card.

It being ISA, the plug and play, auto-detect stuff doesn't work the same. In fact the doc that came with the card stated that it should be turned off, then the DOS setup utility used to assign IRQs and IO ports to the card. So I did so, but couldn't get the new card to work. Then I entered the IRQs and IO ports into /etc/conf.modules, as in:

alias eth1 ne
options ne io=240 irq=10

and issued modprobe ne, as the doc indicated that the ne2000 driver was to be used.

I first recieved messages about not being able to find the card at "0x0f0"; some quick arithmetic revealed the 240 decimal = 0f0 hex - the conf.modules doesn't default to hex. So I changed this to:

alias eth1 ne
options ne io=0x240 irq=0x0a

But still recieved complaints that IRQ 10 wasn't active at IO port 10. At this point I decided I probably had a conflict of IRQ assignments, so I did the only thing I knew to do to determine what IRQs everything was using: rebooted into (dare I say it?) Windows 98 and used My Computer->Properties->Device Manager to read the IRQs and laboriously wrote them all down. This yielded the fact that IRQ 9 was not in use, so I changed the relevent lines in /etc/conf.modules to:

alias eth1 ne
options ne io=0x240 irq=9

At this point, I was able to reboot (having already used linuxconf to setup /etc/sysconfig/network-scripts/ifcfg-eth1 to read:

DEVICE="eth1"
IPADDR="172.22.200.201"
NETMASK="255.255.255.0"
ONBOOT="yes"
BOOTPROTO="none"
IPXNETNUM_802_2=""
IPXPRIMARY_802_2="no"
IPXACTIVE_802_2="no"
IPXNETNUM_802_3=""
IPXPRIMARY_802_3="no"
IPXACTIVE_802_3="no"
IPXNETNUM_ETHERII=""
IPXPRIMARY_ETHERII="no"
IPXACTIVE_ETHERII="no"
IPXNETNUM_SNAP=""
IPXPRIMARY_SNAP="no"
IPXACTIVE_SNAP="no"
# BOOTPROTO="dhcp"

)


(What's the point?) The point is...

Anyhow, the point of all this is that I used Windows 98 to find a free IRQ, but this wasn't necessary. In using www.deja.com to search Linux newsgroups about a different subject (why my 3C905B won't reliably use DHCP to get my IP address, default router, etc., from my DSL modem [for which there is a patch, by the way]), I found a post by Donald Becker, who wrote the drivers for this card, which pointed me toward the following. The /proc directory and it's subdirectories provide a wealth of information about the system. Specifically, issuing cat /proc/interrupts reveals the following:

           CPU0
  0:   56238279          XT-PIC  timer
  1:      65592          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  5:       1542          XT-PIC  soundblaster
  8:          2          XT-PIC  rtc
  9:      98434          XT-PIC  NE2000
 10:     228717          XT-PIC  eth0
 12:    1821615          XT-PIC  PS/2 Mouse
 13:          1          XT-PIC  fpu
 14:    2424024          XT-PIC  ide0
 15:     498557          XT-PIC  ide1
NMI:          0

Similarly, issuing cat /proc/ioports yields:

0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
020b-020b : PnP read port
0220-022f : soundblaster
0240-025f : NE2000
02f8-02ff : serial(auto)
0330-0333 : MPU-401 UART
0376-0376 : ide1
0388-038b : OPL3/OPL2
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial(auto)
e800-e83f : eth0
f000-f007 : ide0
f008-f00f : ide1

However, this isn't the entire story, as there are some PCI devices which don't emerge. These are shown using cat /proc/pci, which yields:


PCI devices found:
  Bus  0, device   0, function  0:
    Host bridge: Intel 440LX - 82443LX PAC Host (rev 3).
      Medium devsel.  Fast back-to-back capable.  Master Capable.  Latency=64.
      Prefetchable 32 bit memory at 0xe0000000 [0xe0000008].
  Bus  0, device   1, function  0:
    PCI bridge: Intel 440LX - 82443LX PAC AGP (rev 3).
      Medium devsel.  Fast back-to-back capable.  Master Capable.  Latency=64.  Min Gnt=2.
  Bus  0, device   7, function  0:
    ISA bridge: Intel 82371AB PIIX4 ISA (rev 2).
      Medium devsel.  Fast back-to-back capable.  Master Capable.  No bursts.
  Bus  0, device   7, function  1:
    IDE interface: Intel 82371AB PIIX4 IDE (rev 1).
      Medium devsel.  Fast back-to-back capable.  Master Capable.  Latency=64.
      I/O at 0xf000 [0xf001].
  Bus  0, device   7, function  2:
    USB Controller: Intel 82371AB PIIX4 USB (rev 1).
      Medium devsel.  Fast back-to-back capable.  IRQ 11.  Master Capable.  Latency=64.
      I/O at 0xe000 [0xe001].
  Bus  0, device   7, function  3:
    Bridge: Intel 82371AB PIIX4 ACPI (rev 2).
      Medium devsel.  Fast back-to-back capable.
  Bus  0, device   9, function  0:
    VGA compatible controller: ATI Mach64 GP (Rage Pro) (rev 92).
      Medium devsel.  Fast back-to-back capable.  IRQ 10.  Master Capable.  Latency=64.  Min Gnt=8.
      Prefetchable 32 bit memory at 0xe4000000 [0xe4000008].
      I/O at 0xe400 [0xe401].
      Non-prefetchable 32 bit memory at 0xe7000000 [0xe7000000].
  Bus  0, device  11, function  0:
    Ethernet controller: 3Com 3C900 10bTPO (rev 0).
      Medium devsel.  IRQ 10.  Master Capable.  Latency=64.  Min Gnt=3.Max Lat=8.
      I/O at 0xe800 [0xe801].
  Bus  0, device  13, function  0:
    Communication controller: Motorola Unknown device (rev 0).
      Vendor id=1057. Device id=5600.
      Medium devsel.  Fast back-to-back capable.  IRQ 10.  Master Capable.  Latency=64.  Min Gnt=1.Max Lat=255.
      Prefetchable 32 bit memory at 0xe7001000 [0xe7001008].

This yields some additional information on IRQs not given in the previous displays.

NOTE: Don't be fooled by the 0 byte filesize of files in /proc and it's sub-directories, the information is often there if you cat the files.