Subject: Configuring a device at address 32meg
To: None <tech-kern@sun-lamp.cs.berkeley.edu>
From: Bob Felderman <feldy@myri.com>
List: tech-kern
Date: 06/29/1994 21:38:06
We're inserting a networking board on a VL-bus machine
that will repond to addresses in the range >=32meg = 0x2000000.
The device configure code seems to only understand things in
the range < 1 meg.

Anybody got any pointers on how to make this work?

Here's the conf line
-------------------------------------------------------------------
# Use 32meg as address of board  = 0x2000000
# WARNING, if you use a value that's bigger than 1meg, then the
# kernel panics during the config. The 0xa000 should be the base of
# the board.

device gig0 at isa? net irq 9 iomem 0xa0000 iosiz 262144 vector gigintr

---------------------------------------------------------------

Here's the code in "isa.c" that is no good.
/*
 * Configure an ISA device.
 */
int
config_isadev(isdp, mp)
        struct isa_device *isdp;
        u_int *mp;
{
        struct isa_driver *dp;
 
        if (dp = isdp->id_driver) {
                if (isdp->id_maddr) {
                        extern u_int atdevbase;

                        isdp->id_maddr -= 0xa0000; /* XXX should be a define */
                        isdp->id_maddr += atdevbase;
                }
                isdp->id_alive = (*dp->probe)(isdp);
                if (isdp->id_irq == (u_short)-1)
                        isdp->id_alive = 0;
                /*
                 * Only print the I/O address range if id_alive != -1
                 * Right now this is a temporary fix just for the new
                 * NPX code so that if it finds a 486 that can use trap
                 * 16 it will not report I/O addresses.
                 * Rod Grimes 04/26/94
                 *
                 * XXX -- cgd
                 */


------------------------------------------------------------------------------