Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Jul 2009 08:49:51 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Norbert Koch <nkoch@demig.de>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: bus device driver
Message-ID:  <200907140849.51702.jhb@freebsd.org>
In-Reply-To: <4A5C2EF8.3080208@demig.de>
References:  <4A5B3F1B.3040207@demig.de> <200907131435.30452.jhb@freebsd.org> <4A5C2EF8.3080208@demig.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday 14 July 2009 3:08:40 am Norbert Koch wrote:
>=20
> John Baldwin schrieb:
> > On Monday 13 July 2009 10:05:15 am Norbert Koch wrote:
> >  =20
> >> Hello.
> >>
> >> I just started to write a device
> >> driver for a multi-function pci card.
> >> This card replaces a number of
> >> independant isa hardware devices.
> >> This pci card contains memory, i/o
> >> and interrupt sources.
> >> I want my device driver to
> >> serve as a bus driver between
> >> the pci driver and the specific
> >> device drivers.
> >>
> >> Do I need more than the following (see below)?
> >> Do I have to do any bookkeeping for allocated resources?
> >>    =20
> >
> > How do the child devices receive resources?  Do they suballocate region=
s=20
from=20
> > BARs in the PCI device or is your device a subtractive bridge that will=
=20
> > forward requests for ISA ranges and your devices all use ISA ranges?
> >
> >  =20
> I am not quite sure that I understand what you mean. What is the differen=
ce?
> My old device drivers were isa based. We had all our resources in the=20
> 15-16M isa hole.
> So I want to change them to just allocate resources from the pci bus=20
> through the bus device driver.
> I thought it would be sufficient to just forward *_alloc_resource calls=20
> directly to the pci driver.
> Clearly, my drivers will have to know that they are just forwarded=20
> through to pci
> and have to know what sub-resources to allocate.

=46rom a hardware perspective, how do your devices know which addresses to=
=20
decode?  Do they consume subranges of BARs or are they assigned fixed=20
addresses somehow?  Do they have programmable decoders of some sort=20
themselves?  If you wish to have the PCI bus assign you resources then that=
=20
implies that your PCI device has a BAR and that you want to request resourc=
es=20
for that BAR and then hand out subranges of that to your children.  If that=
=20
is the case, then you will need to allocate the resources for the BAR for t=
he=20
PCI device from the PCI bus.  Then your bus driver for the PCI device will=
=20
need to suballoc from that BAR to your children devices.

=2D-=20
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907140849.51702.jhb>