Subject: Re: Finding Kernel VA that maps given physical address?
To: Wolfgang Solfrank <ws@kurt.tools.de>
From: Paul Goyette <paul@whooppee.com>
List: tech-kern
Date: 07/21/1997 18:51:03
On Mon, 21 Jul 1997, Wolfgang Solfrank wrote:
> > I've figured out how to find the physical address given a kernel VA using
> > pmap_extract(). But I haven't found the equivalent mechanism to do the
> > reverse translation. I realize that, in a general case, there might be
> > _several_ (or even _many_) kernel VAs that map to the same physical
> > address, but I'm pretty sure that that won;t happen in the specific case I
> > need to handle. So it would be just peachy if there were a way to find
> > _any_ kernel virtual address that maps to a given physical address.
>
> What makes you think that a given physical address _does_ have a virtual
> address in the kernel address space?
Actually, I _don't_ know that such a mapping exists! In fact, the absence
of a mapping will have the equivalent effect of a failed probe (ie, bus
error), and declare the slot associated with the physical address to be
empty.
> Why don't you map the physical address into the kernel address space yourself
> where you need it, remembering the virtual address in some driver data
> structure in case you don't want to drop the mapping again immediately?
Well, my intent here is to _not_ reinvent the wheel. I'm implementing the
slot manager interface so that other NetBSD/Mac68k device drivers can use
the existing, on-board ROM-resident driver code and interface to it using
a documented API - Apple's own driver calls to the Read, Write, Control,
Prime, etc. entry points.
By taking this approach, I expect that the normal autoconfiguration
process will occur, and the code in nubus.c will call all appropriate
drivers to perform their own attach() calls. Thus, I _assumed_ that the
drivers themselves would be responsible for calling pmap_map(), as is
currently the case with the video-board driver grf_mv.c (and presumably
other nubus drivers, like the ones for Ethernet cards). All I'm looking
for is some way to find out what the driver code did (or didn't) do - is
the physical address space for a given slot mapped, and therefore is there
a driver for the card in that slot?
-----------------------------------------------------------------------------
| Paul Goyette | PGP Public Key fingerprint: | E-mail addresses: |
| Network Consultant | 0E 40 D2 FC 2A 13 74 A0 | paul@whooppee.com |
| and kernel hacker | E4 69 D5 BE 65 E4 56 C6 | paul_goyette@ins.com |
-----------------------------------------------------------------------------