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
*/
------------------------------------------------------------------------------