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 _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"