At boot time, the Ethernet code will try to locate your board and determine its type. Cards are probed for at the following addresses and in the following order:
There are two limitations to the autoprobing code. For one, it may not recognize all boards properly. This is especially true for some of the cheaper clones of common boards, but also for some WD80x3 boards. The second problem is that the kernel will not auto-probe for more than one board at the moment. This is a feature, because it is assumed you want to have control about which board is assigned which interface.
If you are using more than one board, or if the autoprobe should fail to detect your board, you have to tell the kernel explicitly about the card's base address and name.
In Net-3, you have can use two different schemes to accomplish this. One way is to change or add information in the drivers/net/Space.c file in the kernel source code that contains all information about drivers. This is recommended only if you are familiar with the networking code. A much better way is to provide the kernel with this information at boot time. If you use lilo to boot your system, you can pass parameters to the kernel by specifying them through the append option in lilo.conf. To inform the kernel about an Ethernet device, you can pass the following parameter:
The first four parameters are numerical, while the last is the device name. All numerical values are optional; if they are omitted or set to zero, the kernel will try to detect the value by probing for it, or use a default value.
The first parameter sets the IRQ assigned to the device. By default, the kernel will try to auto-detect the device's IRQ channel. The 3c503 driver has a special feature that selects a free IRQ from the list 5, 9, 3, 4, and configures the board to use this line.
The base_addr parameter gives the I/O base address of the board; a value of zero tells the kernel to probe the addresses listed above.
The remaining two parameters may be used differently by different drivers. For shared-memory boards such as the WD80x3, they specify start and end addresses of the shared memory area. Other cards commonly use param1 to set the level of debugging information that is being displayed. Values of 1 through 7 denote increasing levels of verbosity, while 8 turns them off altogether; 0 denotes the default. The 3c503 driver uses param2 to select the internal transceiver (default) or an external transceiver (a value of 1). The former uses the board's BNC connector; the latter uses its AUI port.
If you have two Ethernet boards, you can have autodetect one board, and pass the second board's parameters with lilo. However, you must make sure the driver doesn't accidentally find the second board first, else the other one won't be registered at all. You do this by passing lilo a reserve option, which explicitly tells the kernel to avoid probing the I/O space taken up by the second board.
For instance, to make install a second Ethernet board at 0x300 as eth1, you would pass the following parameters to the kernel:
The reserve option makes sure no driver accesses the board's I/O space when probing for some device. You may also use the kernel parameters to override autoprobing for eth0:
To turn off autoprobing altogether, you can specify a base_addr argument of -1: