newbus ioport usage

Nate Lawson nate at root.org
Mon Jan 26 17:06:33 PST 2004


On Mon, 26 Jan 2004, M. Warner Losh wrote:
> In message: <20040126140100.T29680 at root.org>
>             Nate Lawson <nate at root.org> writes:
> : I have a driver that knows the IO port it wants.  It's not set up by a
> : parent bus, so I can't use bus_set_resource().  This call returns NULL.
> : Any idea how to debug why newbus is rejecting this request?  The io port
> : is not in use and the rid is unique.
> :
> :   bus_alloc_resource(dev, SYS_RES_IOPORT, rid, 0x101c, 0x101c, 1,
> :     RF_ACTIVE);
>
> Ummm, you can use bus_set_resource() in the driver to do this (I've
> done it before).  bus_set_resource() should return 0 to indicate
> success.  bus_alloc_resource should then succeed.  There may be one
> other step to do as well to make this work, but I'm not sure if it is
> an internal convention or actually required.  The pci bus code does a
> resource_list_add for each of the resources the child uses, but I
> think that's an internal thing to the pci bus (that other busses do
> also).

Ok, I'm doing the set/alloc and it works.  However, one weird thing.  If I
allocate all ports at boot time, it succeeds.  My driver goes through
multiple release/allocate cycles and it all works as expected.  However if
I boot and attach to only one of the registers, subsequent attempts to
attach the second one fail.  The resources are 2 IO ports, 0x101c and
0x101d.  Both are 1 byte.

-Nate


More information about the freebsd-arch mailing list