PCI Express and drivers
Daniel O'Connor
doconnor at gsoft.com.au
Sat Jun 26 03:19:12 UTC 2010
On 26/06/2010, at 3:01, Christopher Bowman wrote:
> I have a Xilinx PCI Express board that has an on board PCIe interface
> macro. I intend to have an address space with memory and another with my
> devices control registers. I wish to program this board under FreeBSD. It
> would seem to me that the way to do this would be to write a driver that
> would allow me to map these two address spaces into a user process which
> could then directly interact with the device. In my case my board doesn't
> really support multiple users, and it doesn't really seem to make sense to
> me to put a lot of code in the kernel to create some sort of interface to
> allow multiple processes to interact with my device via some sort of syscall
> which would impose a lot of overhead in any case. By mapping the address
> ranges into a user process I can write user programs to drive the board
> without having to recompile and reboot the kernel each time I make a change,
> plus if I do something stupid and crash my user space process it shouldn't
> bring down the whole kernel. Am I thinking about this wrong? Is there some
> place I can go to read up on what I should be doing? If I am thinking about
> this correctly, then how does one map device memory into a user space
> process? How does one make sure that only one process has such a mapping?
You could use mmap() I think,
For a driver I maintain I did the following ->
/* Magic sauce stolen from src/sys/pci/xrpu.c via phk
* http://www.mail-archive.com/freebsd-hackers%40freebsd.org/msg11729.html
*/
*paddr = rman_get_start(sc->g_membase.reshandle) + offset;
g_membase is..
struct resource *reshandle; /* Resource handle */
bus_space_tag_t sc_st; /* bus space tag */
bus_space_handle_t sc_sh; /* bus space handle */
PS what board are you using? :)
--
Daniel O'Connor software and network engineer
for Genesis Software - http://www.gsoft.com.au
"The nice thing about standards is that there
are so many of them to choose from."
-- Andrew Tanenbaum
GPG Fingerprint - 5596 B766 97C0 0E94 4347 295E E593 DC20 7B3F CE8C
More information about the freebsd-hackers
mailing list