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