2008-01-26 13:15:42

by Sanka Piyaratna

[permalink] [raw]
Subject: Custom PCIe Device Driver

Hi Everyone,

I am currently developing a custom PCIe device and the Linux kernel
driver for this. I am able to use the device as a character device with
PIO and now I am working on getting the DMA to work. I have implemented
2 BARs (BAR0 - mem and BAR5 - mem) in the PCIe device. I have
implemented the DMA in my custom device firmware to transfer a block of
memory via the PCIe bus and now trying to get this to work with the
device driver.

As I understand it, I can get hold of the PCI bus to become the bus
master and then initiate the DMA transfer from my device. However, I
don't understand how I can specify within my kernel driver how to
specify which BAR to use.

Does this mean when I initiate a transfer from the hardware, the memory
get transferred into the location allocated by by pci_map_single()
function regardless of which BAR the memory comes from? or do I need to
specify the BAR using a mask?

Would some one be able to point me to an example code please?

Thanks and Regards,

Sanka


2008-01-27 01:45:06

by Robert Hancock

[permalink] [raw]
Subject: Re: Custom PCIe Device Driver

Sanka Piyaratna wrote:
> Hi Everyone,
>
> I am currently developing a custom PCIe device and the Linux kernel
> driver for this. I am able to use the device as a character device with
> PIO and now I am working on getting the DMA to work. I have implemented
> 2 BARs (BAR0 - mem and BAR5 - mem) in the PCIe device. I have
> implemented the DMA in my custom device firmware to transfer a block of
> memory via the PCIe bus and now trying to get this to work with the
> device driver.
>
> As I understand it, I can get hold of the PCI bus to become the bus
> master and then initiate the DMA transfer from my device. However, I
> don't understand how I can specify within my kernel driver how to
> specify which BAR to use.
>
> Does this mean when I initiate a transfer from the hardware, the memory
> get transferred into the location allocated by by pci_map_single()
> function regardless of which BAR the memory comes from? or do I need to
> specify the BAR using a mask?
>
> Would some one be able to point me to an example code please?
>
> Thanks and Regards,
>
> Sanka

Your question doesn't seem to make much sense. DMA transfers have
nothing to do with BARs at all, they don't come "from" or "to" one.

--
Robert Hancock Saskatoon, SK, Canada
To email, remove "nospam" from [email protected]
Home Page: http://www.roberthancock.com/