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