Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 Jul 2004 18:59:24 -0700
From:      Chuck Tuffli <chuck_tuffli@agilent.com>
To:        hackers@freebsd.org
Subject:   bus_alloc_resource question
Message-ID:  <20040727015923.GA63284@cre85086tuf.rose.agilent.com>

next in thread | raw e-mail | index | archive | help
I'm having some trouble adding a bus resource and am hoping someone
can point out where I goofed.

The host bus to a new x86 chipset has a memory mapped region in PCI
space that provides access to status and control registers. For a
driver to get access to this region, I figured it should call
bus_alloc_resource() the same as for any other memory mapped region.
This currently doesn't "just work" as the region is not a part of any
device's BARs. To add this region as a resource, I used
bus_set_resource()

    device_t dev;
    uint32_t e_mem = 0xe0000000;
    struct resource *ecfg_res;

    dev = pci_find_device(PCI_VENDOR_INTEL, ...);
    bus_set_resource(dev, SYS_RES_MEMORY, e_mem, 0xe0000000, 0x10000000);

but a subsequent call to bus_alloc_resource() returns NULL

    ecfg_res = bus_alloc_resource(dev, SYS_RES_MEMORY, &e_mem,
            0, ~0, 1, RF_ACTIVE | RF_SHAREABLE);

A call to bus_get_resource() shows that the resource did get set as
the call returns the correct starting address and count. Is there
something else that needs to happen between the set and the alloc? Is
this even the correct approach? Thanks in advance!

-- 
Chuck Tuffli
Agilent Technologies, Storage Area Networking



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040727015923.GA63284>