PCI Programming

Cole cole at opteqint.net
Thu Apr 28 10:33:03 PDT 2005


Hey

Im currently trying to port some linux pci driver to FreeBSD code. But im running into a  problem. Its using a function that I cant
seem to find the equivalent of for FreeBSD.

Heres the function up to the point where im getting stuck.

int FindDevice( void )
{

    static struct pci_dev *pciptr;
    int pci_info_index = 0;
    U16 wDev;
    unsigned int tmp_addr;

        /*-----------------------------------------*/
#ifdef CONFIG_PCI  // find the specified device and its configuration
  if( pcibios_present() ){

    pci_for_each_dev( pciptr ){
        if ((pciptr->vendor == VENDOR_ID) && \
            (pciptr->device == DEVICE_ID) && \
            (pciptr->subsystem_vendor == SUBSYSTEM_VID) && \
            (pciptr->subsystem_device == SUBSYSTEM_DID) && \
            (PCI_FUNC(pciptr->devfn) == 0) )
        {
                    DevExtension[pci_info_index].wBus= pciptr->bus->number;
                    DevExtension[pci_info_index].wDevFunc= pciptr->devfn;
                    DevExtension[pci_info_index].wCard = pci_info_index;
                    tmp_addr = pci_resource_start( pciptr, 4 );
                    DevExtension[pci_info_index].func0_bar = (tmp_addr & ~0x03);

now the function im getting stuck at, is the "tmp_addr = pci_resource_start(pciptr, 4). I was wondering if anyone knows of an
equivalent under FreeBSD. Or if there is a way to obtain that value with some other method in FreeBSD. I am pretty much fine up
until that point.

If anyone has any sample code or anything that I could read to proceed any further, it would be greatly appreciated.

Regards
/Cole



More information about the freebsd-hackers mailing list