Date: Thu, 3 Sep 1998 12:37:54 +0200 (CEST) From: Wilko Bulte <wilko@yedi.iaf.nl> To: wpaul@skynet.ctr.columbia.edu (Bill Paul) Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: pci memory mapping Message-ID: <199809031037.MAA00970@yedi.iaf.nl> In-Reply-To: <199809022156.RAA09174@skynet.ctr.columbia.edu> from Bill Paul at "Sep 2, 98 05:56:21 pm"
next in thread | previous in thread | raw e-mail | index | archive | help
As Bill Paul wrote...
> Of all the gin joints in all the towns in all the world, Wilko Bulte had
> to walk into mine and say:
>
> > > > For some reason the followin code in attach() fails:
> > > >
> > > > if (!pci_map_mem(config_id, PCI_MAP_REG_START, &mp->vbase,
> > > > &mp->pbase)) {
> > > > printf("myx%d: couldn't map memory\n", unit);
> > > > goto fail;
> > > > }
>
> Okay, Ulf has sent me a copy of his source code so I could look at it.
>
> This doesn't seem quite right somehow. The constant PCI_MAP_REG_START
> is #define in /sys/pci/pcireg.h:
>
> #define PCI_MAP_REG_START 0x10
>
> On the two devices that I've fiddled with so far, namely the ThunderLAN
> chip and the 3Com chip, 0x10 has always been the I/O base address, i.e.
> the address used for inb/outb PIO access, and 0x14 is the memory base
> address used for memory mapped access. My impression is that these two
> registers are standar, so it's unlikely that their meanings would be
> reversed unless the chip designer is up to no good.
>
> In any case, I would try to use 0x14 instead of PCI_MAP_REG_START and
> see if that makes a difference.
It makes a difference allright: I now get a trap12 panic ;-) No 'cannot
map mem' anymore.
Suppose this is a strong indication of the kernel telling me
"you get that *manual* before experimenting" 8)
> > Right.... manual...... I'm still trying to convince Mylex that handing me
> > a copy of the DAC960 V2.xx programming manual will not wipe all life from
> > Planet Earth. Sigh. Sample code from Linux and Ulf's driver are based on
> > firmware V4.xx which is different in it's interface to the OS.
>
> Do not read sample Linux code without a barf bag nearby.
This code is not bad as far as I can tell.
> > > If the bit doesn't come on after you write to the command register, it
> > > probably means the device doesn't actually support memory mapped access.
> >
> > Well, the bit comes on because the printf() is not triggered. But still I
> > get the 'cannot map memory' from the code sample at the top of this mail.
>
> Then I'm probably right about the register that you need to supply
> to pci_map_mep(). This is just idle speculation, but maybe the other
> cards only support memory mapped mode, and the I/O base and mem base
> registers have the same values in them.
Let's hope I can get programming docs somehow.
Wilko
_ ______________________________________________________________________
| / o / / _ Bulte email: wilko@yedi.iaf.nl
|/|/ / / /( (_) Arnhem, The Netherlands WWW : http://www.tcja.nl
______________________________________________ Powered by FreeBSD __________
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199809031037.MAA00970>
