cvs commit: src/share/man/man9 bus_alloc_resource.9
M. Warner Losh
imp at bsdimp.com
Tue Jan 27 13:16:29 PST 2004
In message: <20040127112940.W37323 at root.org>
Nate Lawson <nate at root.org> writes:
: On Tue, 27 Jan 2004, M. Warner Losh wrote:
: > In message: <200401270604.i0R64Fpc076025 at repoman.freebsd.org>
: > Nate Lawson <njl at FreeBSD.org> writes:
: > : njl 2004/01/26 22:04:15 PST
: > :
: > : FreeBSD src repository
: > :
: > : Modified files:
: > : share/man/man9 bus_alloc_resource.9 bus_set_resource.9
: > : Log:
: > : Document my adventures in newbus land. Clarify some examples, especially
: > : that count is in bytes, not bits. There are some drivers that I think make
: > : this mistake. (I've seen counts of 16 in the tree).
: > Counts of 16 in the tree are likely correct. Many devices have 8 or
: > 16 or 32 io ports in ISA land. I've not seen any drivers make this
: > mistake. Care to give an example?
: Well, for one ichsmb(4). It allocates 16 IO ports but only uses 8
: according to its .h. The netgraph bt3c driver allocates 8 but only uses
: 5. I'm curious if wi/owi really need 64 IO ports.
Yes, wi/owi really does need 64 ports! At least for some of the
boards (32 is typically, although there's some that decode '48' which
really means 64). Both the PCI and pccard code, however, do the right
thing and ignore this number and allocate the actual size rounded to a
power of 2.
As far as allocating 16 and using 8, that's not a bits/bytes error.
It might be an alignment requirement for the hardware (eg, there
really are 16 bytes being decoded, the upper 8 being reserved). The
using only 5 isn't unusual either: most hardware only decodes based on
a multiple of 2. We have several hunks of hardware that have 6 or 7
registers, but decode either 8 or 16 I/O addresses. Remember, you
must reserve what the hardware decodes, even if it only uses a subset
of the register space for normal operations.
More information about the cvs-src