bus device driver
John Baldwin
jhb at freebsd.org
Tue Jul 14 17:39:18 UTC 2009
On Tuesday 14 July 2009 11:30:50 am Norbert Koch wrote:
>
> > From a hardware perspective, how do your devices know which addresses to
> > decode? Do they consume subranges of BARs or are they assigned fixed
> > addresses somehow? Do they have programmable decoders of some sort
> > themselves? If you wish to have the PCI bus assign you resources then
that
> > implies that your PCI device has a BAR and that you want to request
resources
> > for that BAR and then hand out subranges of that to your children. If
that
> > is the case, then you will need to allocate the resources for the BAR for
the
> > PCI device from the PCI bus. Then your bus driver for the PCI device will
> > need to suballoc from that BAR to your children devices.
> >
> >
> My device decodes one ram address range (16MB) and gives me
> one interrupt line.
> As my sub-devices operate on partial address areas my idea was to
> let them all call bus_alloc_resource() with the same rid parameter (=
> BAR selector)
> and different offsets. So the bookkeeping should be done by the pci
> driver, right?
No. First of all, the PCI bus driver will only allocate resources for direct
children. It simply passes requests up the tree for grandchildren (this is
how ISA devices behind a PCI-ISA bridge request resources). In this case,
you will want to allocate resources for your BAR and your interrupt using
bus_alloc_resource() during your attach routine. You can then either share
the resources directly with your children by returning your resource values
in your own bus_alloc_resource() method (see ppc(4) for an example of this)
or subdivide your resource to make new resources (the easiest way to do this
is probably to create a rman from your resource and then use
rman_reserve_resource() to sub-allocate chunks of that to your children).
For the interrupt resource you can just return your own resource pointer
directly in your bus_alloc_resource() routine.
--
John Baldwin
More information about the freebsd-hackers
mailing list