From owner-freebsd-hackers@FreeBSD.ORG  Tue Jul 14 14:08:54 2009
Return-Path: <owner-freebsd-hackers@FreeBSD.ORG>
Delivered-To: freebsd-hackers@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7C7CF106566C
	for <freebsd-hackers@freebsd.org>; Tue, 14 Jul 2009 14:08:54 +0000 (UTC)
	(envelope-from jhb@freebsd.org)
Received: from cyrus.watson.org (cyrus.watson.org [65.122.17.42])
	by mx1.freebsd.org (Postfix) with ESMTP id 4EC938FC20
	for <freebsd-hackers@freebsd.org>; Tue, 14 Jul 2009 14:08:54 +0000 (UTC)
	(envelope-from jhb@freebsd.org)
Received: from bigwig.baldwin.cx (66.111.2.69.static.nyinternet.net
	[66.111.2.69])
	by cyrus.watson.org (Postfix) with ESMTPSA id CB0DB46B5C;
	Tue, 14 Jul 2009 10:08:53 -0400 (EDT)
Received: from jhbbsd.hudson-trading.com (unknown [209.249.190.8])
	by bigwig.baldwin.cx (Postfix) with ESMTPA id CEE568A098;
	Tue, 14 Jul 2009 10:08:52 -0400 (EDT)
From: John Baldwin <jhb@freebsd.org>
To: Norbert Koch <nkoch@demig.de>
Date: Tue, 14 Jul 2009 08:49:51 -0400
User-Agent: KMail/1.9.7
References: <4A5B3F1B.3040207@demig.de> <200907131435.30452.jhb@freebsd.org>
	<4A5C2EF8.3080208@demig.de>
In-Reply-To: <4A5C2EF8.3080208@demig.de>
MIME-Version: 1.0
Content-Type: text/plain;
  charset="iso-8859-15"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Message-Id: <200907140849.51702.jhb@freebsd.org>
X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.0.1
	(bigwig.baldwin.cx); Tue, 14 Jul 2009 10:08:52 -0400 (EDT)
X-Virus-Scanned: clamav-milter 0.95.1 at bigwig.baldwin.cx
X-Virus-Status: Clean
X-Spam-Status: No, score=-2.5 required=4.2 tests=AWL,BAYES_00,RDNS_NONE
	autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bigwig.baldwin.cx
Cc: freebsd-hackers@freebsd.org
Subject: Re: bus device driver
X-BeenThere: freebsd-hackers@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Technical Discussions relating to FreeBSD
	<freebsd-hackers.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-hackers>, 
	<mailto:freebsd-hackers-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-hackers>
List-Post: <mailto:freebsd-hackers@freebsd.org>
List-Help: <mailto:freebsd-hackers-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/freebsd-hackers>,
	<mailto:freebsd-hackers-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 14 Jul 2009 14:08:54 -0000

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