Date: Fri, 29 Apr 2005 15:17:11 +0530 From: Dipjyoti Saikia <dipjyoti.saikia@gmail.com> To: Cole <cole@opteqint.net> Cc: freebsd-hackers@freebsd.org Subject: Re: PCI Programming Message-ID: <dcbc809d05042902473b0b4599@mail.gmail.com> In-Reply-To: <000901c54c19$3dba2570$4206000a@deadmind> References: <000901c54c19$3dba2570$4206000a@deadmind>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi, The normal usage of pci_resource_start() in Linux is to get the base address of the BAR for further reads/writes using inb/outb etc. In Free BSD you can use the following : bus_alloc_resource(); =20 rman_get_bustag(); rman_get_bushandle(); Usually the ret value of rman_get_bushandle() gives the starting address of the resource (of the BAR for which you called bus_alloc_resource) . Normally we use bus_space_* api's to read/write in FreeBSD. The use of bus_space_ functions need us to only specify the offset rather than the Linux like usage inb(base+offset) etc. Thanks Dip On 4/28/05, Cole <cole@opteqint.net> wrote: > Hey >=20 > 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. >=20 > Heres the function up to the point where im getting stuck. >=20 > int FindDevice( void ) > { >=20 > static struct pci_dev *pciptr; > int pci_info_index =3D 0; > U16 wDev; > unsigned int tmp_addr; >=20 > /*-----------------------------------------*/ > #ifdef CONFIG_PCI // find the specified device and its configuration > if( pcibios_present() ){ >=20 > pci_for_each_dev( pciptr ){ > if ((pciptr->vendor =3D=3D VENDOR_ID) && \ > (pciptr->device =3D=3D DEVICE_ID) && \ > (pciptr->subsystem_vendor =3D=3D SUBSYSTEM_VID) && \ > (pciptr->subsystem_device =3D=3D SUBSYSTEM_DID) && \ > (PCI_FUNC(pciptr->devfn) =3D=3D 0) ) > { > DevExtension[pci_info_index].wBus=3D pciptr->bus->numb= er; > DevExtension[pci_info_index].wDevFunc=3D pciptr->devfn= ; > DevExtension[pci_info_index].wCard =3D pci_info_index; > tmp_addr =3D pci_resource_start( pciptr, 4 ); > DevExtension[pci_info_index].func0_bar =3D (tmp_addr &= ~0x03); >=20 > now the function im getting stuck at, is the "tmp_addr =3D pci_resource_s= tart(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. >=20 > If anyone has any sample code or anything that I could read to proceed an= y further, it would be greatly appreciated. >=20 > Regards > /Cole >=20 > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org= " >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?dcbc809d05042902473b0b4599>