Load-Time Configuration

There are a couple of standard keywords that users expect to have available for configuring the interface. Any new network module is expected to follow the standard:

io=

Sets the I/O port’s base address for the interface. If more than one interface is installed in the system, a comma-separated list can be specified.

irq=

Sets the interrupt number. More than one value can be specified, as above.

In other words, a Linux user who has two own_eth interfaces installed will expect to load the module with a command line like:

insmod own_eth.o io=0x300,0x320 irq=5,7

Both the io= and the irq= options probe for the interface if 0 is specified as a value. A user can thus force probing by specifying io=0. Most drivers usually probe for one interface if the user doesn’t specify any option, but sometimes probing is disallowed for modules (see the comments in ne.c about probing for NE2000 devices).

The device driver should arrange for the behavior just described. The typical implementation for ISA devices looks like the following, assuming the driver supports up to four interfaces:

static unsigned int io[] = {0, ~0, ~0, ~0}; /* probe the first */
static unsigned int irq[] = {0, 0, 0, 0};   /* probe if unknown */

int init_module(void)
{
 i, found = 0;

    /* too high I/O addresses are not valid ones */
    for (i=0; io[i]<0x1000 /* 4KB */ && i<4;  i++) {
        /* the device-specific function below is boolean */
        found += own_eth_register(io[i], irq[i]);
    }
    return found ? 0 : -ENODEV;
}

/* device-specific registration function */
int own_eth_register(unsigned int iobase, unsigned int irq)
{
    if (!iobase) /* if iobase is 0, then probe for a device */
        iobase = own_eth_probe_iobase();
    if (!iobase)
        return 0; /* not found */
    if (!irq) /* if irq is 0, probe for it */
        irq = own_eth_probe_irq(iobase)
    return own_eth_init(iobase, irq);
}

This code probes for one board by default and always tries to autodetect the interrupt, but the user can change this behavior. For example, io=0,0,0 probes for three boards.

In addition to using io and irq, the driver writer is free to add other load-time configuration variables. There is no established naming standard.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.141.8.247