bus device driver

John Baldwin jhb at freebsd.org
Tue Jul 14 14:08:54 UTC 2009


On Tuesday 14 July 2009 3:08:40 am Norbert Koch wrote:
> 
> John Baldwin schrieb:
> > On Monday 13 July 2009 10:05:15 am Norbert Koch wrote:
> >   
> >> 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?
> >>     
> >
> > How do the child devices receive resources?  Do they suballocate regions 
from 
> > BARs in the PCI device or is your device a subtractive bridge that will 
> > forward requests for ISA ranges and your devices all use ISA ranges?
> >
> >   
> I am not quite sure that I understand what you mean. What is the difference?
> My old device drivers were isa based. We had all our resources in the 
> 15-16M isa hole.
> So I want to change them to just allocate resources from the pci bus 
> through the bus device driver.
> I thought it would be sufficient to just forward *_alloc_resource calls 
> directly to the pci driver.
> Clearly, my drivers will have to know that they are just forwarded 
> through to pci
> and have to know what sub-resources to allocate.

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.

-- 
John Baldwin


More information about the freebsd-hackers mailing list